1.模型介绍
1.1公交公司运营成本分析
本设计中公交公司运营成本主要考虑的是公交车在线路上的运营时间成本。考虑到模型的简便性以及求解的简便性,所以本设计不考虑公交公司车辆的的固定费用。
1.2乘客出行成本分析
本设计中乘客出行成本主要考虑乘客的候车时间最短。当一天内乘客的平均候车时间最短即认为乘客的出行本最小。
一天内乘客的候车时间除以乘客数即为一天内乘客的平均候车时间:
1.3目标函数及约束条件的确定
将两个函数整合得出该系统的总成本,使总成本最小,即为目标函数最小:
2.模型求解
2.1、遗传算法概述
遗传算法(GA,Genetic Algorithm),也称为进化算法。遗传算法是受达尔文的进化论的启发,借鉴生物进化过程而提出的一种启发式搜索算法。其主要特点是直接对结构对象进行操作,因此不同于其他求解最优解的算法,遗传算法不存在求导和对函数连续性的限定,采用概率化的寻优方法,不需要确定的规则就能自动获取和指导优化的搜索空间,自适应地调整搜索方向。
以上是对遗传算法相对抽象的总结,为了更具体形象的解释遗传算法的一般原理,我们首先介绍一些生物学上的概念:
①种群:不同生物个体形成的群体,生物的进化以群体的形式进行,这样的一个群体称为种群;
②个体:组成种群的单个生物;
③基因:带有遗传信息的DNA片段,可以通俗的将基因理解为一段信息,这段信息决定的生物个体的性状;
④表现型:根据基因形成的个体的外部表现;
⑤适应度:生物个体对于生存环境的适应程度,越适应那么其得以存活和繁衍的概率就越大;
⑥遗传:通过繁殖过程,子代将从父母双方各获取一部分基因,形成新的自己的基因,这个过程中,会发生基因的复制、交叉,也会以较低的概率发生基因突变;
⑦自然选择:物竞天择,适者生存的自然淘汰机制。具体为对环境适应度高的个体参与繁殖的机会比较多,后代就会越来越多。适应度低的个体参与繁殖的机会比较少,后代就会越来越少;
⑧进化:种群通过代际繁衍不断适应生存环境的过程,在这个过程中,以对外界环境的适应度为评判标准,生物的性状不断得到改良。
了解了这些术语的含义,我们就可以进一步说说生物进化的过程了。由于自然选择是客观存在的,即生物只能改变自己去适应环境,那么在自然选择的过程中,适应度低的个体会被淘汰,适应度高的个体被保留,高适应度的父体与母体又有更高的概率繁衍出适应度高的子代,因此在一代又一代的繁衍之后,高适应度的个体在种群中所占的比例越来越大,种群就这样完成了进化。
现在我们要参考生物进化的过程来设计算法解决求最优解的问题。对此,遗传算法的思路是,将要解决的问题模拟成一个生物进化的过程,通过进化来寻找最优解。以我们题目中寻找多峰函数的最大值这个问题为例:
将(x, y)这一可能的解作为一个个体;将多峰函数的函数值f(x, y)作为个体的适应度;对(x, y)进行编码作为个体的基因;以适应度为标准不断筛选生物个体;通过遗传算子(如复制、交叉、变异等)不断产生下一代。如此不断循环迭代,完成进化。最终,根据设定的迭代次数,可得到最后一代种群,该种群中的个体适应度都较高,而多峰函数的最大值就有比较大的概率存在于这一群解中,以种群中适应度最高的个体作为问题的解,则可以说该解有比较高的概率就是我们希望求得的最优解。
文字述说终究还是不如图表好理解,因此还是看图吧(下图将本题与自然遗传联系了起来):
二、源代码
clc
close all
clear all
%% 模型参数
lambda1=0.8;
lambda2=0.4;
To=350;
Te=1290;
alpha=0.3;
beta=0.4;
tmin=2;
tmax=50;
deltaT=0.5;
n=50;
Tnum=Te-To+2;
%% Ga参数
GenMax=20;
Pc=1;
Pv=1;
Gen=0;
Popnum=5;
% GGAP=0.2;
Chrom=struct;
while Gen<GenMax
Gen=Gen+1;
i=1;
%% 生成初始种群
while i<Popnum+1
Index=randperm(Tnum)+To-1;
Chrom(i).list=Index(1:n);
Chrom(i).list=sort(Chrom(i).list);
interval(i,:)=diff(Chrom(i).list);
Tmax=max(interval(i,:));
Tmin=min(interval(i,:));
if (Tmax<tmax) && (Tmin>tmin) %符合要求的留下
Chrom(i).Time=zeros(Tnum,1);
Chrom(i).Time(Chrom(i).list)=1;
i=i+1;
end
end
end
[best_fit,best_ind]=sort([best.fit],'descend')
plot(best_fit)
title('总成本进化曲线');
xlabel('迭代次数')
ylabel('总成本')
fid=fopen('bus_time.txt','w')
temp=best(best_ind(end)).gen;
for i=1:n
fprintf(fid,'%d\n',temp(i));
end
%
三、运行结果
四、备注
完整代码或者代写添加QQ2449341593
往期回顾>>>>>>
【优化求解】基于matlab粒子群优化灰狼算法【含Matlab源码 006期】
【优化求解】基于matlab多目标灰狼优化算法MOGWO 【含Matlab源码 007期】
【优化求解】基于matlab粒子群算法的充电站最优布局【含Matlab源码 012期】
【优化求解】基于matlab遗传算法的多旅行商问题【含Matlab源码 016期】
【优化求解】基于matlab遗传算法求最短路径【含Matlab源码 023期】
【优化求解】基于matlab遗传和模拟退火的三维装箱问题【含Matlab源码 031期】