我正在使用Python解决一个大规模的优化问题。模型中的一些变量在优化过程中不需要改变。因此,我想知道在变量(m.Var
)上使用m.Var
方法(我希望是常量)与用m.Const
声明的常量替换变量之间有什么区别。
我使用IMODE =3(默认),因为我不做任何需要模拟或估计、导数、时间等的事情。
发布于 2022-08-09 16:26:23
在可能的情况下,最好在模型中使用int
或float
数字来解决大规模问题。还可以使用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变量,固定<代码>H 221<代码>H 122最坏:<c1
>d23- Gekko变量,方程H 224f 225
https://stackoverflow.com/questions/73291310
复制