« ブログアーカイブの電子書籍の利用許諾(案) | トップページ

2018年3月19日 (月)

ミクロ経済学の我流シミュレーション

ミクロ経済学に基づき、経済シミュレーションまたはゲームを作った。モデル自体は簡単なものなのだが、「動く」までにするのが一苦労であった。コンピュータでシミュレーションができるようになるまでには、いろいろ決め難いことを決めねばならない。あいまいにしたいことがあれば、どうやってあいまいにするのか、乱数を使うならどのような乱数を使うのかを決めなければならない。企業が赤字の場合どうするか、パラメータが 0 や無限に近くなるのをどのような考え方で防ぐか、そういったことを決めていかねばならなかった。本記事は、その記録である。

基本的なアイデアは、価格によって需要と供給を決め、その需要と供給が一致するように、つまり(需要-供給)の二乗が最小となるように、最適化関数を用いれば、経済シミュレーションができるのでは?…というものである。

しかし、商品の生産について考えてみると、価格が増えると供給が増えるという経済学の法則が、個々の企業においては成り立っていないと考えるようになった。もちろん、利益が出ていれば新しい企業が参入があるし、利益が出ていなければ退出があって、そういう意味で「供給力」の増減はあるだろうけれども、むしろ、個々の企業は赤字にならない限り需要があれば必ず生産はするのではないかと考えるに致った。しかし、そう考えると、需要と供給は必ず一致するわけで、(需要-供給)の二乗を最小化するという道は崩れる。替わりに各企業を総合した利益を最大化することを最適化に組み込むことにした。

マルクス経済学を参考に、商品は、必需品、贅沢品、原料の三種ということにした。労働者は必需品を毎期需要し、また、貯蓄を持ち、(マルクス経済学と違って)貯蓄等の余裕から贅沢品を需要すると考えた。必需品、贅沢品、さらに原料も、原料と労働から作られると考えた。

資本家は、違った戦略を持ったエージェント 5人で表し、一期につき一分野に一社しか企業が参入できないと決めた。モデルを簡単にするためである。参入する資本家はランダムとした。

本来は、このシミュレーションを使って経済学的知見を確認するのが目的であった。しかし、思いのほか、シミュレーションをまともに動かすのに手こずり、たまに「まとも」に見える動作をするだけで満足するのが現状で、経済的知見のような微妙なことを言えるまでには致っていない。それが残念である。今後の課題としたい。

プログラム言語は、流行の Python を使った。人工知能入門を私が勉強したときに Python の最適化関数を知ったのが、Python を使おうと思ったキッカケである。
動機と目的


今回とは別の未発表の経済モデルについて考想を練っているときに、ヒントになればと『経済原論』を何冊か読んでみた。『経済原論』というのはどうもマルクス経済学の分野らしく、ミクロ・マクロ経済学以前の経済常識を読みたいと思っていた私には過ぎた本ばかりだったのだが、その中で、私は次のような記述に出会った。

>
資本の累積的蓄積にともなう労働需要の累増によって、あるいは新市場の開拓、新産業分野の展開等にともなう資本の飛躍的膨張による労働需要の急増によって、産業予備軍が一定限をこえて収縮すれば、賃金率が上昇し、その賃銀率の上昇は機械採用の誘因として作用し、資本構成高度化の速度が高まる。すなわち、追加資本はヨリ高度な資本構成をもって投下され、また、元資本の更新が促進されかつその更新にともなう構成高度化の度合が大となる。かくして、一方では大量の予備軍が排出され他方では労働力吸収力が弱まることによって、再び貯水池は膨張し、賃銀率が下落せしめられることとなる。

(…)

賃銀率の上昇が機械採用の誘因として作用するのは、機械が(その耐久年限の間にわたって)節約する延べ労働量に対して支払われる賃銀総額よりもその機械の価値が小なることが機械採用の資本制的限界条件をなし、他面では賃銀率の上昇は旧生産方法による諸資本の剰余価値をますます減少せしめ資本としての存立を維持し難くするからである。

(富塚良三『経済原論』p.158-159)


機械が相対的余剰人員を作るというだけでなく、旧生産方法にとって賃金高が苦しいのが余計に賃金を下げる原因となる。二重の要因となるのが大きいのかと思った。しかし、新生産方法への移行には、機械の更新にともなう労働力需要による賃金増もあるはずで、このあたりはちゃんとモデルを作ってみる価値があるように思った。ここをコンピュータ・シミュレーションできればかっこいい。やりたい。…というのが動機だった。

機械の高度化には、労働力を少なくするものの他に、原料を少なくするようなものや、(剰余)価値を高めるようなものがあるはずで、どういうものを選ぶのか、無差別曲線的なものが描けそうだ。どういうものを選べば有利か「学習」さえできるかもしれない。上昇に対して上昇があったり下降があったりというのは差分(微分)方程式的なモデルにすればよいのだろうか。…などと考えはするが、それらをちゃんとしたシミュレーションにできるかどうかはまだ自信がなかった。

そのころ上記を読んで得たアイデアを列挙すると次のようなものであった。

労働需要が増えれば、賃金があがり、賃金があがれば、機械が高度化される。機械には更新期があり、高度化がなくても更新しなければならない。更新前の変更は高コストになるはずだ。機械が高度化されたあとでは、労働需要が下がる。

労働力を少なくするものは、労働需要を少なくするもので、必要な労賃が必ず減るとは限らない。

インフレ等も考えれば、原料も価格そのものではなく機械高度化により数量を下げると考えるべきなのだろうか? 原料自体、基本的には機械高度化により安く作れるようになるはずで、その点はデフレ基調と考えるべきなんだろうか?

特別剰余価値の計算が上掲本の p.111 にあるが、そこで示されることに基づく以外の機械の陳腐化はありえるのだろうか? ちなみにそのモデルだと特別剰余価値を持ったものは商品価格は下がるとなっている。価値の高い同種商品を作れるようになった場合、それにより従来品の個数が減る。減った個数を ΔX とし、新商品の価値を b、旧商品の価値を a とすると、(b - a) * ΔX が特別剰余価値になるのだろうか? いや、違う。シェアの問題があるだろう。新商品に切り替えることでシェアが延びた場合は必ずしもそうならないことがある。そして、商品を作れば作るほど一個あたりのコストが安くなるとして、特別剰余価値をそのあたりから考える必要がある。価格が上がったことで、シェアが逆に減り、他が多く売ってコストが安くなることも考えるべきだ。

労賃が、需要と供給によってどのように決定されるか? 「平均的な賃金」は決まるかもしれないが、高度人材等の賃金や、最低賃金的なものはどうなるのか? 生産財と消費財の労働に関する賃金が違い、一方が高くなるとしばらくして移動が起こり、賃金が等しくなっていくというモデルも考えられる。

価格に対する需要の需要曲線と価格に対する供給の供給曲線から価格が決まるのが、本来のミクロ経済学のモデル。このとき、複数社については需要曲線や供給曲線を足し合わせたものを考えるのが、もっとも素直だろうが、難しい。会社をオブジェクトと見て、そこに価格を与えると需要量と供給量を返させる。そして、価格を変化させて需要と供給の量がだいたい一致する(か振動が何回か続く)まで動かせばよい。そのような「最適化」をすればよいだろう。しかし、財が複数あってそれに価格があるという場合、価格の組に対する最適化を行うことになり、時間がかかるかもしれない。

生産財・消費財・奢侈財と分け、それを含む割合で商品を表示すべきか?しかし、「新商品」の需要の価格弾力性のモデル(↓)は、価格に自己決定権があるというモデルになった。需要の予想から価格を決め、それに対する需要が決まり、それに合わせて生産(供給)し、その供給のための生産財の需要が求まる…といった動きになるのではないか? いや、違う。価格を誰が決めるのだ? 生産財の価格に対して、どれだけ売りたいがが決まり、生産財への需要が決まるのではないか? やりたい戦略が先にあって、生産価格により妥協するということではないか?

賃金があがれば、旧生産方式は「余計に」苦しくなる。なので、賃金を下げようとする。どうやって? 退出によって? むしろ、より低い労賃の者を選好することによってではないか? 従来からいるものの賃金も下げようとする。インフレ等で必要になっても、高い賃金を出ししぶる。生産の賃金弾力性が上がるということでは? 逆に言えば、他は賃金が上がろうが下がろうが生産するということ。そういう需要がある…と? 陳腐化した商品は相対的に価格弾力性があり、それ以上に生産に弾力性があるということでは?

産業予備軍の多さが労賃に関係している。必要生活費も労賃に関係している。機械がよくなれば、商品が安くなり、必要な労賃は下がり、労働需要がやがて回復する。

労賃は下がり労働需要が回復するというところ、産業予備軍との関係はどうなる。必要生活費が減ると、働かなくて済む可能性が増えるという点では産業予備軍数を増やすように思われるが、働く意思のあるという点だと予備軍を減らすようにも思える。どっちなのか? ただし、いずれにせよ、労賃は増える方向になるはずだ。これは生活費の減少が労働者に与える影響である労賃減の受忍度が上がるのとは逆の方向だ。


…等々。ここから今回のシミュレーションにアイデアを活かしたものもあるし、そうでないものもある。機械高度化はモデルとしては組み込んでいるが、その設定を活かした結果が出たとは言い難い。平均賃金以外の賃金についても今回は考えていない。原料・必需品・贅沢品を部分として含む中間財のようなものもモデル化にまでには致らなかった。「新商品」「旧商品」という議論もほとんど組み込んでいない。これらのことは今後の課題としたい。


生産の理論の前理論


アイデアの初期段階では、企業オブジェクトに賃金等の価格情報を与えると、需要量と供給量を返し、それを合算して (需要 - 供給) ** 2 ("**" はPython などでのべき乗の記号)を最小化すれば良いと考えていた。

しかし、耐久消費財を念頭においた生産について考えているところでつまづいた。会社の個別の商品を見た場合、固定費がある分、数を作ったほうが安くなる。供給数が増えれば価格が安くなるという関係をグラフにすると、価格が高くなると供給が減るという関係になる。これは通常、供給曲線を考える際の価格が高くなれば供給が増えるというグラフの逆である。

最適化の過程では、価格がまず決まるとする。商品価格が決まっている状況で、需要が決まったとしよう。安く数が作れるといっても需要量に対しては多過ぎるということがあり得よう。価格が高くなると生産量が少なくなるが、価格が高くなるごとに需要も少なくなり、いつかは需要量に対してピッタリの数が供給できるということになるのではないか?

生産曲線を描くための式を考えよう。生産量を n、価格を P、固定費を K、労賃を V、原料費を C とし、商品一個あたりに必要な原料を α 個、商品一個あたりに必要な労働量を γ 人としよう。利益率 β を固定することで、生産曲線は次のようになる。

β = (- K + (P - α * C - γ * V) * n) / (K + (α * C + γ * V) * n)

<=> n = (1 + β) * K / (P - (1 + β) * (α * C + γ * V))


P が大きくなるほど n が小さくなる曲線になっている。これが需要と一致する点を考えるべきだろうか? しかし、利益率 β を固定するとは少しおかしいのではないかと私は考えた。利益率はできるだけ大きくなるようにするものだからだ。むしろ、n と P が決まって β が決まるものではないだろうか? 価格から決まるものと言えば、生産量というより利益率ではないか…と私は考えを改めた。それなら自由にすべき変数は n ではなく β だ。

…実のところを白状すると、それで考えを改めたのではない。複数企業が参入したときに赤字をどうするかというところで私は考えを改めたのである。赤字が存在する場合、企業は赤字がもっとも小さくなるように行動する。上の式で言えば P > α * C + γ * V であれば、できるだけ生産したほうが赤字幅が小さくなり、そうでなければ生産はいっさいやめたほうがよい。このとき有利な生産量の上限みたいなものがあるなら、上の生産の理論に意味があるが、生産するならなるだけ多く生産したほうがよいというなら、生産は常にギリギリまでやると考えたほうがよい…と考えを改めたのであった。


生産の理論


生産する企業において需要量が先に決まりそれに合わせて生産が行われる。利益率は上の β になり、(需要 - 供給) ** 2 の最小化ではなく、この β の最大化を最適化のスコアの中に組み込もうと考えを改めた。

さて、次の問題は、工場を増やす場合である。これには二つの場合が考えられる。一つは同じ企業がラインを増やす場合である。もう一つは、違う企業が参入して来るというものである。その違いは赤字のときに顕著に現れる。赤字になったとき、同じ企業が複数のラインを持つ場合は、一番、有利な条件のところのみを稼動させて他を休止すればよい。もし、生産に上限がないとすれば、これは赤字でない場合もそうである。

複数の会社が参入しているという場合、それぞれの会社が P > α * C + γ * V である限りにおいて生産しようとするだろう。そして、赤字を「分担」することになる。

本稿では、簡単にするため複数会社の参入の場合のみを考えることにした。そして、生産数の上限はないものとし、一企業で莫大な需要をこなすのも可能だとした。

どのように「分担」するかであるが、ここで、「動機と目的」でチラと述べたアイデアを使う。それは「機械の高度化には、労働力を少なくするものの他に、原料を少なくするようなものや、(剰余)価値を高めるようなものがある」という考えである。

企業(Python では Company オブジェクト) i は、剰余価値的な「優位性 (superiority)」A_i と上の α にあたる「一製品あたり原料 (ingredientsPerProduct)」α_i と上の γ にあたる「一製品あたり労働量 (laborsPerProduct)」γ_i の他に、優位性がどれぐらいの早さで陳腐化していくかを示す「優位性減衰(superiorityDecay)」δ_i を持つとする。

基本的には優位性の重みづけに基づいて「分担」が行われると考える。しかし、それだけではない。

「動機と目的」のところで「旧生産方式(…では…)生産の賃金弾力性が上がる」と考えたが、これを活かしたい。一方、機械の高度化により γ は小さくなっていくが、γ が大きいほど相対的に弾力性が大きく、したがって旧企業ほど弾力性が大きいのではないか。つまり、生産の賃金弾力性の変化の正体は、γ にあるのではないかと考えた。

全体の生産量が大きくなったり小さくなったりするなか賃金弾力性は割合に関して大きくなったり小さくなったりすることだろうと考えた。最初、γ_i の平均を γ_M として、賃金の変化量を Δ として、A_i * (a * Δ * γ_i / γ_M) を重み付けとして分配することを考えたが、この場合、分子と分母両方にくることで変化量 Δ が消えてしまい、弾力性として意味をなさない。そこで、A_i * ((γ_i / γ_M) ** (- c * Δ)) という重み付けにすることにした (a, c は何らかの定数)。(なお、分子と分母両方に来ることでγ_M の項は消えるので、A_i * (γ_i ** (- c * Δ))を重み付けに用いた。

P > α * C + γ * V なる企業は、「分担」に参加する。それ以外は参加しない。しかし、特別な場合として、P > α * C + γ * V なる企業が一つも存在しないことがありうる。その場合は、しきり直して、すべての企業が参加し、上の重み付けで生産つまり赤字を分担することにした。このとき優位性を基準にするのではなく、赤字の軽いところにより多く割り当てるような考え方も取れるかもしれないが、今回はそうしなかった。

なお、マルクス経済学では用語として「労働」と「労働力」を厳しく峻別するが、本稿ではそこのところを気にせず、「労働量」を「労働力量」の意味で用いている。あえていえば、運の要素を含まない「労働」はありえず、そうならばそれは「労働力」と区別できないと(今回は)考えたからである。


資本家による企業参入


商品には、必需品・贅沢品・原料の三種があるとする。企業の参入はそれぞれの分野一期に一社ずつしか起こらないとする。収益機会が豊富にあって、参入がたくさんあるというのは毎期参入があることで表現できると考えた。

逆に言うと参入できないときがあるということで、それが資本家の負債(debt) が 0 でない間は参入できないというルールによる。利潤がある間は、投資用の資金がたまる=負債が減るが、資本家が一旦投資をすると、参入によりその分野の利潤が減り、次の投資までの時間があき、しばらくして更新がとまり、再び利潤機会が復活する…といったことを想定している。

資本家は 5人いるものとする。その期に参入するかどうかはくじ引きで順番を決め順に試算していく。試算して参入する今期と前期と前々期の三期平均の利益率と今期の利益率の低い方の利益率が「市場利子率」と目される標準的な利益率 6 % を超えていれば、参入が行われることになる。5人とも参入しない場合は参入は行われない。(前期・前々期の利益率はその分野の最大の利益を出した企業のもの。)

企業の固定資産は 10 期で更新期を迎える。このとき、更新のために特別なことをしない。その企業が去り、有利ならば他の企業が新規参入してくるだけである。企業の優位性 A_i は毎期優位性減衰 δ_i をかけることで減衰させられる。

企業は次のようにして作られると決めた。

まず、固定資産を作るには原料が必要で、第1期に必要な原料は 5 個とし、新しい企業を作るごとに前の企業の固定資産に必要な原料の 1.05 倍の原料が必要となる。

0 から 1 まで変化しうる変数 r_1 と r_2 を決めたとして、A_i、δ_i、α_i、γ_i は次のように決める。

A_i = (4 - 2) * r_1 + 2

γ_i = ((0.99 - 0.95) * r_1 + 0.95) * γ_{i-1}

δ_i = ((0.5 ** 0.1) - (0.25 ** 0.1)) * r_2 + (0.25 ** 0.1)

α_i = ((1.18 - 0.98) * r_2 + 0.98) * α_{i-1}


ちなみに α_{i-1}、γ_{i-1} は前の企業の α と γ である。

つまり、優位性 A を大きくしようと思えば、商品あたりの労働量 γ を犠牲にして大きくしなければならないし、優位性減衰を有利にすなわち大きな値にしたいなら、商品あたりの原料を犠牲にして大きくしなければならないということである。

このリクツは…、優位性を得ようとすれば手をかけたことすなわち労働量を多くかけたことをしないといけないが、そのままではすぐに陳腐化する。それを防ぐには宣伝費をかけるなり流行によって変えやすい部分を余計につくる…すなわち原料を多く使う必要がある。…というものである。

資本家 5人はこの r_1 と r_2 の決め方が違う。一人は r_1 と r_2 をランダムに決める。別の一人は r_1 = 0、r_2 = 0 に、また別の一人は r_1 = 0、 r_2 = 1 に、また別の一人は r_1 = 1、r_2 = 0 に、最後の一人は r_1 = 1、 r_2 = 1 に決め打ちする。

さて、特別な場合として、ある分野の企業の数が 0 になる場合がある。この場合は、利潤に関係なく誰か一人の資本家が参入を行うこととする。基本はランダムであるが、負債がない者がいればそれを優先する。これにより生産が途切れることがなくなる。


必需品の需要


労働者は産業予備軍(失業者)も含めて 1000 人いるものとする。資本家と合わせて需要家は 1005 人いることになる。

必需品需要については被雇用者者も失業者も資本家も同じである。一定の価格弾力性に基づき、価格差と前期の必需品需要から求める。弾力性 E (< 0)、前期の一人あたりの需要を D_{i-1}、前期の必需品の価格を P_{i-1}、今期の必需品の価格を P_i とすれば、今期の一人あたりの需要 D_i は、

D_i = (1 - ((P_i - P_{i-1}) / P_{i-1}) * E) * D_{i-1}。


ただし、必需品がまったくいらなくなるということはありえないので、D_i を 1 以上に決め、上の計算式が 1 に満たないときは D_i = 1 とした。


労働の需要と供給


労働の供給のアイデアは、「動機と目的」で述べた「必要生活費が減ると(…) 労賃は増える方向になるはず」という考察と、賃金から必要生活費を除いた「余剰」それを本稿では仮に「新規貯蓄」と呼ぶが、それが大きいほど労働意欲がわくはずだという考察による。この意欲をどうミックスするかを決めねばならないが、一定の率 r (= 0.5) を決め、それぞれの要素を加味することにした。(なお、新規貯蓄が 0 以下の場合は、労働供給はなされないと考えた。)

また、労働供給はある程度は動くだろうが、上限・下限があるだろう。前期の失業者数のプラス・マイナス 50% ぐらいだろうか。一方、必要生活費がどれぐらい動いたかや、新規貯蓄がどれぐらい動いたかは、プラス・マイナス無限の値を理論的には取りうると考える。それをうまく表せる関数の一つに arctan (正接 tangent の逆関数) があるので今回はそれを使おう。

今期・前期の失業者の人数を n_i・n_{i-1}、今期・前期の新規貯蓄を S_i・ S_{i-1}、今期・前期の必要生活費を N_i・N_{i-1} とする。なお、必要生活費はその期の必需品の価格に前節の一人あたりの必需品需要をかけたものである。

q = r * ((S_i - S_{i-1})/S_{i-1}) + (1 - r) * ((N_i - N_{i-1}/N_{i-1}))

n_i = n_{i-1} - 0.5 * (2/π) * arctan(2 * q) * n_{i-1}


…とする。なお、失業者よりも被雇用者が多い場合は、失業者ではなく被雇用者に対して上式を使う。なお、arctan の中身が 2 * q になっているのは q に対する反応をよくするため適当な数値(ここでは 2)をかけることに決めたためである。

一方、労働需要については、必需品・贅沢品・原料について需要が決まればそれぞれの企業の生産個数が決まり、それをその企業の商品あたりの労働量とかけて積み上がれば、全体の労働需要になる。

労働需要と労働供給については初期の構想のまま、(需要 - 供給) ** 2 を最適化のスコアの中に組み込む。


贅沢品の需要


マルクス経済学では、労働者は贅沢品を買わないなどと考えたりするものだが、本稿ではそのような考えを取らない。贅沢品は、労働者も資本家も等しく、貯蓄が多くなるごとに強く嗜好すると考えた。

ただし、目安となる基準額は今期の新規貯蓄から決まり、それは新規貯蓄の3倍とする。貯蓄が基準額を越える部分の 1/3 を基準額に足した額がその者の需要の強さとし、最適化のパラメータとして与えられる贅沢品の価格よりそれが上であれば、その者は贅沢品を需要するとする。

贅沢品を需要する者を積み上げた数字が、その期の贅沢品の需要量となる。


原料の需要


原料の需要を計算するには少し複雑な計算が必要である。というのは、原料の生産自体に原料を必要とすると考えるからである。

必需品・贅沢品の需要および企業の新規設立にともなう需要から、とりあえず原料の必要最低限が計算できる。そして、その必要最低限について原料を生産すると、余分に必要な原料を計算できる。そして、この余分に必要な原料を生産するためにさらに余分な原料を計算できる。その余分となる部分は小さくなって 0 に近づく。それを足しあわせれば、必要な原料の需要量=生産量になる。…というのが基本的なアイデアである。そういうのは最適化で解くことができる(ことがある)。

最初の必要最小限の量を d_0 としよう。「分担」にしたがって k + d_0 を生産して k' が「余分な生産量」として求まるとする。この (k' + d_0 - k - d_0) ** 2 を最小にするよう最適化する、すなわち k - k' = 0 <=> k = k' になる点がみつかる。

α_M を企業の中で最大の商品あたり原料とする。k を「余分な生産量」とすると、k = α_M * (k + d_0) を解いた k より小さいものが実際の「余分な生産量」になる。そのような k と k = 0 を範囲として最適化をすればよい。

なお、この原料生産における α が 1 を越えるとおかしなことになる(「余分」なはずがマイナスになってしまう)。そして 1 に接近するごとに無限に k が大きくなりうる。本稿のシミュレーションではそのため上限値を 0.9 にして規制している。マルクス経済学で原料的なものへの生産への投資だけを肥大化する議論があったりするが、それはここに現れているのかもしれない。


社会的負債


最適化のパラメータとして賃金・必需品・贅沢品・原料の価格を与え、最小化するスコアとして (労働需要 - 労働供給) ** 2 に、各企業の利潤にマイナスをかけたものを足したものを使って、大きく最適化を回す。

すると本来なら 労働需要 - 労働供給 = 0 になって欲しいのであるが、他とのかねあいで、そうならないことも出てくる。その場合にどう考えればよいか決めねばならない。

ここで社会的負債という考え方を導入する。誰か個人に帰さない負債をその勘定科目に付けるのである。まず、失業者の必要生活費は、毎期、この社会的負債とする。

次に 労働需要 - 労働供給 = 0 にならなかった残りを考える。労働需要が労働供給より大きい場合は、被雇用者が「残業」をして補ったと考える。残業代は通常の賃金の二倍とする。もう少し具体的に書くと (労働需要 - 労働供給) * 2 * 賃金 / 被雇用者数 が被雇用者の賃金にプラスされる。その原資は社会的負債とする。

一方、労働供給が労働需要より大きい場合、あまった「被雇用者」は、社会的負債から賃金を出すことにする。

さて、こうすると、資本家がだいぶ得しているように見えるかもしれないが、本モデルでは、資本家の利益は必要経費以外すべて社会的負債を減らすことに使われるという乱暴な決めごとをしいた。

まず資本家の「賃金」も労働者の賃金と変わらない分を確保するとする。そこから貯蓄をし、必需品や贅沢品を買う。一方、企業を起業したときは固定資産分が負債となるとする。毎期、固定資産は残存価格なしで定額法で減価償却されるとする。毎期この賃金と償却分は社会的負債に付けかえてよいことにする。会社の利益はまず個人の負債を返すのに使われ、それ以上はすべて社会的負債の返却に使うこととする(赤字であればすべて社会的負債になる)。


実験


これまでの議論を総合して作ったのが micro_economy_1.py である。使った Python のバージョンは 3.6.4、SciPy は 1.0.0。これを動くまで持っていくには、バグを取るのはもちろん、例えば、価格の範囲を 1 から 1000 の間に制限したりする必要があったりした。しかし、それで思った通り動いたかというとそうではない。

初期値として [賃金, 必需品, 贅沢品, 原料] の価格が [30, 10, 15, 15]、貯蓄は平均 10 の指数分布の乱数で与え、とにかく20期、動かしてみた結果のログが(途中省略して)次のようになる。

$ python micro_economy_1.py
Acronyms: W: Wages, N: Necessaries, L: Luxuries, I: Ingredients.

OptForStep: iterated 280 times score=-7743.350263570385
Companies N:2, L:1, I:2
[Type] [OwnerId] [ProfitRate]
N 2 0.1632653743152744
N 1 0.19924568818262992
L 0 -0.7188914940614765
I 1 0.7633429014575563
I 2 0.6516835280294665

Increase of Social Debt: -41014.94476899819
Price W:22.910415635110162, N:11.79142807153147, L:5.591289146554007, I:26.011654001404423
Supply of Labors = 763
(Demand - Supply) of Labors = -5.9802513773729515
Profit Rate N:0.19924568818262992, L:-0.7188914940614765, I:0.7633429014575563
Product N:1793.9537745733046, L:670.0, I:1344.541898901853
Savings mean:7.5558253965621915, variance:74.31463132904874

OptForStep: iterated 333 times score=-7490.865309230835
Companies N:3, L:1, I:3
[Type] [OwnerId] [ProfitRate]
N 2 0.3004632413950307
N 1 0.3503310867129869
N 4 0.18818142818090275
L 0 -0.8120710125019451
I 1 0.7578284489221486
I 2 0.6592308708761296
I 4 0.5074870817212311

Increase of Social Debt: -43380.6542646795
Price W:23.25535090263279, N:13.652112847510093, L:3.8294434528180394, I:26.776393583228526
Supply of Labors = 747
(Demand - Supply) of Labors = -10.798805853151407
Profit Rate N:0.3503310867129869, L:-0.8120710125019451, I:0.7578284489221486
Product N:1624.1024661359343, L:611.0, I:1408.9497660379861
Savings mean:6.120521944430762, variance:61.16970115194392

:
:(途中省略)
:

OptForStep: iterated 143 times score=-2569.3157847058574
Companies N:10, L:1, I:10
[Type] [OwnerId] [ProfitRate]
N 1 -1.0
N 3 -0.004738739022854395
N 0 -0.002342191394751778
N 1 0.007491977961750109
N 0 -0.004249459644530311
N 1 0.007250834309768346
N 0 0.018667720421667332
N 1 0.03290647083371784
N 0 0.05989581702751971
N 1 0.07783763180484031
L 1 -0.9613218048988522
I 2 0.32182555119476347
I 4 0.15605303286276284
I 0 0.09755204108123433
I 3 0.11913965792909778
I 0 0.12153093725094616
I 1 0.1458578359987719
I 3 0.17152402365791394
I 1 0.197231899023488
I 0 0.07513394732630232
I 3 0.09669711845157322

Increase of Social Debt: -112142.6991323682
Price W:23.427412507317527, N:15.697972847933567, L:1.000000616421496, I:39.0699460795411
Supply of Labors = 871
(Demand - Supply) of Labors = -14.340090234899662
Profit Rate N:0.07783763180484031, L:-0.9613218048988522, I:0.32182555119476347
Product N:1471.227387221081, L:501.0, I:3165.2409870968286
Savings mean:2.675305155460485, variance:37.30690905296707



これでもそこそこうまく行っているほうである。省略したが途中で最適化が失敗したりもしていた。しかも、何回もやり直すと、乱数の変化によって同じ初期値でもかなり違う結果になる。シミュレーションとして成功しているとはとても言えない。


贅沢品の価格が下限である 1 に貼り付いたり、今回はそうではないが、贅沢品の生産数がほとんどの期で 0 になるような現象が起きることがある。必需品は労賃の下限を規制し、原料は原料自身を規制し、贅沢品は新規貯蓄を規制する…。だから、贅沢品の利益の最適化が効いて新規貯蓄はある程度、確保されるだろうと想定していたが、まったくそうなる気配がない。

どうもこれは貯蓄という時間を加味した概念のせいで、別に新規貯蓄をスコアに加味する必要があるのではないかと、新規貯蓄の項をスコアに加え、その倍率を変えたりしたのだが、そうすると、他が上限の 999 に行ったり、かなりシステムが不安定になった。

しかたなく労働の供給のところで、「新規貯蓄が 0 以下の場合は、労働供給はなされない」というところを「新規貯蓄が賃金の 1/3 以下の場合は、労働供給はなされない」と変え「チューンアップ」した。最低限文化的な生活ができる最低賃金を設定した感じだろうか。

もしかすると、このような時間要素が絡むものには別の最適化が必要なのかもしれない。変動があまり起きないように保守的になるようスコアをいじったり、新規貯蓄の何分の一を求めるかを最適化のパラメータに加え、それを贅沢品の企業の利益の時間平均したものに連動させて動かしたり…といったことが可能なのかもしれない。そのあたり、何か理論があるのかもしれないが、最適化に詳しくない私は知らない。とにかく、上に書いた以外、そういったことは今回はせず、今後の課題とした。


ほかに、労働需要 - 労働供給が結構大きな値になったりするのが気になる。荒療治として (労働需要 - 労働供給) ** 2 を例えば 500 倍ぐらいすると、そういうのはピタッとやむ。ただ、ここだけが問題となって変数が動く余裕がなくなるのも問題なので 500 倍ではなく 3 倍に「チューンアップ」した。


さらに、他の分野では利益が出ているのに、ある分野では利益が出ず赤字企業が一社でずっとガンバル…みたいな状況によく陥るのも気分が悪い。これは利益を単純に足しているためで、一つの分野が悪くても他の分野がよければその分野に集中するということが起こっているからだろう。

そこで単純な利益ではなく、分野の会社ごとの平均の利益(のマイナス)をスコアに加えることにした。ただ、これでもマイナスの利益が頻出するので、マイナスの利益が出ている分野は、そのスコアの損失が 10 倍になるように「チューンアップ」した。


以上のような「チューンアップ」をほどこしたのが micro_economy_2.py である。(実は micro_economy_2.py を徐々に作ったあと、そこでの結果をフィードバックして、元の姿を取り戻させたのが今の micro_economy_1.py になる。)

その実行結果は次のようになる。

$ python micro_economy_2.py
Acronyms: W: Wages, N: Necessaries, L: Luxuries, I: Ingredients.

OptForStep: iterated 334 times score=-1896.7960504819575
Companies N:2, L:1, I:1
[Type] [OwnerId] [ProfitRate]
N 0 0.14937650100902608
N 1 0.19468655574286006
L 0 0.008060976217601767
I 0 0.01674718633235122

Increase of Social Debt: -27737.058679602756
Price W:32.22655172911787, N:8.632779924973008, L:16.89093171602165, I:14.152173119386443
Supply of Labors = 813
(Demand - Supply) of Labors = -2.193416500786043
Profit Rate N:0.19468655574286006, L:0.008060976217601767, I:0.01674718633235122
Product N:2174.886741048255, L:635.0, I:1376.0353901771157
Savings mean:10.499345067977176, variance:75.09338640069072

OptForStep: iterated 250 times score=-2975.838834184229
Companies N:3, L:1, I:1
[Type] [OwnerId] [ProfitRate]
N 0 0.105684112754475
N 1 0.15382708876544096
N 2 0.06055472932793897
L 0 0.07334315610262294
I 0 0.08866387796698855

Increase of Social Debt: -32681.341808271638
Price W:30.949380305868097, N:8.496018680406122, L:18.040136202454583, I:15.018955108578364
Supply of Labors = 806
(Demand - Supply) of Labors = -3.916719152350538
Profit Rate N:0.15382708876544096, L:0.07334315610262294, I:0.08866387796698855
Product N:2195.5595871128708, L:571.0, I:1423.6558303115953
Savings mean:10.246899756196353, variance:50.77019693104693

:
:(途中省略)
:

OptForStep: iterated 274 times score=-155.61842030610842
Companies N:8, L:11, I:4
[Type] [OwnerId] [ProfitRate]
N 1 0.08114520339035204
N 3 0.10657011152246447
N 4 -0.003229559754643809
N 3 0.012746905222435285
N 1 0.03948833552133424
N 3 0.06188257055989593
N 1 0.08991528031641133
N 3 0.11335139113646255
L 3 -0.00742024803760795
L 1 0.017421910713828603
L 0 0.04056620514006358
L 2 -0.011861103539273849
L 3 0.006300992380955308
L 1 0.03476346959029297
L 3 0.05980203755504933
L 0 0.06509153071223571
L 3 0.08832897458992388
L 1 0.11946029442858426
L 3 0.14538997796309927
I 1 0.04525779166605825
I 3 0.06208599881619869
I 1 0.10458386962458147
I 2 0.0600000330004164

Increase of Social Debt: -24022.267486323544
Price W:34.538024097472665, N:8.846465733567964, L:15.74155870898392, I:14.8532629504816
Supply of Labors = 824
(Demand - Supply) of Labors = -13.746887815320633
Profit Rate N:0.11335139113646255, L:0.14538997796309927, I:0.10458386962458147
Product N:2120.6050477899626, L:828.9999999999999, I:2041.564685036501
Savings mean:8.813711347390466, variance:33.842229732468645



こちらでも初期値を少しいじると大きく結果が変わったり、同じ初期値でもランダム性によりかなり結果が変わったり、最適化が失敗することがあったりする。しかし、この初期値では、必需品・贅沢品・原料の企業がバランス良く成長しているように見える。


蛇足として、スコアを上述のものの替わりに社会的負債そのものにした実験が micro_economy_1sd.py である。ここには結果を示さないが、とても不安定なものになった。


結論


わからないところや不明なところがあればソースを読んで欲しい。はじめてプログラムをする方などは面食らうかもしれないが、そんなに難しいことはしていないので読めると思う。思いたい。

当初の動機にあった機械高度化に関する議論に致る前の前の段階で、ただ、安定して動くことすら難しいところで終ったのは悔やしい。ランダム性はあっても、こんなにカオス風に動くとは想定していなかった。当初、どの分野もまず利益が出るだろうと思っていたら、それすら難しそうなのには驚いた。これでは次の理論的な解析に進めない。

こんな状況の Toy プログラムを公開して意味があるのか…と迷いもしたが、ググると案外、このようなシミュレーションはなされていなさそうなので、他の方が「失敗事例」として参照できるよう公開しておくことにした。もし万一、ここから発展させて何か成果を出せる人が出たとしたら、私はうれしい。その人が優秀であることを私は疑わない。


参考


Python については私はまだ初心者で、ネットの情報にいろいろお世話になった。マルクス経済学以外のミクロ経済学については、以前にいろいろ読んでいてお世話になっているが、特に今回これといって参考にしたわけではないので、ここに書名は出さないでおく。

経済原論』(富塚 良三 著, 有斐閣大学双書, 1976年)。このシミュレーションのキッカケとなった本。…といってもこの本を勧めることはしない。正直、クドい。「経済原論」では、平井規之他の有斐閣Sシリーズの本が私にはわかりやすかった。

外作用的簡易経済シミュレーションのアイデアと Perl による実装》。 simple_market_0.pl。私が以前書いた経済シミュレーション。今回以上の独自理論に基づく、ほぼ私にとっての「黒歴史」。更新したいがいつになることやら…。



ライセンス


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

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


アーカイブ


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

更新: 2018-03-19,2018-03-21
初公開: 2018年03月19日 17:04:07
最新版: 2018年03月21日 01:51:05

2018-03-19 17:04:10 (JST) in 経済学 | | コメント (3) | トラックバック (0)

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

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

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

トラックバック

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

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

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

コメント

drama 初公開:micro_economy-20180319.zip。バージョン 0.0.1。

ひとこと [cocolog:89067097] に、今回のことの感想を書いてたりもしますので、よろしければそちらもご覧ください。

投稿: JRF | 2018-03-19 17:39:35 (JST)

diamond 更新:micro_economy-20180321.zip。バージョン 0.0.2。

micro_economy_1sd.py を足した。

あと、上のコメントに書いた「感想」のひとことにも書いたのだけど…、

「ミクロ経済学」のシミュレーションと言っているのには、ちょっと語弊がある。パレート最適などのミクロ経済学の特徴的な概念を使っているかと言えばそうではなく、実際には経済原論…基礎的な経済学の原理である需要と供給の関係に触れているだけである。しかし、「経済原論」と言ってしまうと、今はマルクス経済学のことになってしまうようで、それもまた違うとして、その言葉を避けたのだった。

誤解を招く表現であることについては申し訳なく思うが、その辺の事情を斟酌していただければと思う。

投稿: JRF | 2018-03-21 01:54:42 (JST)

chair 更新:micro_economy-20180322.zip。バージョン 0.0.3。

micro_economy_1sd.py のみの更新。資本家の debt について計算し忘れがあったのを修正。

どうしようかと思ったが、それのみの更新なので、他はバージョンナンバーは上げなかった。

あと、わかっている不具合というか…、現在、失業者数が 0 になった場合、そこから回復しようがないアルゴリズムになっている。この点は改めるべきかもしれない。動く範囲を失業者数の +50% - -50% ではなく、単純に +100人 - -100人にするとか…。でも、課題によってそこが問題になるようならそう変えればいいだけの話という気もするので、今回は変更を見送った。

投稿: JRF | 2018-03-22 17:40:26 (JST)

コメントを書く



(メールアドレス形式)


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


ランダムことわざ: 鶴は千年、亀は萬年。