【多式联运】基于帝企鹅AFO 粒子群PSO 遗传GA算法求解不确定多式联运路径优化问题附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

⛄ 内容介绍

随着"一带一路"国家战略的推进和建设,中新物流通道在衔接"丝绸之路经济带"和"海上丝绸之路"中的作用日益明显.集装箱多式联运是中新贸易的主要实现形式,目前,多式联运路径优化问题是多式联运相关研究领域的热点.然而多式联运路径优化过程即不同参与者的权衡过程,由于不同商品的特性差异,运输活动中不同参与者对集装箱多式联运的要求也不尽相同.随着"绿色物流"逐渐深入人们的生活,运输过程中的碳排放也受到政府部门越来越多的关注.

⛄ 部分代码

clc;

clear all;

close all;

warning off

%%

noRng=1;

rng('default')

rng(noRng)

%%

global data

data.numN=15; %节点数量

data.Cap_Ts=xlsread("节点处的最大中转运输能力.xlsx");

temp=round(rand(data.numN,3)*10+15)*10;

data.Cap_Ts(:,2:end)=temp;

data.Windows=xlsread("节点的时间窗.xlsx");

data.D=xlsread("节点间距离.xlsx");

data.Cap_Tp=xlsread("节点间最大运输能力.xlsx");

data.T=data.D;

data.v=[76,60,30];

for i=1:length(data.Cap_Tp(:,1))

    no1=data.Cap_Tp(i,1);

    no2=data.Cap_Tp(i,2);

    for j=1:3

        if isnan(data.Cap_Tp(i,2+j))

            data.D(i,2+j)=nan;

        end

    end

    data.T(i,[3,6,9])=round(data.D(i,3:5)./data.v/1.2);

    data.T(i,[4,7,10])=round(data.D(i,3:5)./data.v);

    data.T(i,[5,8,11])=round(data.D(i,3:5)./data.v/0.8);

end

data.Windows(:,3)=data.Windows(:,3).*(1-rand(size(data.Windows(:,3))));

data.Windows(:,4)=data.Windows(:,4).*(1+rand(size(data.Windows(:,3))))+10;

data.Windows(:,3:4)=max(0,round(data.Windows(:,3:4)+randn(size(data.Windows(:,3:4)))));

data.Windows(:,5)=max(data.Windows(:,4));

data.CT=[0,3.09,5.23; % 转换成本

    3.09,0,26.62;

    5.23,26.62,0];

data.TT=[0,1,1;         %转换时间

    1,0,2;

    1,2,0];

data.ET=[0,1.56,6;       % 转换碳排放 

        1.56,0,3.12;

        6,3.12,0];

data.q=[120,150,180];

data.E0=[0.796,0.028,0.04];

data.CW=[30,50];

data.S=1;

data.E=15;

data.alpha=0.8;

data.beta1=0.8;

data.beta2=0.8;

data.beta3=0.8;

data.C0=[0.3,0.2,0.1]; %三种运输方式的运输成本

data.weight=[1,1];

data.maxB=100000;

data.maxE=21000;

%%

%%

data.numQ=100;

for i=1:data.numQ

    if rand<0.5

        data.q0(i)=rand*(data.q(2)-data.q(1))+data.q(1);

    else

        data.q0(i)=rand*(data.q(3)-data.q(2))+data.q(2);

    end

end

%%

G=graph(data.D(:,1),data.D(:,2),data.D(:,1)*0+1);

figure

plot(G)

set(gca,'LooseInset',get(gca,'TightInset'))

%%

lb=0;

ub=1;

dim=length(data.D(:,1))*3;

option.lb=lb;

option.ub=ub;

option.dim=dim;

if length(option.lb)==1

    option.lb=ones(1,option.dim)*option.lb;

    option.ub=ones(1,option.dim)*option.ub;

end

option.fobj=@aimFcn_1;

option.showIter=0;

%% 算法参数设置 Parameters

% 基本参数

option.numAgent=20;        %种群个体数 size of population

option.maxIteration=100;    %最大迭代次数 maximum number of interation

%% 遗传算法

option.p1_GA=0.7;

option.p2_GA=0.1;

%% 粒子群

option.w_pso=0.1;

option.c1_pso=1.2;

option.c2_pso=1.2;

%% AFO

option.v_lb=-(option.ub-option.lb)/4;

option.v_ub=(option.ub-option.lb)/4;

option.w2=0.5; %weight of Moving strategy III

option.w4=1;%weight of Moving strategy III

option.w5=1;%weight of Moving strategy III

option.pe=0.01; % rate to judge Premature convergence

option.gap0=ceil(sqrt(option.maxIteration*2))+1;

option.gapMin=5; % min gap

option.dec=2;    % dec of gap

option.L=10;     % Catastrophe

%% DE

option.F=0.5;

option.CR=0.5;

%%

str_legend=[{'GA'},{'PSO'},{'AFO'}];

aimFcn=[{@GA},{@PSO},{@AFO3}];

%% 初始化

rng(noRng)

x=ones(option.numAgent,option.dim);

y=ones(option.numAgent,1);

for i=1:option.numAgent

    x(i,:)=rand(size(option.lb)).*(option.ub-option.lb)+option.lb;

    y(i)=option.fobj(x(i,:),option,data);

end

%% 使用算法求解

bestX=x;

for i=1:length(aimFcn)

    rng(noRng)

    tic

    [bestY(i,:),bestX(i,:),recording(i)]=aimFcn{i}(x,y,option,data);

    tt(i)=toc;

end

%% 绘制迭代曲线

figure

hold on

for i=1:length(aimFcn)

    

    if i>1

        plot((recording(i).bestFit),'LineWidth',2)

    else

        plot((recording(i).bestFit),'--','LineWidth',2)

    end

end

legend(str_legend)

xlabel('评价次数(*100)')

ylabel('适应度函数值')

set(gca,'LooseInset',get(gca,'TightInset'))

%% 计算结果

for i=1:length(str_legend)

    str=[str_legend{i},'优化后方案'];

    [~,result(i)]=option.fobj(bestX(i,:),option,data);

   % drawPC(result(i),data,str)

end

%%

rng(11)

x0=[0.227391667368465 0.879816756512174 0.758978072405287 0.510838515791228 0.192188536212261 0.651441269146713 0.418963422194475 0.552435663022093 0.692178644766480 0.525121273337296 0.901443303774014 0.870433999021102 0.727907836575027 0.635555150728710 0.377948489141470 0.0665747380900594 0.380375322185706 0.271295139005737 0.556390072117235 0.836324594294146 0.412650509862244 0.435408044462144 0.339160221282954 0.517673083186858 0.305139543163461 0.759153928221489 0.661651047625365 0.695663261206050 0.579862243307374 0.0203768757943083 0.567587976562174 0.417560315118765 0.194865572678659 0.0355023446924871 0.0656090882042756 0.283822647397696 0.409304642722500 0.797371466667136 0.139734109717042 0.943567670211017 0.736340144724420 0.899302180486718 0.0958418793238567 0.494947220485218 0.377043083335839 0.392090901825893 0.872224588221799 0.225018973369553 0.658496649609525 0.985772242893824 0.312242936944674 0.0176752228038184 0.151305501546866 0.117920480497746 0.137344184189911 0.929080746036836 0.737056036783124 0.264583371593473 0.935709972806256 0.930542122124921 0.458371373498295 0.0216966409045397 0.0615124906604629 0.569072523079761 0.912715979600965 0.684016483416011 0.0872976004423956 0.854123989826840 0.699891878132857 0.603233918882651 0.626266466189881 0.764357628595205 0.633979476955922 0.162893341780099 0.277411062836412 0.839224723775726 0.908550538167801 0.890586782754062 0.466391769502905 0.488448750263230 0.365236675941588 0.730292329677324 0.748971571306197 0.706903738180738];

gs = GlobalSearch;

problem = createOptimProblem('fmincon','x0',x0,...

    'objective',@(x)aimFcn_1(x,option,data),'lb',x0*0,'ub',x0*0+1);

x = run(gs,problem);

[fit1,result(i+1)]=aimFcn_1(x,option,data);

%%

P=[

1 1 1 1 0.610000000000000

0.610000000000000 1 1 0.810000000000000 0 0

0.830000000000000 0.920000000000000 1 1 0.900000000000000 0.830000000000000

1 1 1 0.930000000000000 1 0.930000000000000]; %注 P是从result里面复制出来的

str_legend=[str_legend,{'GS'}];

figure

bar(0:5,P,'grouped')

legend(str_legend)

xlabel('约束')

ylabel('满足概率')

set(gca,'LooseInset',get(gca,'TightInset'))

⛄ 运行结果

⛄ 参考文献

[1]何文护. 基于混合遗传算法的多式联运优化的选择研究[D]. 大连海事大学, 2011.

[2]李干亮. 基于多维视角的中新集装箱多式联运路径优化研究[D]. 重庆交通大学, 2019.

⛄ 完整代码

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

❤️ 关注我领取海量matlab电子书和数学建模资料

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
基于MATLAB粒子群遗传算法混合算法可以用于求解切削参数优化问题。切削参数优化问题是指在特定的切削过程中,通过改变切削参数的数值,使得切削过程的效率最大化或者成本最小化。 粒子群算法(Particle Swarm Optimization,PSO)是一种模拟自然界群体行为的优化算法。它通过模拟粒子在搜索空间中的迭代跳跃来搜索全局最优解。在切削参数优化问题中,可以将切削参数视为粒子的位置,通过更新粒子的速度和位置,逐步接近全局最优解。 遗传算法(Genetic Algorithm,GA)是一种模拟生物进化过程的优化算法。它通过模拟自然界的选择、交叉和变异操作,进化出适应度更高的个体。在切削参数优化问题中,可以将切削参数视为个体的基因,通过选择、交叉和变异操作,搜索到最优的切削参数组合。 粒子群遗传算法的混合算法PSOGA相结合,充分利用两种算法的优势。首先使用PSO进行初步搜索,通过粒子的迭代跳跃逐渐接近全局最优解。然后使用GA进行局部搜索,通过交叉和变异操作进一步优化切削参数。最后,将PSOGA的搜索结果进行比较,选择最优的切削参数组合作为最终解。 基于MATLAB的实现,可以利用MATLAB的编程环境和相关工具箱,编写PSOGA优化函数,并定义初始种群和适应度函数。通过迭代更新粒子的速度和位置,以及进行选择、交叉和变异操作,逐步搜索出最优的切削参数组合。 总之,基于MATLAB粒子群遗传算法混合算法能够有效地求解切削参数优化问题,通过利用粒子群算法遗传算法的优势,能够得到更精确的结果,提高切削过程的效率和质量。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

matlab科研助手

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

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

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

打赏作者

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

抵扣说明:

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

余额充值