SCOP Solver for COnstraint Programming Python import scop










![import scopモジュールを読み込む p=scop. Problem() 問題オブジェクトpを生成 workers=["A", "B", "C"] Cost=[[15, 20, 30], [7, 15, 12], import scopモジュールを読み込む p=scop. Problem() 問題オブジェクトpを生成 workers=["A", "B", "C"] Cost=[[15, 20, 30], [7, 15, 12],](https://slidetodoc.com/presentation_image_h2/5d309d8b61c82a9e45c1a06559fbd0bf/image-11.jpg)
![for i in range(len(workers)): for j in range(3): 線形制約に左辺の項を追加 con 2. add. Term(Cost[i][j], workers[i], for i in range(len(workers)): for j in range(3): 線形制約に左辺の項を追加 con 2. add. Term(Cost[i][j], workers[i],](https://slidetodoc.com/presentation_image_h2/5d309d8b61c82a9e45c1a06559fbd0bf/image-12.jpg)
![print "solution“ for x in sol: 結果(解)の辞書を表示 print x, sol[x] print "violated constraint(s)" for print "solution“ for x in sol: 結果(解)の辞書を表示 print x, sol[x] print "violated constraint(s)" for](https://slidetodoc.com/presentation_image_h2/5d309d8b61c82a9e45c1a06559fbd0bf/image-13.jpg)


![import scop p=scop. Problem() workers=["A", "B", "C", "D", "E"] Cost=[[15, 20, 30], [7, 15, import scop p=scop. Problem() workers=["A", "B", "C", "D", "E"] Cost=[[15, 20, 30], [7, 15,](https://slidetodoc.com/presentation_image_h2/5d309d8b61c82a9e45c1a06559fbd0bf/image-16.jpg)













- Slides: 29
制約計画ソルバー SCOP Solver for COnstraint Programming:スコープ Pythonモジュールの使い方
import scopモジュールを読み込む p=scop. Problem() 問題オブジェクトpを生成 workers=["A", "B", "C"] Cost=[[15, 20, 30], [7, 15, 12], [25, 10, 13]] 変数の追加 p. add. Variables(workers, range(3)) 相異制約オブジェクトcon 1の生成 con 1=scop. Alldiff("all_diff_constraint", workers, weight =”inf”) 線形制約オブジェクトcon 2の生成 con 2=scop. Linear("linear_constraint")
for i in range(len(workers)): for j in range(3): 線形制約に左辺の項を追加 con 2. add. Term(Cost[i][j], workers[i], j) con 2. set. Rhs(0) 右辺定数の設定 con 2. set. Direction(“<=”) 制約の方向の決定 相異制約を問題に追加 p. add. Constraint(con 1) 線形制約を問題に追加 p. add. Constraint(con 2) 求解(時間制限 3秒) sol, violated=p. solve(time=3)
print "solution“ for x in sol: 結果(解)の辞書を表示 print x, sol[x] print "violated constraint(s)" for v in violated: 結果(破られた制約)の辞書を表示 print v, violated[v] 実行結果 solution 解の表示 A 0 C 1 B 2 violated constraint(s) 逸脱した制約の表示 linear_constraint 37
問題情報の出力 print p とすると... number of variables = 3 number of constraints= 2 variable A: [0, 1, 2] variable B: [0, 1, 2] variable C: [0, 1, 2] Alldiff: all_diff_constraint: weight=inf ACB Linear: linear_constraint: weight=1 15*x[A: 0] 20*x[A: 1] 30*x[A: 2] 7*x[B: 0] 15*x[B: 1] 12*x[B: 2] 25*x[C: 0] 10*x[C: 1] 13*x[C: 2] <=0
import scop p=scop. Problem() workers=["A", "B", "C", "D", "E"] Cost=[[15, 20, 30], [7, 15, 12], [25, 10, 13], [15, 18, 3], [5, 12, 17]] LB=[1, 2, 2] p. add. Variables(workers, range(3)) LB_Constraint={} for j in range(3): LB_Constraint[j]=scop. Linear("LB_constraint"+str(j), "inf") for i in range(len(workers)): LB_Constraint[j]. add. Term(1, workers[i], j) LB_Constraint[j]. set. Rhs(LB[j]) LB_Constraint[j]. set. Direction(">=") p. add. Constraint(LB_Constraint[j])
con 1=scop. Linear("linear_constraint") for i in range(len(workers)): for j in range(3): con 1. add. Term(Cost[i][j], workers[i], j) p. add. Constraint(con 1) sol, violated=p. solve(time=1) print "solution" for x in sol: print x, sol[x] print "violated constraint(s)" for v in violated: print v, violated[v]
SCOPによる求解 solution A 1 C 1 B 2 E 0 D 2 violated constraint(s) linear_constraint 50 50 (=20+12+10+3+5) 万円 0 1 2 A 15 20 30 B 7 15 12 C 25 10 13 D 15 18 3 E 5 12 17
作業員A, Cが同じ仕事をしない 制約の記述 作業員 A とCを同じ仕事に割り当てることを禁止する2次制約 (重みは 100) con 2=scop. Quadratic("quadratic_constraint", 100) for j in range(3): con 2. add. Term(1, "A", j, "C", j) p. add. Constraint(con 2)
SCOPによる求解 solution A 0 C 1 B 2 E 1 D 2 violated constraint(s) linear_constraint 52 52 (=15+12+10+3+12) 万円 0 1 2 A 15 20 30 B 7 15 12 C 25 10 13 D 15 18 3 E 5 12 17
結果の出力 # 結果(解)の出力 sol, violated=p. solve(time=1) print "solution" for x in sol: print x, sol[x] # 結果(破られた制約)の出力 print "violated constraint(s)" for v in violated: print v, violated[v]
結果の出力 A 1 3 A 0 0 A 3 3 A 2 3 A 5 2 A 4 0 A 6 2 シフト B 4 1 B 5 0 B 6 3 B 0 3 B 1 0 B 2 1 B 3 1 C 3 0 C 2 2 C 1 2 C 0 2 C 6 0 C 5 3 C 4 3 D 6 1 D 4 2 D 5 0 D 2 0 D 3 2 D 0 1 D 1 1 violated constraint(s) スタッフA スタッフB スタッフC スタッフD 1 2 3 期





























