SlideShare une entreprise Scribd logo
1  sur  13
数理最適化ソルバー 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 を最適化する
リスト
• リストは [ ] で生成
   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
   14
   26
   37
  と出力
リスト内包表記
• リストを for 文を中に入れて生成
  L= [ i for i in range(5) ]
  => [0 , 1, 2 ,3, 4] を返す

• 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
  )

Contenu connexe

Tendances

パターン認識第9章 学習ベクトル量子化
パターン認識第9章 学習ベクトル量子化パターン認識第9章 学習ベクトル量子化
パターン認識第9章 学習ベクトル量子化
Miyoshi Yuya
 

Tendances (20)

Infinite SVM [改] - ICML 2011 読み会
Infinite SVM [改] - ICML 2011 読み会Infinite SVM [改] - ICML 2011 読み会
Infinite SVM [改] - ICML 2011 読み会
 
第8章 ガウス過程回帰による異常検知
第8章 ガウス過程回帰による異常検知第8章 ガウス過程回帰による異常検知
第8章 ガウス過程回帰による異常検知
 
凸最適化 〜 双対定理とソルバーCVXPYの紹介 〜
凸最適化 〜 双対定理とソルバーCVXPYの紹介 〜凸最適化 〜 双対定理とソルバーCVXPYの紹介 〜
凸最適化 〜 双対定理とソルバーCVXPYの紹介 〜
 
Deep Learning を実装する
Deep Learning を実装するDeep Learning を実装する
Deep Learning を実装する
 
yyoshida thesis
yyoshida thesisyyoshida thesis
yyoshida thesis
 
計算論的学習理論入門 -PAC学習とかVC次元とか-
計算論的学習理論入門 -PAC学習とかVC次元とか-計算論的学習理論入門 -PAC学習とかVC次元とか-
計算論的学習理論入門 -PAC学習とかVC次元とか-
 
20170422 数学カフェ Part1
20170422 数学カフェ Part120170422 数学カフェ Part1
20170422 数学カフェ Part1
 
誤差逆伝播法の計算(ディープラーニング)
誤差逆伝播法の計算(ディープラーニング)誤差逆伝播法の計算(ディープラーニング)
誤差逆伝播法の計算(ディープラーニング)
 
はじぱた7章F5up
はじぱた7章F5upはじぱた7章F5up
はじぱた7章F5up
 
CVIM#11 3. 最小化のための数値計算
CVIM#11 3. 最小化のための数値計算CVIM#11 3. 最小化のための数値計算
CVIM#11 3. 最小化のための数値計算
 
SGD+α: 確率的勾配降下法の現在と未来
SGD+α: 確率的勾配降下法の現在と未来SGD+α: 確率的勾配降下法の現在と未来
SGD+α: 確率的勾配降下法の現在と未来
 
自然言語処理のための機械学習入門1章
自然言語処理のための機械学習入門1章自然言語処理のための機械学習入門1章
自然言語処理のための機械学習入門1章
 
R による文書分類入門
R による文書分類入門R による文書分類入門
R による文書分類入門
 
文字列カーネルによる辞書なしツイート分類 〜文字列カーネル入門〜
文字列カーネルによる辞書なしツイート分類 〜文字列カーネル入門〜文字列カーネルによる辞書なしツイート分類 〜文字列カーネル入門〜
文字列カーネルによる辞書なしツイート分類 〜文字列カーネル入門〜
 
Random Forestsとその応用
Random Forestsとその応用Random Forestsとその応用
Random Forestsとその応用
 
科学技術計算関連Pythonパッケージの概要
科学技術計算関連Pythonパッケージの概要科学技術計算関連Pythonパッケージの概要
科学技術計算関連Pythonパッケージの概要
 
Random Forests
Random ForestsRandom Forests
Random Forests
 
問合せ最適化インサイド
問合せ最適化インサイド問合せ最適化インサイド
問合せ最適化インサイド
 
Practical recommendations for gradient-based training of deep architectures
Practical recommendations for gradient-based training of deep architecturesPractical recommendations for gradient-based training of deep architectures
Practical recommendations for gradient-based training of deep architectures
 
パターン認識第9章 学習ベクトル量子化
パターン認識第9章 学習ベクトル量子化パターン認識第9章 学習ベクトル量子化
パターン認識第9章 学習ベクトル量子化
 

Similaire à Python opt

第3回BDD勉強会
第3回BDD勉強会第3回BDD勉強会
第3回BDD勉強会
zakihaya
 
Rで学ぶデータマイニングI 第8章〜第13章
Rで学ぶデータマイニングI 第8章〜第13章Rで学ぶデータマイニングI 第8章〜第13章
Rで学ぶデータマイニングI 第8章〜第13章
Prunus 1350
 
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと 12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
Haruka Ozaki
 
初心者講習会資料(Osaka.r#6)
初心者講習会資料(Osaka.r#6)初心者講習会資料(Osaka.r#6)
初心者講習会資料(Osaka.r#6)
Masahiro Hayashi
 
初心者講習会資料(Osaka.R#5)
初心者講習会資料(Osaka.R#5)初心者講習会資料(Osaka.R#5)
初心者講習会資料(Osaka.R#5)
Masahiro Hayashi
 

Similaire à Python opt (20)

Pythonintro
PythonintroPythonintro
Pythonintro
 
Pythonで始めるDropboxAPI
Pythonで始めるDropboxAPIPythonで始めるDropboxAPI
Pythonで始めるDropboxAPI
 
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
 
第3回BDD勉強会
第3回BDD勉強会第3回BDD勉強会
第3回BDD勉強会
 
Rで学ぶデータマイニングI 第8章〜第13章
Rで学ぶデータマイニングI 第8章〜第13章Rで学ぶデータマイニングI 第8章〜第13章
Rで学ぶデータマイニングI 第8章〜第13章
 
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと 12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
 
Haskell超入門 Part.1
Haskell超入門 Part.1Haskell超入門 Part.1
Haskell超入門 Part.1
 
20170923 excelユーザーのためのr入門
20170923 excelユーザーのためのr入門20170923 excelユーザーのためのr入門
20170923 excelユーザーのためのr入門
 
初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)
 
初心者講習会資料(Osaka.r#6)
初心者講習会資料(Osaka.r#6)初心者講習会資料(Osaka.r#6)
初心者講習会資料(Osaka.r#6)
 
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
 
LDA入門
LDA入門LDA入門
LDA入門
 
言語処理系入門3
言語処理系入門3言語処理系入門3
言語処理系入門3
 
Q13
Q13Q13
Q13
 
たのしい関数型
たのしい関数型たのしい関数型
たのしい関数型
 
初心者講習会資料(Osaka.R#5)
初心者講習会資料(Osaka.R#5)初心者講習会資料(Osaka.R#5)
初心者講習会資料(Osaka.R#5)
 
JavaScriptクイックスタート
JavaScriptクイックスタートJavaScriptクイックスタート
JavaScriptクイックスタート
 
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
 
Python勉強会3-コレクションとファイル
Python勉強会3-コレクションとファイルPython勉強会3-コレクションとファイル
Python勉強会3-コレクションとファイル
 
純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門
 

Plus de Mikio Kubo (13)

Hl20160929
Hl20160929Hl20160929
Hl20160929
 
ここが変だよ人道支援ロジスティクス
ここが変だよ人道支援ロジスティクスここが変だよ人道支援ロジスティクス
ここが変だよ人道支援ロジスティクス
 
サプライ・チェイン・アナリストになるために
サプライ・チェイン・アナリストになるためにサプライ・チェイン・アナリストになるために
サプライ・チェイン・アナリストになるために
 
Why python
Why pythonWhy python
Why python
 
Why python
Why pythonWhy python
Why python
 
ピカチュウによるPythonオブジェクト入門2
ピカチュウによるPythonオブジェクト入門2ピカチュウによるPythonオブジェクト入門2
ピカチュウによるPythonオブジェクト入門2
 
ピカチュウによるPythonオブジェクト入門
ピカチュウによるPythonオブジェクト入門ピカチュウによるPythonオブジェクト入門
ピカチュウによるPythonオブジェクト入門
 
久保研究室とは
久保研究室とは久保研究室とは
久保研究室とは
 
Mickey mouseに会うために
Mickey mouseに会うためにMickey mouseに会うために
Mickey mouseに会うために
 
Scmbook5 e
Scmbook5 eScmbook5 e
Scmbook5 e
 
4章在庫の数理
4章在庫の数理4章在庫の数理
4章在庫の数理
 
Current trend
Current trendCurrent trend
Current trend
 
Python ehon1
Python ehon1Python ehon1
Python ehon1
 

Python opt