- 손으로 구하기 어려운 만큼 컴퓨터로 구해보는 것도 좋다.
- 단, 반올림 문제가 일어날 수 있는 만큼 자릿수를 조심하는 것이 필요하다.
설치하기
python
pip install pulp
python
from pulp import *
import pandas as pd
import numpy as np
예시문제 풀어보기
\begin{align*}
\text{min}\quad
6x_1 + &4x_2 + 2x_3 \\
\text{s.t}\quad
4x_1 + &2x_2 + x_3 \ge 5\\
&x_1 + x_2 \ge 3 \\
&x_2 + x_3 \ge 4 \\
x_1,\; &x_2,\; x_3\; \ge 0 \\
\end{align*}
설명
python
x1 = pulp.LpVariable('x1', lowBound = 0)
x2 = pulp.LpVariable('x2', lowBound = 0)
x3 = pulp.LpVariable('x3', lowBound = 0)
pulp.LpVariable() 의 파라미터:
"x1"(변수 이름),lowBound(하한),upBound(상한)
python
model = pulp.LpProblem('test_lp', pulp.LpMinimize)
pulp.LpProblem() 의 파라미터:
"test_lp"(문제 이름),pulp.LpMinimize또는pulp.LpMaximize둘 중 하나.
python
model += 6 * x1 + 4 * x2 + 2 * x3
model += 4 * x1 + 2 * x2 + x3 >= 5
model += x1 + x2 >= 3
model += x2 + x3 >= 4
model.solve()
# 최적해
pulp.value(model.objective)
# 최적해를 얻기 위한 각 x들의 값
x1.varValue
x2.varValue
x3.varValue
전체 코드
python
import pulp
# variables
x1 = pulp.LpVariable('x1', lowBound = 0)
x2 = pulp.LpVariable('x2', lowBound = 0)
x3 = pulp.LpVariable('x3', lowBound = 0)
# model
model = pulp.LpProblem('test_lp', pulp.LpMinimize)
# objective function
model += 6 * x1 + 4 * x2 + 2 * x3
# constraints
model += 4 * x1 + 2 * x2 + x3 >= 5
model += x1 + x2 >= 3
model += x2 + x3 >= 4
# solve
model.solve()
# optimal value
print(pulp.value(model.objective))
# optimal solution
print(x1.varValue)
print(x2.varValue)
print(x3.varValue)
유용한 함수
LpProblem.writeLP
- 작성한 LP를 텍스트 파일로 출력해 줌.
- 사용하려면
LpProblem인스턴스에서 직접 호출하면 됨.
LpVariable.dicts
lpSum
LpAffineExpression