動態規劃初探

2021-08-28 08:56:37 字數 1345 閱讀 4831

為了解決多階段決策問題,我們可以使用窮舉法和動態規劃方法。

但是當決策和階段數量達到一定程度後,窮舉法帶來的龐大計算量極大的降低了我們解決該類問題的效率。為了避免窮舉法帶來的龐大計算量,於是我們引入了動態規劃方法去解決該類問題。

首先,我們需要了解什麼是多階段決策問題。這不難理解,這裡我舉個簡單的例子來解釋。我們常見的該類問題有圖求最短路徑問題和揹包問題。這裡我用求最短路徑問題來舉例。

這是一張帶權的無向圖,我們需要從a點出發到d點,求權值和最小路徑。這是乙個典型的多階段決策問題。當然,該圖並不複雜,我們可以窮舉出它的解路徑為a—>b1—>c2—>d。a—>b為階段,選擇最小權值即為決策。

當然,我們還可以用動態規劃方法中的逆序遞推的方法來求解。

了解了多階段決策問題,我們知道需要建立動態規劃模型去解決該類問題,在這之前我們需要了解動態規劃的基本概念和基本原理。

要了解基本概念我們可以從動態規劃模型入手,乙個多階段決策問題的動態規劃模型通常包含有以下要素:

階段:處理乙個問題需要用到動態規劃方法時我們需要合理地將該問題劃分為若干個相互聯絡的階段。

狀態:乙個階段開始時過程所屬的自然情況或客觀條件。比如,在以上例子中b—>c階段的初始狀態集為。

策略:策略是由每個階段決策組成的變數序列。

狀態轉移方程:決策過程中需要把決策轉換為狀態轉移方程,使決策更具有普適性,方便於遞推求解。當然,該多階段決策過程必須具有無後效性(馬爾可夫性)。

指標函式:也稱為值函式,用來衡量多決策階段中每乙個階段決策的效果。

如何建立動態規劃模型?

這是個關鍵問題,這裡我給出的步驟如下;

根據時間或空間的自然特徵,把問題恰當的劃分為若干個階段,使問題能夠轉化為乙個多階段決策問題(有一些應用問題本身是與時間因素無關的靜態規劃問題,但我們可以人為的引入「時間變數」將其轉化為動態規劃問題)。

正確選擇狀態變數,確定狀態集合。(選擇標準:能夠描述過程的演變特徵,滿足無後效性及各個階段狀態變數值可以間接或直接獲取。)確定決策變數及被允許的決策集合。

確定正確的狀態轉移方程。

正確的寫出指標函式。

確定基本方程,即最優值函式滿足遞推方程及端點條件。

逆序遞推求解。

注:本文只是對動態規劃的基本原理和建立模型的基本步驟進行歸納整合,如果想看一些例子加深理解。連線————————————————————————》

另外,想練練手的話推薦leetcode題庫第174題與887題。

動態規劃初探

最先聽說動態規劃還是在研究生的最優控制課上,課上介紹了用動態規劃解決最優問題。其實動態規劃 dynamic programming dp 和分治方法類似,都是通過組合子問題來求解原問題。不過動態規劃應用於問題重疊的情況,即不同的子問題具有公共的子子問題,每個子問題只求一次,而不必重新計算。就我個人的...

動態規劃初探 揹包問題

在為期乙個星期的acm集訓之後,我就這樣做了乙個逃兵hhhh 在這乙個星期裡面,學長講了快速排序,二分三分搜尋,矩陣快速冪,線段樹,bfs 廣度優先搜尋 和dfs 深度優先搜尋 鄰接表和雜湊表,結構體和優先佇列,揹包問題和動態規劃。其中講快速排序那天我還在考試,就沒有去聽,第二天找學長的時候也聽得似...

動態SQL初探

1 普通sql 語句 select customerid,companyname,contactname,address city,phone from dbo.customers goexec select customerid,companyname,contactname,address ci...