遗传算法求解选址问题(含matlab源码及视频教程)

2024-03-27 1748阅读

温馨提示:这篇文章已超过371天没有更新,请注意相关的内容是否还可用!

题目描述:

        现有20个客户点,7个可供配送的配送中心以及一个发件网点,客户点有不同数量的货物要求,现需要发件网点向若干个配送中心提供货物,再由配送中心提供给客户,保证每个客户由一个配送中心完成配送工作并且满足配送要求。目标为在保证客户要求的前提下达到成本最小,并给出具体的配送方案。

遗传算法求解选址问题(含matlab源码及视频教程)

目标函数:

遗传算法求解选址问题(含matlab源码及视频教程)

        其中,第一个目标函数是从发件网点到配送中心所运输成本,第二个约束函数为从配送中心到客户的运输成本,第三个约束为建立配送中心所需要的费用,第四个目标函数为每个配送中心的管理成本。

约束函数:

遗传算法求解选址问题(含matlab源码及视频教程)

 符号意义:

遗传算法求解选址问题(含matlab源码及视频教程)

求解:

        本文选择遗传算法进行求解,算法框图如下:

遗传算法求解选址问题(含matlab源码及视频教程)

        算法编程难点在于对解集的建立和变换,对于这种复杂的解集,本文采用matlab的元胞数组建立解集,如下图所示。

        每一行代表一个个体,也就是一个解。

        对于每一行来说,第一个数字表示建立配送中心的个数

        第二个数组表示配送中心的编号,例如populationMat{1,2}=[3,5,1],代表的含义为选择第3,5,1号配送。

        第三列数组表示每个配送中心所服务的客户数目。例如populationMat{1,3}=[9,5,6],代表,3号配送中心服务9个客户,5号配送中心服务5个客户,1号配送中心服务6个客户。

        第四列数组代表客户的编号,populationMat{1,3}=[2   3   1   4   5  15   17   13   16   19   12    20   11   8   18   6   7   10   9   14],代表3号配送中心服务9个客户,客户编号分别是2 3 1 4 5 15 17 13 16。5号配送中心服务5个客户,分别是19 12 20 11 8,以此类推。

遗传算法求解选址问题(含matlab源码及视频教程)

        以下是整个函数的主程序部分,函数总体是按照遗传算法框图不走来写的,初始化种群,计算适应度,选择,交叉,变异...

%% 清空变量
clear;
clc;
%% 用户自定义数据
[customerPosition,distriCenterPosition,sendPosition,distriCenterConstantCost,distriCenterVolume,...
 distriCenterManageCost,sendToDistriCenterPer,distriCenterToCustomerPer,customerRequirement] = DataFunction;
probabilityMat = [0.01,0.05,0.3,0.3,0.2,0.1,0.04];
% probabilityMat = ones(1,7)/7;
% probabilityMat = [0 0 0 1 0 0 0];
%% 用户不可修改数据
M = size(distriCenterPosition,1);                       %配送中心的数目
N = size(customerPosition,1);                           %客户的数目
if length(probabilityMat)~=M || abs(sum(probabilityMat)-1)>=1e-6
    error('参数probabilityMat的大小与配送中心数目不一致或probabilityMat加和不为1');
end
%% 遗传算法数据
populationNumber = 50;                                  %种群数量
pro = 0.1;                                              %变异概率
populationMat = cell(populationNumber,4);               %种群数据矩阵
iter = 1;%当前迭代次数
iterMax = 1000;                                         %最大迭代次数
bestValue = inf;
bestValueNow = inf;
bestValueMat = zeros(populationNumber,1);
bestSolve = cell(1,4);
%% 初始化个体
populationMat = InitializeIndividuality(populationMat,populationNumber,M,N,probabilityMat,customerRequirement,distriCenterVolume,distriCenterPosition,customerPosition);
while iter
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]