尽量减少使用纸浆目标函数

问题描述 投票:1回答:1

我有这个等式

-0.19430381 * CLO + 0.02507341 + 0.13574366 *你* SLA + 0.01667444 *是= 10

我需要找到CLO,VAM,SLA的最低值,因此这将解决这个方程。我用指腹以找到值。

# 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

当我解决使用默认解算器,它走的是80的上限值为CLO而它正在下限值为所有其他变量。目标函数值为负。

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

我想这个目标函数值是0。在这样的情况下,我需要找到所有参数的值。参数的值可以是浮动太大。

python optimization pulp
1个回答
1
投票

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

你想达到以下等式约束:

-0.19430381 * CLO + 0.02507341 + 0.13574366 *你* SLA + 0.01667444 *是== 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右手侧。

© www.soinside.com 2019 - 2024. All rights reserved.