1.完整项目描述和程序获取
>面包多安全交易平台:https://mbd.pub/o/bread/Y56amJlt
>如果链接失效,可以直接打开本站店铺搜索相关店铺:
>如果链接失效,程序调试报错或者项目合作也可以加微信或者QQ联系。
2.部分仿真图预览
3.算法概述
遗传算法GA把问题的解表示成“染色体”,在算法中也即是以二进制编码的串。并且,在执行遗传算法之前,给出一群“染色体”,也即是假设解。然后,把这些假设解置于问题的“环境”中,并按适者生存的原则,从中选择出较适应环境的“染色体”进行复制,再通过交叉,变异过程产生更适应环境的新一代“染色体”群。这样,一代一代地进化,最后就会收敛到最适应环境的一个“染色体”上,它就是问题的最优解。
4.部分源码
....................................................
%GA
MaxIt = 60; % 最大迭代次数
nPop = 50; % 人口规模
pc = 0.8; % 交叉百分比
nc = 2*round(pc*nPop/2); % 子代数量(也包括Parnets)
pm = 0.4; % 突变百分比
nm = round(pm*nPop); % 突变体数量
mu = 0.05; % 突变率
UseRandomSelection =true;
pause(0.01);
Best_Orchestration=[];
%初始化
for step=1:1
S=CreatTask(S,1);
for i=1:length(S)
Tasks(i)=S{i}.Tasks;
end
empty_individual.Position = [];
empty_individual.Cost = [];
pop = repmat(empty_individual, nPop, 1);
for i = 1:nPop
%初始化位置
pop(i).Position = randerr(SensorNum,FogNum)';
%评价
pop(i).Cost = NetworkModel(pop(i).Position,S,F,Tasks);
end
%排序填充
Costs = [pop.Cost];
[Costs, SortOrder] = sort(Costs,'descend');
pop = pop(SortOrder);
%存储最佳解决方案
BestSol = pop(1);
%保持最佳成本值的阵列
BestCost = zeros(MaxIt, 1);
%成本
WorstCost = pop(end).Cost;
for it = 1:MaxIt
it
% Crossover
popc = repmat(empty_individual, nc/2, 2);
for k = 1:nc/2
i1 = randi([1 nPop]);
i2 = randi([1 nPop]);
% Select
p1 = pop(i1);
p2 = pop(i2);
% Perform Crossover
[popc(k, 1).Position, popc(k, 2).Position] =MyCrossOver(p1.Position, p2.Position);
% Evaluate Offsprings
popc(k, 1).Cost = NetworkModel(popc(k,1).Position,S,F);
popc(k, 2).Cost = NetworkModel(popc(k,2).Position,S,F);
end
popc = popc(:);
...........................................................................
% Create Merged Population
pop = [pop
popc
popm]; %#ok
% Sort Population
Costs = [pop.Cost];
[Costs, SortOrder] = sort(Costs,'descend');
pop = pop(SortOrder);
% Update Worst Cost
WorstCost = max(WorstCost, pop(end).Cost);
% Truncation
pop = pop(1:nPop);
Costs = Costs(1:nPop);
BestSol = pop(1);
BestCost(it) = BestSol.Cost;
end
%Results
[cost_func,total_cost(step),make_span(step),total_distance(step)]=NetworkModel(BestSol.Position,S,F)
[rx,cx] = size(BestSol.Position);
Best_Nodes_For_Tasks = ChromosomeEncoding(BestSol.Position,rx,cx);
Best_Orchestration(step,:)= Best_Nodes_For_Tasks;
PlotFogCluser(F,S,Best_Nodes_For_Tasks,step);
figure;
plot(BestCost,'-bs',...
'LineWidth',2,...
'MarkerSize',8,...
'MarkerEdgeColor','k',...
'MarkerFaceColor',[0.0,0.9,0.0]);
xlabel('Iteration');
ylabel('Cost');
title(['Cost function for task: ',num2str(step)])
end
A327