✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。
🍎个人主页:海神之光
🏆代码获取方式:
海神之光Matlab王者学习之路—代码获取方式
⛳️座右铭:行百里者,半于九十。
更多Matlab仿真内容点击👇
Matlab图像处理(进阶版)
路径规划(Matlab)
神经网络预测与分类(Matlab)
优化求解(Matlab)
语音处理(Matlab)
信号处理(Matlab)
车间调度(Matlab)
⛄一、 带时间窗的多UAV航迹规划问题的两阶段启发式算法
本文采用一种两阶段启发式算法用于问题求解, 算法的第一阶段利用“最迟完成服务节点优先” (Latest-Service-Finished-First, 简称LSFF) 算法求得问题的初始解, 第二阶段利用模拟退火算法 (SA算法) 改善初始解, 获得“满意解”。
1 LSFF算法
LSFF算法是一种逆向计算的迭代算法, 其基本思想是:从返回机场开始, 逆向迭代计算从待服务节点飞往后继节点的最迟动身 (完成物资投放) 时间, 并选择最晚可服务节点优先服务, 重复上述过程直至全部节点均被服务为止;这里只接受可行解。
假设当前后续节点为succ, 其最迟抵达时间为maxatsucc, 待服务节点i的最迟动身时间为maxdepti, 则LSFF算法的流程可描述如下:
步骤1:创建空航行线路为当前航迹, 令succ=0, maxatsucc=l0;
步骤2:计算所有的maxdepti=max{maxatsucc-ti, succ, lsucc+stsucc}, 并进行约束条件校验, 从可行节点中选择满足maxdeptk=max{maxdepti}的节点k作为优先服务节点;
步骤3:将节点k插入至航段间<0, succ>, 令succ=k, maxatsucc=maxdeptk-stk, 更新节点k的服务标志;
步骤4:重复步骤2、步骤3, 直至无节点可服务为止。若仍有节点未服务, 创建新路径, 令succ=0, maxatsucc=l0, 转步骤2;否则转步骤5;
步骤5输出初始解sinit。
从上述描述显见, LSFF算法是一种“头插式”算法, 新节点的插入位置必定是航迹的第一条航段之间。由此可将时间窗约束的处理方法修正如下:计算UAV从机场出发抵达新节点i的最早时间minati=e0+t0i, 若maxdepti同时满足式 (14) 、式 (15) , 则时间窗约束满足, 否则不满足。
2 SA算法
利用LSFF算法产生初始解后, 进一步利用SA算法改进初始解, 下面分别对SA算法的邻域结构和算法流程进行描述。
(1) 邻域结构
本文采用两种邻域变换:remove操作和insert操作来构造邻域, 如图1所示。
(2) 算法流程
步骤1:设置起始温度btemp和etemp, 设置温度迭代步长tstep, 令当前温度temp=btemp, 令当前解x=sinit, 当前最优解s=sinit, 初始化内循环次数maxcnt;
步骤2:如果temp>etemp, 重复执行步骤3~步骤5;
步骤3:令内循环次数cnt=1, 重复步骤4, 直至cnt=maxcnt为止;
步骤4:随机选择交换节点node, 利用remove和insert操作, 将其插入任一条可行路径, 产生邻域解x’;令f (·) 表示解·对应的目标函数值, rand_max为随机数的上限, 比较f (x’) 和f (x) , 如果f (x’) 步骤5:令temp=temp*tstep; 步骤6:输出满意解s。 % Clear environment close all; clear all; addpath(genpath(cd)); % profile on SEED = 24377; rand(‘seed’, SEED); %---------------------------------------------------------------------% % Initialize global variables %---------------------------------------------------------------------% WORLD.CLR = rand(100,3); WORLD.XMIN = -2.0; WORLD.XMAX = 2.5; WORLD.YMIN = -1.5; WORLD.YMAX = 5.5; WORLD.ZMIN = 0.0; WORLD.ZMAX = 2.0; WORLD.MAX_DISTANCE = sqrt((WORLD.XMAX - WORLD.XMIN)^2 + … (WORLD.YMAX - WORLD.YMIN)^2 + … (WORLD.ZMAX - WORLD.ZMIN)^2); %---------------------------------------------------------------------% % Define agents and tasks %---------------------------------------------------------------------% % Grab agent and task types from CBBA Parameter definitions CBBA_Params = CBBA_Init(0,0); % Initialize possible agent fields agent_default.id = 0; % agent id agent_default.type = 0; % agent type agent_default.avail = 0; % agent availability (expected time in sec) agent_default.clr = []; % for plotting agent_default.x = 0; % agent position (meters) agent_default.y = 0; % agent position (meters) agent_default.z = 0; % agent position (meters) agent_default.nom_vel = 0; % agent cruise velocity (m/s) agent_default.fuel = 0; % agent fuel penalty (per meter) % FOR USER TO DO: Set agent fields for specialized agents, for example: % agent_default.util = 0; % Initialize possible task fields task_default.id = 0; % task id task_default.type = 0; % task type task_default.value = 0; % task reward task_default.start = 0; % task start time (sec) task_default.end = 0; % task expiry time (sec) task_default.duration = 0; % task default duration (sec) task_default.lambda = 0.1; % task exponential discount task_default.x = 0; % task position (meters) task_default.y = 0; % task position (meters) task_default.z = 0; % task position (meters) % FOR USER TO DO: Set task fields for specialized tasks %---------------------------% % Create some default agents % QUAD agent_quad = agent_default; agent_quad.type = CBBA_Params.AGENT_TYPES.QUAD; % agent type agent_quad.nom_vel = 2; % agent cruise velocity (m/s) agent_quad.fuel = 1; % agent fuel penalty (per meter) % CAR agent_car = agent_default; agent_car.type = CBBA_Params.AGENT_TYPES.CAR; % agent type agent_car.nom_vel = 2; % agent cruise velocity (m/s) agent_car.fuel = 1; % agent fuel penalty (per meter) % Create some default tasks % Track task_track = task_default; task_track.type = CBBA_Params.TASK_TYPES.TRACK; % task type task_track.value = 100; % task reward task_track.start = 0; % task start time (sec) task_track.end = 100; % task expiry time (sec) task_track.duration = 5; % task default duration (sec) % Rescue task_rescue = task_default; task_rescue.type = CBBA_Params.TASK_TYPES.RESCUE; % task type task_rescue.value = 100; % task reward task_rescue.start = 0; % task start time (sec) task_rescue.end = 100; % task expiry time (sec) task_rescue.duration = 15; % task default duration (sec) %---------------------------------------------------------------------% % Define sample scenario %---------------------------------------------------------------------% N = 5; % # of agents M = 10; % # of tasks % Create random agents for n=1:N end 1 matlab版本 2014a 2 参考文献 [1]马华伟,王天晓,胡笑旋.带时间窗的多无人机航迹规划两阶段启发式算法[J].火力与指挥控制. 2014,39(08) 3 备注 简介此部分摘自互联网,仅供参考,若侵权,联系删除 🍅 仿真咨询 1 各类智能优化算法改进及应用 生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化 2 机器学习和深度学习方面 卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断 3 图像处理方面 图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知 4 路径规划方面 旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化 5 无人机应用方面 无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配 6 无线传感器定位及布局方面 传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化 7 信号处理方面 信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化 8 电力系统方面 微电网优化、无功优化、配电网重构、储能配置 9 元胞自动机方面 交通流 人群疏散 病毒扩散 晶体生长 10 雷达方面 卡尔曼滤波跟踪、航迹关联、航迹融合⛄二、部分源代码
if(n/N <= 1/2)
agents(n) = agent_quad;
else
agents(n) = agent_car;
end
% Init remaining agent params
agents(n).id = n;
agents(n).x = rand(1)*(WORLD.XMAX - WORLD.XMIN) + WORLD.XMIN;
agents(n).y = rand(1)*(WORLD.YMAX - WORLD.YMIN) + WORLD.YMIN;
agents(n).clr = WORLD.CLR(n,:);
⛄三、运行结果
⛄四、matlab版本及参考文献