gpt4 book ai didi

gekko - 在 GEKKO 中推导流形上的最佳轨迹

转载 作者:行者123 更新时间:2023-12-04 03:40:13 26 4
gpt4 key购买 nike

我终于回到了我的项目上并找到了我的下一个障碍。

我有一个封闭的歧管: Field as manifold

这也是游戏即时建模中的示例轨迹 enter image description here

我可以让我的系统像普通汽车一样运行。我很好奇在 gekko 中合并这种类型的约束的最佳方法是什么。流形看起来像一个具有圆角和圆角的立方体。我目前的想法是创建一个 MLP(多层感知器)来近似表面上每个点的流形上的法向量。我尝试使用 GEKKO 大脑模型来执行此操作,但最终速度非常慢,因此我转向了 keras 模型。我现在有一个 keras 模型,连接位置到法向量的准确率约为 89%(这可能就足够了)。

所以我的第一件事是,如何将 keras 模型合并到我的 gekko 方程中?如果我能够在每个点计算神经网络输出的导数,那么是否有可能将模型黑盒化,这样gekko就可以放置一个位置,然后黑盒函数吐出一个法向量和这个法向量最终计算出最优轨迹的导数?

如果这不可能,您认为我可以轻松地将此流形建模为 bspline 吗?当系统处于驱动状态时,我应该采用什么方法使流形表面成为系统的约束?我的想法是,我会采用系统的当前速度矢量并将其与系统位置处流形的法向矢量点在一起,以获得速度矢量沿流形旋转了多少。我已经看到一些问题,例如大时间步缺少流形的曲率并导致系统驱动流形的表面。我认为进行此数学运算的典型方法是将系统的速度投影到流形的“切空间”中,在切空间中导出 future 状态,然后使用收缩映射回流形。我对拓扑和流形这个话题还很陌生,所以如果我在理论上犯了错误,请纠正我。

我还没有太多代码可以执行此操作,因为我一直在弄清楚如何在方程式中使用 keras 模型。我确实有一个更简单的问题可用,它不是在这个复杂的流形上行驶,而是在 R2 中的一个圆上行驶。我也使用 keras 模型在 R2 中为这个圆圈建模。如果我能够在方程式中使用 keras,然后再开始在 R3 的流形上驾驶,我打算从更简单的版本开始。

有没有类似的例子可以让我学习?

谢谢!很高兴回到这个项目。

最佳答案

这种路径规划优化应用程序可能会更好地采用射击方法,其中模型是优化器反复调用模拟器的“黑匣子”。一些挑战是当车辆与地面或空中相互作用时方程式的变化。如果您确实想尝试对地面和空中进行建模,if3 语句将允许切换或使用松弛变量。

对于边界约束,也许有一种更简单的方法来开始对其建模,例如可以形成一个盒子的简单不等式约束。您可以为边缘添加额外的不等式约束来模拟曲率。

下面是一个带有 rocket launch 的相关应用程序这适用于空气动力学。您需要将其扩展到 3D。

Rocket launch

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

# create GEKKO model
m = GEKKO()

# scale 0-1 time with tf
m.time = np.linspace(0,1,101)

# options
m.options.NODES = 6
m.options.SOLVER = 3
m.options.IMODE = 6
m.options.MAX_ITER = 500
m.options.MV_TYPE = 0
m.options.DIAGLEVEL = 0

# final time
tf = m.FV(value=1.0,lb=0.1,ub=100)
tf.STATUS = 1

# force
u = m.MV(value=0,lb=-1.1,ub=1.1)
u.STATUS = 1
u.DCOST = 1e-5

# variables
s = m.Var(value=0)
v = m.Var(value=0,lb=0,ub=1.7)
mass = m.Var(value=1,lb=0.2)

# differential equations scaled by tf
m.Equation(s.dt()==tf*v)
m.Equation(mass*v.dt()==tf*(u-0.2*v**2))
m.Equation(mass.dt()==tf*(-0.01*u**2))

# specify endpoint conditions
m.fix(s, pos=len(m.time)-1,val=10.0)
m.fix(v, pos=len(m.time)-1,val=0.0)

# minimize final time
m.Obj(tf)

# Optimize launch
m.solve()

print('Optimal Solution (final time): ' + str(tf.value[0]))

# scaled time
ts = m.time * tf.value[0]

# plot results
plt.figure(1)
plt.subplot(4,1,1)
plt.plot(ts,s.value,'r-',linewidth=2)
plt.ylabel('Position')
plt.legend(['s (Position)'])

plt.subplot(4,1,2)
plt.plot(ts,v.value,'b-',linewidth=2)
plt.ylabel('Velocity')
plt.legend(['v (Velocity)'])

plt.subplot(4,1,3)
plt.plot(ts,mass.value,'k-',linewidth=2)
plt.ylabel('Mass')
plt.legend(['m (Mass)'])

plt.subplot(4,1,4)
plt.plot(ts,u.value,'g-',linewidth=2)
plt.ylabel('Force')
plt.legend(['u (Force)'])

plt.xlabel('Time')
plt.show()

这是另一个应用 landing of a reusable rocketsource files .他们开发了火箭动力学的替代模型,以将该模型应用于预测控制。

surrogate model

这是一个 3D 火箭应用的示例,但它们没有地面相互作用与不断变化的动力学方程的复杂性。

关于gekko - 在 GEKKO 中推导流形上的最佳轨迹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66189542/

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