蚁群算法-车辆配载率的路径优化

news2024/9/24 21:19:00

车辆配送路径优化问题可描述为:某商超配送中心要使用一定数量的车辆对一批货物进行配送服务,要求在不超过车辆的额定载重量和额定容积的条件下,安排这些货物的装载,使得车辆利用率最高。
针对以上问题做出假设:
(1) 只有一个配送中心,所有车辆都是从配送中心出发并最终回到配送中心;
(2) 配送中心和客户站点的具体位置已知;
(3) 配送车辆的类型相同,装载容量大小已知;
(4) 配送车辆的最大实际装载货物重量不能超过货车的最大承载重量;
(5) 配送车辆匀速行驶;
(6) 每个客户站点的需求量已知;
(7) 每条配送路线只能由一辆配送车辆进行配送,且每个站点只能被配送一次;
(8) 不考虑交通堵塞或不可通行的情况。
数学模型
模型中的数学符号决策变量描述
k 为车辆编号,k=1,2,…,l;
i,j 表示客户编号,i,j=0,1,2,…,n, i,j=0表示配送中心;
p 为货物编号,p=1,2,…,m;
Gk为车辆 k 的最大载重量;
Vk 为车辆 k 的最大容积;
g ip为货物 p 的重量;
Vip货物 p 的体积,且货物尺寸均小于货车车厢尺寸;
模型的约束条件限制:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
目标函数处理:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
算法仿真:
数据如下所示:
在这里插入图片描述
使用蚁群算法,matlab求解如下:

tic
clear
clc
%% 用importdata这个函数来读取文件 
dataset=importdata('input_test.txt'); %读取输入数据文件
%cap=200;
cap = 3000;
Rated_volume = 20;

%% 提取数据信息
vertexs=dataset(:,2:3);                                         %所有点的坐标x和y
customer=vertexs(2:end,:);                                      %顾客坐标
cusnum=size(customer,1);                                        %顾客数
demands=dataset(2:end,4);                                       %需求量
Tj_demands = dataset(2:end,5);                                  %体积需求
Cs = 2;
Ws = 50;
Vs = 0.06;
h=pdist(vertexs);
dist=squareform(h);                                             %成本矩阵即任意两点之间的距离
%% 初始化参数
m=50;                                                           %蚂蚁数量
alpha=1;                                                        %信息素重要程度因子
beta=5;                                                         %启发函数重要程度因子
rho=0.85;                                                       %信息素挥发因子
Q=5;                                                            %更新信息素浓度的常数
Eta=1./dist;                                                    %启发函数
Tau=ones(cusnum+1,cusnum+1);                                    %信息素矩阵
Table=zeros(m,cusnum);                                          %路径记录表
iter=1;                                                         %迭代次数初值
iter_max=100;                                                   %最大迭代次数
Route_best=zeros(iter_max,cusnum);                              %各代最佳路径
Cost_best=zeros(iter_max,1);                                    %各代最佳路径的成本
%% 迭代寻找最佳路径
while iter<=iter_max
    %% 先构建出所有蚂蚁的路径
    %逐个蚂蚁选择
    for i=1:m
        %逐个顾客选择
        for j=1:cusnum
            np = next_point(i,Table,Tau,Eta,alpha,beta,dist,cap,demands,Tj_demands,Rated_volume);
            Table(i,j)=np;
        end
    end
    %% 计算各个蚂蚁的成本
    cost=zeros(m,1);
    NV=zeros(m,1);
    TD=zeros(m,1);
    for i=1:m
        VC = decode(Table(i,:),cap,demands,dist,Tj_demands,Rated_volume);
        [cost(i,1),NV(i,1),TD(i,1)] = MulticostFun(VC,dist,demands,cap,Tj_demands,Rated_volume,Cs,Ws,Vs);
    end
    %% 计算最小成本及平均成本
    if iter == 1
        [min_Cost,min_index]=min(cost);
        Cost_best(iter)=min_Cost;
        Route_best(iter,:)=Table(min_index,:);
    else
        [min_Cost,min_index]=min(cost);
        Cost_best(iter)=min(Cost_best(iter - 1),min_Cost);
        if Cost_best(iter)==min_Cost
            Route_best(iter,:)=Table(min_index,:);
        else
            Route_best(iter,:)=Route_best((iter-1),:);
        end
    end
    %% 更新信息素
    bestR=Route_best(iter,:);
    [bestVC,bestNV,bestTD]=decode(bestR,cap,demands,dist,Tj_demands,Rated_volume);
    zz = decode_zz(bestR,cap,demands,dist,Tj_demands,Rated_volume);
    Tau=updateTau(Tau,bestR,rho,Q,cap,demands,dist,Tj_demands,Rated_volume);
    %% 打印当前最优解
    disp(['第',num2str(iter),'代最优解:'])
    disp(['车辆使用数目:',num2str(bestNV),',车辆行驶总距离:',num2str(bestTD),',最小成本:',num2str(min_Cost)]);
    disp('车辆载重体积:');
    disp(zz(:,1));
    fprintf('\n')
    %% 迭代次数加1,清空路径记录表
    iter=iter+1;
    Table=zeros(m,cusnum);
end
%% 结果显示
bestRoute=Route_best(end,:);
[bestVC,bestNV,bestTD]=decode(bestRoute,cap,demands,dist,Tj_demands,Rated_volume);
draw_Best(bestVC,vertexs);

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/488205.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python学习笔记(1)

《Python编程&#xff1a;从入门到实践》学习笔记 python编程软件PyCharm Community Edition 2022.3.2&#xff0c;快捷键&#xff1a;Ctrl/ 表示注释Python代码。 一、变量的命名和使用 1.变量名只能包含字母、数字和下划线。变量名可以字母或下划线打头&#xff0c;但不能以数…

Java开发初学者实用网站

1.慕课网&#xff08;http://www.imooc.com&#xff09;&#xff1a;提供了大量的Java在线教程和视频。 优点 1.广泛的开放性&#xff1a;大规模、开放性和受众广 2.透明性&#xff1a;根据不同兴趣、准备情况和时间来学习所需课程 3.优质资源易获取性&#xff1a;让每位学生…

Python每日一练(20230504)

目录 1. 课程表 Course Schedule I 2. 课程表 Course Schedule II &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 课程表 Course Schedule I 你这个学期必须选修 numCourses 门课程&a…

linux ll命令是什么

ll并不是linux下一个基本的命令&#xff0c;它实际上是ls -l的一个别名。 # 查看指定目录下的内容&#xff0c;默认查看当前目录下内容 ls [-ald] [目录名] # 目录名不填写&#xff0c;默认为当前目录。 # -a&#xff1a;列出的全部的文件&#xff0c;包括隐藏文件 # -l&#x…

医院PACS系统源码,各种类型图像专业的图像处理功能,海量数据存储与检索

RIS/PACS系统源码 RIS/PACS系统源码在预约登记、分诊叫号、技师检查、诊断报告、临床浏览、科室管理等环节满足全院相关科室的要求。在医学影像下载、浏览、处理中满足速度快、强化常用功能、方便阅片等要求。满足放射、超声、内镜、病理等影像科室的业务需求。通过与HIS、LIS…

阿里云AMD服务器CPU:AMD EPYC Genoa 9T34处理器性能

阿里云AMD服务器AMD EPYC Genoa 9T34处理器&#xff0c;主频3.4 GHz&#xff0c;单核睿频最高3.75 GHz&#xff0c;计算性能稳定&#xff0c;阿里云百科分享AMD EPYC™ Genoa 9T34性能测评&#xff1a; 目录 AMD EPYC™ Genoa 9T34 AMD EPYC™ Genoa 9T34 阿里云AMD服务器性…

基于YOLOv4的目标检测系统(附MATLAB代码+GUI实现)

摘要&#xff1a;本文介绍了一种MATLAB实现的目标检测系统代码&#xff0c;采用 YOLOv4 检测网络作为核心模型&#xff0c;用于训练和检测各种任务下的目标&#xff0c;并在GUI界面中对各种目标检测结果可视化。文章详细介绍了YOLOv4的实现过程&#xff0c;包括算法原理、MATLA…

Windows中批量修改DNS记录

最近由于公网映射的IP需要更换&#xff0c;有一批DNS记录需要修改。对于使用Windows管理的DNS记录&#xff0c;可以使用Powershell批量导出记录更新后再批量修改。 首先使用Powershell将DNS服务器上test.local这个区域里的所有A记录导出 Get-DnsServerResourceRecord -Comput…

计算机专业大一的一些学习规划建议!

大家好&#xff0c;我是小北。 五一嗖的一下就过啦~ 对于还在上学的同学五一一过基本上意味着这学期过半了&#xff0c;很多大一、大二的同学会有专业分流、转专业等事情。 尤其是大二的时候&#xff0c;你会发现身边有些同学都加入各种实验室了&#xff0c;有忙着打ACM、学生…

初级算法-贪心算法

主要记录算法和数据结构学习笔记&#xff0c;新的一年更上一层楼&#xff01; 初级算法-贪心算法 一、分发饼干二、摆动序列三、最大子序和四、买卖股票最佳时机五、跳跃游戏六、跳跃游戏二七、k次取反后最大化的数组和八、加油站九、分发糖果十、柠檬水找零十一、根据身高重建…

Python实现哈里斯鹰优化算法(HHO)优化随机森林分类模型(RandomForestClassifier算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 2019年Heidari等人提出哈里斯鹰优化算法(Harris Hawk Optimization, HHO)&#xff0c;该算法有较强的全…

SPSS如何检验非参数之案例实训?

文章目录 0.引言1.卡方检验2.二项检验3.双独立样本检验4.多独立样本检验5.双配对样本检验6.多配对样本检验7.游程检验8.单样本K-S检验 0.引言 因科研等多场景需要进行绘图处理&#xff0c;笔者对SPSS进行了学习&#xff0c;本文通过《SPSS统计分析从入门到精通》及其配套素材结…

文献集锦 | 非因空间多组学技术在胰腺癌肿瘤微环境中的研究策略

胰腺导管腺癌(PDAC)仍然是一种难治性疾病&#xff0c;5年总生存率&#xff08;OS&#xff09;仅不到9%&#xff0c;且诊断时多为晚期&#xff0c;治疗手段有限&#xff0c;除了传统的手术切除、放化疗之外&#xff0c;目前越来越多采用新辅助治疗的方法。利用空间组学分析平台深…

报错yarn create @umijs/umi-app Command failed, 文件名、目录名或卷标语法不正确

报错内容&#xff1a; 报错解决&#xff1a; 方法一&#xff1a; 1、我是用 npm 安装的 yarn &#xff1a; npm i yarn tyarn -g 2、我重新设定了 npm 全局包的安装位置 和 缓存位置。 // 查看 npm 全局包的安装位置 npm config get prefix // 查看 npm 缓存位置 npm co…

DTC 2023 | GBASE:构筑完备产品体系 释放数据全量价值

2023年4月7-8日&#xff0c;第十二届『数据技术嘉年华』(DTC 2023) 在京盛大召开。GBASE南大通用受邀参会&#xff0c;携核心产品亮相展区&#xff0c;并就数据库热门话题发表主题分享。 本届大会以“开源融合数字化——引领数据技术发展&#xff0c;释放数据要素价值”为议题…

mvn help:effective-pom命令的作用

无论 POM 文件中是否显示的声明&#xff0c;所有的 POM 均继承自一个父 POM&#xff0c;这个父 POM 被称为 Super POM。在pom的继承关系中&#xff0c;子pom可以覆盖父pom中的配置&#xff1b;如果子pom没有覆盖&#xff0c;那么父pom中的配置将会被继承。按照这个规则&#xf…

lammps教程:斜交转正交的方法

大家好&#xff0c;我是小马老师。 本文介绍lammps斜交模型转正交模型的方法。 多数晶体的模型都能在网上下载到对应的cif文件&#xff0c;但很多cif文件初始结构不是正交的&#xff0c;如sio2的初始结构&#xff1a; 对这种结构进行扩胞后&#xff0c;得到的模型也是一个斜交…

计组唐书第八章CPU部分课后习题

参考文章 计算机组成原理&#xff08;第三版&#xff09;唐朔飞-第八章CPU的结构和功能-课后习题_计算机组成原理唐朔飞课后题答案_蓝净云的博客-CSDN博客 本文是对计算机组成原理的课后题再解析。 8.1CPU有哪些功能?画出其结构框图并简要说明每个部件的作用。 容易忘掉中…

openEuler之上的K3s ARM64集群管理

K3s是CNCF认证的轻量级Kubernetes发行版&#xff0c;在全球拥有广泛的安装量&#xff0c;主要由SUSE工程师在开源社区维护。K3s除了可以单独部署外&#xff0c;也可以通过Kubernetes管理软件Rancher进行管理。SUSE中国团队与欧拉社区合作&#xff0c;以RFO SIG协作方式推动Ranc…

优思学院|品质管理是做什么工作的?和六西格玛管理有什么关系?

品质管理&#xff08;或者质量管理&#xff09;是一种组织和管理企业活动的方法&#xff0c;旨在确保产品或服务的质量符合客户的期望和需求。它涉及制定和实施各种质量控制措施&#xff0c;以确保生产出的产品或提供的服务符合预期标准&#xff0c;并且能够持续不断地进行改进…