導航:首頁 > 源碼編譯 > 動態規劃演算法的原理

動態規劃演算法的原理

發布時間:2023-12-19 20:21:09

① 動態規劃法的原理

動態規劃法[dynamic programming method (DP)]是系統分析中一種常用的方法。在水資源規劃中,往往涉及到地表水庫調度、水資源量的合理分配、優化調度等問題,而這些問題又可概化為多階段決策過程問題。動態規劃法是解決此類問題的有效方法。動態規劃法是20世紀50年代由貝爾曼(R. Bellman)等人提出,用來解決多階段決策過程問題的一種最優化方法。所謂多階段決策過程,就是把研究問題分成若干個相互聯系的階段,由每個階段都作出決策,從而使整個過程達到最優化。許多實際問題利用動態規劃法處理,常比線性規劃法更為有效,特別是對於那些離散型問題。實際上,動態規劃法就是分多階段進行決策,其基本思路是:按時空特點將復雜問題劃分為相互聯系的若干個階段,在選定系統行進方向之後,逆著這個行進方向,從終點向始點計算,逐次對每個階段尋找某種決策,使整個過程達到最優,故又稱為逆序決策過程。
[1]動態規劃的基本思想
前文主要介紹了動態規劃的一些理論依據,我們將前文所說的具有明顯的階段劃分和狀態轉移方程的動態規劃稱為標准動態規劃,這種標准動態規劃是在研究多階段決策問題時推導出來的,適合用於理論上的分析。在實際應用中,許多問題的階段劃分並不明顯,這時如果刻意地劃分階段法反而麻煩。一般來說,只要該問題可以劃分成規模更小的子問題,並且原問題的最優解中包含了子問題的最優解(即滿足最優子化原理),則可以考慮用動態規劃解決。
動態規劃的實質是分治思想和解決冗餘,因此,動態規劃是一種將問題實例分解為更小的、相似的子問題,並存儲子問題的解而避免計算重復的子問題,以解決最優化問題的演算法策略。
由此可知,動態規劃法與分治法和貪心法類似,它們都是將問題實例歸納為更小的、相似的子問題,並通過求解子問題產生一個全局最優解。其中貪心法的當前選擇可能要依賴已經作出的所有選擇,但不依賴於有待於做出的選擇和子問題。因此貪心法自頂向下,一步一步地作出貪心選擇;而分治法中的各個子問題是獨立的(即不包含公共的子子問題),因此一旦遞歸地求出各子問題的解後,便可自下而上地將子問題的解合並成問題的解。但不足的是,如果當前選擇可能要依賴子問題的解時,則難以通過局部的貪心策略達到全局最優解;如果各子問題是不獨立的,則分治法要做許多不必要的工作,重復地解公共的子問題。
解決上述問題的辦法是利用動態規劃。該方法主要應用於最優化問題,這類問題會有多種可能的解,每個解都有一個值,而動態規劃找出其中最優(最大或最小)值的解。若存在若干個取最優值的解的話,它只取其中的一個。但是首先要保證該問題的無後效性,即無論當前取哪個解,對後面的子問題都沒有影響.在求解過程中,該方法也是通過求解局部子問題的解達到全局最優解,但與分治法和貪心法不同的是,動態規劃允許這些子問題不獨立,(亦即各子問題可包含公共的子子問題)也允許其通過自身子問題的解作出選擇,該方法對每一個子問題只解一次,並將結果保存起來,避免每次碰到時都要重復計算。
因此,動態規劃法所針對的問題有一個顯著的特徵,即它所對應的子問題樹中的子問題呈現大量的重復。動態規劃法的關鍵就在於,對於重復出現的子問題,只在第一次遇到時加以求解,並把答案保存起來,讓以後再遇到時直接引用,不必重新求解。
3、動態規劃演算法的基本步驟
設計一個標準的動態規劃演算法,通常可按以下幾個步驟進行:
(1)劃分階段:按照問題的時間或空間特徵,把問題分為若干個階段。注意這若干個階段一定要是有序的或者是可排序的(即無後向性),否則問題就無法用動態規劃求解。
(2)選擇狀態:將問題發展到各個階段時所處於的各種客觀情況用不同的狀態表示出來。當然,狀態的選擇要滿足無後效性。

② 動態規劃演算法的基本思想

動態規劃演算法與分治法類似,其基本思想也是將待求解問題分解成若干個子問題。

拓展資料:

動態規劃的實質是分治思想和解決冗餘,因此動態規劃是一種將問題實例分析為更小的、相似的子問題,並存儲子問題的解而避免計算重復的子問題,以解決最優化問題的演算法策略
動態規劃所針對的問題有一個顯著的特徵,即它對應的子問題樹中的子問題呈現大量的重復。動態規劃的關鍵在於,對於重復的子問題,只在第一次遇到時求解,並把答案保存起來,讓以後再遇到時直接引用,不必要重新求解。

③ 演算法分析中動態規劃的四個基本步驟

1、描述優解的結構特徵。

2、遞歸地定義一個最優解的值。

3、自底向上計算一個最優解的值。

4、從已計算的信息中構造一個最優解。

④ 動態規劃

動態規劃(Dynamic Programming,DP)是運籌學的一個分支,是求解 決策過程最優化 的過程。20世紀50年代初,美國數學家貝爾曼(R.Bellman)等人在研究多階段決策過程的優化問題時,提出了著名的最優化原理,從而創立了動態規劃。動態規劃的應用極其廣泛,包括工程技術、經濟、工業生產、軍事以及自動化控制等領域,並在背包問題、生產經營問題、資金管理問題、資源分配問題、最短路徑問題和復雜系統可靠性問題等中取得了顯著的效果。

雖然動態規劃主要用於求解以時間劃分階段的動態過程的優化問題,但是一些與時間無關的靜態規劃(如 線性規劃、非線性規劃 ),只要人為地引進時間因素,把它視為多階段決策過程,也可以用動態規劃方法方便地求解。

在現實生活中,有一類活動的過程,由於它的特殊性,可將過程分成若干個互相聯系的階段,在它的每一階段都需要作出決策,從而使整個過程達到最好的活動效果。因此各個階段決策的選取不能任意確定, 它依賴於當前面臨的狀態,又影響以後的發展 。當各個階段決策確定後,就組成一個決策序列,因而也就確定了整個過程的一條活動路線.這種把一個問題看作是一個 前後關聯具有鏈狀結構的多階段過程 就稱為多階段決策過程,這種問題稱為多階段決策問題。在多階段決策問題中,各個階段採取的決策,一般來說是與時間有關的, 決策依賴於當前狀態,又隨即引起狀態的轉移 ,一個決策序列就是在變化的狀態中產生出來的,故有「動態」的含義,稱這種解決多階段決策最優化的過程為動態規劃方法

動態規劃演算法通常用於求解具有某種最優性質的問題。在這類問題中,可能會有許多可行解。每一個解都對應於一個值,我們希望找到具有最優值的解。 動態規劃演算法與分治法類似 ,其基本思想也是將待求解問題分解成若干個子問題,先求解子問題,然後從這些子問題的解得到原問題的解。與分治法不同的是, 適合於用動態規劃求解的問題,經分解得到子問題往往不是互相獨立的 。若用分治法來解這類問題,則分解得到的子問題數目太多,有些子問題被重復計算了很多次。如果我們能夠保存已解決的子問題的答案,而在需要時再找出已求得的答案,這樣就可以避免大量的重復計算,節省時間。我們可以用一個表來記錄所有已解的子問題的答案。不管該子問題以後是否被用到,只要它被計算過,就將其結果填入表中。這就是動態規劃法的基本思路。具體的動態規劃演算法多種多樣,但它們具有相同的填表格式。

以一個例子來說明動態規劃的概念(leetcode第5題最長迴文子串):

在這個例子中,一個字元串如果是迴文子串,那麼去掉頭尾也照樣是迴文子串。而每一個字元都有可能是最長迴文子串的一部分。

上面這個例子使用一個二維數組表示各個階段的狀態,這個二維數組的行是子串的起始位置,列是子串的結束位置。由於j>=i,所以只需要考慮二維數組的主對角線的上半部分,對角線上的值永遠是true。用true表示這個子串是迴文串,false不是迴文串。那麼對於某個固定位置的數組元素來說,它的值依賴於左下角的元素的值。進行填充的時候只能一列一列地進行填充,同一列的元素從上到下依次填充。

⑤ 動態規劃演算法詳解

動態規劃一般也只能應用於有最優子結構的問題。最優子結構的意思是局部最優解能決定全局最優解(對有些問題這個要求並不能完全滿足,故有時需要引入一定的近似)。簡單地說,問題能夠分解成子問題來解決。

將待求解問題分解成若干個子問題,先求解子問題,然後從這些子問題的解得到原問題的解(這部分與分治法相似)。與分治法不同的是,適合於用動態規劃求解的問題,經分解得到的子問題往往不是互相獨立的。若用分治法來解這類問題,則分解得到的子問題數目太多,有些子問題被重復計算了很多次。如果我們能夠保存已解決的子問題的答案,而在需要時再找出已求得的答案,這樣就可以避免大量的重復計算,節省時間。通常可以用一個表來記錄所有已解的子問題的答案。

問題的一個最優解中所包含的子問題的解也是最優的。總問題包含很多個子問題,而這些子問題的解也是最優的。

用遞歸演算法對問題進行求解時,每次產生的子問題並不總是新問題,有些子問題會被重復計算多次。問題重疊性質是指在用遞歸演算法自頂向下對問題進行求解時,每次產生的子問題並不總是新問題,有些子問題會被重復計算多次。動態規劃演算法正是利用了這種子問題的重疊性質,對每一個子問題只計算一次,然後將其計算結果保存在一個表格中,當再次需要計算已經計算過的子問題時,只是在表格中簡單地查看一下結果,從而獲得較高的效率。

:很顯然,這道題的對應的數學表達式是

其中F(1)=1, F(2)=2。很自然的狀況是,採用遞歸函數來求解:

參考:
http://blog.csdn.net/zmazon/article/details/8247015
http://blog.csdn.net/lisonglisonglisong/article/details/41548557
http://blog.csdn.net/v_JULY_v/article/details/6110269
http://blog.csdn.net/trochiluses/article/details/37966729

⑥ 動態規劃演算法的基本思想是什麼

動態規劃演算法通常用於求解具有某種最優性質的問題。在這類問題中,可能會有許多可行解。每一個解都對應於一個值,我們希望找到具有最優值的解。動態規劃演算法與分治法類似,其基本思想也是將待求解問題分解成若干個子問題,先求解子問題,然後從這些子問題的解得到原問題的解。與分治法不同的是,適合於用動態規劃求解的問題,經分解得到子問題往往不是互相獨立的。若用分治法來解這類問題,則分解得到的子問題數目太多,有些子問題被重復計算了很多次。如果我們能夠保存已解決的子問題的答案,而在需要時再找出已求得的答案,這樣就可以避免大量的重復計算,節省時間。我們可以用一個表來記錄所有已解的子問題的答案。不管該子問題以後是否被用到,只要它被計算過,就將其結果填入表中。這就是動態規劃法的基本思路。具體的動態規劃演算法多種多樣,但它們具有相同的填表格式。

閱讀全文

與動態規劃演算法的原理相關的資料

熱點內容
科普中國app怎麼分享 瀏覽:85
51單片機與32單片機比較 瀏覽:416
SQL加密存儲解密 瀏覽:505
電氣工程師把程序加密 瀏覽:795
解壓切東西動畫版 瀏覽:963
點到橢圓的距離演算法 瀏覽:388
新的編譯系統 瀏覽:531
cad替換樣板命令 瀏覽:361
des演算法例子 瀏覽:388
怎麼隱藏系統app 瀏覽:522
怎麼在惠生活查詢定向app 瀏覽:272
windows程序設計核心編程 瀏覽:444
任我充app怎麼開發票 瀏覽:330
人工智慧與編程語言 瀏覽:406
linux網路編程伺服器 瀏覽:800
海爾32cw空調壓縮機電容多大 瀏覽:747
分區加密了該怎麼辦 瀏覽:103
索尼延時拍攝app怎麼導入 瀏覽:226
冰箱冷凍壞了壓縮機一直響 瀏覽:807
windows伺服器如何組建raid0 瀏覽:180