一、节约算法简介


基本思想

行时通过这一条弧。

迭代步骤

二、部分源代码

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;timewindowassignofpoint=[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%此时的设施为ia=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);                elsearrivetime(j)=ttimeu(chrom2(j)+Numberoffacilities,a);                endend        %%%%%%%%%%%%%%%%%%%%%%%%%路径节约值列表%%%%%%%%%%%%%%%%%%%%%%        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);                    endendend        [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;                                 endelseif EFj==0PD=1;                        elseif EFj>0                          delaytime=timewindow(D,3)-arrivetime(d);                            if delaytime>=EFj                             PD=1;                               endendif 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>a2chrom2(a2)=E;chrom2(b2)=D;endendendsavingnumber(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;                                 endendif aheadtime>=-EFj                            PD=1;                             endelseif 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;                                     endend

三、运行结果

四、matlab版本及参考文献

1 matlab版本
2014a

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

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

  1. 【优化选址】基于节约算法求解考虑碳排放及带时间窗的物流选址问题附matlab代码

    1 简介 基于节约算法求解带时效性约束的物流中心选址问题.分析选址问题的时效性约束条件,构造带时效性约束的物流中心选址模型,利用节约算法设计选址模型的精确算法,并给出具体算例,验证模型和算法的可行性. ...

  2. 【微电网优化】基于matlab粒子群算法求解微网经济调度和环境友好调度优化问题【含Matlab源码 2283期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[微电网优化]基于matlab粒子群算法求解微网经济调度和环境友好调度优化问题[含Matlab源码 2283期] 点击上面蓝色字体,直接付 ...

  3. 【Matlab图像加密】正交拉丁方置乱算法图像加解密【含GUI源码 182期】

    一.代码运行视频(哔哩哔哩) [Matlab图像加密]正交拉丁方置乱算法图像加解密[含GUI源码 182期] 二.matlab版本及参考文献 一.代码运行视频(哔哩哔哩) [Matlab图像处理]自动 ...

  4. 【Matlab验证码识别】遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别【含GUI源码 1694期】

    一.代码运行视频(哔哩哔哩) [Matlab验证码识别]遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别[含GUI源码 1694期] 二.matlab版本及参考文献 1 matlab ...

  5. 【Matlab人脸识别】BP神经网络人脸识别(含识别率)【含GUI源码 891期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]BP神经网络人脸识别(含识别率)[含GUI源码 891期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...

  6. 【Matlab人脸识别】形态学教室人数统计(带面板)【含GUI源码 1703期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]形态学教室人数统计(带面板)[含GUI源码 1703期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟 ...

  7. 【Matlab人脸识别】人脸实时检测与跟踪【含GUI源码 673期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]人脸实时检测与跟踪[含GUI源码 673期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟逸凡,柳益君 ...

  8. 【Matlab图像融合】小波变换遥感图像融合【含GUI源码 744期】

    一.代码运行视频(哔哩哔哩) [Matlab图像融合]小波变换遥感图像融合[含GUI源码 744期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余 ...

  9. 【Matlab身份证识别】身份证号码识别【含GUI源码 014期】

    一.代码运行视频(哔哩哔哩) [Matlab身份证识别]身份证号码识别[含GUI源码 014期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

  10. 【Matlab人脸识别】KL变换人脸识别【含GUI源码 859期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]KL变换人脸识别[含GUI源码 859期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

最新文章

  1. mysql中sql语句
  2. v9更新栏目缓存提示PHP has encountered a Stack overflow解决方法
  3. mysql eager mode_MySQL Connector Net 6.6.5 Entity Framework 显式预加载 Eager Load Bug
  4. (下)python3 selenium3 从框架实现代码学习selenium让你事半功倍
  5. Sharepoint学习笔记—error处理-- The user does not exist or is not unique.
  6. code1068 乌龟棋
  7. html设置js的cookies,javascript怎么修改cookie?
  8. CentOs7中安装python模块psycopg2,报错Error: pg_config executable not found.
  9. 判断一颗二叉树是否为二叉平衡树 python 代码
  10. 计算机网络:应用层 - 万维网 WWW、HTTP 协议以及 HTML 语言
  11. 杨强教授漫谈《西部世界》、生成式对抗网络及迁移学习
  12. Where Have You Gone扒谱
  13. 小米-9-14-笔试
  14. 电脑蓝屏造成的数据丢失如何恢复
  15. 从NCBI 上下载 gbff 文件并得到 CDS 信息
  16. 数组和字符串赋值的问题(定义时不初始化)
  17. drv10893器件的使用
  18. Prolog不是hentai
  19. 利用matlab实现h 控制,利用Matlab实现H∞控制
  20. count() over()开窗函数用法

热门文章

  1. 富文本编辑器使用案例
  2. 20145235 《Java程序设计》第8周学习总结
  3. win32SDK的hello,world程序(二)
  4. 学习《银光志 silverlight 3.0》 不错的实例讲解【含源码】
  5. 文献管理三剑客之Mendeley最新版使用小记2
  6. Origin打断图像的y坐标和在柱状图上显示数字
  7. Atitit. 资深高级软件工程师and 普通的区别 高度金字塔 深度 广度 1. 高度金字塔 深度 广度 1 1.1. 角色差异高度金字塔 使用者 维修者 制造者 1 1.2. 广度圈 1 1
  8. Atitit mongodb 使用总结 1.1. 下载有点不太好下载不像mysql导出都是。。70M 1 1.2. gui工具Robomongo(MongoDB/GUI管理工具) v1.0.3 官方
  9. Atitit 面向对象编程(OOP)、面向组件编程(COP)、面向方面编程(AOP)和面向服务编程(SOP)的区别和联系
  10. atitit.按钮光标滑过高亮切换以及其他动态效果的实现css html js --attilax总结