動態規劃matlab仿真實例參考模板_第1頁
動態規劃matlab仿真實例參考模板_第2頁
動態規劃matlab仿真實例參考模板_第3頁
動態規劃matlab仿真實例參考模板_第4頁
動態規劃matlab仿真實例參考模板_第5頁
已閱讀5頁,還剩1頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、動態規劃在火力分配中的應用。1. 問題描述設有m個目標,目標價值(重要性和危害性)各不相同,用數值AK(K=1,2,.m)表示,計劃用n枚導彈突襲,導彈擊毀目標的概率PK=1-e-ak uk,其中ak是常數,取決于導彈的特性與目標的性質;uk為向目標發射的導彈數,問題:做出方案使預期的突擊效果最大。2. 問題建模上述問題可以表述為 maxV=k=1mAk(1-e-ak uk)約束條件為 k=1muk=n (uk 為非負整數)3. 算法描述下面通過一個實例說明:設目標數目為4(m=4),導彈為5(n=5),Ak和aK取值情況如下表所示: 表1:Ak ,uk取值情況目標K1234Ak8763uk0

2、.20.30.50.9將火力分配可分為4個階段,每個階段指標函數為:V1u1=8(1-e-0.2u1) V2u2=7(1-e-0.3u2) V3u3=6(1-e-0.5u3) V4u4=3(1-e-0.9u4)1 / 6uk 可能取值為0,1,2,3,4,5,將函數值帶人如下表:表2 函數值uV1u1V2u2V3u3V4u40000011.451.812.361.7922.643.163.792.5133.614.154.662.8144.414.895.192.9355.065.445.512.97動態規劃問題基本方程為:fkxk=maxVkuk+fk+1xk-uk cf5x5=0逐次向前推

3、一級K=4 f4x4=V4u4=3(1-e-0.9u4) K=3 f3x3=maxV3u3+f4x3-u3=max6(1-e-0.5u3)+ f4x3-u3K=2 f2x2=maxV2u2+f3x2-u2= max7(1-e-0.3u2)+ f3x2-u2K=1 f1x1= maxV1u1+f2x1-u1= max8(1-e-0.2u1)+ f2x1-u1 (0<uk<5可取等號)只需要求解f15的最大值然后反推回去就可以獲得最優的分配方案4. Matlab仿真求解因為xk 與uk取值為整數,可以采用動態規劃的方法,獲得f15的最大值,對應的最優方案functionp_opt,fv

4、al=dynprog(x,DecisFun,SubObjFun,TransFun,ObjFun) %求解動態規劃問題最小值函數k=length(x(1,:) %判斷決策級數x_isnan=isnan(x); % 非空狀態矩陣t_vubm=inf*ones(size(x); % 性能指標中間矩陣f_opt=nan*ones(size(x); % 總性能指標矩陣d_opt=f_opt; %每步決策矩陣tmp1=find(x_isnan(:,k); % 最后一步狀態向量tmp2=length(tmp1); % 最后一步狀態個數for i=1:tmp2 u=feval(DecisFun,k,x(tmp

5、1(i),k); tmp3=length(u);%決策變量 for j=1:tmp3 % 求出當前狀態下所有決策的最小性能指標 tmp=feval(SubObjFun,k,x(tmp1(i),k),u(j); if tmp <= t_vubm(i,k) %t_vub f_opt(i,k)=tmp; d_opt(i,k)=u(j); t_vubm(i,k)=tmp; end; end;end for ii=k-1:-1:1 tmp10=find(x_isnan(:,ii); tmp20=length(tmp10); for i=1:tmp20 %求出當前狀態下所有可能的決策 u=feval

6、(DecisFun,ii,x(tmp10(i),ii); tmp30=length(u) ; for j=1:tmp30 % 求出當前狀態下所有決策的最小性能指標 tmp00=feval(SubObjFun,ii,x(tmp10(i),ii),u(j); % 單步性能指標 tmp40=feval(TransFun,ii,x(tmp10(i),ii),u(j); % 下一狀態 tmp50=x(:,ii+1)-tmp40; % 找出下一狀態在 x 矩陣的位置 tmp60=find(tmp50=0) ; ifisempty(tmp60) if nargin<6 %矩陣不同需要修改nargin的

7、值,很重要 tmp00=tmp00+f_opt(tmp60(1),ii+1); % set the default object value else tmp00=feval(ObjFun,tmp00,f_opt(tmp60(1),ii+1); end %當前狀態的性能指標 if tmp00<=t_vubm(i,ii) f_opt(i,ii)=tmp00; d_opt(i,ii)=u(j); t_vubm(i,ii)=tmp00; end; end; end; end;endfval=f_opt(:,1);tmp0 = find(isnan(fval);fval=fval(tmp0,1)

8、;p_opt=;tmpx=;tmpd=;tmpf=; tmp01=length(tmp0); for i=1:tmp01 tmpd(i)=d_opt(tmp0(i),1); tmpx(i)=x(tmp0(i),1); tmpf(i)=feval(SubObjFun,1,tmpx(i),tmpd(i); p_opt(k*(i-1)+1,1,2,3,4)=1,tmpx(i),tmpd(i),tmpf(i); for ii=2:k tmpx(i)=feval(TransFun,ii,tmpx(i),tmpd(i); tmp1=x(:,ii)-tmpx(i);tmp2=find(tmp1=0); if

9、 isempty(tmp2) tmpd(i)=d_opt(tmp2(1),ii); end tmpf(i)=feval(SubObjFun,ii,tmpx(i),tmpd(i); p_opt(k*(i-1)+ii,1,2,3,4)=ii,tmpx(i),tmpd(i),tmpf(i); end;end; 下面編寫四個函數:function u = DecisF1( k,x ) %決策函數if k=4 u=x;else u=0:x;endfunction y = TransF1( k,x,u ) %狀態轉移方程y=x-u;function v = SubObjF1( k,x,u ) %階段k的指標函數a=0.2,0.3,0.5,0.9;A=8,7,6,3;v=A(k)*(1-exp(-a(k)*u);v=-v; %max變為minfunction y = ObjF1( v,f ) %基本方程中的函數y=v+f;y=-y; %max變為min測試代碼:clear;n=5;x1=n;nan*ones(n,1);x2=0:n;x2=x2'x=x1,x2,x2,x2;p,f=dynprog(x,'DecisF1','SubObjF1&

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論