clc;
clear;
close all;
%% Problem Definition
load CastingData Jm T JmNumber DeliveryTime IntervalTime
CostFunction=@(x,Jm ,T ,JmNumber ,DeliveryTime, IntervalTime) MyCost(x,Jm ,T ,JmNumber ,DeliveryTime, IntervalTime);
nVar=3;
VarSize=[1 nVar];
VarMin=-4;
VarMax= 4;
pfmax=0.9;
pfmin=0.2;
VarRange=[VarMin VarMax];
%% NSGA-II Parameters
MaxIt=500;
nPop=50;
pCrossover=0.8;
nCrossover=round(pCrossover*nPop/2)*2;
pMutation=0.3;
nMutation=round(pMutation*nPop);
mu=0.3;
%% Initialization
tic;
% PNumber 铸件个数 MNumber 工序个数数组 每个工件对应的工序数量有可能不同
PNumber=size(Jm,1);
trace=zeros(2, MaxIt); %寻优结果的初始值
MNumber=[];
for i=1:size(Jm,1)
sumTemp=0;
for j=1:size(Jm,2)
if(length(Jm{i,j}))>0
sumTemp=sumTemp+1;
end
end
MNumber=[MNumber,sumTemp];
end
WNumber=sum(MNumber); %工序总个数
%% 初始化
Number=MNumber;
D=WNumber*2; %粒子群维度
empty_individual.Position=[];
empty_individual.Cost=[];
empty_individual.Rank=[];
empty_individual.CrowdingDistance=[];
empty_individual.DominatedCount=[];
empty_individual.DominationSet=[];
% 初始化种群
pop=repmat(empty_individual,nPop,1);
for i=1:nPop
WPNumberTemp=Number;
if i<nPop/2
for j=1:WNumber
%随机产成工序
val=unidrnd(PNumber);
while WPNumberTemp(val)==0
val=unidrnd(PNumber);
end
%第一层代码表示工序
pop(i).Position(j)=val; %随机初始化位置
WPNumberTemp(val)=WPNumberTemp(val)-1;
%第2层代码表示机器
TempT=T{val,MNumber(val)-WPNumberTemp(val)};
% 机器加工时间最少初始化
%[~,minTimeIndex]=min(TempT);
% 随机机器初始化
mindex=unidrnd(length(TempT));
%随机产成工序机器
pop(i).Position(j+WNumber)=mindex;
end
else
for j=1:WNumber
%随机产成工序
val=unidrnd(PNumber);
while WPNumberTemp(val)==0
val=unidrnd(PNumber);
end
%第一层代码表示工序
pop(i).Position(j)=val; %随机初始化位置
WPNumberTemp(val)=WPNumberTemp(val)-1;
%第2层代码表示机器
TempT=T{val,MNumber(val)-WPNumberTemp(val)};
% 机器加工时间最少初始化
[~,minTimeIndex]=min(TempT);
% 随机机器初始化
%mindex=unidrnd(length(TempT));
%随机产成工序机器
pop(i).Position(j+WNumber)=minTimeIndex;
end
end
end
for i=1:nPop
pop(i).Cost=CostFunction(pop(i).Position,Jm ,T ,JmNumber ,DeliveryTime, IntervalTime);
end
% Non-dominated Sorting
[pop ,F]=NonDominatedSorting(pop);
% Calculate Crowding Distances
pop=CalcCrowdingDistance(pop,F);
%% NSGA-II Loop
for it=1:MaxIt
% Crossover
popc=repmat(empty_individual,nCrossover,1);
pf=pfmax-(pfmax-pfmin)*it/MaxIt;
for k=1:nCrossover
i1=BinaryTournamentSelection(pop);
i2=BinaryTournamentSelection(pop);
% [popc(k,1).Position, popc(k,2).Position]=Crossover(pop(i1).Position,pop(i2).Position,VarRange);
popc(k,1).Position= CrossParticle(pop(i1).Position,pop(i2).Position,Jm,pf);
popc(k,1).Cost=CostFunction(popc(k,1).Position,Jm ,T ,JmNumber ,DeliveryTime, IntervalTime);
end
popc=popc(:);
% Mutation
popm=repmat(empty_individual,nMutation,1);
for k=1:nMutation
i=BinaryTournamentSelection(pop);
if rand()<mu
popm(k).Position=Swap(pop(i).Position,Jm);
popm(k).Cost=CostFunction(popm(k).Position,Jm ,T ,JmNumber ,DeliveryTime, IntervalTime);
else
popm(k).Position=pop(i).Position;
popm(k).Cost=pop(i).Cost;
end
end
% Merge Pops
pop=[pop
popc
popm];
% Non-dominated Sorting
[pop, F]=NonDominatedSorting(pop);
% Calculate Crowding Distances
pop=CalcCrowdingDistance(pop,F);
% Sort Population
pop=SortPopulation(pop);
% Delete Extra Individuals
pop=pop(1:nPop);
% Non-dominated Sorting
[pop, F]=NonDominatedSorting(pop);
% Calculate Crowding Distances
pop=CalcCrowdingDistance(pop,F);
% Plot F1
PF=pop(F{1});
PFCosts=[PF.Cost];
popCosts=[pop.Cost];
firstObj=popCosts(1,:);
secondObj=popCosts(2,:);
trace(1, it)=min(firstObj);
trace(2, it)=min(secondObj);
% 画图
fig=figure(1);
set(fig,'NAME','NSGA-MultiObj');
plot(PFCosts(1,:),PFCosts(2,:),'ro');
xlabel('间隔时间拖时');
ylabel('交货延期');
% Show Iteration Information
disp(['Iteraion ' num2str(it) ': Number of F1 Members = ' num2str(numel(PF))]);
end
figure('NAME','NSGA-trace')
plot(trace(1,:));
hold on;
plot(trace(2,:),'-.');grid;
legend('间隔时间拖时','交货延期');
[crowdistances]=cat(1,PF.CrowdingDistance);
[~,maxIndex]=max(crowdistances);
solutions=cat(1,PF.Position);
bestSolution=solutions(maxIndex,:);
%根据基因,计算调度工序
P=calP(bestSolution,PNumber);
%根据调度工序,计算出调度工序时间
PVal=caltime(bestSolution,P,JmNumber,T,Jm);
%% 显示最优解
figure('NAME','NSGA-Res');
MP=bestSolution(1,length(bestSolution)/2+1:length(bestSolution));
for i=1:WNumber
val= P(1,i);
a=(mod(val,100)); %工序
b=((val-a)/100); %工件
Temp=Jm{b,a};
mText=Temp(MP(1,i));
x1=PVal(1,i);
x2=PVal(2,i);
y1=mText-1;
y2=mText;
PlotRec(x1,x2,mText);
PlotRec(PVal(1,i),PVal(2,i),mText);
hold on;
fill([x1,x2,x2,x1],[y1,y1,y2,y2],[1-1/b,1/b,b/PNumber]);
text(x1,mText-0.25,num2str(P(i)));
end
RunTime=toc;
%% Results
disp(' ');
disp(['Total Run Time: ' num2str(RunTime) ' second(o)']);
disp(' ');
没有合适的资源?快使用搜索试试~ 我知道了~
车间调度基于matlab NSGA-2算法求解多目标车间调度问题【含Matlab源码 893期】.zip
共24个文件
m:20个
jpg:3个
mat:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 2 下载量 31 浏览量
2023-11-07
16:37:27
上传
评论
收藏 93KB ZIP 举报
温馨提示
CSDN海神之光上传的全部代码均可运行,亲测可用,尽我所能,为你服务; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,可私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开除main.m的其他m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博主博客文章底部QQ名片; 4.1 CSDN博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作 智能优化算法车间调度问题JSP系列程序定制或科研合作方向: 4.4.1 遗传算法GA/蚁群算法ACO车间调度问题JSP 4.4.2 粒子群算法PSO/蛙跳算法SFLA车间调度问题JSP 4.4.3 灰狼算法GWO/狼群算法WPA车间调度问题JSP 4.4.4 鲸鱼算法WOA/麻雀算法SSA车间调度问题JSP 4.4.5 萤火虫算法FA/差分算法DE车间调度问题JSP 4.4.6 其他优化算法车间调度问题JSP
资源推荐
资源详情
资源评论
收起资源包目录
【车间调度】基于matlab NSGA-2算法求解多目标车间调度问题【含Matlab源码 893期】.zip (24个子文件)
【车间调度】基于matlab NSGA-2算法求解多目标车间调度问题【含Matlab源码 893期】
rigidnd.m 743B
运行结果1.jpg 15KB
NonDominatedSorting.m 2KB
CastingData.mat 1KB
Untitled2.m 295B
Mutate.m 1KB
calDelay.m 668B
MyCost.m 1KB
caltime.m 1KB
nsga2.m 6KB
multiRand.m 254B
calIntervalTime.m 667B
PlotRec.m 487B
Swap.m 969B
Dominates.m 1KB
运行结果2.jpg 36KB
Crossover.m 1KB
CrossParticle.m 2KB
CalcCrowdingDistance.m 2KB
calP.m 555B
BinaryTournamentSelection.m 1KB
calFitness.m 406B
SortPopulation.m 1KB
运行结果3.jpg 39KB
共 24 条
- 1
资源评论
- 菊次郎的夏天8222024-04-23博主你好,pf是什么意思?
- 2301_774809962023-12-20总算找到了自己想要的资源,对自己的启发很大,感谢分享~
海神之光
- 粉丝: 0
- 资源: 6110
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功