3

さまざまな要素 (鉄、水銀など) とのブレンドの問題に PuLp を使用しようとしています。しかし、最大/最小の利益/コストの代わりに、制約の使用率を最大化する必要があります。したがって、Excelでは次のようなものがありました(疑似コードで):

max Sum (for each Element: (Sumproduct([DecisionVariables] * [Values]) / [MaximumAllowedValueForThisElement]))

このような目的関数を使用したことはありませんが、Excel では機能するようです。

今度は、PuLP で同じ問題をモデル化したいと考えています。私が必要とするのは、次のようなものだと思います:

for Element in ELEMENTS:
    prob += lpSum(DecisionVariable[Concentrate]*dic[Element][Concentrate]/ MaxAmount[Element] for Concentrate in CONCENTRATES)

ここで、ELEMENTS はすべての要素を含むリスト、CONCENTRATES は 0 から 100 までの値のリスト、dic[Element][Concentrate] は各要素とそのすべての濃縮物からの値を格納します。

上記のコードでは、ループごとに目的関数が上書きされます。古い目的関数を上書きする代わりに、append() などのようなものが必要で、それぞれの loops=lpSums を prob variable?class? に追加します。

私は一般的にプログラミングにかなり慣れていません。私の問題は、私の(:Dも不足している)PuLPスキルよりも、Pythonプログラミングスキルの欠如に関連していると思います。しかし、PuLP のドキュメントには何も見つかりませんでした。少なくとも、接続できるものは何もありませんでした。

編集:問題を紹介するための小さなテーブルが含まれています:

+------------------------------+-------------------------------------------+----+------------------------------+---------------+----------------------+---------------+---------------+-------------------------------+
|       Utilization [%]        |       Sumproduct[Quantity] = [LHS]        |    | Constrains[Quantity] = [RHS] |  Concentrate  |    Element 1 [%]     | Element 2 [%] | Element 3 [%] | Decision Variables [Quantity] |
+------------------------------+-------------------------------------------+----+------------------------------+---------------+----------------------+---------------+---------------+-------------------------------+
| u1 = z1 / MaxAmount Element1 | z1 = Col Element1 * Col Decison Variables | <= | MaxAmount Element1           | Concentrate 1 | % Element 1 in Con 1 |               |               | X1                            |
| u2 = z2 / MaxAmount Element2 | z2 = Col Element2 * Col Decison Variables | <= | MaxAmount Elemen2            | Concentrate 2 | % Element 1 in Con 2 |               |               | X2                            |
| u3 = z3 / MaxAmount Element3 | z3 = Col Element3 * Col Decison Variables | <= | MaxAmount Elemen3            | Concentrate 3 | % Element 1 in Con 3 |               |               | X3                            |
+------------------------------+-------------------------------------------+----+------------------------------+---------------+----------------------+---------------+---------------+-------------------------------+

「要素 2」および「要素 3」の列には、「要素 1」の列と同じ情報、つまり濃縮物 1/2/3 におけるそれぞれの要素の % シェアが保存されます。

目的関数は、すべての使用率 (u1+u2+u3) の合計を最大化することです。そのため、各要素に与えられた制約をできるだけ多く利用するために、各濃縮物の使用量を決定しようとしています. 私の PuLp コードに戻ると、「u1」に相当するものを PuLp の「LpProblem クラス」に追加できると思いますが、これらの LpSum の複数を「LpProblem クラス」に追加する方法がわかりません。ループ。

4

1 に答える 1