今日の風景
貧乏人に再分配された(半額になった)寿司の風景です
はじめに
『ベットルームで群論を』という、みすず書房から出ている本の中に、「富が一定である閉鎖的なマーケットの中で、平等に富を持ったプレイヤーに対し、ランダムに得する人と損する人を決めていき、ある一定のステップを踏んだ結果、少数の金持ちと、多数の貧民の格差に分かれることになる」という話を載せていた。
この話に興味を持ったので、実際に、そういうモデルを作って、実際に閉鎖的なマーケットで各種のプレイヤーが損と得を繰り返していった結果、貧富の差が生まれるかどうかを実際に簡単なコードでシミュレーションしたいと思う。当然、このモデルは、実際の経済市場とは乖離したものであることは認めざるを得ないが、極端なモデルにも、何らかの示唆は、多分あると思う。
ルール
とはいえ、ざっくりとこのようなことを書いたとして、そもそものルールが如何なるものかを考えないといけないだろう。
ルールとしては、まず市場に存在するプレイヤーは、それぞれ同じお金を所持しているものとする。そして、各プレイヤーのお金の総体は、増減しない。つまり、プレイヤーの所持する金額のお金を合計すると、いつも同じ所持金になるということである。そして、そのプレイヤーでとりひきするときに、損するプレイヤーと、得するプレイヤーをランタムに決める。このモデルにおいては、借金は認められないので、得するプレイヤーは、損するプレイヤーの所持金を越えない範囲においてのみ得することができる。また、損得の率については、これまたランダムで決定されることにする。
直観的には、損するプレイヤーと、得するプレイヤーの決定がランダムであるならば、おそらくプレイヤー同士の金額はそれほど変わらず、ある時は金持ちになったり、あるいはある時は貧乏になったり、を繰りかえすであろうということが予測される。神の見えざる手はそれほど残酷では無いように思える。
実装と実行
というわけで、このモデルを実装した結果としては下のようになる:
class Market def initialize(players) @players = players end def players_print puts "================================================================" @players.each_with_index { |player, i| print "#{i}: #{player.money} "} puts "" end def money_flow win = player_choice lose = player_choice until define_player? win, lose win = player_choice lose = player_choice end if lose.money < win.money pay_money = (lose.money * (Random.rand(1..3) * 0.1)).to_i else pay_money = (win.money * (Random.rand(1..3) * 0.1)).to_i end lose.money -= pay_money win.money += pay_money end private def define_player? win, lose !(win.eql? lose) end def player_choice @players[Random.rand(@players.size)] end end class Player attr_accessor :money def initialize @money = 10000 end end players = Array.new(6) { Player.new } market = Market.new players market.players_print 1.upto(1000) do |x| market.money_flow if x % 10 == 0 market.players_print end end
これを実行した結果、次のようなログが得られる。
================================================================ 0: 10000 1: 10000 2: 10000 3: 10000 4: 10000 5: 10000 ================================================================ 0: 5923 1: 10756 2: 22849 3: 8422 4: 756 5: 11294 ================================================================ 0: 3599 1: 18123 2: 6177 3: 17843 4: 255 5: 14003 ================================================================ 0: 9336 1: 12062 2: 2571 3: 24749 4: 586 5: 10696 ================================================================ 0: 1300 1: 8344 2: 2839 3: 30751 4: 260 5: 16506 ================================================================ 0: 367 1: 5699 2: 3338 3: 35885 4: 308 5: 14403 ================================================================ 0: 230 1: 2834 2: 9082 3: 42119 4: 69 5: 5666 ================================================================ 0: 135 1: 2315 2: 8237 3: 44967 4: 67 5: 4279 ================================================================ 0: 120 1: 1830 2: 6367 3: 45974 4: 6 5: 5703 ================================================================ 0: 274 1: 542 2: 5036 3: 52045 4: 3 5: 2100 ================================================================ 0: 163 1: 609 2: 3204 3: 53927 4: 3 5: 2094 ================================================================ 0: 22 1: 363 2: 1518 3: 56812 4: 3 5: 1282 ================================================================ 0: 18 1: 483 2: 1090 3: 57799 4: 3 5: 607 ================================================================ 0: 10 1: 1278 2: 1909 3: 56636 4: 3 5: 164 ================================================================ 0: 3 1: 1454 2: 1912 3: 56468 4: 3 5: 160 ================================================================ 0: 3 1: 1697 2: 805 3: 57339 4: 3 5: 153 ================================================================ 0: 3 1: 727 2: 802 3: 58381 4: 3 5: 84 ================================================================ 0: 3 1: 229 2: 844 3: 58789 4: 3 5: 132 ================================================================ 0: 3 1: 160 2: 741 3: 59023 4: 3 5: 70 ================================================================ 0: 3 1: 40 2: 2131 3: 57702 4: 3 5: 121 ================================================================ 0: 3 1: 91 2: 2434 3: 57244 4: 3 5: 225
繰りかえした結果、ある一定の閾値を越えると、途端に富の偏りが出てくるようで、この場合であるならば、3に集中していることがわかる。
考察
上記のモデルにおいては、お金のフローは硬直していく傾向にある。元ネタの『ベッドルームで群論を』にも書いてある通り、確かに金持ちはより金持ちになっていくわけだが、その分、金持ちは誰とも売買することのできない硬直した市場があり、その一方で、貧乏人同士で些細なお金のやりとりをしあうような世界になることが示唆されている。もちろん、このような特殊な市場というのは存在はしていない。
しかし、このような硬直に向かいつつある市場を、上手く修正する方法は一つある。上のモデルだと、金を持っているプレイヤーが、金を持っていないプレイヤー以上にお金を出さない、とする、ある意味では理知なプレイヤーのモデルである。そこで、もうすこしルールを単純にして、「与える側」と「貰う側」にしてしまう。つまり、ランダムに選ばれたプレイヤーはお互いの所持しているお金とは関係なく、一定率の金額を渡さなければならない、としてみよう。この修正は簡単で:
def money_flow win = player_choice lose = player_choice until define_player? win, lose win = player_choice lose = player_choice end pay_money = (lose.money * (Random.rand(1..3) * 0.1)).to_i lose.money -= pay_money win.money += pay_money end
といったように、分岐の部分を無くせば良い。このログは以下のようになる。
================================================================ 0: 10000 1: 10000 2: 10000 3: 10000 4: 10000 5: 10000 ================================================================ 0: 6969 1: 10320 2: 12290 3: 5745 4: 13080 5: 11596 ================================================================ 0: 7164 1: 3748 2: 16601 3: 8685 4: 8224 5: 15578 ================================================================ 0: 7406 1: 15377 2: 9058 3: 5122 4: 5063 5: 17974 ================================================================ 0: 3734 1: 10490 2: 14153 3: 16212 4: 4864 5: 10547 ================================================================ 0: 13148 1: 9684 2: 15894 3: 8781 4: 8608 5: 3885 ================================================================ 0: 7805 1: 10750 2: 14149 3: 11574 4: 8861 5: 6861 ================================================================ 0: 6703 1: 15829 2: 2977 3: 21076 4: 5230 5: 8185 ================================================================ 0: 13891 1: 15145 2: 7964 3: 8959 4: 5049 5: 8992 ================================================================ 0: 8533 1: 7824 2: 18422 3: 12643 4: 9779 5: 2799 ================================================================ 0: 10555 1: 16868 2: 9294 3: 6705 4: 2611 5: 13967 ================================================================ 0: 12567 1: 10251 2: 8030 3: 11520 4: 4077 5: 13555 ================================================================ 0: 10842 1: 4568 2: 3893 3: 5262 4: 28368 5: 7067 ================================================================ 0: 7995 1: 4610 2: 6152 3: 11740 4: 15761 5: 13742 ================================================================ 0: 10156 1: 7349 2: 8515 3: 19949 4: 5052 5: 8979 ================================================================ 0: 19181 1: 8281 2: 11931 3: 13179 4: 1447 5: 5981 ================================================================ 0: 1148 1: 18653 2: 16047 3: 4865 4: 9887 5: 9400 ================================================================ 0: 21972 1: 10682 2: 4554 3: 3439 4: 9466 5: 9887 ================================================================ 0: 2751 1: 13354 2: 15472 3: 7961 4: 7018 5: 13444 ================================================================ 0: 22601 1: 11600 2: 5940 3: 10826 4: 2973 5: 6060 ================================================================ 0: 11854 1: 21281 2: 10629 3: 6394 4: 4587 5: 5255
といったように、若干偏りはあるものの、先ほどのような、酷い偏りではない結果が生まれることになった。元の本では、この経済モデルのことを「盗みと詐欺のモデル」としている。なぜなら、金持ちはできるだけ豊かになるように行動するはずだ。この場合、圧倒的に金持ちのほうが、貧乏人より、このモデル上では不利だからだ。(最も、経済学的に考えれば、このモデルは再配分がうまくいっているモデルとは言えるかもしれない)
まとめ
このモデルは単純化しすぎているので、経済学的な市場モデルを即ち反映しているとはとても言いがたいのは間違いない。しかし、単純化したところによって、いわゆる「売り買い」、あるいは「与える・貰う」という結論がどのような結果に収束するのか、あるいはしないのかを見てみるのは非常に面白かった。
今回、利用した『ベッドルームで群論を』では、このようなプログラミング的なトピックを扱った、硬すぎず、かといって簡単すぎるでもない、非常にほどよいエッセイが収められていて、読んでいてとても面白かった。もしかしたら、また幾つかトピックを紹介するかもしれないが、もし興味のある人がいれば、読んでみて欲しい。
- 作者: ブライアン・ヘイズ,冨永星
- 出版社/メーカー: みすず書房
- 発売日: 2010/09/11
- メディア: 単行本
- 購入: 3人 クリック: 70回
- この商品を含むブログ (35件) を見る