更新:リリースしたばかりの新しいGEKKOパッケージを参照してください。
APM Pythonは、APOPT、BPOPT、IPOPT、およびその他のソルバーへのインターフェースを備えた無料の最適化ツールボックスです。ソルバーに最初の情報(ヤコビアン)と2番目の情報(ヘシアン)を提供し、結果を表示するためのオプションのWebインターフェイスを提供します。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 *
いくつかのベンチマークテストを行った結果、APOPT(アクティブセットメソッド)とIPOPT(内点法)を組み合わせることで、ベンチマークの問題の大部分を解決できることがわかりました。ダウンロードzipファイルには、いくつかの問題例が含まれています。おそらく最初から始めたいのは、Hock Schittkowski#71の問題です。これは最も単純な例であり、制約付き最適化の問題を解決する方法を示しています。
ブラウザインターフェイスとPython / MATLABへのAPIがあります。PythonのAPIは、apmonitor.comホームページからダウンロードできる単一のスクリプト(apm.py)です。スクリプトがPythonコードにロードされると、次の問題を解決することができます。
- 非線形方程式
- 混合整数非線形計画法
- 微分方程式と代数方程式
- 最小二乗モデルのあてはめ
- 移動地平線の推定
- 非線形モデル予測制御
- 等
新規ユーザー向けに、APM Pythonソフトウェアには、ユーザーが質問を投稿できるGoogleグループフォーラムがあります。オペレーションズリサーチおよびエンジニアリングの最適化問題を紹介するウェビナーがあります。
以下は最適化問題(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は、最適化のための無料のWebサービスです。最適化の問題はリモートサーバーで解決され、結果はローカルPythonスクリプトに返されます。インターネット接続が必要ないように、APMonitorローカルサーバーもダウンロードできます(ダウンロードサーバー)。最近、MATLABとPythonの両方の並列処理サポートを追加しました。Pythonモジュールは、Python 2.7またはPython 3+と互換性があります。