更新:查看我们刚刚发布的新GEKKO 包。
APM Python是一个免费的优化工具箱,具有与 APOPT、BPOPT、IPOPT 和其他求解器的接口。它为求解器提供第一(Jacobian)和第二(Hessian)信息,并提供一个可选的网络界面来查看结果。APM Python 客户端使用 pip 安装:
pip install APMonitor
它也可以安装在 Python 脚本中:
try:
from APMonitor.apm import *
except:
# Automatically install APMonitor
import pip
pip.main(['install','APMonitor'])
from APMonitor.apm import *
我们做了几个基准测试,发现 APPT(活动集方法)和 IPOPT(内点法)的组合可以解决很大比例的基准问题。下载 zip 文件中包含许多示例问题。您可能想要开始的问题是 Hock Schittkowski #71 问题。它是最简单的示例,演示了如何解决约束优化问题。
有一个浏览器界面和一个 Python / MATLAB API。Python 的 API 是一个脚本 (apm.py),可从 apmonitor.com 主页下载。一旦脚本被加载到 Python 代码中,它就可以解决以下问题:
- 非线性方程
- 混合整数非线性规划
- 微分和代数方程
- 最小二乘模型拟合
- 移动水平估计
- 非线性模型预测控制
- 等等。
对于新用户,APM Python 软件有一个 Google Groups 论坛,用户可以在其中发布问题。有一些网络研讨会展示了运筹学和工程中的优化问题。
下面是一个优化问题的示例 (hs71.apm)。
Model
Variables
x[1] = 1, >=1, <=5
x[2] = 5, >=1, <=5
x[3] = 5, >=1, <=5
x[4] = 1, >=1, <=5
End Variables
Equations
x[1] * x[2] * x[3] * x[4] > 25
x[1]^2 + x[2]^2 + x[3]^2 + x[4]^2 = 40
minimize x[1] * x[4] * (x[1]+x[2]+x[3]) + x[3]
End Equations
End Model
使用以下 Python 脚本解决了优化问题:
from APMonitor.apm import *
server = 'http://byu.apmonitor.com'
# Application name
app = 'eqn'
# Clear previous application
apm(server,app,'clear all')
# Load model file
apm_load(server,app,'hs71.apm')
# Option to select solver (1=APOPT, 2=BPOPT, 3=IPOPT)
apm_option(server,app,'nlc.solver',3)
# Solve on APM server
solver_output = apm(server,app,'solve')
# Display solver output
print(solver_output)
# Retrieve results
results = apm_sol(server,app)
# Display results
print('--- Results of the Optimization Problem ---')
print(results)
# Display Results in Web Viewer
url = apm_var(server,app)
print("Opened Web Viewer: " + url)
APM Python 是用于优化的免费网络服务。优化问题在远程服务器上解决,结果返回到本地 Python 脚本。APMonitor 本地服务器也可供下载,因此不需要 Internet 连接(下载服务器)。我们最近为 MATLAB 和 Python 添加了并行处理支持。Python 模块与 Python 2.7 或 Python 3+ 兼容。