繁体   English   中英

Gekko 能否解决基于矢量的动态优化问题以实现最优控制

[英]can Gekko solve vector based dynamic optimization problem for optimal control

我尝试了很多解算器但在某处出错。 现在我要尝试 gekko 来解决我的问题。 请让我知道gekko可以解决这类问题,其中python function中的M取变量q。 所有变量和参数都是向量或矩阵的形式。 感谢您在此处输入图像描述

q应该是function的时候,而M,c sai等矩阵依赖于q和u。

这是倒立摆的类似问题

倒立摆

还有一个相关的 Stack Overflow 问题: how to use arrays in gekko optimizer for python Gekko 可以解决受执行器约束和运动方程约束的路径规划问题。 这个问题的一个具有挑战性的数学特征是如何平滑地设置路径约束,以便机器人不会在每个中间路径点暂停。 一种可能的方法是创建一个路径三次样条,它有助于为每个时间点定义所需的位置。 这是矩阵的一个问题:

from gekko import GEKKO
import numpy as np
m = GEKKO(remote=False)
ni = 3; nj = 2; nk = 4
# solve AX=B
A = m.Array(m.Var,(ni,nj),lb=0)
X = m.Array(m.Var,(nj,nk),lb=0)
AX = np.dot(A,X)
B = m.Array(m.Var,(ni,nk),lb=0)
# equality constraints
m.Equations([AX[i,j]==B[i,j] for i in range(ni) \
                             for j in range(nk)])
m.Equation(5==m.sum([m.sum([A[i][j] for i in range(ni)]) \
                                    for j in range(nj)]))
m.Equation(2==m.sum([m.sum([X[i][j] for i in range(nj)]) \
                                    for j in range(nk)]))
# objective function
m.Minimize(m.sum([m.sum([B[i][j] for i in range(ni)]) \
                                 for j in range(nk)]))
m.solve()
print(A)
print(X)
print(B)

这是另一个测试脚本,它演示了点积和跟踪 function 与 Numpy:

import numpy as np
from gekko import GEKKO

m = GEKKO(remote=False)

# Random 3x3
A = np.random.rand(3,3)
# Random 3x1
b = np.random.rand(3,1)
# Gekko array 3x3
p = m.Array(m.Param,(3,3))
# Gekko array 3x1
y = m.Array(m.Var,(3,1))

# Dot product of A p
x = np.dot(A,p) # or A@p
# Dot product of x y
w = x@y
# Dot product of p y
z = p@y # or np.dot(p,y)
# Trace (sum of diag) of p
t = np.trace(p)

# solve Ax = b
s = m.axb(A,b)
m.solve()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM