繁体   English   中英

在 GEKKO 优化套件 python 中更改目标

[英]Change objective in GEKKO optimisation suite python

我正在使用 GEKKO 作为 MINP 求解器。 为了建立或多或少的下限和上限,我想将变量的总和最小化一次,然后将其最大化。 然而,GEKKO 将第二次优化的目标加起来。 如何删除旧目标并添加新目标? 第一次优化后如何将变量重置为默认值?

感谢您的任何帮助

solver = GEKKO()
solver.Minimize(sum(x))
solver.solve(disp=False)
print(x)
solver.Maximize(sum(x))
solver.solve(disp=False)
print(x)

感谢您为自己的问题提出解决方案。 您可以为自己的问题创建一个答案并将其标记为已接受的答案。 评论部分也是放置解决方案的好地方,但 StackOverflow 认为这些问题仍然没有答案。

方法一

这是从minimize切换到maximimize的两种方法。 如果它只是Minimize(sum(x))Maximize(sum(x))则只需包含一个额外的Maximize(sum(x))以抵消先前的Minimize(sum(x)) 这是一个显示第一种方法的简单脚本:

from gekko import GEKKO
m = GEKKO(remote=False)
x = m.Array(m.Var,3,lb=0,ub=1)
m.Minimize(m.sum(x))
m.solve(disp=False)
print('-'*20)
print('x: ', x)
print('obj: ', m.options.OBJFCNVAL)

m.Maximize(2*m.sum(x))
m.solve(disp=False)
print('-'*20)
print('x: ', x)
print('obj: ', m.options.OBJFCNVAL)

方法二

第二种方法(正如您已经发现的那样)是使用m._objectives.clear()清除_objectives列表。 这是第二种方法的示例脚本:

from gekko import GEKKO
m = GEKKO(remote=False)
x = m.Array(m.Var,3,lb=0,ub=1)
m.Minimize(m.sum(x))
m.solve(disp=False)
print('-'*20)
print('x: ', x)
print('obj: ', m.options.OBJFCNVAL)

m._objectives.clear()
m.Maximize(m.sum(x))
m.solve(disp=False)
print('-'*20)
print('x: ', x)
print('obj: ', m.options.OBJFCNVAL)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM