pulpについて

  • pythonにおける数理最適化の有名なソルバー
    • 混合整数計画法を解くことができる
    • 混合整数計画法のなかに線形計画法や整数計画法が含まれる
    • つまり求めたい変数が実数だったり整数だったりする数理最適化問題と思えばよいだろう
  • PuLP の基本的な使い方
import pulp

prob = pulp.LpProblem('sample')

# 変数の定義
x = pulp.LpVariable('x', lowBound = 0)
y = pulp.LpVariable('y', lowBound = 0)

# 目的関数
prob += x + y + 1  

# 制約条件
prob += 3 * x + 5 * y <= 15
prob += 2 * x + y >= 4
prob += x - y == 1

print(prob)

# 実行
status = prob.solve(pulp.PULP_CBC_CMD(msg=0))
print("Status", pulp.LpStatus[status])

# 結果の表示
print("Result")
print("x", x.value())
print("y", y.value())
print("z", prob.objective.value())
  • 数理モデルオブジェクト prob = LpProblem(name='NoName', sense=LpMinimize)
    • name : 名前
    • sense : LpMinimize (最小値を求める), LpMaximize (最大値を求める)
  • 変数定義 var = LpVariable(name, lowBound=None, upBound=None, cat='Continuous')
    • name: 変数名
    • lowBound: 変数の下限値, None で -∞
    • upBound: 変数の上限値, None で ∞
    • cat: 変数の種類
      • Continuous, 実数
      • Integer, 整数
      • Binary, 0 または 1
  • 目的関数と制約条件の指定
    • prob += 式 でを指定する
    • 使用できる演算子は <=. ==, >= の 3 つだけ (それ以外の演算子は NG)
    • 演算子を含まない式が目的関数に自動でなる
  • 演算
    • status = prob.solve() で問題を解く (ソルバーを起動して解を求める)
    • 変数 var の値は var.value() で取得する
    • 目的関数の値は prob.objective.value() で取得する
  • 参考:

PuLP による数理最適化超入門