9月22日に
【初心者、中級者向け】最適化問題における遺伝的アルゴリズム(GA)をPythonで動かすハンズオン
https://liberal-arts-beginners.connpass.com/event/147304/
を聞いてきたので、メモ
資料
https://github.com/espeon011/ga
遺伝的アルゴリズム入門
今日の内容
・遺伝的アルゴリズム
・代表的開放
・遺伝的アルゴリズム
・Deap
最適化問題
・制約条件の下で関数値を最大化・最小化する問題
・よくある例は回帰分析
二次関数の最小化問題
・例 式 maximize subject to :
ラグランジェの未定乗数法を使って手でとくとか
最適化問題の種類
・線形計画問題
制約条件も目的関数も一時式で描けるもの
・非線形計画問題
線形計画問題でないもの
・整数計画問題
変数が整数の場合、解くのが難しいが、現実の問題をモデリングしやすい
→ナップザック問題
最適化問題の解き方
線形計画問題
単体法、内点法他
非線形計画問題
勾配降下法:微分できる関数に限る
整数計画問題
分子限定法他
問題に合わせて適切に解き方を変える
→GAは何でも使える:メタヒューリスティック
メタヒューリスティック
・汎用性の高い発見的手法
遺伝的アルゴリズムの概要
1.探索範囲内に個体を生成
2.適応度の高い個体を選抜
3.親から子を作る
4.子に突戦変異
5.2に戻る
one max問題
個体 :01を値に取る長さ100の配列
目的関数:すべての成分の和→最大化
→すべてを1にすれば最大になるのは自明
・Deepを使う
fitnessmax
toolbox関数を登録できる(使わなくてもできる)
attr_bool:各成分の初期化
individual:各成分の初期化を使って初期値生成
population:個体生成→世代
目的関数:returnはタプルである必要性(答え1個でも ,をつける)
evaluate:何を目的関数にするか
世代交代の方法
mate :交叉2点を選んで、遺伝子を交換する 2点:cxTwoPoint 一様交叉もある
mutate:突然変異 matFlipBit突然変異させる
select:親の厳選 selTournament トーナメント 3人ランダムに選んで1人残す
toolbox.population:個体数を指定
CXPB,MUTPB,NGEN
CXPB:親を残す(変化せず)確率
MUTPB:突然変異を起こす確率
NGEN:世代数
今回の問題:個体 長さ2の配列(x、y)目的関数X^2+Y^2 範囲50~-50
イントロダクション
・クラスの作成
適応度の定義
個体の定義
・世代や個体を生成するための関数
individual 長さ指定:2
・個体の生成
ind = toolbox.individual()
・世代を生成
pop = toolbox.population(n=10)
・世代交叉関数
selectは同じ(トーナメント)
mute:ブレンド交叉
親2体がなす四角形を1+2α倍したものの中からランダム
mutate:突然変異:ガウス分布の乱数
・個体の交叉
・突然変異
・目的関数の設定
目的関数を定義
登録
目的関数を計算させる
多目的最適化問題
minimaize:f1(x),f2(x),…
subject to: x∈E
→トレードオフ関係があると、目的関数すべてを同時に最小化できない
パレートフロント:パレートフロント上の点はパレート最適という
→上位互換が存在しない
パレートフロントを近似したい
遺伝的アルゴリズムにおいて
世代作成
トーナメント→目的関数値が良いものを選んだ:2つの個体の優劣は比べられるとは限らない
子が作られて
突然変異する
→NSGA-Ⅱというトーナメント方式
NSGA-Ⅱでのトーナメントの流れ
1.完全上位互換がいない個体を取り出し、これらをrankが1であるとする
2.rank1の個体を除いたときに完全上位互換がいないものをrank2であるとする
3.以下繰り返し
→すべての個体にrankが定まる
4.混雑度を定める
rankが1の個体の集合R1 x∈R1
d(x)=min{f1(y)|f1(y) ≧ f1(x)}-max{f1(y)|f1(y) <= f1(x)}
+min{f2(y)|f2(y) ≧ f2(x)}-max{f2(y)|f2(y) <= f2(x)}
混雑度が大きいと混雑していない
一番端は∞
※一番近くの隣の点をとっていき、そのXの差分、Yの差分を足したものが混雑度
rankからとっていき、さいご、rankが同じなら、混雑度の大きいのをとってくる
A Fast and Elitist Multiobjective Genetic Algorithm: NSGA-II
https://www.iitk.ac.in/kangal/Deb_NSGA-II.pdf
ナップザック問題:重さとうれしさ
・初期世代
・制約を破ったらとてつもないペナルティを課す
・algorithms.eaMuPlusLambda(pop, toolbox, MU, LAMBDA, CXPB, MUTPB, NGEN, stats, halloffame=hof, verbose=True)
→計算してくれる
・パレートフロントが得られる
混雑度を測る方法
Hyper Volumeによる方法
・reference point rを定める
・ハイパーボリュームを定める
・xiを除いた時のハイパーボリュームの原書医療をxiの混雑度とする手もある
【初心者、中級者向け】最適化問題における遺伝的アルゴリズム(GA)をPythonで動かすハンズオン
https://liberal-arts-beginners.connpass.com/event/147304/
を聞いてきたので、メモ
資料
https://github.com/espeon011/ga
遺伝的アルゴリズム入門
今日の内容
・遺伝的アルゴリズム
・代表的開放
・遺伝的アルゴリズム
・Deap
最適化問題
・制約条件の下で関数値を最大化・最小化する問題
・よくある例は回帰分析
二次関数の最小化問題
・例 式 maximize subject to :
ラグランジェの未定乗数法を使って手でとくとか
最適化問題の種類
・線形計画問題
制約条件も目的関数も一時式で描けるもの
・非線形計画問題
線形計画問題でないもの
・整数計画問題
変数が整数の場合、解くのが難しいが、現実の問題をモデリングしやすい
→ナップザック問題
最適化問題の解き方
線形計画問題
単体法、内点法他
非線形計画問題
勾配降下法:微分できる関数に限る
整数計画問題
分子限定法他
問題に合わせて適切に解き方を変える
→GAは何でも使える:メタヒューリスティック
メタヒューリスティック
・汎用性の高い発見的手法
遺伝的アルゴリズムの概要
1.探索範囲内に個体を生成
2.適応度の高い個体を選抜
3.親から子を作る
4.子に突戦変異
5.2に戻る
one max問題
個体 :01を値に取る長さ100の配列
目的関数:すべての成分の和→最大化
→すべてを1にすれば最大になるのは自明
・Deepを使う
fitnessmax
toolbox関数を登録できる(使わなくてもできる)
attr_bool:各成分の初期化
individual:各成分の初期化を使って初期値生成
population:個体生成→世代
目的関数:returnはタプルである必要性(答え1個でも ,をつける)
evaluate:何を目的関数にするか
世代交代の方法
mate :交叉2点を選んで、遺伝子を交換する 2点:cxTwoPoint 一様交叉もある
mutate:突然変異 matFlipBit突然変異させる
select:親の厳選 selTournament トーナメント 3人ランダムに選んで1人残す
toolbox.population:個体数を指定
CXPB,MUTPB,NGEN
CXPB:親を残す(変化せず)確率
MUTPB:突然変異を起こす確率
NGEN:世代数
今回の問題:個体 長さ2の配列(x、y)目的関数X^2+Y^2 範囲50~-50
イントロダクション
・クラスの作成
適応度の定義
個体の定義
・世代や個体を生成するための関数
individual 長さ指定:2
・個体の生成
ind = toolbox.individual()
・世代を生成
pop = toolbox.population(n=10)
・世代交叉関数
selectは同じ(トーナメント)
mute:ブレンド交叉
親2体がなす四角形を1+2α倍したものの中からランダム
mutate:突然変異:ガウス分布の乱数
・個体の交叉
・突然変異
・目的関数の設定
目的関数を定義
登録
目的関数を計算させる
多目的最適化問題
minimaize:f1(x),f2(x),…
subject to: x∈E
→トレードオフ関係があると、目的関数すべてを同時に最小化できない
パレートフロント:パレートフロント上の点はパレート最適という
→上位互換が存在しない
パレートフロントを近似したい
遺伝的アルゴリズムにおいて
世代作成
トーナメント→目的関数値が良いものを選んだ:2つの個体の優劣は比べられるとは限らない
子が作られて
突然変異する
→NSGA-Ⅱというトーナメント方式
NSGA-Ⅱでのトーナメントの流れ
1.完全上位互換がいない個体を取り出し、これらをrankが1であるとする
2.rank1の個体を除いたときに完全上位互換がいないものをrank2であるとする
3.以下繰り返し
→すべての個体にrankが定まる
4.混雑度を定める
rankが1の個体の集合R1 x∈R1
d(x)=min{f1(y)|f1(y) ≧ f1(x)}-max{f1(y)|f1(y) <= f1(x)}
+min{f2(y)|f2(y) ≧ f2(x)}-max{f2(y)|f2(y) <= f2(x)}
混雑度が大きいと混雑していない
一番端は∞
※一番近くの隣の点をとっていき、そのXの差分、Yの差分を足したものが混雑度
rankからとっていき、さいご、rankが同じなら、混雑度の大きいのをとってくる
A Fast and Elitist Multiobjective Genetic Algorithm: NSGA-II
https://www.iitk.ac.in/kangal/Deb_NSGA-II.pdf
ナップザック問題:重さとうれしさ
・初期世代
・制約を破ったらとてつもないペナルティを課す
・algorithms.eaMuPlusLambda(pop, toolbox, MU, LAMBDA, CXPB, MUTPB, NGEN, stats, halloffame=hof, verbose=True)
→計算してくれる
・パレートフロントが得られる
混雑度を測る方法
Hyper Volumeによる方法
・reference point rを定める
・ハイパーボリュームを定める
・xiを除いた時のハイパーボリュームの原書医療をxiの混雑度とする手もある