数理解析モデル PuLP

PuLPとは

PuLPはPythonで書かれたオープンソースの線形および整数計画問題を解くためのモデリングライブラリです。

PuLPは、Pythonで線形最適化問題を解決するための高水準のインターフェースを提供し、制約条件、目的関数、変数を自然な形式で定義できます。

PuLPは、商用および非商用のプロジェクトで使用できます。

PuLPを使用することで、複雑な最適化問題を簡単に定式化および解決できるようになります。

これにより、様々な業界や分野で問題解決の効率が向上し、効果的な意思決定が可能になります。

問題

以下は、、PuLPを使用して解くことができる簡単な整数計画問題のサンプルです。

この問題では、変数 $x$ と $y$ を定義し、以下の制約条件を満たしながら目的関数を最大化することが目的です。

【目的関数】
🔹$ 3x + 4y $

【制約条件】
🔹$ 2x + y \leqq 20 $
🔹$ 4x - 5y \geqq -10 $
🔹$ x + 2y \leqq 14 $
🔹$x, y$は非負の整数である

ソースコード

[Google Colaboratory]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import pulp

# 問題の定義
problem = pulp.LpProblem('Simple Integer Programming Problem', pulp.LpMaximize)

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

# 目的関数の定義
problem += 3*x + 4*y, 'Objective Function'

# 制約条件の定義
problem += 2*x + y <= 20, 'Constraint 1'
problem += 4*x - 5*y >= -10, 'Constraint 2'
problem += x + 2*y <= 14, 'Constraint 3'

# 最適化の実行
problem.solve()

# 結果の出力
print(f'Status: {pulp.LpStatus[problem.status]}')
print(f'Optimal Solution: {pulp.value(problem.objective)}')
print(f'x: {pulp.value(x)}')
print(f'y: {pulp.value(y)}')

まず、problemオブジェクトを作成します。

このオブジェクトは、数理最適化問題のモデルを表します。

ここでは、問題名と最大化を指定しています。


次に、変数$x$変数$y$を定義します。

ここでは、下限が0の整数変数であることを指定しています。

目的関数は、$ problem += 3 * x + 4 * y $ と定義されています。

この問題では、この目的関数を最大化することが目的です。


制約条件は、それぞれ以下のように定義されています。

🔹制約1: $ 2 * x + y <= 20 $
🔹制約2: $ 4 * x - 5 * y >= -10 $
🔹制約3: $ x + 2 * y <= 14 $


最後に、problem.solve()を呼び出すことで、問題を解きます。

pulp.LpStatus[problem.status]を使用すると、解の状態を表示することができます。

また、pulp.value()を使用することで、最適解の目的関数の値変数$x$と$y$の値を表示することができます。

[実行結果]

Status: Optimal
Optimal Solution: 36.0
x: 8.0
y: 3.0

最適解は、x=8, y=3であり、目的関数の値は36となっています。

制約条件を満たしながら、目的関数の最大値を得ることができました。