本節實現乙個動態規劃問題實現。具體問題見上一節
的第三個栗子。這裡再次簡述:
在乙個時刻系統可以觀察到的有兩個量:剩餘資料報數量m以及通道狀態h。因此我們將二者聯合組成系統狀態(m,h)。那麼在每乙個時隙系統總共有2*(m+1)個狀態。每乙個狀態可能跳轉到下乙個時隙的某乙個或者一些狀態。跳轉判斷條件有:
在好通道下傳輸的代價
在好通道下不傳輸代價
在壞通道條件下傳輸代價
在壞通道條件下不傳輸代價
其實上述條件中的3可以忽略,因為在好通道條件下傳輸一定是最優的。故不可能在好通道條件下還不傳輸。所以我們的優化是為了對抗壞通道的。系統得到第i時刻的狀態,需要根據對未來的估計確定現在的控制(傳還是不傳?)。因此系統是基於n,n-1,…,i+1時刻的資訊來指導第i時刻的決策。
系統必須在n個時隙中傳完m個資料報。則沒有傳完的代價是非常大的。故: c(
m)={
0m=0
∞m>0
可得第n-1個時隙的狀態:
首先估計第n-1個時隙的開銷,此時有可能還剩0個資料報,即之前的時隙全部傳送完畢。可能還剩1個。可能還剩1個以上,否則將無法全部傳輸。所以剩餘1個以上的狀態無需計算,直接給最大值。剩餘0個不必傳輸,也就是代價為0。剩餘1個時,可能在好的通道條件下,也可能在壞的通道條件下。因此每乙個狀態需要計算2個(傳輸或者不傳輸)代價,並取最小值作為當前狀態的代價。
因此我們可以得到n-1時刻的每乙個狀態對應的開銷:
狀態值狀態開銷
(0,好)
0(0,壞)
0(1,好)pg
(1,壞)pb
其他+∞
其實從這裡我們就可以看出,動態規劃具有一定的導向。最終會將所有資料報都傳送完畢。
接下來我們來分析一般情況下狀態轉移。首先我們需要明確一般狀態的約束:
1. 每乙個狀態其剩餘資料報數量必須小於某乙個值(現在記為leftmax),因為我們必須保證最後乙個時隙之前資料報傳送完畢。所以,leftmax = n - t,當n-t < m時 leftmax = m。t代表當前時隙。超過leftmax的所有狀態都無法完成資料報的傳輸,因此代價為+∞
。 2. 每乙個狀態都必須有乙個最小值,因為每乙個時隙只能傳遞乙個資料報,所以第乙個時隙只能有m個資料報。第二個時隙最少只能有m-1個。。第t個時隙,最多只能有m-t+1個資料報,我們記為leftmin。低於這個數量不可能發生,因此代價為+∞
。 3.狀態跳**我們需要根據t時刻的狀態資訊計算t-1時刻的狀態資訊。(現在已知t時刻資訊)
t-1時刻狀態
分析方法
小於leftmin+∞
(i,好)
好通道一定傳(除非i=0)
(i,不好)
壞通道看情況:1、傳資料,則cost=pb
+t(i
−1,好
)×p+
t(i−
1,壞)
×(1−
p)2、不傳資料,則 cost = t(
i,好)
×p+t
(i,壞
)×(1
−p)
····
····
大於leftmax+∞
當計算到時刻1的時候即完成了動態規劃的狀態刻畫,此後只要在這個模型下,我們都可以利用上述狀態跳轉方式來對每乙個決策進行規劃, 使得整體開銷在平均意義上達到最優。
本人按照上述模型寫了乙份c++**,託管在這裡
,如果有務還請指教!
動態規劃(二)
之前的兩個問題都是用動態規劃方法解決的,那麼什麼情況下需要使用動態規劃呢?適應動態規劃方法求解的最優化問題應該具備的兩個要素 最優子結構和子問題重疊。用動態規劃方法求解最優化問題的第一步就是刻畫最優解的結構。如果乙個問題的最優解包含其子問題的最優解,就稱此問題具有最優子結構性質。使用動態規劃方法時,...
動態規劃(二)
矩陣鏈乘法問題 給定n個矩陣的鏈,矩陣ai的規模為p i 1 pi 1 i n 求完全括號化方案,使得計算乘積a1a2.an所需標量乘法次數最少。比如矩陣鏈相乘,不同的加括號方式會導致不同的計算代價。假定三個矩陣的規模為10 100 100 5 5 50。若按 a1a2 a3 計算,a1a2需要做1...
動態規劃(二)
本次通過兩個簡單的演算法題來進一步練習和理解動態規劃,廢話不多說,來上題吧。給出乙個陣列,如 6,1,1,9,3 在裡面取任意個數,要求所取得數的位置不能相鄰,比如取了第乙個數就不能取第二個數,但是可以取第三第四個數,求取出數之和的最大值。下面來讓我們分析一下這個題,我們可以分解成求每一位的最優解,...