Python의 Google ortools 모듈에 대한 이전 게시물에서 다음과 같은 선형 최적화 문제를 해결했습니다.
이전 게시물에서 작성한 코드를 더 적은 코드 줄로 줄일 수 있으므로 간결한 코드가 생성됩니다. 이 게시물에서는 이전 ortools-script의 간결한 버전을 공유합니다.
다시, ortools.linear_solver에서 pywraplp를 가져 오는 것으로 시작합니다.
from ortools.linear_solver import pywraplp
다음으로 솔버 인스턴스 (GLOP 솔버 사용)를 만들고 참조 핸들러에 대한 참조를 저장합니다.
solver = pywraplp.Solver.CreateSolver('linear_programming_examples', 'GLOP')
이제 관련 최적화 변수를 선언해야합니다. 이 예에서 최적화 변수는 x, y 및 z입니다.
# 하한이 0이고 상한이없는 변수 x 선언 x = solver.NumVar(0, solver.infinity(), "x") # 하한이 0이고 상한이없는 변수 y 선언 y = solver.NumVar(0, solver.infinity(), "y") # 하한이 0이고 상한이없는 변수 z 선언 z = solver.NumVar(0, solver.infinity(), "z")
이제 목적 함수와 모든 관련 제약을 지정하여 문제를 모델링 할 수 있습니다. 다음 코드 줄에서 이것은 매우 간결한 방식으로 실현됩니다.
# 최대로 선언합니다. 목적 함수 문제 및 정의 solver.Maximize(x+2*y+3*z) # 제약 추가 solver.Add(2*x+y+z <= 20) solver.Add(x+y+z <= 15) solver.Add(x-y-z >= 0)
<ortools.linear_solver.pywraplp.Constraint; proxy of <Swig Object of type 'operations_research::MPConstraint *' at 0x000001B9AEC956C0> >
이제 모델이 완성되었으며 해결할 수 있습니다.
solver.Solve()
x에 대한 최적의 솔루션은 다음과 같습니다.
print("x_opt: ", x.solution_value())
x_opt: 6.666666666666667
y에 대한 최적의 솔루션은 다음과 같습니다.
print("y_opt: ", y.solution_value())
y_opt: 0.0
z에 대한 최적의 솔루션은 다음과 같습니다.
print("z_opt: ", z.solution_value())
z_opt: 6.666666666666667
최적의 목적 함수 값은 다음과 같습니다.
print("optimal value: " + str(x.solution_value()+2*y.solution_value()+3*z.solution_value()))
optimal value: 26.666666666666668
최적화 및 시뮬레이션을 전문으로하는 산업 엔지니어 (R, Python, SQL, VBA)
Leave a Reply