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

Slides:



Advertisements
Similar presentations
アルゴリズムとプログラミン グ (Algorithms and Programming) 第6回:クラスとインスタンス クラスの宣言 アクセス修飾子 インスタンスの生成 (new キーワード) this キーワード フィールドとメソッドの実際の定義と使い 方 クラスの宣言 アクセス修飾子 インスタンスの生成.
Advertisements

「 R 入門」 第6章:リストとデータフレーム 6.3 データフレーム 発表日:10月30日 担当者:脇坂恭志郎.
第 2 章 数値の入力と変数 scanf と変数をやります 第 2 章 数値の入力と変数 1. 以下のプログラムを実行してみよう  C 言語では文の最後に「 ; 」(セミコロン)が付きます 第 2 章 数値の入力と変数 2 #include int main() { int x; x = 3; printf("x.
Scala + Liftフレームワーク その2.
関数(静的メソッド:static method)
プログラムのパタン演習 解説.
プログラミング言語としてのR 情報知能学科 白井 英俊.
クラスその2∽(アドバンス)∽ 福岡工業大学  梶原 大慈       .
スレッドの同期と、スレッドの使用例 スレッドの同期 Lockオブジェクト: lockオブジェクトの生成
ファーストイヤー・セミナーⅡ 第8回 データの入力.
最短路問題をGurobiで解こう! 流通最適化工学 補助資料.
プログラミングパラダイム さまざまな計算のモデルにもとづく、 プログラミングの方法論 手続き型 関数型 オブジェクト指向 代数 幾何.
アルゴリズムとデータ構造1 2007年6月12日
Lightweight Language Weekend ls-lRシェル
多重ループ 繰り返し構造:補足事項 第8回目 [6月12日、H.15(‘03)] 本日のメニュー 1)前回の課題について
C言語 配列 2016年 吉田研究室.
情報工学概論 (アルゴリズムとデータ構造)
Bottle/Pythonによる Webアプリ入門
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
条件式 (Conditional Expressions)
1章前半.
配列の扱い、探索 有効範囲と記憶域期間 第12回 [7月10日、H.15(‘03)] 今日のメニュー 1 前回の課題の復習
問題 1 キーボードから入力した数の合計を計算するプログラムを 作成せよ。最初に、何個の数を入力するかその数を入力 するようにする。
JSFによるWebアプリケーション開発 第6回
エンタープライズアプリケーション II 第7回 / 2006年7月9日
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
C#とC++とオブジェクト指向 上甲 健史.
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
ピカチュウによる オブジェクト指向入門 (新版)
情報処理3 第5回目講義         担当 鶴貝 達政 11/8/2018.
~手続き指向からオブジェクト指向へ[Ⅱ]~
プログラミング2 関数
ORの手法(組合せ最適化) 社会情報特講Ⅲ 大堀隆文(非常勤講師).
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
PROGRAMMING IN HASKELL
関数と配列とポインタ 1次元配列 2次元配列 配列を使って結果を返す 演習問題
東京大学人間環境学専攻 奥田・橋本研究室 修士1年 相良 光志
地域情報学 C言語プログラミング 第5回 ポインタ、関数、ファイル入出力 2017年11月17日
メタ解法設計者のための Python超入門
変数,式,関数,クラス,コンストラクタ, クラスの属性アクセス,メソッド,親クラ スからの継承
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
第4回 線形計画 2000年11月 第4回 線形計画.
アルゴリズムとデータ構造 2011年7月8日課題の復習
演習07-0 “Hello\n” “World!\n”と
C言語 はじめに 2016年 吉田研究室.
第8回放送授業.
15.cons と種々のデータ構造.
統計ソフトウエアRの基礎.
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
アルゴリズムからプログラムへ GRAPH-SEARCH
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
C#プログラミング実習 第3回.
情報基礎演習B 後半第2回 担当 岩村 TA 谷本君.
Solver for COnstraint Programming:スコープ Pythonモジュールの使い方
Action Method の実装 J2EE II 第9回 2004年12月2日.
第5回 プログラミングⅡ 第5回
情報処理Ⅱ 第7回 2004年11月16日(火).
JAVA入門⑥ クラスとインスタンス.
コンパイラ 2012年10月11日
演習00-0 “Hello\n” “World!\n”と
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
PROGRAMMING IN HASKELL
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
君ならどうする – ls-lRシェル Python編
JSFによるWebアプリケーション開発 第7回
第2章 数値の入力と変数 scanfと変数をやります.
計算技術研究会 第5回 C言語勉強会 関数(function)を使う
プログラミング演習I 補講用課題
Presentation transcript:

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

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

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

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

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

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

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

リスト内包表記 リストを 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] を返す

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

合計を計算するための記法 (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] を返す

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

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

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

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

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