我正在尝试解决一个最优控制问题,其中成本函数是J= x^T Q x+ u^T R u,服从x_dot =A x+B u以及x和u的界限。我知道有一些像cvxpy,yalimp等求解器可以做到这一点,但我想自己去做,以便对编码和将来可能添加的其他参数有更好的想法。我附上了我写的代码。它运行,但对于所有时间步长返回相同的值。我把x和u堆叠成一个向量。我不知道这是不是正确的方法。我认为代码可以用一种更好/更有效的方式编写。欢迎所有建议,并非常感谢任何提前帮助
灰分
import numpy as np
import sympy as sp
import scipy.optimize as opt
i
我正在使用python GEKKO和/或APM Matlab接口解决一个最优控制问题(它们是两种语言的相同包)。我可以成功地解决我的问题,但是我不知道如何指定解决方案文件的输出位置。
加载我的文件并使用以下命令解决问题
% server
s = 'http://byu.apmonitor.com';
% application name
a = 'test';
% load model and data file
apm_load(s,a,'test.apm')
csv_load(s,a,'test.csv')
output =
我正在制作一个数值问题,作为一个例子,并试图用gekko为下列问题寻找一个最优控制:
最小积分a*x(t)从0到T,其中T是第一次x(t)是0,即它是一个随机时间。这些约束使得x(t)遵循一些动态f( x(t),u(t)),x(T) >= 0,u(t)在0到1之间。
我按照GEKKO网站和youtube上的教程进行了固定的最后一次,但在随机的最后一次,我找不到任何信息。下面是我目前的代码,但是我如何能够从固定的最后时间移动到随机的最后时间呢?任何帮助都将不胜感激!谢谢!
import numpy as np
import matplotlib.pyplot as plt
from
我试图解决一个最优控制问题,它涉及到一个具有固定状态但有空闲终端时间的积分目标最小化。这是一个可以解析解决的相对简单的问题。Gekko的解决方案与分析不匹配。
我不知道我做错了什么。我学习了几个Gekko例子来解决这个问题。任何帮助都是非常感谢的。
我遇到的另一个问题是如何让Gekko自动计算控制的初始值。最优控制总是从指定的初始控制猜测开始。
from gekko import GEKKO
import numpy as np
import matplotlib.pyplot as plt
# create GEKKO model
m = GEKKO()
# time
你怎么能在Gekko修正初始条件?我是相当新的Gekko仍然,并正在努力优化的AOA和银行角度的穿梭机式再入飞行器,以最大限度地跨越距离。EOMs为6种耦合的非线性ODEs。现在,我只能在较小的时间范围(大约2秒)上得到一个解,并提供初始条件的界,而不是使它固定。下图显示了一个解决方案,当我需要从79,248米开始的时候,高度开始在0米左右。如果不提供状态变量的界,我就无法获得收敛。
from gekko import GEKKO
import numpy as np
import matplotlib.pyplot as plt
import math
pi = math.pi
####
请回顾我从零开始构建的自定义ArrayList类,并添加任何建议或建设性的批评。这个模板类的要点是给用户一个轻量级的ArrayList,并对它的工作方式进行最优控制。
它是在堆上自动创建的,具有一个可选的种子值,该值确定填充后重新创建时给它多少空间。它附带了一个细化函数,它可以在任何时候切断垃圾值,也可以被重新安装。种子默认为每一次更新10个新的数组点。
#ifndef MEMORYLIST_H
#define MEMORYLIST_H
//Class is designed to be a basic array list off the stack
template <class
我想通过最小化一个积分来解决一个最优控制问题,但我得到的解是找不到的。这是密码。
带有约束的J(u)=\int{0}^{500}(69732*u*x+u**2)dt y(500)=0
import numpy as np
from gekko import GEKKO
m = GEKKO(remote=False)
nt = 101; m.time = np.linspace(0,500,nt)
y = m.Var(15000)
x = m.Var(150)
u = m.MV(value=0.06,lb=0.02, ub=0.06)
u.STATUS=1
p = np.zeros(nt);