Python中的随机最优控制问题

2024-04-28 21:34:16 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有人知道一个python包可以解决随机最优控制问题?在

我已经找到了解决控制问题的Gekko,但我找不到一种方法来解决随机问题。在


Tags: 方法最优控制gekko
1条回答
网友
1楼 · 发布于 2024-04-28 21:34:16

下面是一个使用Gekko的stochastic model predictive control的最小示例,其中参数K是随机选择的。对模型的10个实例进行了整体优化,以使40(目标)的平方误差最小。在

Stochastic Model Predictive Control

import numpy as np
from gekko import GEKKO
import matplotlib.pyplot as plt

# uncertain parameter
n = 10
K = np.random.rand(n)+1.0

m = GEKKO()
m.time = np.linspace(0,20,41)

# manipulated variable
p = m.MV(value=0, lb=0, ub=100)
p.STATUS = 1 
p.DCOST = 0.1  
p.DMAX = 20

# controlled variable
v = m.Array(m.CV,n)
for i in range(n):
    v[i].STATUS = 1
    v[i].SP = 40
    v[i].TAU = 5
    m.Equation(10*v[i].dt() == -v[i] + K[i]*p)

# solve optimal control problem
m.options.IMODE = 6
m.options.CV_TYPE = 2
m.solve()

# plot results
plt.figure()
plt.subplot(2,1,1)
plt.plot(m.time,p.value,'b-',LineWidth=2)
plt.ylabel('MV')
plt.subplot(2,1,2)
plt.plot([0,m.time[-1]],[40,40],'k-',LineWidth=3)
for i in range(n):
    plt.plot(m.time,v[i].value,':',LineWidth=2)
plt.ylabel('CV')
plt.xlabel('Time')
plt.show()

Gekko paper (see Section 4)还提供了其他最优控制包的概述。其中一些可能具有随机优化能力。我还发现了用于解决随机最优控制问题的StoDynProgPython包,但是它已经有一段时间没有更新了,我也没有使用它的经验。Victor Zavala分享了stochastic optimal control of gas networks的工作,Fengqi You分享了optimization under uncertainty的工作,这也可能为他们提供灵感和工具集。在

相关问题 更多 >