Presentation is loading. Please wait.

Presentation is loading. Please wait.

最適化ソルバーのための Python言語入門

Similar presentations


Presentation on theme: "最適化ソルバーのための Python言語入門"— Presentation transcript:

1 最適化ソルバーのための Python言語入門
数理最適化ソルバー Gurobi 制約最適化ソルバー SCOP スケジューリングソルバー OptSeq 最適化ソルバーのための Python言語入門 久保 幹雄

2 オブジェクト . なになに オブジェクト指向に慣れよう! Pythonではすべてがオブジェクト
オブジェクト「の」なになに(属性 or プロパティ) オブジェクト「に or を」なになにする(メソッド) オブジェクト . なになに この点が重要!

3 オジェクトの例 (Gurobi) 変数オブジェクト x の属性 x.VarName => x の名前 x.LB => x の下限
モデルオブジェクト m のメソッド m.addVar() => m に変数を加える m.addConstr() => m に制約を加える m.optimize() => m を最適化する

4 メソッド=クラス内で定義された関数 関数 def f(引数): ..... return 返値 入力 出力 f( 引数 ) 返値= f( )

5 class なになに: クラスの中身 def 関数( ): メソッドの中身 return 返値
自前のオブジェクト=クラス class なになに: クラスの中身 def 関数( ): メソッドの中身 return 返値

6 リスト リストは [ ] で生成 L= [1,4,6,7] 中身は何でも良い L=[ “a”, “b”, “c”]
中身は何でも良い L =[ “a”, “b”, “c”, 1, 2, [ 5,6, ”d”] ]

7 リストの反復 リスト内の要素を順に for 反復で取り出す L= [1,4,6,7] for i in L: print i, => と出力 要素の順番と中身が欲しい L= [1,4,6,7] for index,i in enumerate(L): print index, i => と出力

8 リスト内包表記 リストを for 文を中に入れて生成 L= [ i*2 for i in range(5) ] => [0 , 2, 4 ,6, 8] を返す if 文を入れて条件付きで生成 例: 0 から 10 までの奇数 (2で割った剰余が1) のリストを生成 [ i for i in range(11) if i%2 ==1 ] => [1, 3, 5, 7, 9] を返す

9 合計を計算するための記法 sum( ) で合計を計算
sum リストの中身の和をとる関数 例: sum ( [1,2,3] ) => 6を返す リスト内包表記でリストを生成してもOK 例: sum( [ i for i in range(11)] ) =>55 を返す リストを表す [ ] を省略してもOK sum( i for i in range(11) )

10 合計を計算するための記法 (Gurobi)
sum( ) もしくは高速版 quicksum を使う 例:変数オブジェクトx,y,z の和をとる sum ( [ x,y,z] ) => x+y+z を返す リスト内包表記でリストを生成してもOK 例: 変数オブジェクト x[0], x[1],・・・, x[10] の和をとる sum( x[i] for i in range(11) ) => x[0]+x[1]+ ・・・ +x[10] を返す

11 sum関数を用いた制約の追加の例 モデルオブジェクト model に x[0]+x[1]+・・・+x[10] <=8 を追加
model.addConstr( sum( x[i] for i in range(11) ) <=8 ) 大規模問題のときには quicksum を使う!

12 辞書 辞書は {} で生成 d = { } #空の辞書 辞書はキーを入れると値を返す 例 d[ “small” ] = 10 ; d[ “large” ] = 10000  と辞書を設定した後で >> d[ “small”] と聞くと    を返す

13 辞書の反復 辞書のキーに対する for 反復 例: d = {} d[ “small” ] = 10 d[ “large” ] = 10000 for i in d:  print i, => “small” “large” を返す

14 辞書の使用例 (1) 問題のパラメータと変数を辞書で保持 例: 費用を表すパラメータ cost を辞書で保持 cost = {} cost[ “small” ] = 10 cost[ “large” ] = 100 x = {} #変数オブジェクトの生成 for i in cost: #キーによる反復 x[i]=model.addVar() => 変数 x[ “small” ] と x[ “large”] が生成される

15 辞書の使用例 (2) 制約 cost[ “small]* x[ “small” ] cost[ “large”]* x[ “large”] <=80 をモデルオブジェクト model に追加 model.addConstr( sum( cost[i]*x[i] for i in cost) <= 80 )


Download ppt "最適化ソルバーのための Python言語入門"

Similar presentations


Ads by Google