GEKKO中固定变量和使用常量之间的区别



我正在使用Python GEKKO解决一个大规模优化问题。在优化过程中,模型的某些变量必须不发生变化。所以我想知道对我想要成为常数的变量(m.Var(使用m.fixGEKKO方法,或者用用m.Const声明的常数替换变量,两者之间有什么区别。

我使用IMODE=3(默认值(,因为我不做任何需要模拟或估计、导数、时间等的事情。

在可能的情况下,对于大规模问题,最好在模型中使用intfloat数字。也可以使用m.Const()m.Var()并固定该值。m.Var()选项效率最低,因为它在运算符重载的情况下构建一阶和二阶导数信息。如果确实需要包含简单的方程,例如与c4定义一起使用,则使用m.options.REDUCE=1进行预解,以识别和消除与简单预解约束相关联的变量。设置m.options.REDUCE=2会扫描模型两次,并且可以进行额外的扫描。

from gekko import GEKKO
m = GEKKO()
c1 = 2.0
c2 = m.Const(3.0)
c3 = m.Var(); m.fix(c3,4.0)
c4 = m.Var(); m.Equation(c4==5)
v = m.Var()
m.Minimize((v-c1-c2-c3-c4)**2)
m.solve(disp=False)
print(c1,c2.value,c3.value[0],c4.value[0],v.value[0])

结果:

2.0 3.0 4.0 5.0 14.0

用于改进模型性能的恒定定义

  • 最佳:c1-Python编号
  • 第二名:c2-Gekko常数
  • 第三名:c3-Gekko变量,固定
  • 最差:c4-Gekko变量,方程式

相关内容

  • 没有找到相关文章

最新更新