1. 概要
Windows11 Anaconda環境にPulpをcondaでインストールして、デフォルトのソルバーで混合整数問題を解いていると、あるシンプルな制約を追加すると、いくら待ってもsolve()が返って来なくなった。モデルが悪いのかなと、さんざん試行錯誤したが解決できず、ソルバーを最新のCBC (2023/3/26現在で、2.10.8) に変更することにした。変更したソルバーで実行すると、最初のモデルでも問題なく計算結果を得ることができた。
参考:以下のDOWNLOADの章
[COIN-OR FoundationサイトのCBC] (https://github.com/coin-or/Cbc)
2. 環境
- Windows 11 Pro 22H2
- CPU: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
- Anaconda3
- Python 3.9.15
- Pulp 2.7.0
3. 実際にやった手順
手順は、以外と簡単で、
-
インストール
-
[CBCの最新リリース] (https://github.com/coin-or/Cbc/releases) から、自分の環境にあったファイル、Winodwsの場合はCbc-releases.2.10.8-i686-w64-mingw32.zipをダウンロードして解凍する。
-
解凍してできたフォルダ(Cbc-releases.2.10.8-i686-w64-mingw32)を、好きな場所に移動する。私の場合は、以下に移動した。
C:\Users\ユーザ名\anaconda3\envs\仮想環境名\lib\site-packages\pulp\solverdir\
-
-
Pulpでソルバーを指定して実行
インストールしたcbc.exeのパスを指定して、ソルバーを生成し、ソルバーを指定してsolve()を呼び出す。solverPath=r'C:\Users\ユーザ名\anaconda3\envs\仮想環境名\lib\site-packages\pulp\solverdir\Cbc-releases.2.10.8-i686-w64-mingw32\bin\cbc.exe' solver = pulp.COIN_CMD(path=solverPath) model.solve(solver)