【路径规划-多式联运】基于遗传算法求解多式联运冷链运输成本优化问题附matlab代码

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

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

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法  神经网络预测 雷达通信  无线传感器

信号处理 图像处理 路径规划 元胞自动机 无人机  电力系统

⛄ 内容介绍

​在军事运输中,采用多种运输方式联合投送是加强战略投送能力建设发展的重要途径,而路径规划是制定多式联运输送保障方案的关键第一步。本文提出了一个以遗传算法为主框架的解决方案,用来求解多式联运的路径规划问题。首先,本文从运输需求内容、运输过程、应用场景等角度对多式联运在军事运输中的应用进行分析,定义多式联运路径规划问题,建立分别以时问最短、路线最短、成本最低为目标的多式联运路径规划模型。该问题是一个规模庞大的组合优化问题,属于NP-hard问题。提出了以遗传算法为主,A*算法为辅的求解思路。接着,参考层次空间推理理论,将铁路、水路、公路、航空等多种运输方式的道路网络数据融合并分层,构建多式联运路径规划专用的网络拓扑。这样的分层处理,能够将单一运输方式道路网络中的最短路这一子问题剥离出来,也能够有效地降低遗传算法搜索空间的规模。

⛄ 部分代码

function mupop=mutetu(pop,GA,Math,P,qi,zdd)

mupop=cell(size(pop));

    for i=1:GA.popsize

        indv=cell2mat(pop(i));

        indv2= indv;

        if rand< GA.pm

            if length(indv)<=3

                k = 2;

            else

                k=round(rand()*(length(indv)-3))+2;% 只能取去掉起点和终点后的点的随机索引。

%             k= unidrnd(length(indv));

            end

            %  单点变异

            if mod(k,2)==0

                try

                    math = cell2mat(Math(indv(k-1),indv(k+1)));% 所有可行的运输方式

                    math2 = setdiff(math,indv(k));

                catch ErrorInfo

                    disp(ErrorInfo);

                end

                if isempty(math2)

                    mupop(i)={indv};

                else    

                    indv2(k)= math2(randi(length(math2)));

                    flag = test(indv2,qi,zdd);

                    if flag ==1

                        [v1]=Objfun2( indv,Modd);

                        [v2]=Objfun2( indv2,Modd);

                        if v1>v2

                             mupop(i)={indv2};

                        else

                            mupop(i)={indv};

                        end

                    else

                         mupop(i)={indv};

                    end            

                end

            else

                % 节点变异

                indv2 = cell2mat(proM(indv(k-1),indv(end),P,Math,1));

                flag = test(indv2,qi,zdd);

                %             mupop(i)={indv};

                if flag ==1

                    mupop(i)={indv2};

                else

                    mupop(i)={indv};

                end

    

%                 mu_Point(k,indv,P,Math);

            end

        else 

              mupop(i)={indv};

            

        end

    end

end

⛄ 运行结果

⛄ 参考文献

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

matlab科研助手

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

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

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

打赏作者

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

抵扣说明:

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

余额充值