我试图通过限制我想要使用的非零变量的数量来优化这个方程。x、 z,w继续以0的形式返回
from gekko import GEKKO
m = GEKKO()
# creates the variables
x = m.sos1([0,2])
z = m.sos1([0,3])
w = m.sos1([0,4])
# use sign2 to define a new variable
y = m.sign2(x)
t = m.sign2(z)
v = m.sign2(w)
# Equation
m.Equation(y+t+v<=2)
m.Equation(x+z+w>=5)
#objective
m.Obj((x+z+w)*-1)
m.solve(disp=False)
有时,当我希望sign2值保持为零时,我会将其返回为负数
此代码:
给出正确的解决方案:
但是,正如您所注意到的,如果计算公差产生的x、z或w略微为负,甚至为-1e-6,则解决方案可能会给出负符号结果。如果您避免开关位置,那么您可能会得到更可靠的解决方案。{}通常给出更好的解决方案
在这种情况下,两个脚本提供相同的解决方案
相关问题 更多 >
编程相关推荐