【发布时间】:2018-12-28 11:58:20
【问题描述】:
我正在尝试使用 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 变量?类?
总的来说,我对编程比较陌生,我想我的问题更多地与我缺乏 python 编程技能有关,而不是我(也缺乏 :D)PuLP 技能。但我在PuLP documentation 中找不到任何东西,至少我无法连接到它。
编辑:包括一个小表格来展示问题:
+------------------------------+-------------------------------------------+----+------------------------------+---------------+----------------------+---------------+---------------+-------------------------------+
| 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 类”中环形。
【问题讨论】:
-
你好 JanB。您还可以张贴一张小表格,显示可能 3 种元素和它们的一些浓缩物吗?什么是决策变量,您试图最大化哪种利用率?如果你用英语解释,人们可以尝试用 PuLP 帮助你。谢谢
-
嗨@Ram Narasimhan!谢谢你看我的问题!我在原始帖子中附上了一张小表格,希望这有助于澄清我想用我的 PuLp 代码实现的目标。最好的问候,简
-
我创建了一些虚拟数据来说明循环结合字典和 lpSum 的使用。希望它可以帮助你。有什么不清楚的就问吧。
标签: python linear-programming pulp objective-function