强奸久久久久久久|草草浮力在线影院|手机成人无码av|亚洲精品狼友视频|国产国模精品一区|久久成人中文字幕|超碰在线视屏免费|玖玖欧洲一区二区|欧美精品无码一区|日韩无遮一区二区

首頁 > 資訊 > 問答 > 狀態(tài)轉移方程,什么是狀態(tài)轉移方程

狀態(tài)轉移方程,什么是狀態(tài)轉移方程

來源:整理 時間:2024-12-28 17:23:33 編輯:智能門戶 手機版

本文目錄一覽

1,什么是狀態(tài)轉移方程

比如,某個模型只有2個狀態(tài)s1和s2,分別由用戶輸入1和0來觸發(fā)。數(shù)據(jù)用x來代表。那么方程可以寫成 x==0 s1->s2 x==1 s2->s1 x==0和x==1就叫做狀態(tài)轉移方程。

什么是狀態(tài)轉移方程

2,動態(tài)規(guī)劃如何設計狀態(tài)轉移方程

首先你要確定這道題是否可以用動態(tài)規(guī)劃來做,即它是否滿足最優(yōu)化原理和無后效性原則。如果是,就開始設計: 一、確定問題的決策對象 二、對決策對象劃分階段 三、對各階段確定狀態(tài)變量 四、根據(jù)狀態(tài)變量確定費用函數(shù)和目標函數(shù) 五、建立各階段的狀態(tài)變量的轉移方程,寫出狀態(tài)轉移方程 六、編程實現(xiàn)

動態(tài)規(guī)劃如何設計狀態(tài)轉移方程

3,動態(tài)轉移方程

要看具體情況,0/1背包的動態(tài)轉移方程是:f[i][v]=max如果你想深入了解背包問題建議你上網(wǎng)搜《背包問題九講》,寫的很好 這要根據(jù)題目具體分析
首先你要確定這道題是否可以用動態(tài)規(guī)劃來做,即它是否滿足最優(yōu)化原理和無后效性原則。如果是,就開始設計:一、確定問題的決策對象二、對決策對象劃分階段三、對各階段確定狀態(tài)變量四、根據(jù)狀態(tài)變量確定費用函數(shù)和目標函數(shù)五、建立各階段的狀態(tài)變量的轉移方程,寫出狀態(tài)轉移方程六、編程實現(xiàn)

動態(tài)轉移方程

4,什么是狀態(tài)轉移方程RT

狀態(tài)轉移方程,是動態(tài)規(guī)劃中本階段的狀態(tài)往往是上一階段狀態(tài)和上一階段決策的結果。如果給定了第K階段的狀態(tài)Sk以及決策uk(Sk),則第K+1階段的狀態(tài)Sk+1也就完全確定。動態(tài)規(guī)劃中本階段的狀態(tài)往往是上一階段狀態(tài)和上一階段決策的結果。如果給定了第K階段的狀態(tài)Sk以及決策uk(Sk),則第K+1階段的狀態(tài)Sk+1也就完全確定。也就是說Sk+1與Sk,uk之間存在一種明確的數(shù)量對應關系,記為Tk(Sk,uk),即有Sk+1= Tk(Sk,uk)。 這種用函數(shù)表示前后階段關系的方程,稱為狀態(tài)轉移方程。在上例中狀態(tài)轉移方程為 Sk+1= uk(Sk) 。
理想氣體狀態(tài)方程(ideal gas,equation of state of),也稱理想氣體定律,描述理想氣體狀態(tài)變化規(guī)律的方程。質量為m,摩爾質量為m的理想氣體,其狀態(tài)參量壓強p、體積v和絕對溫度t之間的函數(shù)關系為: pv=mrt/m=mrt,r=r/m,式中m和n分別是理想氣體的摩爾質量和物質的量;r是氣體常量。對于混合理想氣體,其壓強p是各組成部分的分壓強p1、 p2、……之和,故pv=( p1+ p2+……)v=(n1+n2+……)rt,式中n1、n2、……是各組成部分的物質的量。以上兩式是理想氣體和混合理想氣體的狀態(tài)方程,可由理想氣體嚴格遵循的氣體實驗定律得出,也可根據(jù)理想氣體的微觀模型,由氣體動理論導出。在壓強為幾個大氣壓以下時,各種實際氣體近似遵循理想氣體狀態(tài)方程,壓強越低,符合越好,在壓強趨于零的極限下,嚴格遵循。理想氣體狀態(tài)方程是由研究低壓下氣體的行為導出的。但各氣體在適用理想氣體狀態(tài)方程時多少有些偏差;壓力越低,偏差越小,在極低壓力下理想氣體狀態(tài)方程可較準確地描述氣體的行為。極低的壓力意味著分子之間的距離非常大,此時分子之間的相互作用非常??;又意味著分子本身所占的體積與此時氣體所具有的非常大的體積相比可忽略不計,因而分子可近似被看作是沒有體積的質點。于是從極低壓力氣體的行為觸發(fā),抽象提出理想氣體的概念。理想氣體在微觀上具有分子之間無互相作用力和分子本身不占有體積的特征。

5,狀態(tài)轉移方程是什么

一個字符串可以插入、刪除、改變到另一個字符串,求改變的最小步驟。和最長公共子序列類似,用二維數(shù)組opt[i][j]記錄字符串a(chǎn)中的前i個字符到字符串b中的前j個字符匹配所需要的最小步數(shù)。假如已知AG到GT的最小步數(shù),AGT到GT的最小步數(shù),AG到GTT的最小步數(shù),求AGT到GTT的最小步數(shù),此時T= =T,這個值是AG到GT的最小步數(shù),AGT到GT的最小步數(shù)加一(AGT到GT的最小步數(shù)等于AGTT到GTT的最小步數(shù),加一是將T刪除的一步),AG到GTT的最小步數(shù)加一(AG到GTT的最小步數(shù)等于AGT到GTTT的最小步數(shù),加一是在AGT上增加T的一步)。假如已知AG到GT的最小步數(shù),AGA到GT的最小步數(shù),AG到GTT的最小步數(shù),求AGA到GTT的最小步數(shù),此時A! =T,這個值是AG到GT的最小步數(shù)加一(A改變?yōu)門),AGA到GT的最小步數(shù)加一(AGA到GT的最小步數(shù)等于AGAT到GTT的最小步數(shù),加一是將T刪除的一步),AG到GTT的最小步數(shù)加一(AG到GTT的最小步數(shù)等于AGA到GTTA的最小步數(shù),加一是在GTTA上刪除A的一步)。所以狀態(tài)轉移方程:初始化的時候和最長公共子序列不同,因為第0行,第0列表示null轉化到字符串情況,結果是字符串的長度:if(str1.charAt(i-1)==str2.charAt(j-1)) array[i][j] = Math.min(Math.min(array[i-1][j-1], array[i-1][j]+1), array[i][j-1]+1);else array[i][j] = Math.min(Math.min(array[i-1][j-1]+1, array[i-1][j]+1), array[i][j-1]+1);for(int i=0;i<=m;i++) array[i][0] = i;} for(int i=0;i<=n;i++) array[0][i] = i;}
一個字符串可以插入、刪除、改變到另一個字符串,求改變的最小步驟。和最長公共子序列類似,用二維數(shù)組opt[i][j]記錄字符串a(chǎn)中的前i個字符到字符串b中的前j個字符匹配所需要的最小步數(shù)。假如已知AG到GT的最小步數(shù),AGT到GT的最小步數(shù),AG到GTT的最小步數(shù),求AGT到GTT的最小步數(shù),此時T= =T,這個值是AG到GT的最小步數(shù),AGT到GT的最小步數(shù)加一(AGT到GT的最小步數(shù)等于AGTT到GTT的最小步數(shù),加一是將T刪除的一步),AG到GTT的最小步數(shù)加一(AG到GTT的最小步數(shù)等于AGT到GTTT的最小步數(shù),加一是在AGT上增加T的一步)。假如已知AG到GT的最小步數(shù),AGA到GT的最小步數(shù),AG到GTT的最小步數(shù),求AGA到GTT的最小步數(shù),此時A! =T,這個值是AG到GT的最小步數(shù)加一(A改變?yōu)門),AGA到GT的最小步數(shù)加一(AGA到GT的最小步數(shù)等于AGAT到GTT的最小步數(shù),加一是將T刪除的一步),AG到GTT的最小步數(shù)加一(AG到GTT的最小步數(shù)等于AGA到GTTA的最小步數(shù),加一是在GTTA上刪除A的一步)。所以狀態(tài)轉移方程:初始化的時候和最長公共子序列不同,因為第0行,第0列表示null轉化到字符串情況,結果是字符串的長度:if(str1.charAt(i-1)==str2.charAt(j-1)) array[i][j] = Math.min(Math.min(array[i-1][j-1], array[i-1][j]+1), array[i][j-1]+1);else array[i][j] = Math.min(Math.min(array[i-1][j-1]+1, array[i-1][j]+1), array[i][j-1]+1);for(int i=0;i<=m;i++) array[i][0] = i;} for(int i=0;i<=n;i++) array[0][i] = i;}
首先你要確定這道題是否可以用動態(tài)規(guī)劃來做,即它是否滿足最優(yōu)化原理和無后效性原則。如果是,就開始設計:一、確定問題的決策對象二、對決策對象劃分階段三、對各階段確定狀態(tài)變量四、根據(jù)狀態(tài)變量確定費用函數(shù)和目標函數(shù)五、建立各階段的狀態(tài)變量的轉移方程,寫出狀態(tài)轉移方程六、編程實現(xiàn)

6,最優(yōu)法求解

解:把求得總費用最少問題化為最短路問題,用vi表示“第i年初購進一臺新機器”,設v5表示第4年年底,從vi到v5各畫一條弧,?。╲i,vj)表示在第i年年初購進的一臺新機器一直使用到第j年年初。然后對每條弧賦予權數(shù),?。╲i,vj)的權數(shù)即為從第i年年初購進新機器使用到第j-1年年底所花費的購置費及更換、運行維修費的綜合。權數(shù)表(單位:萬元)這是一個最短路的問題,用 Dijkstra 算法求解可得到這問題的解為 4.8,即在 4 年內(nèi)購買、更換及運行維修最小的總費用為:4.8 萬元。最優(yōu)更新策略為:第一年末不更新 第二年末更新 第三年末不更新第四年末處理機器
鍵詞】動態(tài)規(guī)劃 階段 動態(tài)規(guī)劃是信息學競賽中的常見算法,本文的主要內(nèi)容就是分析它的特點。 文章的第一部分首先探究了動態(tài)規(guī)劃的本質,因為動態(tài)規(guī)劃的特點是由它的本質所決定的。第二部分從動態(tài)規(guī)劃的設計和實現(xiàn)這兩個角度分析了動態(tài)規(guī)劃的多樣性、模式性、技巧性這三個特點。第三部分將動態(tài)規(guī)劃和遞推、搜索、網(wǎng)絡流這三個相關算法作了比較,從中探尋動態(tài)規(guī)劃的一些更深層次的特點。 文章在分析動態(tài)規(guī)劃的特點的同時,還根據(jù)這些特點分析了我們在解題中應該怎樣利用這些特點,怎樣運用動態(tài)規(guī)劃。這對我們的解題實踐有一定的指導意義。 動態(tài)規(guī)劃是編程解題的一種重要的手段,在如今的信息學競賽中被應用得越來越普遍。最近幾年的信息學競賽,不分大小,幾乎每次都要考察到這方面的內(nèi)容。因此,如何更深入地了解動態(tài)規(guī)劃,從而更為有效地運用這個解題的有力武器,是一個值得深入研究的問題。 要掌握動態(tài)規(guī)劃的應用技巧,就要了解它的各方面的特點。首要的,是要深入洞悉動態(tài)規(guī)劃的本質。 §1動態(tài)規(guī)劃的本質 動態(tài)規(guī)劃是在本世紀50年代初,為了解決一類多階段決策問題而誕生的。那么,什么樣的問題被稱作多階段決策問題呢? §1.1多階段決策問題 說到多階段決策問題,人們很容易舉出下面這個例子。 [例1] 多段圖中的最短路徑問題:在下圖中找出從a1到d1的最短路徑。 仔細觀察這個圖不難發(fā)現(xiàn),它有一個特點。我們將圖中的點分為四類(圖中的a、b、c、d),那么圖中所有的邊都處于相鄰的兩類點之間,并且都從前一類點指向后一類點。這樣,圖中的邊就被分成了三類(aàb、bàc、càd)。我們需要從每一類中選出一條邊來,組成從a1到d1的一條路徑,并且這條路徑是所有這樣的路徑中的最短者。 從上面的這個例子中,我們可以大概地了解到什么是多階段決策問題。更精確的定義如下: 多階段決策過程,是指這樣的一類特殊的活動過程,問題可以按時間順序分解成若干相互聯(lián)系的階段,在每一個階段都要做出決策,全部過程的決策是一個決策序列[1]。要使整個活動的總體效果達到最優(yōu)的問題,稱為多階段決策問題。 從上述的定義中,我們可以明顯地看出,這類問題有兩個要素。一個是階段,一個是決策。 §1.2階段與狀態(tài) 階段:將所給問題的過程,按時間或空間特征分解成若干相互聯(lián)系的階段,以便按次序去求每階段的解。常用字母k表示階段變量。[1] 階段是問題的屬性。多階段決策問題中通常存在著若干個階段,如上面的例子,就有a、b、c、d這四個階段。在一般情況下,階段是和時間有關的;但是在很多問題(我的感覺,特別是信息學問題)中,階段和時間是無關的。從階段的定義中,可以看出階段的兩個特點,一是“相互聯(lián)系”,二是“次序”。 階段之間是怎樣相互聯(lián)系的?就是通過狀態(tài)和狀態(tài)轉移。 狀態(tài):各階段開始時的客觀條件叫做狀態(tài)。描述各階段狀態(tài)的變量稱為狀態(tài)變量,常用sk表示第k階段的狀態(tài)變量,狀態(tài)變量sk的取值集合稱為狀態(tài)集合,用sk表示。[1] 狀態(tài)是階段的屬性。每個階段通常包含若干個狀態(tài),用以描述問題發(fā)展到這個階段時所處在的一種客觀情況。在上面的例子中,行人從出發(fā)點a1走過兩個階段之后,可能出現(xiàn)的情況有三種,即處于c1、c2或c3點。那么第三個階段就有三個狀態(tài)s3=。 每個階段的狀態(tài)都是由以前階段的狀態(tài)以某種方式“變化”而來,這種“變化”稱為狀態(tài)轉移(暫不定義)。上例中c3點可以從b1點過來,也可以從b2點過來,從階段2的b1或b2狀態(tài)走到階段3的c3狀態(tài)就是狀態(tài)轉移。狀態(tài)轉移是導出狀態(tài)的途徑,也是聯(lián)系各階段的途徑。 說到這里,可以提出應用動態(tài)規(guī)劃的一個重要條件。那就是將各階段按照一定的次序排列好之后,對于某個給定的階段狀態(tài),它以前各階段的狀態(tài)無法直接影響它未來的發(fā)展,而只能通過當前的這個狀態(tài)。換句話說,每個狀態(tài)都是“過去歷史的一個完整總結[1]”。這就是無后效性。對這個性質,下文還將會有解釋。 §1.3決策和策略 上面的階段與狀態(tài)只是多階段決策問題的一個方面的要素,下面是另一個方面的要素——決策。 決策:當各段的狀態(tài)取定以后,就可以做出不同的決定,從而確定下一階段的狀態(tài),這種決定稱為決策。表示決策的變量,稱為決策變量,常用uk(sk)表示第k階段當狀態(tài)為sk時的決策變量。在實際問題中,決策變量的取值往往限制在一定范圍內(nèi),我們稱此范圍為允許決策集合。常用dk(sk)表示第k階段從狀態(tài)sk出發(fā)的允許決策集合。顯然有uk(sk) ?dk(sk)。[1] 決策是問題的解的屬性。決策的目的就是“確定下一階段的狀態(tài)”,還是回到上例,從階段2的b1狀態(tài)出發(fā)有三條路,也就是三個決策,分別導向階段3的c1、c2、c3三個狀態(tài),即d2(b1)=。 有了決策,我們可以定義狀態(tài)轉移:動態(tài)規(guī)劃中本階段的狀態(tài)往往是上一階段和上一階段的決策結果,由第k段的狀態(tài)sk和本階段的決策uk確定第k+1段的狀態(tài)sk+1的過程叫狀態(tài)轉移。狀態(tài)轉移規(guī)律的形式化表示sk+1=tk(sk,uk)稱為狀態(tài)轉移方程。 這樣看來,似乎決策和狀態(tài)轉移有著某種聯(lián)系。我的理解,狀態(tài)轉移是決策的目的,決策是狀態(tài)轉移的途徑。 各段決策確定后,整個問題的決策序列就構成一個策略,用p1,n=表示。對每個實際問題,可供選擇的策略有一定范圍,稱為允許策略集合,記作p1,n,使整個問題達到最有效果的策略就是最優(yōu)策略。[1] 說到這里,又可以提出運用動態(tài)規(guī)劃的一個前提。即這個過程的最優(yōu)策略應具有這樣的性質:無論初始狀態(tài)及初始決策如何,對于先前決策所形成的狀態(tài)而言,其以后的所有決策應構成最優(yōu)策略[1]。這就是最優(yōu)化原理。簡言之,就是“最優(yōu)策略的子策略也是最優(yōu)策略”。 §1.4最優(yōu)化原理與無后效性 這里,我把最優(yōu)化原理定位在“運用動態(tài)規(guī)劃的前提”。這是因為,是否符合最優(yōu)化原理是一個問題的本質特征。對于不滿足最優(yōu)化原理的一個多階段決策問題,整體上的最優(yōu)策略p1,n同任何一個階段k上的決策uk或任何一組階段k1…k2上的子策略pk1,k2都不存在任何關系。如果要對這樣的問題動態(tài)規(guī)劃的話,我們從一開始所作的劃分階段等努力都將是徒勞的。 而我把無后效性定位在“應用動態(tài)規(guī)劃的條件”,是因為動態(tài)規(guī)劃是按次序去求每階段的解,如果一個問題有后效性,那么這樣的次序便是不合理的。但是,我們可以通過重新劃分階段,重新選定狀態(tài),或者增加狀態(tài)變量的個數(shù)等手段,來是問題滿足無后效性這個條件。說到底,還是要確定一個“序”。 在信息學的多階段決策問題中,絕大部分都是能夠滿足最優(yōu)化原理的,但它們往往會在后效性這一點上來設置障礙。所以在解題過程中,我們會特別關心“序”。對于有序的問題,就會考慮到動態(tài)規(guī)劃;對于無序的問題,也會想方設法來使其有序。 §1.5最優(yōu)指標函數(shù)和規(guī)劃方程 最優(yōu)指標函數(shù):用于衡量所選定策略優(yōu)劣的數(shù)量指標稱為指標函數(shù),最優(yōu)指標函數(shù)記為fk(sk),它表示從第k段狀態(tài)sk采用最優(yōu)策略p*k,n到過程終止時的最佳效益值[1]。 最優(yōu)指標函數(shù)其實就是我們真正關心的問題的解。在上面的例子中,f2(b1)就表示從b1點到終點d1點的最短路徑長度。我們求解的最終目標就是f1(a1)。 最優(yōu)指標函數(shù)的求法一般是一個從目標狀態(tài)出發(fā)的遞推公式,稱為規(guī)劃方程: 其中sk是第k段的某個狀態(tài),uk是從sk出發(fā)的允許決策集合dk(sk)中的一個決策,tk(sk,uk)是由sk和uk所導出的第k+1段的某個狀態(tài)sk+1,g(x,uk)是定義在數(shù)值x和決策uk上的一個函數(shù),而函數(shù)opt表示最優(yōu)化,根據(jù)具體問題分別表為max或min。 ,稱為邊界條件。 上例中的規(guī)劃方程就是: 邊界條件為 這里是一種從目標狀態(tài)往回推的逆序求法,適用于目標狀態(tài)確定的問題。在我們的信息學問題中,也有很多有著確定的初始狀態(tài)。當然,對于初始狀態(tài)確定的問題,我們也可以采用從初始狀態(tài)出發(fā)往前推的順序求法。事實上,這種方法對我們來說要更為直觀、更易設計一些,從而更多地出現(xiàn)在我們的解題過程中。 我們本節(jié)所討論的這些理論雖然不是本文的主旨,但是卻對下面要說的動態(tài)規(guī)劃的特點起著基礎性的作用。 §2動態(tài)規(guī)劃的設計與實現(xiàn) 上面我們討論了動態(tài)規(guī)劃的一些理論,本節(jié)我們將通過幾個例子中,動態(tài)規(guī)劃的設計與實現(xiàn),來了解動態(tài)規(guī)劃的一些特點。 §2.1動態(tài)規(guī)劃的多樣性 [例2] 花店櫥窗布置問題(ioi99)試題見附錄 本題雖然是本屆ioi中較為簡單的一題,但其中大有文章可作。說它簡單,是因為它有序,因此我們一眼便可看出這題應該用動態(tài)規(guī)劃來解決。但是,如何動態(tài)規(guī)劃呢?如何劃分階段,又如何選擇狀態(tài)呢? 以花束的數(shù)目來劃分階段。在這里,階段變量k表示的就是要布置的花束數(shù)目(前k束花),狀態(tài)變量sk表示第k束花所在的花瓶。而對于每一個狀態(tài)sk,決策就是第k-1束花應該放在哪個花瓶,用uk表示。最優(yōu)指標函數(shù)fk(sk)表示前k束花,其中第k束插在第sk個花瓶中,所能取得的最大美學值。 狀態(tài)轉移方程為 規(guī)劃方程為 (其中a(i,j)是花束i插在花瓶j中的美學值) 邊界條件 (v是花瓶總數(shù),事實上這是一個虛擬的邊界) 以花瓶的數(shù)目來劃分階段。在這里階段變量k表示的是要占用的花瓶數(shù)目(前k個花瓶),狀態(tài)變量sk表示前k個花瓶中放了多少花。而對于任意一個狀態(tài)sk,決策就是第sk束花是否放在第k個花瓶中,用變量uk=1或0來表示。最優(yōu)指標函數(shù)fk(sk)表示前k個花瓶中插了sk束花,所能取得的最大美學值。 狀態(tài)轉移方程為 規(guī)劃方程為 邊界條件為 兩種劃分階段的方法,引出了兩種狀態(tài)表示法,兩種規(guī)劃方式,但是卻都成功地解決了問題。只不過因為決策的選擇有多有少,所以算法的時間復雜度也就不同。[2] 這個例子具有很大的普遍性。有很多的多階段決策問題都有著不止一種的階段劃分方法,因而往往就有不止一種的規(guī)劃方法。有時各種方法所產(chǎn)生的效果是差不多的,但更多的時候,就像我們的例子一樣,兩種方法會在某個方面有些區(qū)別。 所以,在用動態(tài)規(guī)劃解題的時候,可以多想一想是否有其它的解法。對于不同的解法,要注意比較,好的算法好在哪里,差一點的算法差在哪里。從各種不同算法的比較中,我們可以更深刻地領會動態(tài)規(guī)劃的構思技巧。 §2.2動態(tài)規(guī)劃的模式性 這個可能做過動態(tài)規(guī)劃的人都有體會,從我們上面對動態(tài)規(guī)劃的分析也可以看出來。動態(tài)規(guī)劃的設計都有著一定的模式,一般要經(jīng)歷以下幾個步驟。 劃分階段:按照問題的時間或空間特征,把問題分為若干個階段。注意這若干個階段一定要是有序的或者是可排序的,否則問題就無法求解。 選擇狀態(tài):將問題發(fā)展到各個階段時所處于的各種客觀情況用不同的狀態(tài)表示出來。當然,狀態(tài)的選擇要滿足無后效性。 確定決策并寫出狀態(tài)轉移方程:之所以把這兩步放在一起,是因為決策和狀態(tài)轉移有著天然的聯(lián)系,狀態(tài)轉移就是根據(jù)上一階段的狀態(tài)和決策來導出本階段的狀態(tài)。所以,如果我們確定了決策,狀態(tài)轉移方程也就寫出來了。但事實上,我們常常是反過來做,根據(jù)相鄰兩段的各狀態(tài)之間的關系來確定決策。 寫出規(guī)劃方程(包括邊界條件):在第一部分中,我們已經(jīng)給出了規(guī)劃方程的通用形式化表達式。一般說來,只要階段、狀態(tài)、決策和狀態(tài)轉移確定了,這一步還是比較簡單的。 動態(tài)規(guī)劃的主要難點在于理論上的設計,一旦設計完成,實現(xiàn)部分就會非常簡單。大體上的框架如下: 對f1(s1)初始化(邊界條件) for k?2 to n(這里以順序求解為例) 對每一個sk?sk fk(sk)?一個極值(∞或-∞) 對每一個uk(sk)?dk(sk) sk-1?tk(sk,uk) t?g(fk-1(sk-1),uk) y t比fk(sk)更優(yōu) n fk(sk)?t 輸出fn(sn) 這個n-s圖雖然不能代表全部,但足可以概括大多數(shù)。少數(shù)的一些特殊的動態(tài)規(guī)劃,其實現(xiàn)的原理也是類似,可以類比出來。我們到現(xiàn)在對動態(tài)規(guī)劃的分析,主要是在理論上、設計上,原因也就在此。 掌握了動態(tài)規(guī)劃的模式性,我們在用動態(tài)規(guī)劃解題時就可以把主要的精力放在理論上的設計。一旦設計成熟,問題也就基本上解決了。而且在設計算法時也可以按部就班地來。 但是“物極必反”,太過拘泥于模式就會限制我們的思維,扼殺優(yōu)良算法思想的產(chǎn)生。我們在解題時,不妨發(fā)揮一下創(chuàng)造性,去突破動態(tài)規(guī)劃的實現(xiàn)模式,這樣往往會收到意想不到的效果。[3] §2.3動態(tài)規(guī)劃的技巧性 上面我們所說的動態(tài)規(guī)劃的模式性,主要指的是實現(xiàn)方面。而在設計方面,雖然它較為嚴格的步驟性,但是它的設計思想?yún)s是沒有一定的規(guī)律可循的。這就需要我們不斷地在實踐當中去掌握動態(tài)規(guī)劃的技巧,下面僅就一個例子談一點我自己的體會。 [例3] 街道問題:在下圖中找出從左下角到右上角的最短路徑,每步只能向右方或上方走。 這是一道簡單而又典型的動態(tài)規(guī)劃題,許多介紹動態(tài)規(guī)劃的書與文章中都拿它來做例子。通常,書上的解答是這樣的: 按照圖中的虛線來劃分階段,即階段變量k表示走過的步數(shù),而狀態(tài)變量sk表示當前處于這一階段上的哪一點(各點所對應的階段和狀態(tài)已經(jīng)用ks在地圖上標明)。這時的模型實際上已經(jīng)轉化成了一個特殊的多段圖。用決策變量uk=0表示向右走,uk=1表示向上走,則狀態(tài)轉移方程如下: (這里的row是地圖豎直方向的行數(shù)) 我們看到,這個狀態(tài)轉移方程需要根據(jù)k的取值分兩種情況討論,顯得非常麻煩。相應的,把它代入規(guī)劃方程而付諸實現(xiàn)時,算法也很繁。因而我們在實現(xiàn)時,一般是不會這么做的,而代之以下面方法: 將地圖中的點規(guī)則地編號如上,得到的規(guī)劃方程如下: (這里distance表示相鄰兩點間的邊長) 這樣做確實要比上面的方法簡單多了,但是它已經(jīng)破壞了動態(tài)規(guī)劃的本來面目,而不存在明確的階段特征了。如果說這種方法是以地圖中的行(a、b、c、d)來劃分階段的話,那么它的“狀態(tài)轉移”就不全是在兩個階段之間進行的了。 也許這沒什么大不了的,因為實踐比理論更有說服力。但是,如果我們把題目擴展一下:在地圖中找出從左下角到右上角的兩條路徑,兩條路徑中的任何一條邊都不能重疊,并且要求兩條路徑的總長度最短。這時,再用這種“簡單”的方法就不太好辦了。 如果非得套用這種方法的話,則最優(yōu)指標函數(shù)就需要有四維的下標,并且難以處理兩條路徑“不能重疊”的問題。 而我們回到原先“標準”的動態(tài)規(guī)劃法,就會發(fā)現(xiàn)這個問題很好解決,只需要加一維狀態(tài)變量就成了。即用sk=(ak,bk)分別表示兩條路徑走到階段k時所處的位置,相應的,決策變量也增加一維,用uk=(xk,yk)分別表示兩條路徑的行走方向。狀態(tài)轉移時將兩條路徑分別考慮: 在寫規(guī)劃方程時,只要對兩條路徑走到同一個點的情況稍微處理一下,減少可選的決策個數(shù): 從這個例子中可以總結出設計動態(tài)規(guī)劃算法的一個技巧:狀態(tài)轉移一般是在相鄰的兩個階段之間(有時也可以在不相鄰的兩個階段間),但是盡量不要在同一個階段內(nèi)進行。 動態(tài)規(guī)劃是一種很靈活的解題方法,在動態(tài)規(guī)劃算法的設計中,類似的技巧還有很多。要掌握動態(tài)規(guī)劃的技巧,有兩條途徑:一是要深刻理解動態(tài)規(guī)劃的本質,這也是我們?yōu)槭裁匆婚_始就探討它的本質的原因;二是要多實踐,不但要多解題,還要學會從解題中探尋規(guī)律,總結技巧。 §3動態(tài)規(guī)劃與一些算法的比較 動態(tài)規(guī)劃作為諸多解題方法中的一種,必然和其他一些算法有著諸多聯(lián)系。從這些聯(lián)系中,我們也可以看出動態(tài)規(guī)劃的一些特點。 §3.1動態(tài)規(guī)劃與遞推 ——動態(tài)規(guī)劃是最優(yōu)化算法 由于動態(tài)規(guī)劃的“名氣”如此之大,以至于很多人甚至一些資料書上都往往把一種與動態(tài)規(guī)劃十分相似的算法,當作是動態(tài)規(guī)劃。這種算法就是遞推。實際上,這兩種算法還是很容易區(qū)分的。 按解題的目標來分,信息學試題主要分四類:判定性問題、構造性問題、計數(shù)問題和最優(yōu)化問題。我們在競賽中碰到的大多是最優(yōu)化問題,而動態(tài)規(guī)劃正是解決最優(yōu)化問題的有力武器,因此動態(tài)規(guī)劃在競賽中的地位日益提高。而遞推法在處理判定性問題和計數(shù)問題方面也是一把利器。下面分別就兩個例子,談一下遞推法和動態(tài)規(guī)劃在這兩個方面的聯(lián)系。 [例4] mod 4 最優(yōu)路徑問題:在下圖中找出從第1點到第4點的一條路徑,要求路徑長度mod 4的余數(shù)最小。 這個圖是一個多段圖,而且是一個特殊的多段圖。雖然這個圖的形式比一般的多段圖要簡單,但是這個最優(yōu)路徑問題卻不能用動態(tài)規(guī)劃來做。因為一條從第1點到第4點的最優(yōu)路徑,在它走到第2點、第3點時,路徑長度mod 4的余數(shù)不一定是最小,也就是說最優(yōu)策略的子策略不一定最優(yōu)——這個問題不滿足最優(yōu)化原理。 但是我們可以把它轉換成判定性問題,用遞推法來解決。判斷從第1點到第k點的長度mod 4為sk的路徑是否存在,用fk(sk)來表示,則遞推公式如下: (邊界條件) (這里lenk,i表示從第k-1點到第k點之間的第i條邊的長度,方括號表示“或(or)”運算) 最后的結果就是可以使f4(s4)值為真的最小的s4值。 這個遞推法的遞推公式和動態(tài)規(guī)劃的規(guī)劃方程非常相似,我們在這里借用了動態(tài)規(guī)劃的符號也就是為了更清楚地顯示這一點。其實它們的思想也是非常相像的,可以說是遞推法借用了動態(tài)規(guī)劃的思想解決了動態(tài)規(guī)劃不能解決的問題。 有的多階段決策問題(像這一題的階段特征就很明顯),由于不能滿足最優(yōu)化原理等使用動態(tài)規(guī)劃的先決條件,而無法應用動態(tài)規(guī)劃。在這時可以將最優(yōu)指標函數(shù)的值當作“狀態(tài)”放到下標中去,從而變最優(yōu)化問題為判定性問題,再借用動態(tài)規(guī)劃的思想,用遞推法來解決問題。 §3.2動態(tài)規(guī)劃與搜索 ——動態(tài)規(guī)劃是高效率、高消費算法 同樣是解決最優(yōu)化問題,有的題目我們采用動態(tài)規(guī)劃,而有的題目我們則需要用搜索。這其中有沒有什么規(guī)則呢? 我們知道,撇開時空效率的因素不談,在解決最優(yōu)化問題的算法中,搜索可以說是“萬能”的。所以動態(tài)規(guī)劃可以解決的問題,搜索也一定可以解決。 把一個動態(tài)規(guī)劃算法改寫成搜索是非常方便的,狀態(tài)轉移方程、規(guī)劃方程以及邊界條件都可以直接“移植”,所不同的只是求解順序。動態(tài)規(guī)劃是自底向上的遞推求解,而搜索則是自頂向下的遞歸求解(這里指深度搜索,寬度搜索類似)。 反過來,我們也可以把搜索算法改寫成動態(tài)規(guī)劃。狀態(tài)空間搜索實際上是對隱式圖中的點進行枚舉,這種枚舉是自頂向下的。如果把枚舉的順序反過來,變成自底向上,那么就成了動態(tài)規(guī)劃。(當然這里有個條件,即隱式圖中的點是可排序的,詳見下一節(jié)。) 正因為動態(tài)規(guī)劃和搜索有著求解順序上的不同,這也造成了它們時間效率上的差別。在搜索中,往往會出現(xiàn)下面的情況: 對于上圖(a)這樣幾個狀態(tài)構成的一個隱式圖,用搜索算法就會出現(xiàn)重復,如上圖(b)所示,狀態(tài)c2被搜索了兩次。在深度搜索中,這樣的重復會引起以c2為根整個的整個子搜索樹的重復搜索;在寬度搜索中,雖然這樣的重復可以立即被排除,但是其時間代價也是不小的。而動態(tài)規(guī)劃就沒有這個問題,如上圖(c)所示。 一般說來,動態(tài)規(guī)劃算法在時間效率上的優(yōu)勢是搜索無法比擬的。(當然對于某些題目,根本不會出現(xiàn)狀態(tài)的重復,這樣搜索和動態(tài)規(guī)劃的速度就沒有差別了。)而從理論上講,任何拓撲有序(現(xiàn)實中這個條件常??梢詽M足)的隱式圖中的搜索算法都可以改寫成動態(tài)規(guī)劃。但事實上,在很多情況下我們?nèi)匀徊坏貌徊捎盟阉魉惴āD敲?,動態(tài)規(guī)劃算法在實現(xiàn)上還有什么障礙嗎? 考慮上圖(a)所示的隱式圖,其中存在兩個從初始狀態(tài)無法達到的狀態(tài)。在搜索算法中,這樣的兩個狀態(tài)就不被考慮了,如上圖(b)所示。但是動態(tài)規(guī)劃由于是自底向上求解,所以就無法估計到這一點,因而遍歷了全部的狀態(tài),如上圖(c)所示。 一般說來,動態(tài)規(guī)劃總要遍歷所有的狀態(tài),而搜索可以排除一些無效狀態(tài)。更重要的事搜索還可以剪枝,可能剪去大量不必要的狀態(tài),因此在空間開銷上往往比動態(tài)規(guī)劃要低很多。 如何協(xié)調好動態(tài)規(guī)劃的高效率與高消費之間的矛盾呢?有一種折衷的辦法就是記憶化算法。記憶化算法在求解的時候還是按著自頂向下的順序,但是每求解一個狀態(tài),就將它的解保存下來,以后再次遇到這個狀態(tài)的時候,就不必重新求解了。這種方法綜合了搜索和動態(tài)規(guī)劃兩方面的優(yōu)點,因而還是很有實用價值的。 §3.3動態(tài)規(guī)劃與網(wǎng)絡流 ——動態(tài)規(guī)劃是易設計易實現(xiàn)算法 由于圖的關系復雜而無序,一般難以呈現(xiàn)階段特征(除了特殊的圖如多段圖,或特殊的分段方法如floyd),因此動態(tài)規(guī)劃在圖論中的應用不多。但有一類圖,它的點卻是有序的,這就是有向無環(huán)圖。 在有向無環(huán)圖中,我們可以對點進行拓撲排序,使其體現(xiàn)出有序的特征,從而據(jù)此劃分階段。在有向無還圖中求最短路徑的算法[4],已經(jīng)體現(xiàn)出了簡單的動態(tài)規(guī)劃思想。但動態(tài)規(guī)劃在圖論中還有更有價值的應用。下面先看一個例子。 [例6] n個人的街道問題:在街道問題(參見例3)中,若有n個人要從左下角走向右上角,要求他們走過的邊的總長度最大。當然,這里每個人也只能向右或向上走。下面是一個樣例,左圖是從出發(fā)地到目的地的三條路徑,右圖是他們所走過的邊,這些邊的總長度為5 + 4 + 3 + 6 + 3 + 3 + 5 + 8 + 8 + 7 + 4 + 5 + 9 + 5 + 3 = 78(不一定是最大)。 這個題目是對街道問題的又一次擴展。仿照街道問題的解題方法,我們?nèi)匀豢梢杂脛討B(tài)規(guī)劃來解決本題。不過這一次是n個人同時走,狀態(tài)變量也就需要用n維來表示,。相應的,決策變量也要變成n維,uk=(uk,1,uk,2,…,uk,n)。狀態(tài)轉移方程不需要做什么改動: 在寫規(guī)劃方程時,需要注意在第k階段,n條路徑所走過的邊的總長度的計算,在這里我就用gk(sk,uk)來表示了: 邊界條件為 可見將原來的動態(tài)規(guī)劃算法移植到這個問題上來,在理論上還是完全可行的。但是,現(xiàn)在的這個動態(tài)規(guī)劃算法的時空復雜度已經(jīng)是關于n的指數(shù)函數(shù),只要n稍微大一點,這個算法就不可能實現(xiàn)了。 下面我們換一個思路,將n條路徑看成是網(wǎng)絡中一個流量為n的流,這樣求解的目標就是使這個流的費用最大。但是本題又不同于一般的費用流問題,在每一條邊e上的流費用并不是流量和邊權的乘積 ,而是用下式計算: 為了使經(jīng)典的費用流算法適用于本題,我們需要將模型稍微轉化一下: 如圖,將每條邊拆成兩條。拆開后一條邊上有權,但是容量限制為1;另一條邊沒有容量限制,但是流過這條邊就不能計算費用了。這樣我們就把問題轉化成了一個標準的最大費用固定流問題。 這個算法可以套用經(jīng)典的最小費用最大流算法,在此就不細說了。(參見附錄中的源程序) 這個例題是我仿照ioi97的“障礙物探測器”一題[6]編出來的。“障礙物探測器”比這一題要復雜一些,但是基本思想是相似的。類似的題目還有99年冬令營的“迷宮改造”[7]。從這些題目中都可以看到動態(tài)規(guī)劃和網(wǎng)絡流的聯(lián)系。 推廣到一般情況,任何有向無環(huán)圖中的費用流問題在理論上說,都可以用動態(tài)規(guī)劃來解決。對于流量為n(如果流量不固定,這個n需要事先求出來)的費用流問題,用n維的變量sk=(sk,1,sk,2,…,sk,n)來描述狀態(tài),其中sk,i?v(1£i£n)。相應的,決策也用n維的變量uk=(uk,1,uk,2,…,uk,n)來表示,其中uk,i?e(sk,i)(1£i£n),e(v)表示指向v的弧集。則狀態(tài)轉移方程可以這樣表示: sk-1,i = uk,i的弧尾結點 規(guī)劃方程為 邊界條件為 但是,由于動態(tài)規(guī)劃算法是指數(shù)級算法,因而在實現(xiàn)中的局限性很大,僅可用于一些n非常小的題目。然而在競賽解題中,比如上面說到的ioi97以及99冬令營測試時,我們使用動態(tài)規(guī)劃的傾向性很明顯(“障礙物探測器”中,我們用的是貪心策略,求n=1或n=2時的局部最優(yōu)解[8])。這主要有兩個原因: 一. 雖然網(wǎng)絡流有著經(jīng)典的算法,但是在競賽中不可能出現(xiàn)經(jīng)典的問題。如果要運用網(wǎng)絡流算法,則需要經(jīng)過一番模型轉化,有時這個轉化還是相當困難的。因此在算法的設計上,靈活巧妙的動態(tài)規(guī)劃算法反而要更為簡單一些。 二. 網(wǎng)絡流算法實現(xiàn)起來很繁,這是被人們公認的。因而在競賽的緊張環(huán)境中,實現(xiàn)起來有一定模式的動態(tài)規(guī)劃算法又多了一層優(yōu)勢。 正由于動態(tài)規(guī)劃算法在設計和實現(xiàn)上的簡便性,所以在n不太大時,也就是在動態(tài)規(guī)劃可行的情況下,我們還是應該盡量運用動態(tài)規(guī)劃。 §4結語 本文的內(nèi)容比較雜,是我?guī)啄陙韺討B(tài)規(guī)劃的參悟理解、心得體會。雖然主要的篇幅講的都是理論,但是根本的目的還是指導實踐。 動態(tài)規(guī)劃,據(jù)我認為,是當今信息學競賽中最靈活、也最能體現(xiàn)解題者水平的一類解題方法。本文內(nèi)容雖多,不能涵蓋動態(tài)規(guī)劃之萬一?!凹埳系脕斫K覺淺,絕知此事要躬行?!币胝嬲I悟、理解動態(tài)規(guī)劃的思想,掌握動態(tài)規(guī)劃的解題技巧,還需要在實踐中不斷地挖掘、探索。實踐得多了,也就能體會到漸入佳境之妙了。 動態(tài)規(guī)劃, 算法之常, 運用之妙, 存乎一心。
文章TAG:狀態(tài)轉移方程什么是狀態(tài)轉移方程

最近更新

  • 9900kf,9900kf配什么主板最好9900kf,9900kf配什么主板最好

    9900kf配什么主板最好2,9900kf用120超頻3水冷夠用嗎3,如果打游戲的話是i99900kf和銳龍93900x哪個好4,i9桌面級cpu有哪些5,i99900kf和9900k做影視哪個好6,i99900KF的硬盤買什么好1,9900kf配什.....

    問答 日期:2024-12-28

  • 獨角獸公司,獨角獸公司的介紹獨角獸公司,獨角獸公司的介紹

    獨角獸公司的介紹2,獨角獸概念股票公司有哪些3,請問什么叫獨角獸公司4,互聯(lián)網(wǎng)行業(yè)都有哪些厲害的獨角獸公司5,A股的獨角獸公司有哪些6,A股有哪些獨角獸上市公司1,獨角獸公司的介紹投資界對于.....

    問答 日期:2024-12-28

  • 運維做大數(shù)據(jù),it管理大數(shù)據(jù)運維需要做什么?運維做大數(shù)據(jù),it管理大數(shù)據(jù)運維需要做什么?

    大數(shù)據(jù)運維、數(shù)據(jù)處理、數(shù)據(jù)挖掘在IT管理領域應該做什么?大數(shù)據(jù)運維是做什么的?在IT管理領域,大數(shù)據(jù)運維工程師需要對數(shù)據(jù)高度敏感。數(shù)據(jù)處理和數(shù)據(jù)挖掘應該怎么做?IT監(jiān)控或IT運維流程的產(chǎn).....

    問答 日期:2024-12-28

  • 光伏農(nóng)業(yè),光伏農(nóng)業(yè)有哪四種模式?光伏農(nóng)業(yè),光伏農(nóng)業(yè)有哪四種模式?

    農(nóng)業(yè)的四種模式是什么?1.光伏種植將光伏和種植結合起來,包括光伏蔬菜、光伏花卉、光伏苗木、光伏食用菌、光伏中藥材、光伏茶園、光伏果園、光伏林業(yè)等等。光伏農(nóng)業(yè)Overview光伏農(nóng)業(yè)從涉.....

    問答 日期:2024-12-28

  • 磁懸浮機器人,懸掛列車和磁懸浮列車的區(qū)別磁懸浮機器人,懸掛列車和磁懸浮列車的區(qū)別

    它是一個機器人嗎?磁浮不僅是空調,還用在這些產(chǎn)品上。磁懸浮列車磁懸浮列車是一種現(xiàn)代高科技軌道交通工具,它通過電磁力實現(xiàn)列車與軌道之間的無接觸懸浮和導向,然后利用直線電機產(chǎn)生的電磁.....

    問答 日期:2024-12-28

  • 虛擬現(xiàn)實體驗,浸入式虛擬現(xiàn)實體驗怎么樣虛擬現(xiàn)實體驗,浸入式虛擬現(xiàn)實體驗怎么樣

    浸入式虛擬現(xiàn)實體驗怎么樣虛擬現(xiàn)實玩的是沉浸感,特別是玩游戲,沉浸在虛擬現(xiàn)實技術搭建的新世界里??梢栽?7870網(wǎng)站查看,個人感覺虛擬現(xiàn)實還是很贊的。期待看到有用的回答!2,什么是虛擬現(xiàn)實.....

    問答 日期:2024-12-28

  • 手機清理內(nèi)存,手機內(nèi)存怎么清除手機清理內(nèi)存,手機內(nèi)存怎么清除

    手機內(nèi)存怎么清除2,怎樣清理手機里的內(nèi)存3,怎樣清除手機內(nèi)存4,怎樣清理手機內(nèi)存5,如何清除手機內(nèi)存6,怎樣清理手機內(nèi)存1,手機內(nèi)存怎么清除內(nèi)存滿了用360手機安全衛(wèi)士,可以清理手機緩存,優(yōu)化系.....

    問答 日期:2024-12-28

  • 大學專業(yè)電器自動化怎么樣,大學專業(yè)電器自動化怎么樣,

    遼寧科技大學電氣工程及其自動化專業(yè)怎么樣?大學電氣工程及其自動化怎么樣?三峽大學電氣自動化專業(yè)怎么樣?電氣自動化技術專業(yè)怎么樣?我覺得電氣自動化技術專業(yè)挺好的。首先要知道電氣自動.....

    問答 日期:2024-12-28