« ミクロ経済学の我流シミュレーション その1 基礎経済モデル | トップページ

2018年9月 9日 (日)

ミクロ経済学の我流シミュレーション その2 バランス戦略

バランスを取る


その1では、経済がよくなるよう利益に関してスコアを最小化するよう最適化していったわけだが、もう少し一般的に、複数のプレイヤーがいて、それぞれがスコアを最小化しようとしていることを考えたい。

それぞれのプレイヤーが独立ならば、それぞれのスコアを足し合わせたものを最小化すれば、その要素に含まれるプレイヤーごとのスコアも最小化しているはず…となる。

もし、プレイヤーどうしに利害の対立があれば、どうすればよいか。利害が重なるところは、それぞれの力が「釣り合う」ところで決まるとでも考えるとすれば、それはバランスに関するパラメータを新たに定義し、それをスコアに加えることになる。そうではなく、もし、力関係が決まっていて、常にどちらかの利益を重視するなら一方だけをスコアに加えたり、バランスを取るときに重みを付けたり、運で決まるというなら、ランダム性を加えたりすればよい。

バランスを取るときは、具体的には、スコアの分散などをスコアに加えることになる。ある程度、バランスを見るが利益の最大化を行うといった場合、利益とバランスのどちらをとるか、スコアの分散などを加えるときの係数で調整することになる。

今回は、基本、バランスを取るために必需品・贅沢品・原料の各分野のごとの利益に関して分散を取り、それをスコアに足すことにした。
micro_economy_3.py は各分野ごとの企業の利益率の平均値に関してバランスを取っている。利益に関する部分のみスコアを取り出すと、r_N, r_L, r_I をそれぞれ必需品・贅沢品・原料の平均利益率とすると

  スコア1 = - mean([r_N, r_L, r_I]) + λ * variance([r_N, r_L, r_I])


とする。ここで λ は定数(または r_* に関する変数でもよいかもしれないが…)で、いろいろ試した結果 λ = 100.0 としている。

さらに、スコアには労働需要と労働供給に関する部分を足さないといけない。よってスコアには次のような項を足さないといけない。

  スコア2 = μ * (労働需要 - 労働供給) ** 2


この μ も少しだけいろいろ試した結果 μ = 0.01 とすることにした。上のスコア1がだいたい小数点第1位くらいの数字になるため、それより大きければよいかと思ったが、あまり大き過ぎても動きが封じられるようで、いけないらしい。

  スコア = スコア1 + スコア2


実行結果は省略するが、micro_economy_2.py で導入した新規貯蓄を強制的に残す措置は必要なくなった。その1の実験で否定されたように思われた「贅沢品の利益の最適化が効いて新規貯蓄はある程度、確保されるだろうと想定」したことは必ずしも間違っていなかったようだ。

初期値にもよるが、その1と同じ初期値であれば、かなり安定した経済になる。 (失業者の初期値が 300 ではなく 200 にすると不安定になるようだ。なぜ?)


贅沢品の価値を上げ、経済を成長させる。


新規参入は一分野につき1期1社ずつしかできないのがこのモデルだった。そして、企業は固定資本を10期で償却して退場する。そのため、一分野の最大の企業数は 11 を超えることはない。

さきの micro_economy_3.py ではどの分野も企業数が 10 か 11 になるのが常だった。経済を分析するなら、ずっと 10 か 11 ではなく、中間的な値(5 とか 6 とか)を取るような状態が現れるようにしたい。

このモデルにおいて、経済が「成長する」とはどのようなことだろう? 労働者の所得が上がることだろうか? しかし、必需品の価格が上がればそれは意味がなくなる。

必需品は高くならないようにということであれば、新規貯蓄が増えることだろうか? その場合、贅沢品がよく売れるようになるはずである。よって、贅沢品の利益率が大きくなればいいのだろうか? しかし、バランス戦略を取れば、贅沢品だけ利益が増えるわけにはいかない。

贅沢品が他に比べて高くなればよいのではないか? つまり、贅沢品がより原料を多く使うようになればいいのではないか? そうだ! そうしよう…と改造したのが micro_economy_4*.py のシリーズである。

すべての分野の企業数が 5 を超えたとき、贅沢品の原料率(プログラム内では ingredientsLevelForLuxuries)が 1 から上に変化するとし、それも最適化の数値に加えることにした。

  スコア3 = - (贅沢品の原料率 - 1)
    ただし、贅沢品の原料率 > 1 で、贅沢品の生産が 0 でなく、
    贅沢品の企業の利益率が正である企業が存在し、
    各分野それぞれ企業数が 5 を超える場合に限る。
    そうでないときは、
    スコア3 =1000 * (贅沢品の原料率 - 1) ** 2

  スコア = スコア1 + スコア2 + スコア3


原料率が 1 より上に変化をはじめると、そこにスコアの「エネルギー」がふりむけられるため、企業の利益率は自然に下がり、「市場利子率」と目される標準的な利益率 6 %に近くなり新規参入がなかなか起きなくなると考えた。

ところがこれがなかなかうまくいかない。そのため、各分野の利益率の計算方法をいろいろみなおした。

利益に偏りがあると新規参入が起きるのが実際の経済であろう。そのためには単純に利益率を平均したものではなく、一分野の総利益(gross profit)を総コストで割ったものをバランスすれば、新規参入が起きやすく企業数のバランスが取りやすいと考えて作ったのが、micro_economy_4gp.py である。

新規参入は最大利益率で判定されるので、各分野の最大利益率でバランスするようにしたのが micro_economy_4mx.py である。

まぁ、そうはいいながら、いちおう試しに作っておくかと、平均利益率でバランスするようにしたのが micro_economy_4mn.py である。

企業数がそれぞれ 5 を超えたら、あとは「市場利子率」を超えてえればよく、それ以上は問う必要はないのではないか? 企業数が少ないうちは平均利益率でバランスするが、すべて企業数が 5 を超えたら、r_* が「市場利子率」を超えた分は丸めて r_* を「市場利子率」と等しくしてバランスを取る。そのようにしたのが micro_economy_4.py である。

実験してみる。ループは 100 回してみた。意外なことに一番まともな結果を残したのが、micro_ecomony_4mn.py で、次に micro_ecomony_4.py で、期待していた micro_economy_4gp.py はむしろ結果がよくなかった。

「結果がよくなかった」とは、何かのパラメータがほぼ 1 や 1000 になって経済がクラッシュした状態になり、(労働需要 - 労働供給) がプラスマイナス 100 を超えることが繰り返され、そこから復活しなかったり、贅沢品の売り個数が 0 になった状態が継続するようになったりすることを言っている。

「結果がよい」ものも、贅沢品の原料率は予想に反して激しく上下動することはなく、じわじわと上昇していくトレンドとなった。(経済がクラッシュしたときや経済が不調になって企業数が減ったときなどは 1 に戻るが。)

ここで、もう少し改良することを考えてみる。贅沢品の原料率を増加させても、原料の賃金率(workersLevel)が低くならなければ、結局、贅沢品の個数を下げることで対応するしかないのではないか? そこで、すべての分野の企業数が 5 を超えたとき全体の賃金率に 0.95 をかけるようにしてみた。それを試すのが、micro_economy_4*.py の --update-workers-level オプションである。

しかし、確かに結果は変わるが、より不安定になるだけ、どのような改善があるのか私は観測できなかった。


とりあえずの結論


さて、今回やったことの実際の経済に関する示唆は何なのか、よくわからない。

バランスを取るとしたわけだが、実際の経済では経済力の釣り合いはあるとしても多業種間でバランスを取るような動きは基本ない。銀行などがもしかするとやっているのかもしれないが、実際にあるのは、業種間のバランスより、むしろ、過去実績とのバランスだろう。そういう面を取り入れるモデルにしたほうがよかったかもしれない。今後の課題としたい。

経済がつぶれたところから自動的に回復しない。0 や 1 や 1000 などのパラメータの境界に近付いたとき経済やスコアをどうすればいいのか、もっと詰めて考えるべきだろう。また、それと関連しているのだと思うが、初期値を変えるとかなり不安定になることがある。このあたり、どういうとき不安定になるのか、解析できればカッコイイのだが、私にはどうも難しい。

最適化の本を読むと難しいことが書いている。本来は、(偏)微分等を考えて、極小が最小になってるか等を確かめないといけないのかもしれないが、やってない。贅沢品の原料率がジワジワ上がるというのは、少し異常な気がするので、最適化そのものがうまくいっていない予感がある。

上で λ や μ を実験からなんとなく指定したが、そういうパラメータを最適化するよう人工知能(AI)を使うとかできたらカッコイイ。そういうパラメータも含めて最適化するようなループがかけるべきなのだが、私にはできそうにない。これからも私自身、人工知能に関する勉強等はするつもりだが、他の人がやっていただけるとありがたい。い。

または、今回までぐらいの内容はきっとどこかで誰かがやっているはずなので、参考文献を教えていただけたらと切に願う。

その1の反応はほとんどなく、この記事を読んでくださる方も稀だろう。読んでいただいた方には感謝しかない。

とにかく、ありがとうございました。


参考


アップデートの情報等は micro_economy_3*.py や micro_economy_4*.py についても、その1のほうで見てください。

ライセンス


パブリックドメイン。 (数式のような小さなプログラムなので。)

自由に改変・公開してください。


アーカイブ


今回の配布物は以下の zip ファイル。更新があれば下のリンクの中身は最新のものに置き変わっているはず。micro_economy_1.py と micro_economy_1sd.py と micro_economy_2.py と micro_economy_3*.py と micro_economy_4*.py が入っている。

更新: 2018-09-09
初公開: 2018年09月09日 22:39:47
最新版: 2018年09月09日 22:39:47

2018-09-09 22:39:48 (JST) in 経済学 | | コメント (0) | トラックバック (0)

経済学」カテゴリ内の最近の記事

批評や挨拶のためのネットコミュニティ

  • はてなブックマーク(って何?) このエントリーをはてなブックマークに追加 このエントリーを含むはてなブックマーク このエントリーを含むはてなブックマーク
  • Twitter (って何?)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/93568/67149170

トラックバックのポリシー

他サイトなどからこの記事に自薦された関連記事(トラックバック)はまだありません。
» JRF の私見:税・経済・法:ミクロ経済学の我流シミュレーション その2 バランス戦略 (この記事)

コメント

コメントを書く



(メールアドレス形式)


※匿名投稿を許可しています。ゆるめのコメント管理のポリシーを持っています。この記事にまったく関係のないコメントはこのリンク先で受け付けています。
※暗号化パスワードを設定すれば、後に「削除」、すなわち JavaScript で非表示に設定できます。暗号解読者を気にしないならメールアドレスでもかまいません。この設定は平文のメールで管理者に届きます。
※コメントを書くために<b>ボールド</b>、<pre>詩文やソースコード</pre>、<a href="">リンク</a>、その他のHTMLタグが使えます。また、漢字[かんじ]でルビが、[google: キーワード] で検索指定が使えます。


ランダムことわざ: 身から出た錆。