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