Optimization 如何将pytorch模型集成到动态优化中,例如在Pyomo或gekko中

Optimization 如何将pytorch模型集成到动态优化中,例如在Pyomo或gekko中,optimization,pytorch,pyomo,gekko,Optimization,Pytorch,Pyomo,Gekko,假设我有一个pytorch模型,描述了基于自身状态x和外部执行器u的多维系统的演化。因此x_uT(t+1)=f(x_t,u_t),f是pytorch的人工神经网络 现在我想解决一个动态优化问题,找到一个u值的最优序列,以最小化一个依赖于x的目标。大概是这样的: 所有时间步phi(x_t)的最小和 s、 t:x_(t+1)=f(x_,t) 此外,对于x中的一些变量,我也有一些上界和下界 有没有一种简单的方法可以使用像pyomo或gekko这样的动态优化工具箱来做到这一点 我已经编写了一些代码,将前

假设我有一个pytorch模型,描述了基于自身状态x和外部执行器u的多维系统的演化。因此x_uT(t+1)=f(x_t,u_t),f是pytorch的人工神经网络

现在我想解决一个动态优化问题,找到一个u值的最优序列,以最小化一个依赖于x的目标。大概是这样的:

所有时间步phi(x_t)的最小和

s、 t:x_(t+1)=f(x_,t)

此外,对于x中的一些变量,我也有一些上界和下界

有没有一种简单的方法可以使用像pyomo或gekko这样的动态优化工具箱来做到这一点

我已经编写了一些代码,将前馈神经网络转换为numpy函数,然后将其作为约束传递给pyomo。这种方法的问题是,每次神经网络结构发生变化时,都需要进行大量的重新编程,因此快速测试变得很困难。此外,递归神经网络的集成也变得困难,因为必须将隐藏的细胞状态作为附加变量添加到优化问题中

我认为一个好的解决方案是在torch中进行函数求值和梯度计算,并以某种方式将结果传递给动态优化器。我只是不知道该怎么做


非常感谢你的帮助

目前,Tensorflow或Pytorch模型无法直接集成到GEKKO中。但是,我相信你可以从Tensorflow和Pytorch中得到导数,这可以让你把它们传递给GEKKO

下面的链接中有一个GEKKO大脑模块和示例。您还可以找到一个使用GEKKO前馈神经网络进行动态优化的示例

GEKKO大脑模块中的递归神经网络库目前正在开发中,可以轻松使用GEKKO的所有动态优化功能

同时,您可以使用顺序方法,将TensorFlow或PyTorch模型包装到可用的优化解算器(如scipy优化模块)中

查看下面的链接,了解Keras LSTM模型和scipy优化的动态优化示例