假设我有一个pytorch模型,描述了某个多维系统基于自身状态x和外部执行器u的演化,所以x_(t+1) = f(x_t,u_t),f是pytorch的人工神经网络。
现在我想解决一个动态优化问题,找到一个最优的u值序列,以最小化依赖于x的目标。类似于:
所有时间步长φ的最小和(X_t)
s.t.:x_(t+1) = f(x_t,u_t)
此外,我还对x中的一些变量有一些上界和下界。
有没有一种简单的方法可以使用像pyomo或gekko这样的动态优化工具箱做到这一点?
我已经编写了一些代码,将前馈神经网络转换为numpy函数,然后可以将其作为约束传递给pyomo。这种方法的问题是,每当神经网络结构发生变化时,它都需要大量的重新编程工作,因此快速测试变得困难。此外,递归神经网络的集成变得困难,因为隐藏的单元状态将不得不作为额外的变量添加到优化问题中。
我认为一个好的解决方案是在torch中进行函数评估和梯度计算,并以某种方式将结果传递给动态优化器。我只是不确定该怎么做。
非常感谢你的帮助!
发布于 2021-05-27 21:23:05
Tensorflow或Pytorch模型目前不能直接集成到GEKKO中。但是,我相信您可以从Tensorflow和Pytorch检索派生函数,这允许您将它们传递给GEKKO。
下面的链接中有一个GEKKO Brain模块和示例。您还可以找到一个使用GEKKO前馈神经网络进行动态优化的示例。
GEKKO Brain Feedforward neural network examples
MIMO MPC example with GEKKO neural network model
GEKKO Brain模块中的递归神经网络库目前正在开发中,它允许轻松使用GEKKO的所有动态优化功能。
同时,您可以使用顺序方法,将TensorFlow或PyTorch模型包装在可用的优化求解器(如scipy优化模块)中。
查看下面的链接,查看使用Keras LSTM模型和scipy optimize的动态优化示例。

https://stackoverflow.com/questions/67693181
复制相似问题