gpt4 book ai didi

python - 是否可以在 GEKKO 动态优化中定义变量的开始和结束时间?

转载 作者:行者123 更新时间:2023-12-05 05:56:54 24 4
gpt4 key购买 nike

我有一个整体的时间框架,我想引入几个变量来沿着那个时间框架进行优化,但它们在不同的时间间隔内是活跃的。假设我有:

总体时间框架:m.time = np.linspace(0,100,101)

变量 1 时间范围:m.time = np.linspace(20,50,31)

变量 2 时间范围:m.time = np.linspace(40,80,41)

我如何在同一个优化中使用这两个变量并传达它们应该在整个时间范围内以特定时间间隔开始和结束?最后,我希望能够优化每个时间步长的变量总和。

GEKKO 中是否有任何选项可以告诉变量可以在哪些时间间隔内被优化器修改?例如,上面的变量 1 在时间间隔 0-19 和 51-100 中应该是不可能改变的。

最佳答案

一种方法是定义一个目标函数处于事件状态的特定窗口,例如 xobj 在 20-50 区间内为 1,否则为 0。

Optimize

from gekko import GEKKO
import numpy as np
m = GEKKO()
m.time = np.linspace(0,100,101)
x = m.Var(2)
x_on = np.zeros(101); x_on[20:51]=1
xobj = m.Param(x_on)
m.Minimize(xobj*(x-3)**2)
m.options.IMODE=6
m.solve()

import matplotlib.pyplot as plt
plt.plot(m.time,x.value,'bo')
plt.show()

优化器认识到在事件区域​​之外更改 x 没有目标函数改进。如果目标函数有好处但变量不应移动,则尝试使用 m.fix(var,val,pos)

from gekko import GEKKO
import numpy as np
m = GEKKO()
m.time = np.linspace(0,100,101)
x = m.Var(2)
for i in range(1,21):
m.fix(x,val=2,pos=i)
for i in range(51,101):
m.fix(x,val=2,pos=i)

m.Minimize((x-3)**2)
m.options.IMODE=6
m.solve()

import matplotlib.pyplot as plt
plt.plot(m.time,x.value,'bo')
plt.show()

这给出了相同的结果。

关于python - 是否可以在 GEKKO 动态优化中定义变量的开始和结束时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68956944/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com