演算法步驟詳解
① 演算法步驟
上述演算法的流程如圖4-1所示。
演算法從尋找初始可行解開始。通常的做法是,它對應於從鬆弛變數列形成的基底。如果沒有初始可行解存在,則演算法在第二步停止。
圖4-1 菲力浦的多目標單純形法計算框圖
如果存在一個可行基底。便置計數器b和c分別為1和0。計數器b標識各個基底,計數器c標識對應於非劣勢解的基底,在第三步中計算與初始基底對應的解。在第四步中,通過解非劣勢性子問題來檢查可行解的非劣勢性。
演算法在第四、五、六步中進行循環,直到發現一個非劣勢解。發現後,把這個非劣勢解在第七步中列印出來。
為了檢查另外的非劣勢解,在第八步中求解方向子問題。如果沒有合適的(sk)min=0,那麼,不存在別的非劣勢解,演算法停止。但是,如果第九步確定了一個(sk)min=0,且第十步指出對應的xk將引導到一個未探索過的基底,則對應的xk進入基底,轉到第七步去列印出這個另外的非劣勢解。演算法將繼續在第七、八、九、十、十一、七步之間進行循環,直到出現沒有對應的xk導致未探索基底時為止。
為了進一步理解菲力浦的多目標單純形法求解的有關步驟,我們考慮上一節中的例子並添加鬆弛變數來產生初始多目標單純形表。
極大優勢
華北煤田排水供水環保結合優化管理
其中,
華北煤田排水供水環保結合優化管理
滿足於約束條件
華北煤田排水供水環保結合優化管理
初始基本可行解在表4-2中列出,初始基底是根據與鬆弛變數x3、x4、x5相關的列來形成的。從而,演算法的第一、二、三步是滿足的。
表4-2 初始基本可行解表
接下來,演算法確定x1=x2=0是否為非劣勢解點。這由解非劣勢性子問題來進行。要解這個非劣勢性子問題,需要確定(uT+eT)D。矩陣D對應於目標函數行中的非基本列,就是
華北煤田排水供水環保結合優化管理
對於x1=x2=0要是非劣勢的,必須存在一個權數集wi=ui+1,使得
華北煤田排水供水環保結合優化管理
或
華北煤田排水供水環保結合優化管理
或
華北煤田排水供水環保結合優化管理
減去剩餘變數s1,s2,添加人工變數y1,y2,產生所需要的第一演算階段單純形問題:
華北煤田排水供水環保結合優化管理
滿足於約束條件
華北煤田排水供水環保結合優化管理
對此非劣勢性子問題的初始表如表4-3所示。
表4-3 非劣勢性子問題的初始表
把第三行加到第一行上,產生初始可行解,如表4-4所示。
表4-4 初始可行解
根據單純形法則,u2進入基底,旋轉主元是第三行框起來的數2。變換後得表4-5。
表4-5 非劣勢解表
此時ymin=0,s1=7/2,u2=1/2,u1=s2=y1=y2=0,於是點x1=x2=0是非劣勢解。
我們也注意到,表4-5表明存在正的權數w1=u1+1=1,w2=u2+1=3/2,解x1=x2=0也是下面問題的最優解。這個問題是:
華北煤田排水供水環保結合優化管理
滿足於
華北煤田排水供水環保結合優化管理
因此,可以這樣說,菲力浦演算法允許我們「朝後」應用加權方法:對於一個非劣勢解x,確定出一組權數w,它們是在加權方法中用來得出這個非劣勢解x所需要的權數。
接下來求解方向子問題,以確定是否存在另外的非劣勢解。從表4-5,我們能夠看到,有s2=0。於是,如果引入x2將導致一個未探索過的基底,則存在另一個非劣勢解點。從表4-2,對x2的旋轉主元是第五行中的數字5,這表明新的基底將是x2、x3和x4,它還沒有被探索過。
顯然沒有必要,因為已經確定了將導致另一個非劣勢解的xk,但我們現在也能夠確定引入x1是否會導致一個非劣勢解。這可以通過解下面的方向子問題來進行。這個方向子問題是:
華北煤田排水供水環保結合優化管理
滿足於
華北煤田排水供水環保結合優化管理
在第一演算階段以後(表4-5),得到如下的方向子問題,表4-6所示。
表4-6 方向子問題表
把第2行加到第一行上,產生了表4-7。
表4-7 最優解表
表4-7是最優的,它指出s1=7/2>0,因此引入x1將導致一個有劣勢解。
我們現在引入x2。以表4-2第五行的元素為主元進行旋轉,得到主問題的第二個表,如表4-8所示,從而,x1=0,x2=72/5是一個非劣勢解,把它列印出來。
表4-8 主問題二表
為了檢查是否存在別的非劣勢解,現在必須重新求解方向子問題。要這樣做,必須又一次計算(uT+eT)D,其中的矩陣D此時為
華北煤田排水供水環保結合優化管理
於是,
華北煤田排水供水環保結合優化管理
由此,方向子問題的合適的約束集為
華北煤田排水供水環保結合優化管理
關於目標函數,可以為s1和s5。然而,在前面我們是用x2驅趕x5而得到目前的非劣勢解點,因此,易知有s5=0,且把x5帶入基底會產生出前面的非劣勢解點。從而,僅需對s1檢查方向子問題,就是,
華北煤田排水供水環保結合優化管理
滿足於
華北煤田排水供水環保結合優化管理
用表的形式,見表4-9。
表4-9 方向子問題表
把表4-9的第2行加到第1行上,得表4-10。對表4-10以第2行第二列元素為主元進行旋轉,得到最優的表4-11。從表4-11可以看出,s1=0,這表示此時把x1引入基底將產生另一個非劣勢解點。從表4-3可明顯看出,旋轉主元是4/25,將把x4驅趕出基底。這導致又一個未探索過的基底(x1,x2和x3)和第三個非劣勢解點。以4/25為主元旋轉,得到下面表4-12中的解:非劣勢點x1=7,x2=13。
表4-10 方向子問題過渡表
表4-11 最優解表
表4-12 非劣勢解表
繼續與前面同樣的過程,即求解與表4-12相關的方向子問題,得到s4=0和s5=9/2。引入s4將把x1從基底中驅趕出去並返回到先前的非劣勢解。引入x5將把x2從基底中驅趕出去將得到一個有劣勢解。這樣,演算法停止[134]。
② 演算法分析中動態規劃的四個基本步驟
1、描述優解的結構特徵。
2、遞歸地定義一個最優解的值。
3、自底向上計算一個最優解的值。
4、從已計算的信息中構造一個最優解。
③ 演算法 步驟 (需要詳細的步驟啊~)
判斷點A(1,2)與⊙C (x-5)^2+(y-1)^2=9的位置關系。
第一步:
判斷C的圓心O坐標(5,1);
半徑r=Sqrt[9]=3.
第二步:
計算A與圓C的距離,
|AO|=Sqrt[(1-5)^2+(2-1)^2]=Sqrt[17].
第三步:
比較|AO|與r的大小關系.
Sqrt[17]>Sqrt[9].
第四步:
結論,A在圓C外.
④ 演算法過程是什麼
⑤ Stein演算法的演算法步驟
1、如果An=Bn,那麼An(或Bn)*Cn是最大公約數,演算法結束
2、如果An=0,Bn是最大公約數,演算法結束
3、如果Bn=0,An是最大公約數,演算法結束
4、設置A1=A、B1=B和C1=1
5、如果An和Bn都是偶數,則An+1=An/2,Bn+1=Bn/2,Cn+1=Cn*2(注意,乘2隻要把整數左移一位即可,除2隻要把整數右移一位即可)
6、如果An是偶數,Bn不是偶數,則An+1=An/2,Bn+1=Bn,Cn+1=Cn(很顯然啦,2不是奇數的約數)
7、如果Bn是偶數,An不是偶數,則Bn+1=Bn/2,An+1=An,Cn+1=Cn(很顯然啦,2不是奇數的約數)
8、如果An和Bn都不是偶數,則An+1=|An-Bn|/2,Bn+1=min(An,Bn),Cn+1=Cn
9、n加1,轉1
以前的演算法有錯誤,因為cn根本就沒有用到。我編程的時候才發現。現在我已經修正了這個錯誤。