前提・実現したいこと
制約最適化ソルバーSCOPの練習(参考リンク http://logopt.com/scop.htm )
制約条件(c1,c2)における2変数(x1,x2)の最適解を求めるプログラムの実現。
発生している問題・エラーメッセージ
最後の答えがNoneになってしまい、動画通りにならない。
https://www.youtube.com/watch?time_continue=401&v=V80XVXX9a1U
(動画の6分23秒ぐらいのところ)
================ Now solving the problem ================ Status= 1 Output= (None, None)
が
================ Now solving the problem ================ ({'x1':'3','x2':'2'},{'c2':1})
という表示になって欲しい。
該当のソースコード
python
1>>> import scop 2>>> from scop import* 3>>> m=Model() 4>>> x1=m.addVariable("x1",[1,2,3]) 5>>> print(x1) 6variable x1:['1', '2', '3'] = None 7>>> x2 = m.addVariable("x2",[1,2,3]) 8>>> c1=Alldiff("c1",[x1,x2]) 9>>> m.addConstraint(c1) 10>>> print(m) 11Model: 12number of variables = 2 13number of constraints= 1 14variable x1:['1', '2', '3'] = None 15variable x2:['1', '2', '3'] = None 16c1: weight= 1 type=alldiff x1 x2 ; :LHS =0 17>>> c2=Linear("c2") 18>>> c2.addTerms([3,2,1],[x1,x1,x1],[1,2,3]) 19>>> m.addConstraint(c2) 20>>> print(c2) 21c2: weight= 1 type=linear 3(x1,1) 2(x1,2) 1(x1,3) <=0 22 23>>> m.Params.TimeLimit=1 24>>> m.optimize() 25 26 ================ Now solving the problem ================ 27 28Status= 1 29Output= 30(None, None) 31>>>
補足情報(FW/ツールのバージョンなど)
Python3.6
動画のソースコードと相違がないか十分にチェックしてみました。
おそらく相違ないと思われますが、上手くいきませんでした。
ご教示お願いします。
参考リンク
http://logopt.com/scop.htm
###追記:
SCOP windows64トライアル版 (zip圧縮形式)
scop.pyと同じディレクトリ内にscop.exeは存在します。
「m.optimize()」を実行すると、JupyterNotebookに以下のように表示されます。
[I 13:26:45.956 NotebookApp] Adapting to protocol v5.1 for kernel b5560f83-f2c6-4525-bbc4-6505fb11d8f9 'scop' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。
###解決までの手順:ベストアンサー参考
①scop.pyと同じディレクトリ内にscop.exeを入れる。
②下記のパイソンファイルを名前を付けて①と同じファイルに保存
(最後の行でprintを用いて答えを表示されるように改訂)
③実行
python
1import scop 2from scop import* 3m=Model() 4x1=m.addVariable("x1",[1,2,3]) 5print(x1) 6 7x2 = m.addVariable("x2",[1,2,3]) 8c1=Alldiff("c1",[x1,x2]) 9m.addConstraint(c1) 10print(m) 11 12c2=Linear("c2") 13c2.addTerms([3,2,1],[x1,x1,x1],[1,2,3]) 14m.addConstraint(c2) 15print(c2) 16 17m.Params.TimeLimit=1 18ret = m.optimize() 19print(ret)
回答2件
あなたの回答
tips
プレビュー