优化的输出(使用 GEKKO)为操纵变量(IMODE=6)给出零

Posted

技术标签:

【中文标题】优化的输出(使用 GEKKO)为操纵变量(IMODE=6)给出零【英文标题】:The output of the optimization(using GEKKO) is giving zero for the manipulated variable(IMODE=6) 【发布时间】:2021-11-01 13:06:13 【问题描述】:

我正在尝试使用 gekko 优化工具实现 2 级自动驾驶汽车。 我正在使用 MODEL PREDICTIVE CONTROL 一种控制策略来控制汽车。所以在 gekko 中,我选择了 IMODE =6。

delta_throttle 和 delta_steering_angle 是操纵变量(MV)。 这些变量是汽车的输入。

gekko 应该解决并提供这些变量的值,从而使汽车自动移动。

但不幸的是,软件只是为这两个变量返回一个零值。 我不知道为什么软件提供零值。它应该提供一个非零值,以便汽车可以移动。

谁能帮帮我? 谢谢!!!

【问题讨论】:

请提供足够的代码,以便其他人更好地理解或重现问题。 【参考方案1】:

这里有三件事要检查:

    求解器报告一个成功的求解。可以通过以下方式检查解决方案状态:
if m.options.APPSTATUS==1:
   print('Successful Solution)
else:
   print('Unsuccessful')

disp=True in m.solve(disp=True) 时也会显示解决方案状态。

    操纵变量状态为开启。
delta_throttle.STATUS = 1
delta_steering_angle.STATUS = 1
    受控变量状态为打开,例如速度和位置。
velocity.STATUS = 1
position.STATUS = 1

这是一个速度 MPC 应用程序供参考:

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

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

# Parameters
mass = 500
b = m.Param(value=50)
K = m.Param(value=0.8)

# Manipulated variable
p = m.MV(value=0, lb=0, ub=100)
p.STATUS = 1  # allow optimizer to change
p.DCOST = 0.1 # smooth out gas pedal movement
p.DMAX = 20   # slow down change of gas pedal

# Controlled Variable
v = m.CV(value=0)
v.STATUS = 1  # add the SP to the objective
m.options.CV_TYPE = 2 # squared error
v.SP = 40     # set point
v.TR_INIT = 1 # set point trajectory
v.TAU = 5     # time constant of trajectory

# Process model
m.Equation(mass*v.dt() == -v*b + K*b*p)

m.options.IMODE = 6 # control
m.solve(disp=False)

# get additional solution information
import json
with open(m.path+'//results.json') as f:
    results = json.load(f)

plt.figure()
plt.subplot(2,1,1)
plt.plot(m.time,p.value,'b-',label='MV Optimized')
plt.legend()
plt.ylabel('Input')
plt.subplot(2,1,2)
plt.plot(m.time,results['v1.tr'],'k-',label='Reference Trajectory')
plt.plot(m.time,v.value,'r--',label='CV Response')
plt.ylabel('Output')
plt.xlabel('Time')
plt.legend(loc='best')
plt.show()

【讨论】:

先生,我已经看过你的 MPC 视频,了解汽车的速度(示例 17)。我也以与您类似的方式编写了我的代码。我对上面的代码有一些疑问。首先,您是如何得出时间常数为 5 的值的,对于 DMAX 和 DCOST 也是如此,它还显示了问题的成功消息,并且步骤 2 也正确执行了谢谢!!!!!! 请在apmonitor.com/do/index.php/Main/ControllerTuning查看控制器调整信息如果您需要更具体的帮助,请将您的代码作为新的 *** 问题发布。

以上是关于优化的输出(使用 GEKKO)为操纵变量(IMODE=6)给出零的主要内容,如果未能解决你的问题,请参考以下文章

Gekko(python) 用于单圈时间优化

适用于 Python 的 Gekko 优化套件 - if3 始终 <0

在 Python 中使用 Gekko 求解函数

在 Python 中使用 Gekko,对于多目标优化问题,是不是所有目标函数都必须具有相同的单位?

如何使用 gekko 变量作为数组的组件?

如何使用Pulp Gekko和Scipy软件包修复具有不同结果的代码以解决线性优化问题?