【路徑規(guī)劃】遺傳算法求解考慮分配次序的多無人機(jī)協(xié)同目標(biāo)分配問題
?首先通過分析UAV分配次序?qū)Υ驌羧蝿?wù)總收益的影響,?設(shè)計(jì)了動(dòng)態(tài)戰(zhàn)場環(huán)境的更新規(guī)則. 將航程代價(jià)和任務(wù)代價(jià)作為懲罰項(xiàng)修正目標(biāo)函數(shù),?建立了考慮分配次序的UAVs協(xié)同目標(biāo)分配優(yōu)化模型. 然后針對模型的物理意義改進(jìn)了遺傳算法基因編碼方式,?設(shè)計(jì)了MUCTA遺傳算法.?該算法利用狀態(tài)轉(zhuǎn)移思想,?引進(jìn)SDR算子獲得多種分配次序種群,?同時(shí)以單行變異算子修正UAV與目標(biāo)對應(yīng)關(guān)系,?并采用最優(yōu)個(gè)體法和輪盤賭法篩選子代個(gè)體.
%本實(shí)驗(yàn)?zāi)康氖球?yàn)證改進(jìn)的DE離散目標(biāo)分配算法的有效性
%實(shí)驗(yàn)設(shè)置:各種環(huán)境,調(diào)用目標(biāo)分配的算法
%目標(biāo)分配實(shí)驗(yàn)的輸入:代價(jià)矩陣
%利用代價(jià)矩陣和映射方法,在離散和連續(xù)空間轉(zhuǎn)換
%目標(biāo)分配實(shí)驗(yàn)的輸出:有效的基因染色體表示
%比較實(shí)驗(yàn):
%1、可行性分析,三種模型
%2、進(jìn)化策略對比分析,證明采用雙策略的有效性
%3、大數(shù)據(jù)分析
%4、與其他方法的比較
% 本文只用到了AssignType =2;情形,即UAV數(shù)量大于TARGET數(shù)量
%使用了改動(dòng)的遺傳算法
%相比較源程序,較大改動(dòng)部分為:對象執(zhí)行區(qū)(GetFit1和Getfit2兩個(gè)函數(shù)),和差分進(jìn)化區(qū)(全部改動(dòng)),其他部分有少量改動(dòng),我不記得了。很多部分直接刪改,可能注釋沒有對應(yīng)的上,強(qiáng)烈建議對比源代碼學(xué)習(xí)觀看
%本人編程能力較差,編寫格式不規(guī)范,很多地方注釋不足以及隨心所欲各種直接刪改,不同實(shí)驗(yàn)直接改數(shù)據(jù),以及出現(xiàn)的重復(fù),各種FOR循環(huán)嵌套等等,我自己都覺得亂七八糟。再次強(qiáng)烈建議對比源代碼
%建議只使用該代碼框架(即閱讀源代碼即可,本代碼可適當(dāng)看一下就行,估計(jì)很費(fèi)勁),自行刪改其中內(nèi)容,寫自己的文章,但注意源代碼自行備份,自己的代碼盡量多注釋以及寫實(shí)驗(yàn)說明,方便后來的師弟或師妹。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%清空環(huán)境
clear;
%定義地形對象
cTerrain = CTerrain3D;
%定義威脅區(qū)對象
cTread = CTread;
%調(diào)整為統(tǒng)一的圖形環(huán)境
figure('Renderer','opengl');
%繪制地形和威脅區(qū)
cTerrain.draw();
cTread.draw();
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%數(shù)據(jù)形式說明
%xs 初始點(diǎn)位置集合,三維點(diǎn)集
%yt 目標(biāo)點(diǎn)位置集合,三維點(diǎn)集
%MxsEna 能力矩陣,集合中的二元組表示最大最小飛行速度
%MxsDIs 最大航程矩陣,集合中的值表示UAV最大可飛的距離
%MytTOrd 任務(wù)點(diǎn)間的時(shí)序坐標(biāo),要求盡量在前面的先執(zhí)行
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%調(diào)用目標(biāo)分配算法
%AssignType表示不同的模型,1, N=M; 2, N>M; 3, N<M
%Key表示算法執(zhí)行次數(shù), 0,執(zhí)行一次,1,執(zhí)行多次
AssignType =2;
Key =0;
%時(shí)間測試
Time = cputime;
%% ? ?第一種情況的實(shí)驗(yàn)
if AssignType == 1
? ? ? ?%%%%%%%%%%%%%%%%%%%%%%%數(shù)據(jù)區(qū)%%%%%%%%%%%%
? ? ? ?xs = [%11 2 3;2 17 5; 34 26 7;5 2 2;6 33 3;27 34 6;21 45 5;25 12 3;22 17 11;13 31 12;
? ? ? ? ? ? ?%45 21 11; 36 22 11;13 21 16;41 25 10;25 25 11;53 12 14;22 12 12;18 32 11; 67 34 12;26 16 15;
? ? ? ? ? ? ?78 20 15;93 31 12;31 20 13;112 32 15; 134 26 17;45 52 12;36 63 13;67 34 16;21 85 15;32 62 13;];
? ? ? ?yt = [%40 210 12;170 90 13 ; 80 197 21 ;172 120 13;160 56 13;160 143 21;170 200 21;113 200 12;97 134 16;100 145 11;
? ? ? ? ? ? ?%81 101 21; 72 152 12; 133 60 11;84 164 21; 150 90 21;146 121 12; 167 54 12; 108 165 12;99 120 21;110 143 11;
? ? ? ? ? ? ?70 181 12;15 133 13 ; 19 151 12 ;160 192 13;101 120 23;160 113 12;82 101 11;173 140 12;182 65 14; 128 156 12;]; ?
? ? ? ? ?
? ? ? ?MxsEna=[%0.2 0.3; 0.2 0.4;0.4 0.75;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;0.2 0.3; 0.2 0.4;
? ? ? ? ? ? ? % 0.4 0.75;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;
? ? ? ? ? ? ? ?0.2 0.3; 0.2 0.4;0.4 0.75;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;0.3 0.5;0.3 0.6;];
? ? ? ? ? ?
? ? ? ?MxsDis=[%400 700 650 500 700 900 450 610 400 700
? ? ? ? ? ? ? ?%650 500 700 900 450 610 700 900 450 610
? ? ? ? ? ? ? ?500 700 300 350 700 900 450 610 450 610];
? ? ? ?
? ? ? ? ? ?
? ? ? ?ytW = [%1 3 4 2 1 1 3 2 1 2
? ? ? ? ? ? ? %3 2 1 3 2 1 2 3 2 1
? ? ? ? ? ? ? 1 1 1 1 1 1 1 1 1 1];
? ? ? ? ?
? ? ? ?MytTOrd=[3 4; 5 2; 6 8; 7 4;];
? ? ? ?
? ? ? ? ? ?%引入新的協(xié)同矩陣,最大起始時(shí)間矩陣
? ? ? ? ? ?Twait = [];
? ? ? ? ? ?Twindow=[];
?
? ? ? ?%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
? ?if Key == 0
? ?
? ? ? ?
? ? ? ?%%%%%%%%%%%%%%%%%%%%%%算法執(zhí)行區(qū)%%%%%%%%%%%%%%%%%%
? ? ? ?%調(diào)用目標(biāo)分配算法,并取得解和相關(guān)數(shù)據(jù),計(jì)算算法耗費(fèi)時(shí)間
? ? ? ?%定義目標(biāo)分配算法對象
? ? ? ? ?DDE1 = DMDEAssignTarget(cTerrain,xs,yt,MxsEna,MxsDis,ytW,MytTOrd,Twait,Twindow,1);
? ? ? ? % MC = Cal1.GetMcost();
? ? ? ? %Cal1 = CallocationTargetOld1(cTerrain);
? ? ? ? %標(biāo)簽顯示文字
? ? ? ? ?xlabel('X/km')
? ? ? ? ?ylabel('Y/km')
? ? ? ? ?zlabel('Z/km') ?
? ? ? ?%DDEAssign1=DDEAssignTarget1(cTerrain,xs,yt,MxsEna,MxsDis,ytW,MytTOrd);
? ? ? ?%執(zhí)行run并返回結(jié)果集
? ? ? ? t1 = cputime;
? ? ? ?[solU solT solC solF ] = DDE1.run();
? ? ? ?Time = cputime -t1;
% ? ? ? ? %結(jié)果
? ? ? ? solU
? ? ? ? solT
? ? ? ? solC
? ? ? ? solF
? ? ? ? Time
? ? ? ?
? ?else if Key == 1
? ? ? ? ? ?for i=1:10
? ? ? ? ? ?DDE1 = DMDEAssignTarget(cTerrain,xs,yt,MxsEna,MxsDis,ytW,MytTOrd,Twait,Twindow,i);
? ? ? ? % MC = Cal1.GetMcost();
? ? ? ? %Cal1 = CallocationTargetOld1(cTerrain);
? ? ? ? %標(biāo)簽顯示文字
? ? ? ? ?xlabel('X/km')
? ? ? ? ?ylabel('Y/km')
? ? ? ? ?zlabel('Z/km') ?
? ? ? ?%DDEAssign1=DDEAssignTarget1(cTerrain,xs,yt,MxsEna,MxsDis,ytW,MytTOrd);
? ? ? ?%執(zhí)行run并返回結(jié)果集
? ? ? ? t1 = cputime;
? ? ? ?[solU solT solC solF ] = DDE1.run();
? ? ? ?solu(i,:) = solU;
? ? ? ?solt(i,:) = solT;
? ? ? ?solc(i,:) = solC;
? ? ? ?solf(i,:) = solF;
? ? ? ?Time(i,:) = cputime -t1;
? ? ? ? ? ?end %i
% ? ? ? ? %結(jié)果
? ? ? ? solu
? ? ? ? solt
? ? ? ? solc
? ? ? ? solf
? ? ? ? Time
? ? ? ?
? ? ? ?end % key=1
? ?end % key=0
?
else if AssignType == 2
? ? ? ?%% 第二種實(shí)驗(yàn)的情況
? ? ? ? %%%%%%%%%%%%%%%%%%%%%%%數(shù)據(jù)區(qū)%%%%%%%%%%%%
? ? ? ?xs = [%11 2 3;2 17 5; 34 26 7;5 2 2;6 33 3;27 34 6;21 45 5;25 12 3;22 17 11;13 31 12;
? ? ? ? ? ? ?%45 21 11; 36 22 11;13 21 16;41 25 10;25 25 11;53 12 14;22 12 12;18 32 11; 67 34 12;26 16 15;
? ? ? ? ? ? ?78 40 15;93 31 12;31 25 13;112 32 15; 134 26 17;45 52 12;36 55 13;67 34 16;21 45 15;160 30 13;];
? ? ? ?yt = [%40 210 12;170 90 13 ; 80 197 21 ;172 120 13;160 56 13;160 143 21;170 200 21;113 200 12;97 134 16;100 145 11;
? ? ? ? ? ? ?%81 101 21; 72 152 12; 133 60 11;84 164 21; 150 90 21;146 121 12; 167 54 12; 108 165 12;99 120 21;110 143 11;
? ? ? ? ? ? 70 151 12;40 155 13 ; 19 151 12 ;150 140 13 ]; ?
? ? ? ? ?
? ? ? ?MxsEna=[%0.2 0.3; 0.2 0.4;0.4 0.75;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;0.2 0.3; 0.2 0.4;
? ? ? ? ? ? ? % 0.4 0.75;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;
? ? ? ? ? ? ? ?0.2 0.3; 0.2 0.4;0.4 0.75;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;0.3 0.5;0.3 0.6;];
? ? ? ? ? ?
? ? ? ?MxsDis=[%400 700 650 500 700 900 450 610 400 700
? ? ? ? ? ? ? ?%650 500 700 900 450 610 700 900 450 610
? ? ? ? ? ? ? ?500 700 300 350 700 900 450 610 450 610];
? ? ? ? ? ?
? ? ? ? ? ?
? ? ? ?ytW = [%1 3 4 2 1 1 3 2 1 2
? ? ? ? ? ? ? %3 2 1 3 2 1 2 3 2 1
? ? ? ? ? ? ? 1 1 1 1];
? ? ? ? ?
? ? ? ? ? %這個(gè)數(shù)據(jù)里都代表的是目標(biāo)點(diǎn),是目標(biāo)點(diǎn)與目標(biāo)點(diǎn)的關(guān)系
? ? ? ?MytTOrd=[3 2];
? ? ? ?
? ? ? ? ? ? %引入新的協(xié)同矩陣,最大起始時(shí)間矩陣
? ? ? ? ? ?Twait = [30 40 20 15 50 70 30 80 90 65];
? ? ? ? ? ?Twindow=[];
? ? ? ?%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
? ? ? ? ?if Key == 0
? ? ? ? ? ? ?
? ? ? ?
? ? ? ?%%%%%%%%%%%%%%%%%%%%%%算法執(zhí)行區(qū)%%%%%%%%%%%%%%%%%%
? ? ? ?%調(diào)用目標(biāo)分配算法,并取得解和相關(guān)數(shù)據(jù),計(jì)算算法耗費(fèi)時(shí)間
? ? ? ?%定義目標(biāo)分配算法對象
? ? ? ? ?DDE1 = DMDEAssignTarget(cTerrain,xs,yt,MxsEna,MxsDis,ytW,MytTOrd,Twait,Twindow,1);
? ? ? ? % MC = Cal1.GetMcost();
? ? ? ? %Cal1 = CallocationTargetOld1(cTerrain);
? ? ? ? %標(biāo)簽顯示文字
? ? ? ? ?xlabel('X/km')
? ? ? ? ?ylabel('Y/km')
? ? ? ? ?zlabel('Z/km') ?
? ? ? ?%DDEAssign1=DDEAssignTarget1(cTerrain,xs,yt,MxsEna,MxsDis,ytW,MytTOrd);
? ? ? ?%執(zhí)行run并返回結(jié)果集
? ? ? ?
? ? ? ? ? [solU solT solC solF ? cpop ] ?= DDE1.run();
? ? ? ?Time
cpop;
% ? ? ? ? %結(jié)果
? ? ? ? solU
? ? ? ? solT
? ? ? ? solC
? ? ? ? solF
? ? ? ? Time
? ? ? ?
? ? ? ? ?else if Key == 1
? ? ? ? ? ? ? ? ?Time2=0;
? ? ? ? ? ? ? ? ?cpop3=0;
? ? ? ? ? ? ? ? ? ?for i=1:20
? ? ? ? ? ?DDE1 = DMDEAssignTarget(cTerrain,xs,yt,MxsEna,MxsDis,ytW,MytTOrd,Twait,Twindow,i);
? ? ? ? % MC = Cal1.GetMcost();
? ? ? ? %Cal1 = CallocationTargetOld1(cTerrain);
? ? ? ? %標(biāo)簽顯示文字
? ? ? ? ?xlabel('X/km')
? ? ? ? ?ylabel('Y/km')
? ? ? ? ?zlabel('Z/km') ?
? ? ? ?%DDEAssign1=DDEAssignTarget1(cTerrain,xs,yt,MxsEna,MxsDis,ytW,MytTOrd);
? ? ? ?%執(zhí)行run并返回結(jié)果集
? ? ? ? t1 = cputime;
? ? ? ?[solU solT solC solF ?cpop ] = DDE1.run();
? ? ? ?solu(i,:) = solU;
? ? ? ?solt(i,:) = solT;
? ? ? ?solc(i,:) = solC;
? ? ? ?solf(i,:) = solF;
? ? ? ?Time(i,:) = cputime -t1;
% ? ? ? ? genX(i,:)=cpop(:,2);
? ? ? cpop2(:,i)=cpop(:,2);
? ? ?
? ? ? ?Time(i)
? ? ? ? ? ?end %i
% ? ? ? ? %結(jié)果
% ? ? ? ? ? ? figure(3);
% ? ? ? ? ? ? grid on; ? ?
% ? ? ? ? ? ? hold on;
% ? ? ? ? ? ? plot(genX(1:length(genX),1)',genX(1:length(genX),2)','linewidth',2);
% ? ? ? ? ?solu
% ? ? ? ? ?solt
% ? ? ? ? ?solc
% ? ? ? ? ?solf
? ? ? ? Time=Time2/20;
? ? ? ? cpop=cpop2/20;
? ? ? ? ? ? ?end % key=1
? ? ? ? ?end % key=0
? ? ?
? ? ? ?
? ?else if AssignType == 3
? ? ? ? ? ? %% 第三種實(shí)驗(yàn)的情況
? ? ? ? ? ? ? ?%%%%%%%%%%%%%%%%%%%%%%%數(shù)據(jù)區(qū)%%%%%%%%%%%%
? ? ?xs = [%11 2 3;2 17 5; 34 26 7;5 2 2;6 33 3;27 34 6;21 45 5;25 12 3;22 17 11;13 31 12;
? ? ? ? ? ? ?%45 21 11; 36 22 11;13 21 16;41 25 10;25 25 11;53 12 14;22 12 12;18 32 11; 67 34 12;26 16 15;
? ? ? ? ? ? ?78 20 15;93 31 12;31 20 13;112 32 15];
? ? ? ?yt = [%40 210 12;170 90 13 ; 80 197 21 ;172 120 13;160 56 13;160 143 21;170 200 21;113 200 12;97 134 16;100 145 11;
? ? ? ? ? ? ?%81 101 21; 72 152 12; 133 60 11;84 164 21; 150 90 21;146 121 12; 167 54 12; 108 165 12;99 120 21;110 143 11;
? ? ? ? ? ? ?70 131 12;15 125 13 ; 19 151 12 ;142 120 13;120 100 23;160 90 12;82 101 11;173 140 12;160 160 14; 45 155 12;]; ? ?
? ? ? ? ?
? ? ? ?MxsEna=[%0.2 0.3; 0.2 0.4;0.4 0.75;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;0.2 0.3; 0.2 0.4;
? ? ? ? ? ? ? % 0.4 0.75;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;
? ? ? ? ? ? ? ?0.2 0.5; 0.3 0.4;0.4 0.75;0.3 0.45];
? ? ? ? ? ?
? ? ? ?MxsDis=[%400 700 650 500 700 900 450 610 400 700
? ? ? ? ? ? ? ?%650 500 700 900 450 610 700 900 450 610
? ? ? ? ? ? ? ?700 700 900 650];
? ? ? ? ? ?
? ? ? ?ytW = [%1 3 4 2 1 1 3 2 1 2
? ? ? ? ? ? ? %3 2 1 3 2 1 2 3 2 1
? ? ? ? ? ? ? 1 1 1 1 1 1 1 1 1 1];
? ? ? ? ?
? ? ? ?MytTOrd=[3 4; 5 2];
? ? ? ?
? ? ? ?%引入新的協(xié)同矩陣,最大起始時(shí)間矩陣
? ? ? ?Twait = [30 40 20 15];
? ? ? ?Twindow=[1300,6000];
? ? ? ?%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
? ? ? ? ?if Key == 0
? ? ? ? ? ? ? ?
? ? ? ?
? ? ? ?%%%%%%%%%%%%%%%%%%%%%%算法執(zhí)行區(qū)%%%%%%%%%%%%%%%%%%
? ? ? ?%調(diào)用目標(biāo)分配算法,并取得解和相關(guān)數(shù)據(jù),計(jì)算算法耗費(fèi)時(shí)間
? ? ? ?%定義目標(biāo)分配算法對象
? ? ? ? ?DDE1 = DMDEAssignTarget(cTerrain,xs,yt,MxsEna,MxsDis,ytW,MytTOrd,Twait,Twindow,1);
? ? ? ? % MC = Cal1.GetMcost();
? ? ? ? %Cal1 = CallocationTargetOld1(cTerrain);
? ? ? ? %標(biāo)簽顯示文字
? ? ? ? ?xlabel('X/km')
? ? ? ? ?ylabel('Y/km')
? ? ? ? ?zlabel('Z/km') ?
? ? ? ?%DDEAssign1=DDEAssignTarget1(cTerrain,xs,yt,MxsEna,MxsDis,ytW,MytTOrd);
? ? ? ?%執(zhí)行run并返回結(jié)果集
? ? ? ?t1 = cputime;
? ? ? ?[solU solT solC solF] ?= DDE1.run();
? ? ? ?Time = cputime -t1;
% ? ? ? ? %結(jié)果
? ? ? ? solU
? ? ? ? solT
? ? ? ? solC
? ? ? ? solF
? ? ? ? Time
? ? ? ?
? ? ? ? ?else if Key == 1
? ? ? ? ? ? ? ? ?
? ? ? ? ? ?for i=1:20
? ? ? ? ? ? ? ? ? ? ? ?DDE1 = DMDEAssignTarget(cTerrain,xs,yt,MxsEna,MxsDis,ytW,MytTOrd,Twait,Twindow,i);
? ? ? ? ? ? ? ? ? ? % MC = Cal1.GetMcost();
? ? ? ? ? ? ? ? ? ? %Cal1 = CallocationTargetOld1(cTerrain);
? ? ? ? ? ? ? ? ? ? %標(biāo)簽顯示文字
? ? ? ? ? ? ? ? ? ? ?xlabel('X/km')
? ? ? ? ? ? ? ? ? ? ?ylabel('Y/km')
? ? ? ? ? ? ? ? ? ? ?zlabel('Z/km') ?
? ? ? ? ? ? ? ? ? ?%DDEAssign1=DDEAssignTarget1(cTerrain,xs,yt,MxsEna,MxsDis,ytW,MytTOrd);
? ? ? ? ? ? ? ? ? ?%執(zhí)行run并返回結(jié)果集
? ? ? ? ? ? ? ? ? ? t1 = cputime;
? ? ? ? ? ? ? ? ? ?[solU solT solC solF ] = DDE1.run();
? ? ? ? ? ? ? ? ? ?solu(i,:) = solU;
? ? ? ? ? ? ? ? ? ?solt(i,:) = solT;
? ? ? ? ? ? ? ? ? ?solc(i,:) = solC;
? ? ? ? ? ? ? ? ? ?solf(i,:) = solF;
? ? ? ? ? ? ? ? ? ?Time(i,:) = cputime -t1;
? ? ? ? ? ?end %i
% ? ? ? ? %結(jié)果
? ? ? ? solu
? ? ? ? solt
? ? ? ? solc
? ? ? ? solf
? ? ? ? Time
? ? ? ? ? ? ?end % key=1
? ? ? ? ?end % key=0
? ? ? ? ? ?
? ? ? ?end % type =3
? ?end % type =2
end % type=1 ? ?

