首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用PuLP最小化目标函数

用PuLP最小化目标函数
EN

Stack Overflow用户
提问于 2019-02-11 05:32:05
回答 1查看 1.4K关注 0票数 1

我有这个方程式

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

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

代码语言:javascript
复制
# 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)

目标函数和约束写成

代码语言:javascript
复制
# 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,而对于所有其他变量,它的上界值为80。目标函数值为负值。

代码语言:javascript
复制
print (pulp.value(prob.objective))
-13.21204077

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-11 20:07:41

上述问题是不可行的。

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

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

以变量的以下上、下界为限:

代码语言:javascript
复制
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。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54624456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档