【优化选址】基于遗传算法求解物流选址问题附matlab代码

✅作者简介:热爱科研的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电子书和数学建模资料

❤️部分理论引用网络文献,若有侵权联系博主删除

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值