始めに
IBMの最適化ソリューションCPLEXの標準的な開発環境は、IBM ILOG CPLEX Optimization Studio(略称COS)です。
COS導入済みのPCでは、通常Eclipseのプラグインを使ってOPLと呼ばれる最適化専用の言語でモデル開発をしますが、Python APIを使った開発も可能です。
その手順のメモを記載します。
参考リンク
Setting up an optimization engine
前提
動作確認は、
MacOS: 10.14.6
CPLEX Optimization Studio: 12.9
の環境で行いました。
設定手順
COSの導入
COSに関しては、通常の方法ですべてデフォルトで導入を行います。
anacondaの導入
テストはJupyter Notebookで行いました。
その前提のanacondaに関しても、通常の方法で、全部デフォルトで行っています。
COS/cplex導入先パスの確認
次のコマンドでCOS導入先パスを確認します。
$ ls -l /Applications | grep CPLEX
手元の環境では
drwxrwxr-x 11 AKAISHI@jp.ibm.com admin 352 9 13 10:19 CPLEX_Optimizer129
という結果でした。
Python versionの確認
次のコマンドで確認します。
$ python -V
手元の環境では、次の結果でした。
Python 3.7.3
環境変数 PYTHONPATHの設定
今までの結果を元に、次のような行を ~/.bash_profile に追加します。
export PYTHONPATH=/Applications/CPLEX_Optimizer129/cplex/python/3.7/x86-64_osx
3.7/x86-64_osx
の部分に関しては、Pythonバージョンとプラットフォームに対応して適宜修正して下さい。
ライブラリの導入
次のpipコマンドで、DO Python APIライブラリの導入を行います。
$ pip install docplex
動作確認
以上で、必要な準備は完了です。環境変数PYTHONPATH
が設定されている状態で、
$ jupyter notebook
で、Jupyter Notebookを起動します。
Watsonで巡回セールスマン問題を解く
で紹介しているJupyter Notebookファイルをダウンロードし、読み込みます。
後は、Shift + Enterでセルを順番に実行すると、下の図のような最適な道順をCPLEXがみつけてくれるはずです。
機能制約とライセンスの関係
COSには、無料で利用な評価版もあります。評価版を使って、上記の設定を行い、巡回セールス問題を解こうとすると、以下のようなメッセージが表示されます。
CPLEX Error 1016: Community Edition. Problem size limits exceeded. Purchase at https://ibm.co/2s0wqSa.
これは、文字通り評価版の機能制約(ルール数最大1000個)で起きたエラーです。
評価版の場合、循環セールス問題で点の数(N)=5と修正して実行すると、機能制約にヒットしなくなり、正常終了するようになります。