【優(yōu)化調(diào)度】基于改進(jìn)的遺傳算法求解帶時(shí)間窗約束多衛(wèi)星任務(wù)規(guī)劃問(wèn)題含Matlab源碼
1 簡(jiǎn)介
問(wèn)題描述
衛(wèi)星觀測(cè)任務(wù)調(diào)度問(wèn)題描述如下?;趯?duì)太空在軌衛(wèi)星觀測(cè)需求,需要在地面觀測(cè)設(shè)備有限的情況下對(duì)我國(guó)上空在軌運(yùn)行衛(wèi)星進(jìn)行觀測(cè)任務(wù)調(diào)度。假設(shè)全國(guó)現(xiàn)共有M個(gè)地面觀測(cè)設(shè)備(每個(gè)觀測(cè)設(shè)備都需要對(duì)衛(wèi)星執(zhí)行相應(yīng)的觀測(cè)任務(wù)),N個(gè)待觀測(cè)衛(wèi)星,且M<<N。每個(gè)待觀測(cè)衛(wèi)星相對(duì)于不同的地面設(shè)備都有P個(gè)可供選擇的可見(jiàn)時(shí)間窗口,P的數(shù)量根據(jù)衛(wèi)星和觀測(cè)設(shè)備的不同而有所差異。其中,每個(gè)可觀測(cè)設(shè)備都可以在任何待觀測(cè)衛(wèi)星與之對(duì)應(yīng)的可見(jiàn)時(shí)間窗口內(nèi)對(duì)該衛(wèi)星進(jìn)行觀測(cè),觀測(cè)的時(shí)長(zhǎng)根據(jù)實(shí)際任務(wù)中該衛(wèi)星所需觀測(cè)時(shí)間而不同。同時(shí),任意一顆衛(wèi)星都可在其可見(jiàn)時(shí)間窗口內(nèi)被地面觀測(cè)設(shè)備所觀測(cè)。由于觀測(cè)設(shè)備自身的物理特性,每個(gè)地面觀測(cè)設(shè)備對(duì)一顆衛(wèi)星進(jìn)行觀測(cè)結(jié)束后對(duì)下一顆衛(wèi)星觀測(cè)之前,都需要經(jīng)過(guò)設(shè)備轉(zhuǎn)換時(shí)間,設(shè)備的轉(zhuǎn)換時(shí)間根據(jù)設(shè)備的自身特性不同而不同。在地面觀測(cè)設(shè)備選擇對(duì)哪一顆衛(wèi)星的哪一段可見(jiàn)時(shí)間窗口進(jìn)行觀測(cè)時(shí),不同的衛(wèi)星之間由于實(shí)際觀測(cè)任務(wù)需求的不同,觀測(cè)的優(yōu)先級(jí)也不同。該衛(wèi)星所承擔(dān)的角色越重要,其觀測(cè)優(yōu)先級(jí)就越高,同時(shí)由于地面觀測(cè)設(shè)備的精度有所偏差,地面觀測(cè)設(shè)備精度越高,該設(shè)備的優(yōu)先級(jí)也越高。不難理解,優(yōu)先級(jí)高的地面觀測(cè)設(shè)備應(yīng)該盡量選擇優(yōu)先級(jí)較高的衛(wèi)星進(jìn)行觀測(cè)。在整個(gè)觀測(cè)任務(wù)的規(guī)劃調(diào)度中,每顆衛(wèi)星最多應(yīng)被觀測(cè)一次。調(diào)度的目標(biāo)是在整個(gè)觀測(cè)任務(wù)調(diào)度的過(guò)程中,盡量用較短的時(shí)間觀測(cè)完更多優(yōu)先級(jí)較高的衛(wèi)星,使最終的衛(wèi)星和地面站優(yōu)先級(jí)達(dá)到最大。
此外,在對(duì)多衛(wèi)星進(jìn)行觀測(cè)的任務(wù)調(diào)度中,還應(yīng)滿足以下約束條件:
(1)?地面觀測(cè)設(shè)備在對(duì)其中一個(gè)衛(wèi)星的某一個(gè)可見(jiàn)時(shí)間窗口進(jìn)行觀測(cè)時(shí),除設(shè)備故障原因,中途不能中斷觀測(cè),且觀測(cè)時(shí)間要達(dá)到實(shí)際任務(wù)規(guī)劃中該衛(wèi)星的觀測(cè)時(shí)間需求;
(2)?同一時(shí)間同一臺(tái)地面觀測(cè)設(shè)備只能在某一個(gè)衛(wèi)星的某個(gè)可見(jiàn)時(shí)間窗口內(nèi)對(duì)該衛(wèi)星進(jìn)行觀測(cè),同一時(shí)間衛(wèi)星的某個(gè)可見(jiàn)時(shí)間窗口也只能被一臺(tái)地面設(shè)備進(jìn)行觀測(cè);
(3)?當(dāng)衛(wèi)星的某一時(shí)間窗口被其中一臺(tái)地面設(shè)備觀測(cè)結(jié)束之后,該衛(wèi)星的任何可見(jiàn)時(shí)間窗口都不能被其他地面設(shè)備進(jìn)行觀測(cè),每個(gè)衛(wèi)星最多只能被觀測(cè)一次;
(4)?對(duì)于同一臺(tái)地面觀測(cè)設(shè)備而言,其在完成對(duì)一顆衛(wèi)星的觀測(cè)任務(wù)后,對(duì)下一顆衛(wèi)星進(jìn)行觀測(cè)前,需要經(jīng)過(guò)設(shè)備的轉(zhuǎn)換時(shí)間;
本文的衛(wèi)星觀測(cè)任務(wù)調(diào)度,觀測(cè)設(shè)備是基于光學(xué)觀測(cè),不考慮觀測(cè)設(shè)備與衛(wèi)星之間的頻率等其他物理因素,假設(shè)天氣情況良好,在衛(wèi)星的可見(jiàn)時(shí)間窗口內(nèi),各設(shè)備與衛(wèi)星都可見(jiàn)。
數(shù)學(xué)模型



2 部分代碼
% close all
figure
global Global
% c_space = linspecer(Global.num_satellite);
c_space = colormap(jet(12));
for i=1:Global.num_satellite
? ?cur_satellite = bestsol.decs(i);
? ?cur_ground = bestsol.ground_list(i);
? ?ind_window = bestsol.index_window_guance(cur_satellite);
? ?subplot(4,3,cur_satellite)
? ?t_s = bestsol.time_start_guance(cur_satellite);
? ?t_e = bestsol.time_end_guance(cur_satellite);
? ?if t_s == 0 && t_e ==0
? ? ? ?continue;
? ?end
? ?t_s_window = Global.visible_window{cur_satellite,cur_ground}(2*bestsol.index_window_guance(cur_satellite)-1);
? ?t_e_window = Global.visible_window{cur_satellite,cur_ground}(2*bestsol.index_window_guance(cur_satellite));
? ?rec = [t_s_window,cur_ground-0.1,t_e_window-t_s_window,0.2];
? ?rectangle('Position',rec,'LineWidth',0.5,'LineStyle','-','FaceColor',c_space(i,:),'Curvature',0.5);%draw every rectangle
% ? ? for j=1:Global.num_visible_window(cur_satellite,cur_ground)
% ? ? ? ? t_s_window = Global.visible_window{cur_satellite,cur_ground}(2*j-1);
% ? ? ? ? t_e_window = Global.visible_window{cur_satellite,cur_ground}(2*j);
% ? ? ? ? rec = [t_s_window,cur_ground-0.1,t_e_window-t_s_window,0.2];
% ? ? ? ? rectangle('Position',rec,'LineWidth',0.5,'LineStyle','-','FaceColor',c_space(i,:),'Curvature',0.5);%draw every rectangle
% ? ? end
? ?rec = [t_s,cur_ground-0.25,t_e-t_s,0.5];
? ?rectangle('Position',rec,'LineWidth',0.5,'LineStyle','-','FaceColor',c_space(i,:),'Curvature',0.5);%draw every rectangle
? ?text(t_s+100,cur_ground,num2str(cur_satellite),'FontWeight','Bold','fontsize',8);
? ?ylim([0,5])
? ?title(['Satellite' num2str(cur_satellite)])
end
figure
for i=1:Global.num_satellite
? ?cur_satellite = bestsol.decs(i);
? ?cur_ground = bestsol.ground_list(i);
? ?ind_window = bestsol.index_window_guance(cur_satellite);
? ?t_s = bestsol.time_start_guance(cur_satellite);
? ?t_e = bestsol.time_end_guance(cur_satellite);
? ?t_s_window = Global.visible_window{cur_satellite,cur_ground}(2*bestsol.index_window_guance(cur_satellite)-1);
? ?t_e_window = Global.visible_window{cur_satellite,cur_ground}(2*bestsol.index_window_guance(cur_satellite));
? ?if t_s == 0 && t_e ==0
? ? ? continue;
? ?end
? ?x = [t_s_window,t_e_window,t_e_window,t_s_window];
? ?y = [cur_ground-0.02,cur_ground-0.02,cur_ground+0.02,cur_ground+0.02]+i/50;
? ?patch(x,y,c_space(i,:),'facealpha',0.5);
? ?x = [t_s,t_e,t_e,t_s];
? ?y = [cur_ground-0.1,cur_ground-0.1,cur_ground+0.1,cur_ground+0.1]+i/50;
? ?patch(x,y,c_space(i,:),'facealpha',0.8);
? ?text(t_s+50,cur_ground+i/50,num2str(cur_satellite),'FontWeight','Bold','fontsize',16);
? ?ylim([0,5])
end
for i=0.5:1:4.5
? line([min(bestsol.time_start_guance),max(bestsol.time_end_guance)],[i,i],'linestyle','-.')
end
3 仿真結(jié)果



4 參考文獻(xiàn)
[1]張露. 基于改進(jìn)遺傳算法求解帶時(shí)間窗車(chē)輛路徑規(guī)劃問(wèn)題[J]. 中國(guó)物流與采購(gòu), 2020(14):4.
博主簡(jiǎn)介:擅長(zhǎng)智能優(yōu)化算法、神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)、信號(hào)處理、元胞自動(dòng)機(jī)、圖像處理、路徑規(guī)劃、無(wú)人機(jī)等多種領(lǐng)域的Matlab仿真,相關(guān)matlab代碼問(wèn)題可私信交流。
部分理論引用網(wǎng)絡(luò)文獻(xiàn),若有侵權(quán)聯(lián)系博主刪除。
