열렬히.뛰기

선형계획: python

수학 & 통계 > 최적화이론 > 선형계획: python

  • 손으로 구하기 어려운 만큼 컴퓨터로 구해보는 것도 좋다.
  • 단, 반올림 문제가 일어날 수 있는 만큼 자릿수를 조심하는 것이 필요하다.

설치하기

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