動態規劃如何應用於經濟學研究?

本人商學院博士狗,微觀和計量只到中級層次,宏觀一竅不通。妹子PhD in Economics, 聽她說這學期高宏學的全是這個,聽得我一愣一愣的。

1. Dynamic programming在經濟學裡如何應用的?

2. 除了在經濟學,在別的領域是如何使用的?

我自己從沒在本領域裡看到過用這個的文章。

經濟系的大神們能否幫助解答一下,讓我也在妹子面前吐氣一回~

~~~~~~~~~~~~~~~~~~~~~~~~~分割線~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

謝各位答案,跟妹子聊天后還是被虐成了狗~


謝邀。用途十分廣泛,不管是在宏觀還是微觀、產經等等。

比如最基礎的一個問題是,家庭應該怎麼選擇自己的儲蓄?每個人都不知道自己啥時候翹辮子,所以總要有點儲蓄的。那麼問題就來了,今天的消費跟明天的消費不是一樣的,今年能買一個小米的錢,明年能買一個蘋果了。那麼家庭該怎麼選擇呢?這個問題推廣開來就是,假設一個一直活著的家庭,收入為y,在給定收益率r的情況下該消費多少?

因為今天的消費跟明天的消費不一樣,所以家庭需要同時選擇每一期的消費,也就是說同時解一個無窮個未知變數的規劃。這個時候經濟學家發現,這個問題可以簡化:這個問題等價於選擇今天的消費,來最大化今天的效用以及未來的期望的value function,也就是動態規劃的內容。

當然,動態規劃的好處並不是說建模更精確,因為用動態規劃建模跟用上面的同時選擇無窮個變數的建模是等價的,那為什麼還要用動態規劃呢?因為動態規劃好編程啊!特別在無窮期的情況下,你可以通過value function iteration or policy function iteration來把value function and policy function計算出來,之後你再做模擬、計量就好做了。

這只是其中的一個例子。其他例子包括任何的需要動態選擇的情況,比如:建模勞動力市場的搜尋模型、企業選擇投資、出口的行為等等,還包括一大類動態離散選擇模型、可再生、不可再生資源的使用等等等等。

說句稍微誇張的話,沒有動態規劃就經濟學就沒有動態。


一個phd 三樣東西擁有超過兩樣就夠揚眉吐氣了

錢 文章 伴侶

商學院不差錢 還有phd女盆友 已然花式虐狗 不用學動態規劃啦...


動態規劃本身就是決策的一種方法,基本思想就是你在某一時刻的最優操作取決於到目前為止的問題的發展情況,你在當前所有可選選項中選個最好的。這個思想其實在很多基本的隨機過程演算法裡面都有體現,你也知道隨機過程在金融和經濟中多麼重要。你如果死摳CS教材裡面什麼子問題最優解疊加這種定義當然不會理解動態規劃跟經濟有啥關係了。


CS狗已驚呆,你們商科還玩這個?excited!


特多。

不僅是經濟,大量的動態優化問題都可以寫成動態規劃方程 HJB(-Issac) equation。比如最優路徑問題,動態效用最大化問題,最優執行策略,微分博弈,平均場博弈論,最優停時問題,投資組合選擇策略,美式期權,搖擺期權,交易費用,期權複製問題,庫存問題,隨機目標問題,脈衝控制,公司最優分紅...只要你的問題是動態的且狀態由微分方程或者差分方程驅動,基本都有動態規劃方程。

抽象意義的動態規劃方程來源於一個nonlinear markov semigroup。

有時間陪您細說。


提供個在貨幣經濟學中的應用。

在某一期中,央行通告了自己的政策目標,比如目標是維持5%的通脹率,然後公眾根據這個通告以及其他可以利用的信息,形成了這一期的通脹預期( 這個預期不一定為5% )。

這時候央行有兩個選擇,其一是根據公眾的通脹預期最大化央行自身的目標函數,也就是選擇欺騙,不遵守公告,結果是這一期央行效用提升,但公眾會根據這次欺騙的表現調整下一期預期央行遵守承諾的概率,可以理解為聲譽下降。

其二是選擇遵守承諾,這一般不是這一單期目標函數的最大化選擇,但這會使公眾調高下一期央行遵守承諾的概率預期,可以理解為聲譽提高。

給定央行目標函數u,值函數設為v(t)=u+E【v(t+1)】再結合其他條件,以及具體函數形式和概率的具體調整方式,這就是一個利用動態規劃來研究央行信譽的模型。一般的,求解具體問題,可以寫出一階條件,再對數線性化之後處理。


DP本來就是宏觀的一幫人用來跳大神裝逼神器,可以把經濟上的理性期望等些概念數學化,模型化,比如現在宏觀上流行的模型DSGE,模型本身很elegant,無數參數,數學也很複雜,但算的準不準,誰也不知道。DP逐漸被用到別的經濟領域,比如finance,OM,個人感覺逐漸有濫用的趨勢,很多作者不管問題合適不合適,整個DP模型顯示一下智商先。


看了問題發現其實是來問怎麼在妹子面前裝X的

不懂經濟,不懂編程,什麼也不懂,但是裝X我會的。

不過動態規劃至少是一個優化問題吧,不管怎麼樣,會有領域不存在優化問題嗎?

Okay那麼好辦啦,首先你要知道動態規劃的最基本原理然後把它上升到整個優化的高度,什麼convex呀,stochastic呀,simplex呀什麼都來者不拒,看看什麼knap sack呀,TSP呀,甚至更廣泛的。

Okay第二步,切記千萬不要在內行面前裝X,會死的很慘的。所以問主你這個方向有一半是錯的,怎麼能問在經濟中的應用呢,你要直接問在經濟之外的應用。結合自己的專業知識,開始編啊,你妹子有經濟模型,你不會有供應鏈,金融模型的撒。

但是這一切都是錯的!

樓主你有妹子不知道珍惜,你還抬杠。phd之間的相互鄙視是世界上最沒有意義的事情,明明大家做的事情都沒什麼用,何必呢?

你要是覺得妹子厲害你誇一下妹子就好了嘛,何必要楊梅突起

Ps樓主要是真想在妹子面前揚眉吐氣到把妹子嚇跑的程度,可以私心我教你四大力學咱倆研究一下看看能不能給你們應用一下,么么大

祝好


宏觀不了解 不過在微觀里也有不少應用的...比如這篇在代理人問題中的應用A continuous time version of principal agent problem

商學院裡面搞dynamic programming的應該更多了 OM和Fin里很多模型都是寫個HJB equation然後找數值解


你連貝爾曼方程都不會寫,怎麼吐氣啊……


只會編程不懂商科,所以拿編程的東西來說說吧。

動態規劃說白了就是把複雜問題拆成一系列的簡單問題,那麼假如所有的簡單問題都是獨立的,則複雜問題的處理速度可以認為等同於所有簡單問題的處理速度之合。反過來,假設簡單問題並不都是獨立的,那麼直接處理複雜問題的時候可能會導致某些簡單問題被重複處理,這樣一來,複雜問題的處理速度大於所有獨立的簡單問題的處理速度之合。動態規劃就是利用這點來優化時間。

舉個在編程上很簡單又很多人了解的例子吧:素數判斷。

素數判斷可以說是大多數程序員入門時都會接觸的問題了。其演算法非常簡單:一個數假如只能被1和自己整除就是素數,否則就不是。

寫成演算法的偽代碼的話就是

FUNCTION BOOL IS_PRIME ( n )

FOR i = 2 TO n-1 STEP 1

IF n MOD i IS 0 THEN RETURN FALSE //"n is not prime"

END LOOP

RETURN TRUE //"n is prime"

END FUNCTION

然後我們又發現,對於一個數字n,只要不能被從2到n的平方根之間的數字整除,那麼就是素數,所以可以省略許多的計算量

FUNCTION BOOL IS_PRIME ( n )

FOR i = 2 TO SQRT(n) STEP 1

IF n MOD i IS 0 THEN RETURN FALSE //"n is not prime"

END LOOP

RETURN TRUE //"n is prime"

END FUNCTION

那麼假如要列出從2到n的所有素數的話,最直接的方法(複雜問題)就是把所有數都處理一遍(遍歷)

於是有了

FOR i = 2 TO n STEP 1

IF IS_PRIME(i) THEN PRINT i " is prime"

END LOOP

那麼可以看到,我們把所有的數字都算了一遍,而對於每一個數字i,我們又要把從2到i-1再算一遍,但是很明顯裡面有許多一眼就可以過濾掉的東西,比如除了2以外的所有偶數,那麼我們可以再減少一半的運算量

FOR i = 3 TO n STEP 2

IF IS_PRIME(i) THEN PRINT i " is prime"

END LOOP

從3開始,每次+2,這樣只計算所有的奇數就好了

到這裡為止,所有的演算法還都是圍繞著一般的優化思路,那麼我們要再繼續向前的話,就要開始用到DP的一些思路了。

繼續這個例子

對於一個數字n來說,前面說了,只需要計算從2到n的平方根是否能被n整除。那麼就像前面也提到的,這個過程明顯有許多重複的計算。比如說要計算101以內的所有素數

當判斷101是否是素數時,我們判斷 101不能被2整除,那麼2的所有倍數,包括4 6 8 10 .. 32 都明顯不能被101整除,所以說,所有2的倍數都不用再判斷了。

同理,101不能被3整除,那麼所有3的倍數也都可以跳過了

繼續,4已經被跳過,來判斷5的

再繼續,6跳過,判斷7

再來,8 9 10 全部跳過,11

..

以此類推,會發現只需要判斷小於等於101的平方根的所有素數就可以了。

那麼怎麼得到小於101的平方根的所有素數呢?在這個例子裡面,當我們尋找小於等於101的所有素數時,前面就已經找到過了!

所以我們用一個東西來存儲所有已經判斷過的素數,ARRAY_PRIME[]

然後在判斷素數的時候

FUNCTION BOOL IS_PRIME ( n )

INT k = SQRT(n)

FOR i = 0 TO ARRAY_PRIME.SIZE STEP 1

INT p = ARRAY_PRIME[i]

IF p &> k THEN END LOOP

IF n MOD p IS 0 THEN RETURN FALSE //"n is not prime"

END LOOP

RETURN TRUE //"n is prime"

END FUNCTION

而在找出所有的時候

FOR i = 3 TO n STEP 2

IF IS_PRIME(i) THEN ARRAY_PRIME.INSERT(i)

END LOOP

這樣一來,就可以利用已經求得的答案,避免重複的數據處理來大幅度的提升處理速度了。


推薦閱讀:

什麼樣的創新能達到SCI的要求?
就讀電氣工程專業的碩士和博士是一種什麼樣的體驗?
有沒有人能介紹下東京大學的博士入學考試?
上海交通大學直博or新加坡國立大學PhD?
碩士研究生相對於本科生的差別,和博士研究生相對於碩士研究生的差別。區別有哪些?

TAG:經濟學 | 博士 | 動態規劃 |