留学・音ゲー・研究備忘録

heine98の音ゲー・研究・留学の記録。Juliaとかlatexとか使います。

Consumption Equivalence

経済政策の変更や、市場の構造変化がもたらす(2つの定常状態間の)厚生変化のついてよく用いられるConsumption Equivalence。もしモデルで労働供給が外生だった場合、period utility functionは


u(c) = \frac{c ^ {1- \sigma}} {1- \sigma}

であれば、


v _{0} = E _{0}\sum _{t=0}^{\infty} \beta ^{t} \frac{c ^ {1- \sigma}} {1- \sigma}

が生涯期待効用なので、\epsilon をCEとすれば


v _{1}  = E _{0}\sum _{t=0}^{\infty} \beta ^{t} \frac{(c (1+ \epsilon)) ^ {1- \sigma}} {1- \sigma} = (1+ \epsilon)^ {1- \sigma} v _{0}

から


\epsilon  = \left( \frac{v _{1} }{v _{0} } \right) ^{\frac{1}{1- \sigma}}-1

になる。 問題は、労働供給が内生な場合だけど、Conesa, Kitao, and Krueger(2008)はutility functionが


u(c,l) = \frac{(c ^{ \gamma} (1 - l ) ^{1- \gamma})^ {1- \sigma}} {1- \sigma}

とした上で、彼らのpolicy experimentでは労働供給の変化が小さいことを主張して


v _{1} (c _{1},l _{1}) = E _{0}\sum _{t=0}^{\infty} \beta ^{t} \frac{ ( ( (c _{0} (1+ \epsilon)) ^ { \gamma} (1- l _{0})^{1- \gamma} ) ^{1- \sigma}  }{1- \sigma} = (1+ \epsilon)^ {1- \sigma} v _{0}(c _{0},l _{0})

とみなして


\epsilon  = \left( \frac{v _{1} }{v _{0}} \right) ^{\frac{1}{(1- \sigma)\gamma}} -1

としている。

ただし、実際には、ここからCVをlabor fixedでcだけ変化した分CVcと、そのあとlが変化した分CVlに分解しているので、単純にCVを求めるのではなく、その2つの和がCVとしてレポートされてるのかも。


v _{1} (c _{1},l _{0}) = E _{0}\sum _{t=0}^{\infty} \beta ^{t} \frac{ ( (c _{0} (1+ \epsilon _{c})) ^ { \gamma} (1- l _{0})^{1- \gamma} ) ^{1- \sigma} }{1- \sigma} = (1+ \epsilon _{c})^ {1- \sigma} v _{0}(c _{0},l _{0})


v _{1} (c _{1},l _{1}) = E _{0}\sum _{t=0}^{\infty} \beta ^{t} \frac{ ( (c _{1} (1+ \epsilon _{l})) ^ { \gamma} (1- l _{0})^{1- \gamma}  ) ^{1- \sigma} }{1- \sigma} = (1+ \epsilon _{l})^ {1- \sigma} v _{0}(c _{1},l _{0})


\epsilon = \epsilon _{c} + \epsilon _{l}

プリコネまとめ

そろそろ中級者を名乗ってもいいだろうという状況になってきたので、なにをしたいのかじっくり考えたい。

スペック

  • プレイヤーレベル106
  • 育成状況

    • 無印カオリ星2 lv104 R10
    • クロエ 星3 R10 lv103
    • ペコリーヌ 星3 R10 lv103 専用30
    • エリコ 星3 R10 lv103 専用30
    • キョウカ 星4 R10 lv102
    • ムイミ 星3 R10 lv102
    • ノゾミ 星3 R10 lv102
    • 無印マコト 星4 R11 lv101
    • 水着カオリ 星3 R10 lv101
    • カスミ 星3 R10 lv101
    • ハツネ 星3 R10 lv101
    • 無印ミヤコ 星3 R10 lv101 専用30
    • ネネカ 星5 R10 lv100
    • ジータ 星3 R10 lv97
    • シオリ 星3 R10 lv97
    • コッコロ 星2 R9 lv74
    • レイ 星3 R10 lv60
    • キャル 星2 R9 lv60
    • ユイ 星2 R8 lv54
    • サレン 星3 R8 lv52
    • 以下省略
  • クリア状況

    • メインクエ
      • ノマ18−8
      • ハード10−2
      • ダンジョンExtremeボス未踏
      • 探索lv8
      • バトルアリーナ/プリンセスアリーナ 1500前後
      • ルナの塔 66階
      • イベントハードボスワンパンOK

こんな感じ。

さて、そもそも今月初頭まで9体くらいしか育成していなかったので、そろそろキツイ&クラバトでダメージ重視にすれば1周目4体目までなら100万出せることに気づいたので、クラン入り直してもっと上を狙おうと思ってから暗中模索。 何がしたいのかということを真剣に考えると、以下のような感じになる。

  • クラバトで貢献したい
  • ダンジョンExtreme踏破
  • キャラの才能開花を急ぐ
  • メインクエすすめる

ただ、冷静に考えて今月のクラバトで貢献するのは無理であるという考えが強まってきた。そもそも、あれは星5R14専用装備Maxにしてかつサポートを借りることでダメージを上げることができるものであり、この育成状況下では今月のクラバトで1段階目平均100万だせるか怪しい。しかも新しいクランでは2段階目3段階目に突入するアクティブなところのため、2段階目以降未経験なことからも何も予測できない。

となると、大まかにはキャラ育成に舵を切らざるを得ず、そのためにはメインクエを進めつつハードでメモピを集めることに特化したほうがいい気がする。 育成を進めることでダンジョンExtremeボスの討伐可能性が上がるのも事実である。

ただ現状イベントが多い関係で、R11にするのはかなり厳しい(マコトだけでもかなり時間がかかった)。また、同様の理由で上に上げたキャラ+αをlv100前後R10に引き上げるにはまだ時間がかかる。加えてメモピ回収にはハードクエを回る必要があるが、1日3回までの制約がかなり厳しい(女神の秘跡はかなり減少してしまった)。

ダンジョンExtreme攻略もかなり中期的な目標になってしまった今、もうすこし短期的な目標がほしいものであるが。。。

なお、Extremeボスにミヤコ単騎で行く方法を調べたが、手持ちで半分削ってからはまだ試してないので、今日やってみるつもりではある(HP50%切らせてからじゃないと、UB手動にしてもミヤコの無敵状態と最後の雷のタイミングを合わせるのがかなり厳しいことがわかった)。

なんか面白い目標ないかな〜。もしくはたまたま見つけた先輩岸くんさんアドバイスいただけたら幸いです。

FGOはイベント以外完全放置中。

MIT shockのTransition Path

Transition Pathを計算するとき、backwardの最初の数回のitereationで失敗した場合はFOCの式が間違っている。 Transitionのコードが回るのにDistribitionがうまく行ってない場合、期間が不十分な可能性がある。しかし、shockなしでもdistributionがうまく収束していない場合は、おそらくStationary State を計算したときのtolが甘すぎるので、tolをキツくして計算し直すときれいになる。

あと、Guessのアップデートは、まずは古いGuessに1に近い状態で始めないと、0.8とかでも失敗することある。

Mac起動時にHomebrewを自動でアップデートする

毎回チェックするのだるいし、定期的になんとかしてほしいので調べた。 シェルスクリプトで書いておいて、スタートアップに追加しておけばいいらしい。

任意のディレクトリに

#!/bin/sh
sleep 30
brew update
brew upgrade

を書いたファイルを保存して、システム環境設定のユーザーとグループ->ログイン項目からそのファイルを自動的に開くように追加しておけば良い。 ついでに、ファインダーで任意のディレクトリを開くには、command+shift+gを押すと指定できる。

Mac 起動時に Homebrew を自動アップデートする - Qiita

カリブレーション

大体DFOLSがうまく行かないのは、初期点の問題かlocal minimaの方向へ行ってしまっているので、そのあたりを考える。 今回の場合、常識的な観点からnon-tradable goodsの価格がだいたい1くらいのはずなのに30の方へ行ったりしてたらそれはlocal minimumかなんかがそっちのほうこうになるということになる。なので、解を探す範囲を狭めて、かつ初期点を動かすことでそっちの方へ行かせないようにすることが重要。

経済学と競技プログラミングの動的計画法

個人的に競技プログラミング動的計画法(Dynamic Programming)と経済学の動学的最適化の違いがしっくり来なかったのだけれど、今日ネットを眺めていたらわかった。

競技プログラミングではグラフのような構造でどの経路が最短かとか、ナップザック問題とかを指して、動的計画法と呼んでいるらしい。そしてそれらの代表的アルゴリズムの中には深さ優先探索とか幅優先探索、全探索、なんかをよく用いる気がする。この場合、選択肢は離散で、次の道A、B、C…と可算有限個であるからだ。

対して、少なくとも大学院レベルの経済学では、離散ないし連続時間の経済主体の最適化問題を指して動的計画法と呼ぶのだが、この問題のキモは、答えがある値で決まるのではなく、基本的に離散時間のモデルでは関数のセット(解析解は稀であり、関数の形を数値計算で解く)になる。

つまり、解は、もし今日の貯蓄(所与の変数)がこれくらいあって、そしたらどのくらい消費してどのくらい明日への貯蓄にしますか?今日の貯蓄が変わったら、どのくらい消費と明日への貯蓄が変化しますか?みたいなことを調べるのが目的になる。*1 これは、経済学で扱うのはすべて連続変数なので、選択肢が非可算無限個で、その中から最適な選択を示すとなれば必然的に関数形になるからだ。

んで、基本的にマクロ経済学での最適化問題(家計の最適化問題など)は解析的に解けない(数式で表せない)ので、少なくとも今日の貯蓄という所与の変数の方はめちゃくちゃ細かいグリッドで離散化して、その元で最適な選択を数値計算で導いて、擬似的な関数を得るということになる。

数学的には、(不等号)制約付き関数方程式を解くことであり、これはベルマン方程式で書くことで再帰的になり(ショックがある場合は定常なマルコフ過程であるとする)、これを元に関数の形を解として導くことになる。

競プロで動的計画法って言われて俺に馴染みがなさすぎたのは以上のような理由でした。

そんなことより誰か猿でもわかるように連続時間の動的最適化について教えてくれ

*1:もしくは、今あなたの目の前にケーキ1ホールがあって、これから1分毎にどのくらい食べていったらハッピーさが最大化されますか?みたいなのも超初歩問題で頻出

2つ以上のマルコフ過程

経済学において確率変数を扱うことは多い。特にAR(1)過程に従う外生ショックが主流だ。例えばz _ {t+1}がAR(1)過程であるとは


z _ {t+1} = \rho z _ {t} + \epsilon _{t+1},\ \epsilon _ {t+1}\sim\mathcal{N} (0,\sigma^2),\ \rho\in(0,1)

である。 ショック項が正規分布に従う場合、z _ {t+1}も連続確率変数となり数値計算では扱えないので、Tauchen (1986)やRouwenhorstの手法でマルコフ過程として離散化することになる。

今回、いつもわからなくなる遷移確率行列と、2つ以上のマルコフ過程が合わさったときの遷移確率行列の作成、動的計画法におけるインデックスゼーションについてかんたんにまとめておきたい。

  • 遷移確率行列のおさらい

n状態のStationary Markov Processを考える。遷移確率行列\Gamman\times n行列で


\Gamma=
\begin{bmatrix}
p_{11} & p_{12} & p_{13} & \cdot, p_{1n} \\
p_{21} & p_{22} & p_{23} & \cdot, p_{2n} \\
\cdots \\
p_{n1} & p_{n2} & p_{n3} & \cdot, p_{nn} \\
\end{bmatrix}

数学的に正しい定義は縦が今期の状態ごと、横に来期ごととなる。すなわち、このp _ {ij}は状態iから状態jへの推移確率になる。 覚え方は"Row(行) is Now"。行は今期の状態を所与とした確率になる。

経済学、特にHeterogeneous Agents Modelでは非可算無限な経済主体を考える。例えば、各Stateにおけるagentsのmeasureを縦に積んだnサイズベクトルが\mu_{t}であるとする。この場合、このTransition probability matrixから求められる来季のDistributionは


\mu_{t+1}=\Gamma '\mu_{t}

となる。

同様に、Standard Aiyagari modelを考えた場合に、数値計算Value functionの期待値を考える場合は、Value functionの値を格納した行列Vn _ {a} \times n _ {y}としたとき、n _ {y}サイズの遷移確率行列\Gamma によって


\mathbb{E}[V_{t+1}] = V_{t} \Gamma'

で求められる。

V _ {t+1}(i,j)要素は、来季の期所(state variable)のassetがグリッドa _ {i}であったとして、今期のlabor productivity shockがy _ {j}だったときのValue functionの期待値)

  • 2つ以上のMarkov ProcessのindexとTransition Probability Matrix

Markov process2つを考える。この場合、Aiyagariの簡単な拡張として 2 exogenous states model(no aggregate uncertainty)とすれば、state variableはassetと2つのショックを入れて3つの(a,y,\epsilon)になる。

これを数値計算で解くときにValue functionやPolicy functionの次元を3次元にすればindexは簡単になるが、遷移確率の扱いが面倒くさくなるので、とにかく2次元にしたい。

仮定として、 
y\in ( y _ {1} , y _ {2} , ... , y _ {n} )  \ \epsilon\in ( \epsilon _ {1},\epsilon _ {2}....,\epsilon _ {m} )
とする、すなわち、yn個の、\epsilonm個の値を取れるとする。(上記でsetの{}が数式モードで出せなかった。)

このとき、縦にassetとして、横にexogenous stateを取った2次元行列を作成する場合、以下のような順序で取るのが好ましい。


(y _ {1}, \epsilon _ {1}), (y _ {2}, \epsilon _ {1}), ..., (y _ {n}, \epsilon _ {1}), (y _ {1}, \epsilon _ {2}), ..., (y _ {n},  \epsilon _ {2}), ... , (y _ {n}, \epsilon _ {m})

この場合、遷移確率行列が\Gamma _ {\epsilon,\epsilon'}  \otimes \Gamma _ {y,y'}ですぐに求まる。3つ以上のMarkovの合成も、同様にして


(y _ {1}, \epsilon _ {1} z_{1}), (y _ {2}, \epsilon _ {1} z_{1}), ..., (y _ {n}, \epsilon _ {1} z_{1}), (y _ {1}, \epsilon _ {2} z_{1}), ..., (y _ {n},  \epsilon _ {2} z_{1}), ... , (y _ {n}, \epsilon _ {m} z_{1}), ... ,(y _ {n}, \epsilon _ {m} z_{l})

とすれば、遷移確率行列が\Gamma _ {zz'} \otimes \Gamma _ {\epsilon,\epsilon'} \otimes \Gamma _ {y,y'}となるはず(俺がクロネッカー積の定義を間違えてなければ)

問題は、何列目が一体どのstateを指すのか、もしくは任意のy,\epsilon,zの組み合わせは何列目に当たるのか(ここなくても今後困らない気がしてきたから気が向いたら書く、必要な場合は、A practical Guide to Parallelization in Economics (Fernandez-Villaverde & Valencia 2018)の記事内かGithubのサンプルコードを見るとどうゆうふうに次元を下げられるかが乗っているので、そんな感じで。