【优化分配】基于matlab模拟退火策略优化免疫算法求解无人机协同优化分配问题【含Matlab源码 1978期】

举报
海神之光 发表于 2022/07/18 00:14:50 2022/07/18
【摘要】 一、模拟退火策略优化免疫算法简介 指导性搜索方法具有较强的通用性,无须利用问题的特殊信息,这也造成了对问题已知信息的浪费。尽管启发式算法对问题的依赖性强,但对特殊问题却能利用问题信息较快地构造解,其时间...

一、模拟退火策略优化免疫算法简介

指导性搜索方法具有较强的通用性,无须利用问题的特殊信息,这也造成了对问题已知信息的浪费。尽管启发式算法对问题的依赖性强,但对特殊问题却能利用问题信息较快地构造解,其时间性能较为理想。所以,合理结合两者优点来构造新算法,对于实时性能和优化性能同样重要的柔性调度,具有很强的吸引力。笔者采取免疫算法和模拟退火算法混合的思想,互相取长补短,提出免疫模拟退火算法(immune simulated annealing algorithm,ISAA),将它用于FJSS问题的综合策略求解。尽管也有其他文献将免疫算法和模拟退火算法进行了混合,但是笔者构造的ISAA是针对FJSS问题提出的,不论构造思想还是算法流程都具有自身的独特性。ISAA流程结构如图1所示。
在这里插入图片描述

二、部分源代码

clear;clc;
%% 读取数据
X=xlsread('UAV.xlsx');
plane=struct('pos',0,'p',0,'num',0,'v',0);
plane.pos=X(:,1:2);     %飞机的起始位置
plane.p=X(:,3);         %飞机的打击成功率
plane.num=X(:,4);       %飞机的最大任务数
plane.v=X(:,5);         %飞机的飞行速率

X=xlsread('Target.xlsx');
target=struct('pos',0,'val',0,'win',0,'t',0,'num',0);
target.pos=X(:,1:2);    %任务点的位置
target.val=X(:,3);      %任务的价值
target.win=X(:,4:5);    %任务的时间窗口
target.t=X(:,6);        %任务的用时
target.num=X(:,7);      %需要无人机的数量

%% 参数设定
maxgen=1000;     %最大迭代次数
sizepop=100;    %种群规模
sizemem=20;     %记忆库容量
Bias=300;       %偏置项,让适应度函数为正
%初始化抗体
antibody_len=sum(target.num(:));
antibody=zeros(sizepop,antibody_len);

for i=1:sizepop
    antibody(i,:)=rand(1,antibody_len)*size(plane.num,1)+1;
end
affinity=zeros(1,sizepop);   
%注意:此处应该为亲和度,不是适应度 免疫算法的适应度还要考虑抗体浓度

for i=1:sizepop
    [cost,~]=Cost(plane,target,antibody(i,:));
    affinity(i)=1/(cost+Bias);
end
axis([0,62,0,5.5]);%x轴 y轴的范围
set(gca,'xtick',0:2:62) ;%x轴的增长幅度
set(gca,'ytick',0:1:5.5) ;%y轴的增长幅度
xlabel('时间'),ylabel('无人机序号');%x轴 y轴的名称
title('无人机协同的最佳任务分配');%图形的标题
n_bay_nb=5;%无人机数目
n_task_nb = 27;%任务数目
%x轴 对应于画图位置的起始坐标x
n_start_time= [5.38 14.15 18.48 26.19 33.21 18.48 26.19 33.21 38.97 46.77 53.03 59.56 1.8 7.76 15.51 19.51 22.19 8.7 12.4 17.25 19.66 5 8.7 17.25 19.66 22.77 46.77];%每个任务的开始时间
%length 对应于每个图形在x轴方向的长度
n_duration_time =[1 1 2 2 2 2 2 2 2 2 1 1 1 2 2 1 1 2 2 1 1 1 2 1 1 2 2];%duration time of every task  //每个工序的持续时间
%y轴 对应于画图位置的起始坐标y
n_bay_start=[1 1 1 1 1 2 2 2 2 2 2 2 3 3 3 3 3 4 4 4 4 5 5 5 5 5 5]-1; %bay id of every task  ==工序数目,即在哪一行画线
%工序号,可以根据工序号选择使用哪一种颜色
n_job_id=[7 11 12 14 2 12 14 2 10 16 13 17 1 20 18 15 9 8 4 5 19 3 8 5 19 6 16];%
rec=[0,0,0,0];%temp data space for every rectangle  
color_list=[[1,0,0];[0,1,0];[0,0,1];[0.95,0.64,0.37];[1,1,0];[0.1333,0.7451,0.5333];[0.60,0.8,0.2];[0.8,0.36,0.36];[0.74,0.71,0.42];[0.52,0.81,0.98];[0.41,0.35,0.8];[0.4667,0.5333,0.6];[0.98,0.92,0.84];[0.94118,1,0.94118];[0.86,0.86,0.86];[0.5,1,0.83];[0.823,0.411,0.117];[0.63,0.13,0.94];[0.87,0.63,0.87];[0,1,1];[1,0.38,0];[0.4,0.1,0.9];[0,0.9,0.2]];
for i =1:n_task_nb  
  rec(1) = n_start_time(i);%矩形的横坐标
  rec(2) = n_bay_start(i)+0.7;  %矩形的纵坐标
  rec(3) = n_duration_time(i);  %矩形的x轴方向的长度
  rec(4) = 0.6; 
  txt=sprintf('p(%d,%d)=%d',n_bay_start(i),n_job_id(i),n_duration_time(i));%将机器号,工序号,加工时间连城字符串
   rectangle('Position',rec,'LineWidth',0.5,'LineStyle','-','FaceColor',color_list(n_job_id(i),:));%draw every rectangle  
   if n_duration_time(i)==1 && n_job_id(i)>=10
   text(n_start_time(i)+0.12,(n_bay_start(i)+1),num2str(n_job_id(i)),'FontWeight','Bold','FontSize',10);%label the id of every task  ,字体的坐标和其它特性
   end
   if n_duration_time(i)==1 && n_job_id(i)<10
   text(n_start_time(i)+0.3,(n_bay_start(i)+1),num2str(n_job_id(i)),'FontWeight','Bold','FontSize',10);%label the id of every task  ,字体的坐标和其它特性
   end
   if n_duration_time(i)==2 && n_job_id(i)>=10
   text(n_start_time(i)+0.6,(n_bay_start(i)+1),num2str(n_job_id(i)),'FontWeight','Bold','FontSize',10);%label the id of every task  ,字体的坐标和其它特性
   end
   if n_duration_time(i)==2 && n_job_id(i)<10
   text(n_start_time(i)+0.8,(n_bay_start(i)+1),num2str(n_job_id(i)),'FontWeight','Bold','FontSize',10);%label the id of every task  ,字体的坐标和其它特性
   end
end


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74

三、运行结果

在这里插入图片描述
在这里插入图片描述

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 余建军,徐学军.基于免疫和模拟退火原理的柔性Job-Shop调度研究[J].计算机应用研究. 2010,27(11)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。

原文链接:qq912100926.blog.csdn.net/article/details/125811931

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。