動態規劃(二)

2021-07-10 12:44:15 字數 1806 閱讀 1463

本節實現乙個動態規劃問題實現。具體問題見上一節

的第三個栗子。這裡再次簡述:

在乙個時刻系統可以觀察到的有兩個量:剩餘資料報數量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 在裡面取任意個數,要求所取得數的位置不能相鄰,比如取了第乙個數就不能取第二個數,但是可以取第三第四個數,求取出數之和的最大值。下面來讓我們分析一下這個題,我們可以分解成求每一位的最優解,...