Splittet Değer Fonksiyonu ve Hamilton-Jacobi-Bellman denklemi


6

Genel problem

Let kR+ , durum değişkeni olarak sabit bir noktasına (eyer) ve bir değer fonksiyonunu. Sorun, değer fonksiyonunun, anahtarın sabit noktada olduğu iki ayrı fonksiyonel forma sahip olmasıdır.k=kv(k)

  1. Tez konusu problemler için referansınız var mı?
  2. Aşağıdaki modele bir çözümün yaklaştığını düşünüyor musunuz?
  3. Kontrol / politika işlevinde bir bükülme ne olacak?

model

Let ve durumudur. kontrolleri ile olan iki oyuncu var . Üretim . Ücretler ve faizler, , ve , sırasıyla. Devlet için hareket yasası da bir eyer var burada bazı parametrelere bağlı. Fayda fonksiyon tarafından verilir k [ 0 , 2 ] i = 1 , 2 τ i[ 0 , 1 ] f : [ 0 , 2 ] R + w 1 = f ( k ) - f ( k ) k w 2 = f ( 2 - k ) -t[0,)k[0,2]i=1,2τi[0,1]f:[0,2]R+w1=f(k)f(k)kr, 1 = f ' ( k ) - τ 1 r, 2 = f ' ( 2 - k ) - τ 2 ˙ k = r 1 - r 2 . k = 1 , τ 1 = τ 2 τ ı uw2=f(2k)f(2k)(2k)r1=f(k)τ1r2=f(2k)τ2

k˙=r1r2.
k=1, τ1=τ2
τi
u(gi,ci)=h(gi)+ci
burada . Genel yarar: ve tüketim ve sahip bazı bedelini gösteren . Geri ödeme fonksiyonları daha sonra ileg i = τ i k c 1 = { w 1 + r 1 k + 1 k [ r 2 - a ( θ ) ] d θ ,ug>0<ucgi=τik c2={ w 2 + r 2 ,
c1={w1+r1k+k1[r2a(θ)]dθ,k[0,1)w1+r1,k[1,2]
bir:[0,1]R+,b:[1,2]R+
c2={w2+r2,k[0,1)w2+r2(2k)+1k[r1b(θ)]dθ,k[1,2]
a:[0,1]R+, b:[1,2]R+j ı ( τ i , τ j ) = ∞ iken 0 E - ρ t ( h ( g i ) + c i ) d t ρ > 0θ[0,2]
ji(τi,τj)=0eρt(h(gi)+ci)dt
ρ>0zaman tercih oranı. Ve değer işlevleri Her oyuncu için Hamilton-Jacobi-Bellman (HJB) denklemlerini ayarlama \ başlar. {align} \ rho v_i (k) = \ max _ {\ tau_i} h (g_i) + c_i + v'_i ( k) \ dot {k}. \ end {align} Öncelikle, \ tau_2 denge seviyesini \ tau ^ * düzelteceğim . Sonra oyuncu 1 için HJB okurρ v ı ( k ) = maks τ i h ( g i ) + c i + v ' i ( k ) ˙ k . τ2τ*
vi(k)=supτiji.
ρvi(k)=maxτih(gi)+ci+vi(k)k˙.
τ2τ

ρv1(k)=maxτ1h(g1)+c1+v1(k)k˙={maxτ1h(g1)+w1+r1k+k1[r2a(θ)]dθ+v1(k)k˙,k[0,1)maxτ1h(g1)+w1+r1+v1(k)k˙,k[1,2]

Focs edilir

τ1={(v1(k)+k)1,k[0,1)(v1(k)+1)1,k[1,2]

İlk geçiş uygulaması

Benjamin Moll tarafından sağlanan algoritmayı kullandım . Referans için: optimum büyüme modelinde değer fonksiyonu 8441 yinelemede bir araya geldi ve 0.825062 saniye sürdü.

Tekniği ile CB Üretim fonksiyonunu kullandım, yani ( için bir sorunum var) ve log tercihlerini a la . Bir içeren doğrusal bir maliyet işlevi . Zaten 21 dakika süren 200 tekrardan sonra durdum. İlk panelde 1. ve 200. değer fonksiyonunun tahminidir. İkinci panel, değer fonksiyonu (yakınsama eğilimi) arasındaki farkı gösterir. Ve gerçek politika fonksiyonu ist son paneli, diyelim ki, (en dolaştırmayın not bir k f ( k ) = k α < 1 U ( g , c ) = ln g + c bir : θ dönüs ümü altında, ( 1 - θ ) τ 1 ( k ) K = 1 = k *f(k)=kαAkf(k)=kα<1u(g,c)=lng+ca:θ(1θ)τ1(k)k=1=k). Sezgisel bir bakış açısıyla doğru gibi görünüyor. Diğer bir deyişle, eğer sermaye stoku gerçek anlamda küçükse ve bunun tersi olursa, bir ülke vergi oranını düşürür. İşlemin neden bu kadar zaman alıcı olduğundan emin değilim.
Ölçek

Güncelleştirme

Hızı arttırmayı başardım. Sonra şebekenin menzilini, devletin ilgili uç noktalarına ve ızgara noktalarının sayısına kadar arttırdım ve hafızamı alana kadar VFI'yi (40000 Yineleme) koştum. İlk panel ilk ve son değer işlevini içerir. Algoritmalar . Politika işlevindeki ilginçlik hala devam ediyor, ancak şekil şimdi biraz farklı.|v40000v39999|=0.0077dnm2


İhtiyacınız yolu ben 20. Eğer örtülü bir yöntem kullanıyor musunuz, diyelim ki, daha ihtiyacım olmadı, çok fazla tekrarlamalar? Nedir senin ? Δ
FooBar

Yanıtlar:


2

Sayısız şekilde çözülen sürekli bir zamanda bir gariplik olayları gördüğümü sanmıyorum. Aguiar & Amador (2014) , HJB'lerinde bir sıkıntıya sahiptir, ancak HJB'lerini analitik olarak çözerler.

onaylama

Moll ve arkadaşlarının algoritmasının ne kadar doğru olacağını bilmiyorum. Büyük olasılıkla garip davranışlarda garip davranışlar elde edersiniz, ancak asıl işlevsel formun şüpheli olup olmadığı ve eskiden "tamam görünüyor mu?" Olduğunu iddia etmek zorunda kalacaksınız.

Bükülmenin iyi görünüp görünmediğini daha iyi kavramak istiyorsanız, onu daha aşırı yapın . Denklemlerinize girmeden, ilk kısmın dışbükey, ikinci kısmın ise doğrusal olduğu anlaşılıyor. İlk bölümün eğriliğini arttırın, böylece bükülme çevresinde hala doğru görünüp görünmediğini daha kolay "görebileceksiniz".

Ayrıca, birinci dereceden ve ikinci dereceden türev için sayısal emsallere kesin olarak bakmalı, yaklaşımın birinci dereceden ve ikinci dereceden farkı adım boyutuna bölünerek ölçülmelidir. Dolandırıcılık çevresinde doğru işaretleri var mı?

Vurguladığım bir şey, ilginçlik etrafında birçok ızgara noktaları olması. Bununla birlikte, doğrusal olmayan bir şebekeye sahip olduğunuzda algoritma zorlaştığından (ızgara adım boyutu artık bir sabit değil, bir vektör olduğundan), buna değmeyebilir ve genel ızgara noktalarını kaldırıp doğrusal tutabilirsiniz .

hız

Son olarak, gerçekten A ve B matrisleri için seyrek matrislere sahip olmalısınız. Dakikada 10 tekrarlama gerçekten yavaştır. Anlamanız ve uygulamanız belki de 30 dakikanızı alır (daha önce hiç seyrek sistemler ile çalışmadıysanız), ancak bu sürenin sonunda yaptığınız kodu çalıştırdıktan sonra zaten.

Sorun devam ederse, kodlama diliniz için profillere bakın. Python için bu güzel bir çözüm. Her şey çok seyrek olsa bile, belki de yineleme döngüsünde ihtiyaç duymadığın bir matrisi unuttun. Bu benim için geçerliydi ve büyük ızgara boyutlarında tek bir yeniden başlatma işleminin çok zaman aldı. Profiler size ne olduğunu söyleyecektir.


Hız ile ilgili: Ben matlab kullanıyorum. Senaryo içindeki fonksiyonları tanımlarım. Örneğin, sabit noktada ayrılmış yardımcı fonksiyon için, U1_1(k, tau1, tau2) = log(k*tau1) + f(k) - k*tau1 + C1(k, tau2); U1_2(k, tau1) = log(k*tau1) + f(k) + df(k)*(1-k) - tau1;daha önce ve türevlerinin tanımlandığı aşağıdaki fonksiyonlar var . Sonra yineleme döngüsünde where . Ekstra işlev dosyaları kullanmalı mıyım? = k f(k)f(k) = k^a; df(k) = diff(f,k);u1(1:iss-1) = U1_1(k(1:iss-1), tau1(1:iss-1), tau2(1:iss-1)); u1(iss:I) = U1_2(k(iss:I), tau1(iss:I));k(iss)=1=k
clueless

Genel Soru: f(k)=k^aÇalışma betiğinizin başında tanımlamak work.mveya ihtiyaç duyduğunuzda içeride bulunduran ve onu fun.miçeren ekstra bir fonksiyon dosyasını kaydetmek arasındaki anlaşma ve ana fark nedir ? function y = f(k) y = k^a;work.m
clueless

Clueless, sizi en çok neyin yavaşlattığını değerlendirmek için bir profile bakmalısınız. Eskiden Matlab'la çalışırdım ve kurallar vardı, her bir ilk başlatmanın bir ek yük ile geldiği kuraldı, döngülerde işlevleri çağırmak istemezdiniz çünkü çok fazla verim kaybedersiniz. Ancak, bunun şimdi daha iyi olduğunu duydum ve ayrıca, bu yöntemle sıradan Değer-İşlev yinelemesinden çok daha az yineliyorsunuz.
FooBar

En büyük fark, stillerden biridir. İşlevlerinizi ayrı bir dosyaya koymak ve yüklemek, ana dosyanızı daha okunaklı ve yapılandırılmış hale getirir.
FooBar
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.