おにごっこ最適化
おにごっこに関する最適化問題の例として、5人でおにごっこをする場合、どのように逃げた方が最適か?という問題を考えてみます。
解法
以下は、PuLPを用いた解法です。
まず、必要なライブラリをインポートします。
1 | from pulp import * |
次に、問題の定式化を行います。この問題では、以下のようになります。
🔹変数
x_i (i = 1, 2, …, 5): i番目の逃げる場所に行くかどうか (1: 逃げる, 0: 逃げない)
🔹目的関数
逃げる人数の最大化
🔹制約条件
逃げる人数は4人以下
これをPuLPで表現すると、以下のようになります。
1 | # 問題の定義 |
ここで、lpSum()はPuLPが提供する関数で、与えられたリストの要素の和を計算します。
制約条件は、<=で表現しています。
次に、PuLPを使って求解を行います。
1 | # 求解 |
このようにして、求解が終了しました。最後に、結果を表示してみます。
1 | # 結果を表示 |
これを実行すると、以下のような結果が得られます。
[実行結果]
Status: Optimal x1 = 1 x2 = 1 x3 = 1 x4 = 1 x5 = 0 Optimal value: 4.0
結果から、最適解が得られ、1番目、2番目、3番目、4番目の場所に逃げることが最適解になることが分かりました。
また、逃げる人数は4人であることも分かります。