ミクロ経済学の我流シミュレーション その4 最適化の失敗
■ |
概要
|
これまでも最適化関数が失敗(fail)を返すことはあった。今回はそのことではなく、最適化が成功したとしても、それが本当に全体として最適最良のものになっているかを問う。結論としては、そうなってなかったが、大きな問題ではないと私は考える。
■ |
実験
|
micro_economy_5.py を元に実験する。最適化にはこれまで Nelder-Mead 法を使ってきた。Nelder-Mead 法は初期値を必要として、そこから「アメーバ」のように動いて最適値を探り出す方法と言われる。
初期値にはこれまで、直近の最適化で得られた価格情報を(環境が変わる次の回でも)渡していた。
それを、直近も含め過去のデータすべての中で一番スコアが良いものを初期値とすることを試してみる。そうしてから初期値を選び最適値を得たものと、これまで通り直近のものを初期値として選び最適値を得たものの二者の中で良いほうを結果として受け容れることにする。
そうしたものが exp_01_06.py (数値が 1-6 からはじまるのはそれ以外の実験を他に私的には行っているから。)である。その実行結果は次のようになる。
$ python exp_01_06.py Acronyms: W: Wages, N: Necessaries, L: Luxuries, I: Ingredients. OptForStep: iterated 200 times score=-0.22109930631128658 Companies N:2, L:2, I:2 [Type] [OwnerId] [ProfitRate] N 1 0.34031978914966 N 2 0.22217046351487754 L 1 -0.0028149279337999684 L 1 0.06520801294283221 I 0 0.2824687838054689 I 2 0.24272845926872333 Score -0.22109930631128658 vs -0.22109930631128658 Increase of Social Debt: -16556.05650042524 Increase of Total Savings: -1345.3207072601544 Price W:25.19634074497627, N:9.83125002484438, L:16.006028640964608, I:15.948455079173653 Worker's Savings Increase: 5.3347579115945685 Supply of Labors = 657 (Demand - Supply) of Labors = -0.24971326478521405 Profit Rate N:0.34031978914966, L:0.06520801294283221, I:0.2824687838054689 Product N:2030.3512470037679, L:289.0, I:1329.297412974788 Savings mean:8.691460568853538, variance:37.207520536597116 : :(途中省略) : OptForStep: iterated 153 times score=-0.2593138141848632 Companies N:7, L:6, I:6 [Type] [OwnerId] [ProfitRate] N 1 0.2747278977332604 N 2 0.21138034912609832 N 3 0.23459753270847028 N 1 0.2693049233500547 N 3 0.2946833927871138 N 1 0.3316038641762035 N 0 0.22797953099094675 L 1 0.2666985290367451 L 3 0.30970641180107616 L 1 0.3428670146639742 L 2 0.26821562503211716 L 1 0.31257002327163136 L 4 0.21041516397626298 I 2 0.15590041629842527 I 4 0.08507144818545924 I 1 0.12304717500370566 I 4 0.04492497557033961 I 1 0.0807545128442661 I 3 0.09932622085271332 Score -0.2593138141848632 vs -0.25329423686151115 Increase of Social Debt: -16349.315158567348 Increase of Total Savings: 38.13528744313044 Price W:25.366061894534468, N:9.078691228352632, L:18.591647606103592, I:14.253770379788111 Worker's Savings Increase: 6.196911185913805 Supply of Labors = 663 (Demand - Supply) of Labors = -0.04818838454480101 Profit Rate N:0.3316038641762035, L:0.3428670146639742, I:0.15590041629842527 Product N:2122.0015063404117, L:219.0, I:1582.73660071398 Savings mean:8.610848405403493, variance:36.75617888154675 : :(途中省略) : OptForStep: iterated 135 times score=-0.26223714004105286 Companies N:8, L:7, I:7 [Type] [OwnerId] [ProfitRate] N 1 0.29244396712184145 N 2 0.23566608446312087 N 3 0.2593502229886645 N 1 0.294076625706582 N 3 0.32070440760596003 N 1 0.3577983350417849 N 0 0.2528094441634307 N 1 0.28655501693400803 L 1 0.256128639613569 L 3 0.3005402456307164 L 1 0.33232295285681723 L 2 0.2602145395353427 L 1 0.3024347324452003 L 4 0.20259364440895364 L 1 0.23119649304309295 I 2 0.15813075508962302 I 4 0.08722674093523698 I 1 0.1245850476434361 I 4 0.04679740182223427 I 1 0.08219542336210783 I 3 0.10112683282664274 I 1 0.13853618068829995 Score -0.26223714004105286 vs -0.255215643281806 Increase of Social Debt: -14475.106770311046 Increase of Total Savings: -516.485131217235 Price W:25.51490913416877, N:9.345638724259391, L:18.624829618030073, I:14.393997769293929 Worker's Savings Increase: 6.130244478898561 Supply of Labors = 664 (Demand - Supply) of Labors = -0.001307116232737826 Profit Rate N:0.3577983350417849, L:0.33232295285681723, I:0.15813075508962302 Product N:2084.5646352641784, L:247.0, I:1606.6156841634006 Savings mean:8.114132625035046, variance:23.675034764129972 : :(途中省略) : OptForStep: iterated 167 times score=-0.2560672662065596 Companies N:11, L:11, I:9 [Type] [OwnerId] [ProfitRate] N 3 0.3640884287024172 N 1 0.3946057950615205 N 3 0.4322948896683518 N 1 0.46682642686984094 N 0 0.367835812424522 N 1 0.39669951427370914 N 2 0.2640438213473595 N 3 0.29072550684964266 N 2 0.14813175873515116 N 3 0.17343654406118805 N 0 0.1938152752830297 L 3 0.33051419997034476 L 1 0.3320902869361515 L 2 0.30587979100695467 L 1 0.32422862694991267 L 4 0.26864783685305454 L 1 0.2656002474718675 L 2 0.1920078240597659 L 1 0.2208767673195521 L 0 0.19143950648297225 L 1 0.21574723260818923 L 2 0.10851988484292231 I 4 0.031161567629689052 I 1 0.06388648796920383 I 4 -0.002341381853045759 I 1 0.02958560932021403 I 3 0.04887358910124645 I 1 0.08388912418317676 I 0 0.03657719650007993 I 1 0.07058542580218657 I 3 0.09042968980867483 Score -0.2559778603714225 vs -0.2560672662065596 Increase of Social Debt: -9920.299195863583 Increase of Total Savings: 541.3437302681468 Price W:25.96611076893603, N:9.745238991899008, L:19.113359823855383, I:13.329027833003991 Worker's Savings Increase: 6.304695332917202 Supply of Labors = 671 (Demand - Supply) of Labors = -0.09835948907266356 Profit Rate N:0.46682642686984094, L:0.3320902869361515, I:0.09042968980867483 Product N:2027.6283146698324, L:200.99999999999997, I:1937.1168475570857 Savings mean:8.85893961585377, variance:33.969556961201334 : :(途中省略) : OptForStep: iterated 158 times score=-0.2433030119521747 Companies N:11, L:11, I:9 [Type] [OwnerId] [ProfitRate] N 2 0.1600320191309793 N 3 0.18228690986983306 N 0 0.20277166573081373 N 3 0.22667364416543498 N 1 0.2511043715230468 N 0 0.21061450833284473 N 1 0.2364013846467154 N 2 0.09921515655925044 N 1 0.1260993407149877 N 3 0.1536828247229325 N 1 0.178729562741382 L 0 0.3887094633547608 L 1 0.353971109048702 L 2 0.31760689540810577 L 3 0.35058949736999684 L 4 0.23238375825999893 L 3 0.24009847791837208 L 1 0.23446702058111255 L 3 0.3080631152985971 L 0 0.16937497529905748 L 3 0.20180940426476657 L 1 0.21070308384738717 I 3 0.034250635937710945 I 3 0.051167999240398526 I 1 0.08520542680289599 I 2 0.01855621240151779 I 1 0.05148110554295586 I 3 0.07229005354732305 I 0 0.0720739090148316 I 3 0.08960282963483238 I 1 0.1241557956609432 Score -0.2433030119521747 vs -0.24327241340226088 Increase of Social Debt: -16726.428482241055 Increase of Total Savings: 112.31802111858997 Price W:26.80642123621469, N:9.416033569902083, L:22.444757607895305, I:12.393553781437365 Worker's Savings Increase: 7.426859778703818 Supply of Labors = 682 (Demand - Supply) of Labors = -0.030253556900220246 Profit Rate N:0.2511043715230468, L:0.3887094633547608, I:0.1241557956609432 Product N:2068.4356231538964, L:221.00000000000003, I:2784.1110933127125 Savings mean:9.284616526329645, variance:34.629390242175184
Score A vs B と書いているところに着目する。A が、過去すべてのデータからの最良のスコアを初期値にしたもので、B が直近のスコアを初期値にしたものである。だいたい A と B が同じか、A のほうが勝っている(スコアが少ない)ことが多いが、まれに B のほうが勝つことがある。
つまり、最適化は常に本当の最適値をうまく求められているわけではないことを少なくとも示している。
過去のすべてのデータからの最良のスコアの替わりに、各価格が 1 から 100 までのランダムに選んでその価格情法の配列 10 個から最良のものを選んでの最適化にすることも実験してみた。exp_01_06.py に --opt-try=random のオプションを与えたものがそうなる。
するとさすがにランダムの側が勝つことはなかった。
最適化の戦略をもっと一般的なものにしたほうが良いのかもしれない。SciPy 1.2 には、Global Optimization というものがある。これを利用してみる。--opt-try に basinhopping の場合は bh、differential_evolution の場合は de、shgo の場合は shgo、dual_annealing は da を与えると、先の Score A vs B の A 側がそれで求めた最適値になる。これらは基本的には数値の境界(bound)を与える必要があり、それは 1 から 100 の間とした。
なお、bh には境界の替わりに初期値を与えるものがあり、それは bh0 で指定できるようにした。また、da には境界に加えて初期値を与えるものがあり、それは da0 で指定できるようにした。これらに与える初期値は直近のデータである。
試したところ、bh と shgo はうまくいかないが、それ以外は、直近のデータから Nelder-Mead 法で求めたものより良くなることがあったが、常に良くなるわけではなく、Nelder-Mead 法のほうが良いこともあった。しかも、「発散」も、大きな変動もなかった。
shgo はとてつもなく早いが、うまくいってないのはパラメータをもう少し見直すべきなのかもしれない。が、私は最適化に詳しくないので、その追求は今後の課題としたい。
bh や shgo の失敗を鑑みると、初期値も与えていない de や da が成功することもあるのは逆にすごいのかもしれない。それらにおいても大きな変動がなかったのは、モデルの安定性を示しているように思う。
なお、アーカイブには exp_01_06.py の実行結果をダンプした exp_01_06.log を付けた。
■ |
結論
|
「最適化」は本当の最適化になっていなかった。
しかし、「最適化」が本当の最適化になっていないから、すなわち間違いとは言い切れない。
それは実際の経済の「最適化」がどのように行われているかによるからだ。
もちろん、次に社会は「どのように最適化しているか」が問われるのかもしれない。実際には、銀行などが何らかの動きをしている可能性はあるが、今回のような最適化アルゴリズムそのものは動いていないと見るべきだろう。そのあたりの考察は今後の課題…おそらくは他者に委ねたい…。
■ |
参考
|
(なお、上の実験結果および exp_01_06.log はバージョン 0.0.5 によるもの。)
■ |
ライセンス
|
パブリックドメイン。 (数式のような小さなプログラムなので。)
自由に改変・公開してください。
■ |
アーカイブ
|
今回の配布物は以下の zip ファイル。更新があれば下のリンクの中身は最新のものに置き変わっているはず。exp_01_06.py と exp_01_06.log が入っている。
更新: | 2019-05-24 |
初公開: | 2019年05月24日 23:07:06 |
最新版: | 2020年02月13日 06:37:06 |
2019-05-24 23:07:01 (JST) in 経済学 | 固定リンク | コメント (0)
コメント