✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
更多Matlab仿真内容点击👇
⛄ 内容介绍
平面选址问题实质上是带约束的非线性连续函数优化问题.给出了用遗传优化算法求解平面选址问题的过程描述,分析了算法的时间复杂度.该算法具有易克服局部最优和容易处理约束等优点,不需要进行特殊的编码和译码设计,算法实现简单.应用算例表明该算法是有效的,可以应用于类似优化问题的求解.
⛄ 部分代码
%
clc;
clear;
close all;
%% Problem Definition
model=CreateModel(); % Create QAP Model
CostFunction=@(s) MyCost(s,model); % Cost Function
nVar=model.m; % Number of Decision Variables
VarSize=[1 nVar]; % Size of Decision Variables Matrix
%% GA Parameters
MaxIt=1000; % Maximum Number of Iterations
nPop=40; % Population Size
pc=0.4; % Crossover Percentage
nc=2*round(pc*nPop/2); % Number of Offsprings (Parents)
pm=0.8; % Mutation Percentage
nm=round(pm*nPop); % Number of Mutants
beta=5; % Selection Pressure
%% Initialization
% Create Empty Structure
empty_individual.Position=[];
empty_individual.Cost=[];
% Create Population Matrix (Array)
pop=repmat(empty_individual,nPop,1);
% Initialize Population
for i=1:nPop
% Initialize Position
pop(i).Position=randperm(nVar);
% Evaluation
pop(i).Cost=CostFunction(pop(i).Position);
end
% Sort Population
Costs=[pop.Cost];
[Costs, SortOrder]=sort(Costs);
pop=pop(SortOrder);
% Update Best Solution Ever Found
BestSol=pop(1);
% Update Worst Cost
WorstCost=max(Costs);
% Array to Hold Best Cost Values
BestCost=zeros(MaxIt,1);
%% GA Main Loop
for it=1:MaxIt
% Calculate Selection Probabilities
P=exp(-beta*Costs/WorstCost);
P=P/sum(P);
% Crossover
popc=repmat(empty_individual,nc/2,2);
for k=1:nc/2
% Select Parents
i1=RouletteWheelSelection(P);
i2=RouletteWheelSelection(P);
p1=pop(i1);
p2=pop(i2);
% Apply Crossover
[popc(k,1).Position, popc(k,2).Position]=PermutationCrossover(p1.Position,p2.Position);
% Evaluate Offsprings
popc(k,1).Cost=CostFunction(popc(k,1).Position);
popc(k,2).Cost=CostFunction(popc(k,2).Position);
end
popc=popc(:);
% Mutation
popm=repmat(empty_individual,nm,1);
for k=1:nm
% Select Parent Index
i=randi([1 nPop]);
% Select Parent
p=pop(i);
% Apply Mutation
popm(k).Position=PermutationMutate(p.Position);
% Evaluate Mutant
popm(k).Cost=CostFunction(popm(k).Position);
end
% Merge Population
pop=[pop
popc
popm]; %#ok
% Sort Population
Costs=[pop.Cost];
[Costs, SortOrder]=sort(Costs);
pop=pop(SortOrder);
% Truancate Extra Memebrs
pop=pop(1:nPop);
Costs=Costs(1:nPop);
% Update Best Solution Ever Found
BestSol=pop(1);
% Update Worst Cost
WorstCost=max(WorstCost,max(Costs));
% Update Best Cost Ever Found
BestCost(it)=BestSol.Cost;
% Show Iteration Information
disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCost(it))]);
% Plot Best Solution
figure(1);
PlotSolution(BestSol.Position,model);
pause(0.01);
end
%% Results
figure;
plot(BestCost,'LineWidth',2);
xlabel('Iteration');
ylabel('Best Cost');
⛄ 运行结果
⛄ 参考文献
[1]胡莹. 基于MATLAB遗传算法的物流中心选址问题研究[J]. 中国水运:下半月, 2010(7):3.
[2]胡莹. 基于MATLAB遗传算法的物流中心选址问题研究[J]. 中国水运:下半月, 2010(7):3.
❤️ 关注我领取海量matlab电子书和数学建模资料
❤️部分理论引用网络文献,若有侵权联系博主删除