python - 使用 PuLP 最小化目标函数

标签 python optimization pulp

我有这个方程

-0.19430381*clo + 0.02507341*vam + 0.13574366*sla + 0.01667444*so = 10

我需要找到 clo、vam、sla 的最小值,这样才能解出这个方程。我已经使用 PuLP 来查找值。

# declare your variables
clo = LpVariable("clo", 65, 80)
vam = LpVariable("vam", 63, 90)
sla = LpVariable("sla", 70, 80)
so = LpVariable("so", 75, 85)

# defines the problem
prob = LpProblem("problem", LpMinimize)

目标函数和约束写为

# defines the objective function to minimize
prob += -0.19430381*clo + 0.02507341*vam +  0.13574366*sla + 0.01667444*so-10 

#define Constraints
prob+= clo>=65
prob+= clo<=80
prob+= vam>=63
prob+= vam<=90
prob+= sla>=71
prob+= sla<=80
prob+= so>=75
prob+= so<=85

当我使用默认求解器求解时,它采用 clo 的上限值 80,同时它采用所有其他变量的下限值。目标函数值为负。

print (pulp.value(prob.objective))
-13.21204077

我希望这个目标函数值为0。在这种情况下我需要找到所有参数的值。参数的值也可以是 float 。

最佳答案

所描述的问题是不可行的。

您希望实现以下等式约束:

-0.19430381*clo + 0.02507341*vam + 0.13574366*sla + 0.01667444*so == 10

服从以下变量的上限和下限:

clo = LpVariable("clo", 65, 80)
vam = LpVariable("vam", 63, 90)
sla = LpVariable("sla", 70, 80)
so = LpVariable("so", 75, 85)

看看等式约束,如果我们想让右侧在约束范围内尽可能大,我们会选择尽可能大的 vam, sla, so,并且 clo 尽可能小(因为它的左侧系数为负)。

设置:clo=65; vam=90; SLA=80; so=85 我们得到等式约束左侧的结果:1.9036794499999987。任何其他值组合(在上/下限内)都会导致左侧更小 - 因此无法满足等式约束,它永远不会等于所需的右侧 10。

关于python - 使用 PuLP 最小化目标函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54624456/

相关文章:

python - 使用 Exchangelib 按 message_id 获取电子邮件

python - pip 安装 MySQLdb 库时出错

Scala 2.8 与 2.9 基准测试,奇怪的结果

python - 在 Python 中定义旅行商的线性规划模型

python-3.x - 为什么 PulP 对于混合问题返回负值,而 lowBound 设置为零?

python - cx_卡住/ldap : ImportError: DLL Load Failed %1 is not a valid Win32 application

Python:制作一个返回同一个类的方法的类方法装饰器

r - 使用 nloptr 与 Excel 在 R 中进行非线性优化

c - 为什么 _Generic 语句被视为表达式而不是宏?

python - 如何简化重复的 Python PuLP 语法?