- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 PuLp 来解决不同元素(铁、 Mercurial ......)的混合问题。但我需要最大化限制条件的利用率,而不是最大化/最小化一些利润/成本。所以在 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变量?class?
总的来说,我对编程相当陌生,我想我的问题更多地与我缺乏 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 类”中环形。
最佳答案
这是一个版本,其中包含用于说明目的的虚拟数据。看看这是否对您有帮助。
import pulp
from pulp import *
ELEMENTS = ['Iron', 'Mercury', 'Silver']
Max_Per_Elem = {'Iron': 35,
'Mercury': 17,
'Silver': 28
}
# A dictionary of the Iron percent in each of the CONCs
IronPercent = {'CONC_1': 20, 'CONC_2': 10, 'CONC_3': 25}
# A dictionary of the Hg percent in each of the CONCs
MercPercent = {'CONC_1': 15, 'CONC_2': 18, 'CONC_3': 12}
# A dictionary of the Silver percent in each of the CONCs
SilverPercent = {'CONC_1': 30, 'CONC_2': 40, 'CONC_3': 20}
CONCENTRATE_DIC = {'Iron': IronPercent,
'Mercury': MercPercent,
'Silver': SilverPercent
}
# Creates a list of Decision Variables
concs = ['CONC_1', 'CONC_2', 'CONC_3']
现在,我们准备调用 puLP
函数。
conc_vars = LpVariable.dicts("Util", concs, 0, 1.0)
# Create the 'prob' variable to contain the problem data
prob = LpProblem("Elements Concentration Problem", LpMaximize)
# The objective function
prob += lpSum([conc_vars[i] for i in concs]), "Total Utilization is maximized"
for elem in ELEMENTS:
prob += lpSum([CONCENTRATE_DIC[elem][i]/Max_Per_Elem[elem] * conc_vars[i] for i in concs]) <= Max_Per_Elem[elem]/100, elem+"Percent"
要进行验证,您可以打印 prob
以查看其外观:
Elements Concentration Problem:
MAXIMIZE
1*Util_CONC_1 + 1*Util_CONC_2 + 1*Util_CONC_3 + 0
SUBJECT TO
IronPercent: 0.571428571429 Util_CONC_1 + 0.285714285714 Util_CONC_2
+ 0.714285714286 Util_CONC_3 <= 0.35
MercuryPercent: 0.882352941176 Util_CONC_1 + 1.05882352941 Util_CONC_2
+ 0.705882352941 Util_CONC_3 <= 0.17
SilverPercent: 1.07142857143 Util_CONC_1 + 1.42857142857 Util_CONC_2
+ 0.714285714286 Util_CONC_3 <= 0.28
VARIABLES
Util_CONC_1 <= 1 Continuous
Util_CONC_2 <= 1 Continuous
Util_CONC_3 <= 1 Continuous
一旦您对公式感到满意,就解决问题。
prob.writeLP("ElemUtiliztionModel.lp")
prob.solve()
print("Status:", LpStatus[prob.status])
for v in prob.variables():
print(v.name, "=", v.varValue)
获取,
Status: Optimal
Util_CONC_1 = 0.0
Util_CONC_2 = 0.0
Util_CONC_3 = 0.24083333
希望能帮助您前进。
关于python - PuLP:目标函数:在循环中添加多个 lpSum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51438018/
我是 python 和优化方面的新手。我遇到了一些错误,请帮助我解决它。我尝试在运行 Anaconda 3 的 PyCharm 中运行下面提到的代码 from pulp import * x = Lp
我有以下由 PuLP 生成的 LP 文件: \* copynumber *\ Minimize OBJ: PenaltyTree_48 Subject To _C1: - A_0 + A_3 - ov
我有一个 python PuLP 线性程序,它可以最大限度地降低成本。在没有办法降低成本的退化情况下,我希望它返回固定成本。然而,在没有变量的情况下, PuLP 似乎添加了一个 __dummy 变量,
我是 Pulp 的新手,因此在尝试进行条件约束时遇到了问题。我制作了一个梦幻足球优化器,可以选择 9 名球员的最佳选择,我的求解器目前完全适用于职位限制、工资限制等。 我需要添加的最后一件事是一个约束
我对 PuLP 完全陌生,想知道是否需要优化以下内容: x = pulp.LpVariable.dicts("Volume", range(0, 7), cat='Binary') 只要有一个 0,就
我正在尝试在 puLP (Python) 中求解 MILP,但不断收到以下错误: Traceback (most recent call last): File "main_lp.py", lin
我正在与一位合作者合作开展某个涉及线性规划的优化项目。我们都使用硬币或分支切割求解器来解决这个问题。我使用基于 Python 的 PuLP 包构建 .LP 文件。我不完全确定合作者如何创建他们的 .L
我希望使用 PULP 在 Python 中设置约束检查。假设我有变量 A1,..,Xn 和约束 (AffineExpression) A1X1 + ... + AnXn <= B,其中 A1,..,A
我有一个具有以下值的 Pandas 数据框: Name Age City Points 1 John 24 CHI 35 2 Mary
我正在尝试使用 PuLP 库创建一个程序,当您按下按钮时,它会解决线性问题并输出值。但我无法让它发挥作用。它只是写我的“输入更多值”并且不想解决。也许我对输入值有一些问题,但我不太确定。 这是我的
在 PuLP 的传输优化问题中: from pulp import * Warehouses = ["A","B"] # Creates a dictionary for the number of
在开始一个更大的问题之前,我试图做以下简单的示例优化问题。代码: from pulp import * x = LpVariable("x", 0, 3) y = LpVariable("y", 0,
我正在使用线性规划解决一个特定问题,并试图让自己熟悉 PuLP。我的问题是我的几个约束只包含一些决策变量,我正试图找到一种有效的方法来选择它们。 我的意思是: 我为所有决策变量设置了一个列表。 inv
我正在尝试使用 PuLP 来优化系统,从而最大限度地降低成本。我正在使用多个 If,问题是它总是满足第一个条件。这是我的代码。我希望有人能帮助我,因为我才刚刚开始学习这门语言。 import nump
我正在尝试运行一个优化问题,但我似乎无法解决。我是Python菜鸟。 我有一个包含 8760 个数字 (0 - 1) 的数据框。我需要将该数组中的每一行乘以一个因子,然后对该数组求和。该总和应等于 x
我正在尝试使用 Pulp Solver 将元素包装到卡车中,当元素数量较少(即 <25)时,它工作得很好,但当我将数量增加到 30-32 时,它需要很长时间才能解决。 这是 PuLP 求解器的代码:
我会尽量让我的问题简短。如果您需要任何进一步的信息,请告诉我。 我有一个 MIP,使用 PuLP 包在 Python 中实现。 (大约 100 个变量和约束)问题的数学公式来自一篇研究论文。本文还包括
在 Python PuLP 中,线性规划约束可以转化为弹性子问题。 http://www.coin-or.org/PuLP/pulp.html?highlight=lpsum#elastic-cons
在多年使用 Matlab 之后,我对 Python 还是很陌生。我正在尝试使用 Pulp 来设置整数线性程序。 给定一个数字数组: {P[i]:i=1...N} 我想最大化: sum( x_i P_i
我正在使用 python 作为编程语言并实现将相似长度分组在一起的约束以满足线性规划。引用下图代码 import pulp from itertools import product import p
我是一名优秀的程序员,十分优秀!