【优化求解】基于遗传算法求解车辆发车间隔优化问题

1.模型介绍

1.1公交公司运营成本分析

本设计中公交公司运营成本主要考虑的是公交车在线路上的运营时间成本。考虑到模型的简便性以及求解的简便性,所以本设计不考虑公交公司车辆的的固定费用。在这里插入图片描述

1.2乘客出行成本分析

本设计中乘客出行成本主要考虑乘客的候车时间最短。当一天内乘客的平均候车时间最短即认为乘客的出行本最小。\ 一天内乘客的候车时间除以乘客数即为一天内乘客的平均候车时间:在这里插入图片描述

1.3目标函数及约束条件的确定

将两个函数整合得出该系统的总成本,使总成本最小,即为目标函数最小:\ 在这里插入图片描述\ 在该模型的约束条件中式(3-4)代表优化后公交公司的运营车辆的发车间隔要在最大间隔和最小间隔之间;式(3-5)代表优化后公交公司运营车辆的发车时间要在现有发车最早和最晚发车时间之间;式(3-6)表示任意时刻公交车上的乘客数不得超过公交车的最大承载人数。

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 tmin) %符合要求的留下 Chrom(i).Time=zeros(Tnum,1); Chrom(i).Time(Chrom(i).list)=1; i=i+1; end end

end [bestfit,bestind]=sort([best.fit],'descend') plot(bestfit) title('总成本进化曲线'); xlabel('迭代次数') ylabel('总成本') fid=fopen('bustime.txt','w') temp=best(best_ind(end)).gen; for i=1:n fprintf(fid,'%d\n',temp(i)); end

% ```

 

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Matlab科研辅导帮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值