前言:

我们现在假设n个工厂每天早上同时发出需求,即想要多少货(货都是由物流中心提供的)然后进行统一分配,这样做能好做一些(不然之前指定哪两个工厂有点没思路 我们后期再考虑这个 先考虑都由物流中心提供货),后期我们再实现有单独的工厂发出订单,然后单独调度解决。目前代码只考虑总体所有工厂的调度。

一、我们有三个输入参数:

1、首先是各个工厂(即节点)间的 距离(此例题中是8个节点)

2.然后是各个工厂想要的货量(我们之前想的是每个工厂对哪个工厂需求多少,但此题是针对物流中心的需求量,即不针对哪个特定的工厂要货)

3.第三个参数是物流中心到各个工厂节点的距离

二、主程序

其中每代他设置了80个样本,即80*8的二维矩阵
一共跑200代
每代这80个样本都要先交叉 变异一下
(感觉这地方有点暴力的意思)

1.首先种群初始化了80×8的矩阵
2.然后while200层循环,每层循环体里先进行交叉变异函数,具体函数在第三大模块
3.经过交叉后还是80*8 但是变异后变成132×8了 即132个样本了
4.然后通过size函数,并且变量设为1,即取得这个二维矩阵的行数 即132
5.然后对着132行进行for循环,每个样本都要进行解码和最短路程的计算,计算结果放到了Total_Dis,即这个矩阵是132×1
6.然后关键的更新种群,他把这个Total_Dis排了个升序(即找最短路程最少的80个),然后依照索引取出对应好的80个样本,然后放到下一代里,继续重复同样的操作
7.最后经过200代,持续淘汰,选出最后一代里80个子代中Total_Dis里最低的那个样本,即最后求出的结果(是一个所有车该先去哪个工厂送货,再去哪个)(然后根据这个结果逐一分配车辆就可以了-这个思路简单)(所以程序关键在于求出一个整体结果)

关于解码函数在下方,也需要转换为java程序




主程序

%算法参数
population_num=80;%种群规模
Max_gen=200;%迭代次数
Pc=0.9;%交叉概率
Pm=0.09;%变异概率
%%
%问题参数
%车辆数量Car_num=2
%客户数量Customer_num=8
%车辆容量capacity_max=8
%行驶距离distance_max=50
Car_num=2;
Customer_num=8;
capacity_max=8;
distance_max=50;
load Demand %客户的需求
load Distance %客户间的距离
load X %物流中心到客户间的距离
%%
%种群初始化
population=zeros(population_num,Customer_num);
for i=1:population_numpopulation(i,:)=randperm(Customer_num);
end
%%
y=1;%循环计数器while y<Max_gen%交叉[new_pop_intercross]=Mating_pool(population_num,population,Pc);%变异[new_pop_mutation]=Mutation(new_pop_intercross,Pm);%计算目标函数mutation_num=size(new_pop_mutation,1);Total_Dis=[];for k=1:mutation_num[Result]=decode(new_pop_mutation(k,:),distance_max,capacity_max);[Total_Dis(k,1)]=parameter(Result,Customer_num,Car_num);end%更新种群new_pop_new=zeros(population_num,Customer_num);[Total_Dissort, index] = sort(Total_Dis);for k=1:population_numnew_pop_new(k,:)=new_pop_mutation(index(k),:);endpopulation=new_pop_new;%迭代次数加一y=y+1;endDis_min1=min(Total_Dis);
for k=1:mutation_numif Total_Dis(k,1)==Dis_min1position1= k;breakend
end
X_Best=new_pop_mutation(position1,:)
Y_Obj=Total_Dis(position1,1)
t=toc;

三、交叉变异函数

交叉函数

function [new_pop_intercross]=Mating_pool(population_num,population,Pc)
%%
%输入:population,population_num,Pc
%输出:1.new_popopulation_intercross
%     2.c3,配对池:随机将种群population两两配对
%     3.pool
%%
pl=randperm(population_num);
num=population_num/2;
c3=zeros(2,num);
pool=[];
new_pop_intercross=population;
for kj=1:numc3(1,kj)=pl(2*kj-1);c3(2,kj)=pl(2*kj);
end%生成“配对池c3”%%判断“配对池c3”每一对个体的随机数是否小于交叉概率Pc
rd=rand(1,num);
for kj=1:numif rd(kj)<Pcpool=[pool,c3(:,kj)];end
end
%%判断配对池每一对个体的随机数是否小于交叉概率Pc,若小于,保存到“产子池pool”pool_num=size(pool,2);
for kj=1:pool_numc1=population(pool(1,kj),:);c2=population(pool(2,kj),:);[new_c1,new_c2]=cross(c1,c2);new_pop_intercross(pool(1,kj),:)=new_c1;new_pop_intercross(pool(2,kj),:)=new_c2;
end
end

变异函数

function [Mut_Pop]=Mutation(Cross_Pop,Pm)
Mut_Pop=Cross_Pop;
Cross_Pop_num=size(Cross_Pop,1);
for j=1:Cross_Pop_numA=Cross_Pop(j,:);A_1=A;n=size(A,2);r=rand(1,n);Pe=find(r<Pm);%可以引入变异概率sum_Pe=size(Pe,2);for i=1:sum_Pec=A(Pe(i));A_1(Pe(i))=A_1(find(r==max(r)));A_1(find(r==max(r)))=c;Mut_Pop=[Mut_Pop;A_1];end
end

四、解码函数

decode.m

function [Result]=decode(T,distance_max,capacity_max)
%distance_max=50;
%capacity_max=8;
load Demand
load Distance
load X
WS=1;WT=1;
a1=0;b1=0;
for i=1:size(T,2)if WT==1a1=2*X(T(i));b1=Demand(T(i));elseif WT==2a1=X(T(i-1))+X(T(i))+Distance(T(i),T(i-1));b1=Demand(T(i-1))+Demand(T(i));elsea1=0;b1=0;for j=i-WT+1:i-1a1=a1+Distance(T(j+1),T(j));b1=b1+Demand(T(j));endb1=b1+Demand(T(i));a1=a1+X(T(i-WT+1))+X(T(i));endif (a1>distance_max)|(b1>capacity_max)a1=2*X(T(i));b1=Demand(T(1));WS=WS+1;Result(i,:)=[T(i),WS,a1,b1];WT=2;elseResult(i,:)=[T(i),WS,a1,b1];WT=WT+1;endend

parameter.m

function [Total_Dis]=parameter(Result,Customer_num,Car_num)
%% 解码
if Result(Customer_num,2)<=Car_num
Current_Workstation=1;
Total_Dis=0;
for i=1:Customer_numif Result(i,2)==Current_Workstation;continueelseTotal_Dis=Total_Dis+Result(i-1,3);Current_Workstation=Current_Workstation+1;end
end
Total_Dis=Total_Dis+Result(Customer_num,3);
elseTotal_Dis=10000;%引入罚函数
end

遗传算法解决车辆调度问题相关推荐

  1. 车辆调度 matlab,基于遗传算法的车辆调度问题的matlab源程序

    越界 发表于 2013-7-8 09:16 有偿服务哦 function  chushis) K=4; %最多4辆车 inn=100;%迭代次数上限 citynum=8;%需求点数量 KM=cityn ...

  2. 基于遗传算法解决柔性车间生产调度问题(附代码)

    本文章主要涉及以下工作:    (1)讲述了如何基于遗传算法解决柔性车间生产调度问题,包括编码.解码.初始化.交叉操作.变异操作.选择操作等.    (2)提供了相应的编程步骤,并完善了甘特图绘制以及 ...

  3. 货物配送问题的matlab,遗传算法matlab程序【基于遗传算法的无时限多配送中心车辆调度问题研究】...

    [摘 要] 针对多配送中心车辆调度问题的复杂性特点,提出用最近距离分配法和遗传算法分两步求解多配送中心车辆调度问题,并进行了试验计算. [关键词] 多配送中心 车辆调度 最近距离分配法 遗传算法 一. ...

  4. MATLAB遗传算法求解带过程时间窗和同时取送货的车辆调度问题(VRPSPDTW)代码实例

    MATLAB遗传算法求解带过程时间窗和同时取送货的车辆调度问题(VRPSPDTW)代码实例 实例问题描述:现有一配送中心向14个客户点配送牛奶,并取回奶桶.配总中心和客户点坐标及每个客户点的服务时间如 ...

  5. [置顶] 基于遗传算法求解车辆路径问题

    今天整理了一下以前写过的一个遗传算法求解车辆路径问题的程序(C#写的),发上来和大家分享一下,有误的地方还请各位指点. 1.车辆路径问题: 车辆路径问题可以描述为:在一个存在供求关系的系统中,有若干台 ...

  6. 基于遗传算法求解车辆路径问题

    今天整理了一下以前写过的一个遗传算法求解车辆路径问题的程序(C#写的),发上来和大家分享一下,有误的地方还请各位指点. 1.车辆路径问题: 车辆路径问题可以描述为:在一个存在供求关系的系统中,有若干台 ...

  7. 遗传算法解决排序问题

    遗传算法解决排序问题 参考文章: (1)遗传算法解决排序问题 (2)https://www.cnblogs.com/oldBook/p/9866734.html 备忘一下.

  8. 遗传算法解决旅行商问题(TSP)

    遗传算法解决旅行商问题(TSP) 参考文章: (1)遗传算法解决旅行商问题(TSP) (2)https://www.cnblogs.com/studylyn/p/5097238.html 备忘一下.

  9. MATLAB实战系列(二十六)-matlab通过遗传算法求解车间调度问题

    文章目录 文中涉及源代码请参见,感兴趣的小伙伴可自行订阅下载! 数学建模源码集锦-基于多层编码遗传算法的车间调度算法应用实例 1. 关于遗传算法的一个小故事 2. 遗传算法操作流程 3. 车间调度问题 ...

  10. MATLAB实战系列(十九)-遗传算法解决TSP(旅行商)问题-应用及解析(文末附MATLAB源码)

    接上篇MATLAB实战系列(十八)-遗传算法解决TSP(旅行商)问题-算法原理 https://wenyusuran.blog.csdn.net/article/details/114060030 感 ...

最新文章

  1. 我是如何使用python控制迅雷自动下载电影的?
  2. flex项目,file not found错误解决
  3. SQL多字段模糊查询
  4. Python模块的使用
  5. 10个linux awk文本处理经典案例,Linux awk命令常用案例
  6. 苹果mac休眠快捷键_新手小白用苹果电脑搞科研,学会这些才不至于尴尬!
  7. 计算机科学导论第一章练习解答
  8. Red5 java项目创建
  9. 计算机专业关于Java读书笔记_《Java8学习笔记》读书笔记(四)
  10. 看短视频上瘾的背后-推荐算法
  11. 成都中忻嘉业:提高抖音短视频播放量的三个小技巧
  12. stm32f407探索者开发板(二)——新建工程(基于固件库)
  13. pytorch【Conv2d参数介绍】
  14. Could not find  artifact org.pentaho:pentaho-aggdesigner-algorithm:jar:5.1.5-jhyde
  15. 【python】PyQt6和pyqt6-tools在PyCharm2021的详细配置方法
  16. java 斑马线检测,行人过斑马线监测预警系统解决方案
  17. UE4模型整体导入流程
  18. Flask-admin Model View字段介绍
  19. 8086+DAC0832产生方波、三角波及正弦波波形Proteus仿真
  20. 波特率9600是什么意思

热门文章

  1. 微信小程序 16 登录界面
  2. 大数据物流项目:概述及Docker入门(一)
  3. 架构师之路 — 分布式系统 — 分布式网络分区难题
  4. 如何实现实时监测配电室环境数据
  5. PyKDL---正运动学和逆运动学
  6. 考勤系统怎样登录服务器,ZKADMS考勤管理系统数据库连接步骤
  7. 前期交互流程(PTES的第一步)
  8. iwconfig工具源码
  9. java进制转换的简单方法
  10. 31-管家婆家庭记账软件