【物流选址】基于matlab节约算法求解考虑碳排放及带时间窗的物流选址问题【含Matlab源码 1589期】

💥💥💥💥💥💥💞💞💞💞💞💞💞💞欢迎来到海神之光博客之家💞💞💞💞💞💞💞💞💥💥💥💥💥💥
在这里插入图片描述
✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进;
🍎个人主页:海神之光
🏆代码获取方式:
海神之光Matlab王者学习之路—代码获取方式

⛳️座右铭:行百里者,半于九十。
更多Matlab路径规划仿真内容点击👇
Matlab路径规划(进阶版)
付费专栏Matlab路径规划(初级版)

⛳️关注优快云海神之光,更多资源等你来!!

⛄一、节约算法简介

在这里插入图片描述
基本思想
在这里插入图片描述
行时通过这一条弧。

迭代步骤
在这里插入图片描述

⛄二、部分源代码

clc
clear all
p1=0.9;
customer=xlsread(‘customer.xlsx’); %需求点信息
facility=xlsread(‘facility.xlsx’); %设施点信息
facilityposition=facility(:,2:3); %设施坐标
customerposition=customer(:,2:3); %需求点坐标
position=[facilityposition;customerposition];
xlswrite(‘position.xlsx’,position)
position1=[position(:,1) position(:,2)];
distMatrix=dists(position1); %计算得出的两点之间的距离
xlswrite(‘distMatrix.xlsx’,distMatrix)

ttimeu=fix(distMatrix); %两点之间的距离
%%%%%%%%%%%%%%%%%%%%%%%%%固定数据%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Qofcar=200; %车辆容量
costofallcar=5000; %车辆固定成本
costofunitdistance=9; %单位距离成本
tanpaifangyinzi=1; %车辆碳排放因子
danweiyouhao=1; %车辆单位油耗
%%%%%%%%%%%%%%%%%%%%%%%计算出来的数据%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Numberofpoints=size(customer,1); %需求点数量
Numberoffacilities=size(facility,1); %设施点数量
quantity=[customer(:,1) customer(:,4) customer(:,4)]; %需求点需求量
Qoffacilities=[facility(:,1) facility(:,4)]; %设施容量
timewindow=[customer(:,1) customer(:,6:7)]; %需求点时间窗
countfacility=facility(:,5); %建立设施固定成本
codeofpicture=1;

timewindow

assignofpoint=[2 1 2 1 3 3 1 2 1 1 2 3 2];
[outcome1,outcome2,outcome3]=cw(Numberoffacilities,assignofpoint,ttimeu,timewindow,distMatrix,quantity,Qofcar,p1);
%outcome1=[1 1 2 1 2 3 3 4 4 3 5 5 5];
%outcome2=[9 2 10 4 7 13 1 11 8 3 12 5 6];
[outcome1,outcome2,outcome3]=tabu(outcome1,outcome2,outcome3,distMatrix,ttimeu,Numberoffacilities,timewindow);

[Picture]=picture(codeofpicture,outcome1,outcome2,outcome3,customer,facility);
function [outcome1,outcome2,outcome3]=cw(Numberoffacilities,assignofpoint,ttimeu,timewindow,distMatrix,quantity,Qofcar,p1)
H=1;
outcome3=zeros(1,Numberoffacilities);%与设施点的伪编号是一一对应的
%%%%%%%找到实际分配的设施点,因为之前的chrom中为1的点,可能%%%%%%%%%%%%%
facilitypop=zeros(1:Numberoffacilities);
facilitypop(assignofpoint)=1;
trueSelectefacilities=find(facilitypop(1,:)1); %被选择的设施编号
trueselectNumberoffacilities=size(trueSelectefacilities,2);
outcome1=cell(1,trueselectNumberoffacilities);
outcome2=cell(1,trueselectNumberoffacilities);
for i=1:trueselectNumberoffacilities%此时的设施为i
a=trueSelectefacilities(i);%设施的伪编号
pointofsubroute=find(assignofpoint
a);%属于该设施点的所有需求点的伪编号
Numberofpointsofsubroute=size(pointofsubroute,2);%该设施点的需求点数量
judge=zeros(1,Numberofpointsofsubroute); %判断需求点的位置情况
chrom1=zeros(1,Numberofpointsofsubroute);%最后输入的是伪编号
chrom2=sort(pointofsubroute); %需求点伪编号从小到大排序
originalchrom2=chrom2;

    %%对关键节点先分配一个车辆给它?????????????????????对不对?
    %for j=1:Numberofpointsofsubroute            
        %if timewindow(chrom2(j),2)==timewindow(chrom2(j),3)                  
            %chrom1(j)=H;
            %H=H+1;                
        %end
    %end      
    %%%%%%%%计算到达时间%%%%%%%%%%%%%%%%%%%%        
    arrivetime=zeros(1,Numberofpointsofsubroute);%需求点的到达时间,与当前的originalchrom2位置一一对应,与分配给该设施点的需求点一一对应        
    for j=1:Numberofpointsofsubroute            
        if ttimeu(chrom2(j)+Numberoffacilities,a)<timewindow(chrom2(j),2)                
            arrivetime(j)=timewindow(chrom2(j),2);                
        else
            arrivetime(j)=ttimeu(chrom2(j)+Numberoffacilities,a);                
        end
    end        
    %%%%%%%%%%%%%%%%%%%%%%%%%路径节约值列表%%%%%%%%%%%%%%%%%%%%%%        
    savingnumber=zeros(Numberofpointsofsubroute);%与分配给该设施的需求点的伪编号一一对应        
    for j=1:Numberofpointsofsubroute            
        for z=1:Numberofpointsofsubroute                
            if j~=z                       
                savingnumber(j,z)=distMatrix(chrom2(j)+Numberoffacilities,a)+distMatrix(chrom2(z)+Numberoffacilities,a)-distMatrix(chrom2(j)+Numberoffacilities,chrom2(z)+Numberoffacilities);                    
            end
        end
    end        
    [a b]=max(savingnumber);%a输入值,b中对应的数字为行,对应的列数为列        
    [c d]=max(a);%c输入具体的当前节约值,d为列数         
    e=b(d);%e为行 
    %%%在节约值列表中e行d列是当前最大的节约量
    E=chrom2(e);%此时的E为节约量最大的需求点伪编号之一
    D=chrom2(d);%此时的D为节约量最大的需求点伪编号之1       
    done=1;            
    while(done<2)                
        if judge(e)==0&&judge(d)==0                 
            PD=0;                
            a=quantity(E,2)+quantity(D,2);
            aa=quantity(E,3)+quantity(D,3);
            pp1=normcdf(Qofcar,a,sqrt(aa));
            a2=find(chrom2==D);                
            b2=find(chrom2==E);
            if pp1>p1                       
                EFj=arrivetime(e)+ttimeu(E+Numberoffacilities,D+Numberoffacilities)-arrivetime(d);                      
                if EFj<0                             
                    aheadtime=arrivetime(d)-timewindow(D,2);                           
                    if aheadtime>=-EFj                                
                        PD=1;                                 
                    end
                elseif EFj==0
                    PD=1;                        
                elseif EFj>0                          
                    delaytime=timewindow(D,3)-arrivetime(d);                            
                    if delaytime>=EFj                             
                        PD=1;                               
                    end
                end
                if PD==1                        
                    chrom1(e)=H;                            
                    chrom1(d)=H;%H为车辆编号                          
                    judge(e)=1;%与设施直接相连的起点为1                          
                    judge(d)=2;%与设施直接相连的终点为2                           
                    H=H+1;                            
                    arrivetime(d)=arrivetime(d)+EFj;
                    if b2>a2
                        chrom2(a2)=E;
                        chrom2(b2)=D;
                    end
                end
            end
            savingnumber(e,d)=0;                
        elseif judge(e)==0&&judge(d)==1;                 
            a2=find(chrom2==D);                
            b2=find(chrom2==E);                
            a=find(chrom1==chrom1(a2));                
            b=sum(quantity(chrom2(a),2))+quantity(E,2);
            bb=sum(quantity(chrom2(a),3))+quantity(E,3);                
            pp1=normcdf(Qofcar,b,sqrt(bb)); 
            c=size(a,2);
            if pp1>p1                       
                EFj=arrivetime(e)+ttimeu(E+Numberoffacilities,D+Numberoffacilities)-arrivetime(d);                    
                if EFj<0                          
                    a1=10000;                            
                    for j=1:c                            
                        b1=find(originalchrom2==chrom2(a(j)));                            
                        Aheadtime=arrivetime(b1)-timewindow(chrom2(a(j)),2);                             
                        if Aheadtime<a1                                     
                            aheadtime=Aheadtime;                                   
                            a1=Aheadtime;                                 
                        end
                    end
                    if aheadtime>=-EFj                            
                        PD=1;                             
                    end
                elseif EFj==0                        
                    PD=1;                             
                elseif EFj>0                           
                    a1=10000;                         
                    for j=1:c                               
                        b1=find(originalchrom2==chrom2(a(j)));                            
                        Delaytime=timewindow(chrom2(a(j)),3)-arrivetime(b1);                              
                        if Delaytime<a1                                       
                            delaytime=Delaytime;                                     
                            a1=Delaytime;                                     
                        end
                    end

⛄三、运行结果

在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

🍅 仿真咨询
1 各类智能优化算法改进及应用

生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化

2 机器学习和深度学习方面
卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断

3 图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知

4 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化

5 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配

6 无线传感器定位及布局方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化

7 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化

8 电力系统方面
微电网优化、无功优化、配电网重构、储能配置

9 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长

10 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

海神之光

有机会获得赠送范围1份代码

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

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

打赏作者

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

抵扣说明:

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

余额充值