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
%% 模型参数
%输   入:
%           pop              种群
%           VARIATIONRATE    变异率
%输   出:
%           pop              变异后的种群
%%
function kidsPop = Variation(kidsPop,VARIATIONRATE)
for n=1:size(kidsPop,2)if rand<VARIATIONRATEtemp = kidsPop{n};%找到变异位置location = ceil(length(temp)*rand);temp = [temp(1:location-1) num2str(~temp(location))...temp(location+1:end)];kidsPop{n} = temp;end
end
function fitness=m_Fitness(pop, OD, h)
%% Fitness Function
for n=1:size(pop,2)a = pop(1,n);b = pop(2,n);f1 = pop(3,n);f2 = pop(4,n);
%% 约束条件,不满足约束则适应度值无穷小    %% 1) a,b,f1,f2 不能为0if a == 0 || b == 0 || f1 == 0 || f2 == 0fitness(n) = 1/1000000000;continue;end%% 2) a,b,f1,f2 不能超过35if a > 35 || b > 35 || f1 >35 || f2 >35 fitness(n) = 1/1000000000;continue;end
%% 3) 列车数量约束if (sum(h) * 120 + 1170) *( f1 - 16) + (sum(h(a: b-1)) + (b - a + 1) * 30 + 120) * f2 > 0fitness(n) = 1/1000000000;continue;end
%% 4) 满载率约束
%     constraint2 = [];
%     for j = 2:33
%         constraint2(j) = (sum(sum(OD(1:j, j+1:35)))/(f1+f2)) * (sum(sum(OD(j+1:35,1:j)))/(f1+f2));
%     end
%     if max(constraint2) > 1 * 1460
%         fitness(n) = 1/1000000000;
%         continue;
%     end
%% 5) 最小追踪间隔     if f1 + f2 > 30fitness(n) = 1/1000000000;continue;end
%% 5) 最小发车间隔   if f1 < 12fitness(n) = 1/1000000000;continue;end
%% 主要适应度函数,设置为目标函数的倒数,即目标函数要求最小,那么越小,适应度就越大    fitness(n)= 1/m_Fx(pop(:,n), OD);
endtitle('总成本进化曲线');
xlabel('迭代次数')
ylabel('总成本')%

三、运行结果

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.

【优化求解】基于matlab遗传算法求解车辆发车间隔优化问题【含Matlab源码 132期】相关推荐

  1. 【Matlab路径规划】改进的遗传算法机器人避障路径规划【含GUI源码 703期】

    一.代码运行视频(哔哩哔哩) [Matlab路径规划]改进的遗传算法机器人避障路径规划[含GUI源码 703期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...

  2. 【Matlab生物电信号】生物电信号仿真【含GUI源码 684期】

    一.代码运行视频(哔哩哔哩) [Matlab生物电信号]生物电信号仿真[含GUI源码 684期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]董兵,超于毅,李 ...

  3. 【Matlab语音分析】语音信号分析【含GUI源码 1718期】

    一.代码运行视频(哔哩哔哩) [Matlab语音分析]语音信号分析[含GUI源码 1718期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆,张磊,郑铁 ...

  4. 【Matlab身份证识别】身份证号码识别【含GUI源码 014期】

    一.代码运行视频(哔哩哔哩) [Matlab身份证识别]身份证号码识别[含GUI源码 014期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

  5. 【Matlab车牌识别】停车计费系统【含GUI源码 735期】

    一.代码运行视频(哔哩哔哩) [Matlab车牌识别]停车计费系统[含GUI源码 735期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MATLA ...

  6. 【Matlab水果识别】自助水果超市【含GUI源码 594期】

    一.代码运行视频(哔哩哔哩) [Matlab水果识别]自助水果超市[含GUI源码 594期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]倪云峰,叶健,樊娇娇 ...

  7. 【优化调度】基于遗传算法实现车辆发车间隔优化问题matlab源码

    1 简介 根据公交调度优化问题的特点,考虑车辆满载率及最大,最小发车间隔的约束,以企业收益和乘客利益最大为目标建立的公交发车间隔模型,采用遗传算法进行求解.实际应用表明,利用该模型及其算法能够快速得到 ...

  8. 【Matlab验证码识别】遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别【含GUI源码 1694期】

    一.代码运行视频(哔哩哔哩) [Matlab验证码识别]遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别[含GUI源码 1694期] 二.matlab版本及参考文献 1 matlab ...

  9. 【Matlab电力负荷预测】粒子群优化支持向量机短期电力负荷预测【含GUI源码 751期】

    一.代码运行视频(哔哩哔哩) [Matlab电力负荷预测]粒子群优化支持向量机短期电力负荷预测[含GUI源码 751期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 ...

  10. 【Matlab图像融合】小波变换遥感图像融合【含GUI源码 744期】

    一.代码运行视频(哔哩哔哩) [Matlab图像融合]小波变换遥感图像融合[含GUI源码 744期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余 ...

最新文章

  1. JavaScript系列-(原型-原型连-call-apply-继承)
  2. 5G NGC — 关键技术 — MEC 边缘云
  3. java scope=prototype_spring mvc 设置@Scope(prototype)
  4. mysql 启动 failed to start_Linux下启动MySQL提示“mysql deamon failed to start”错误的解决办法...
  5. 廖雪峰Java1-2Java程序基础-3整数运算
  6. Vue的表单组件之下拉框
  7. Python朴素贝叶斯
  8. 定义一个 圆形 Circle类 , 定义其中的长度length属性,定义一个求面积getArea()的方法。 并编写一个测试类,进行长度的赋值和展示,并调用求面积方法展示面积值。
  9. phpStorm安装xDebug
  10. 关于解决Path被大改,无法直接编辑恢复的问题
  11. SQLite多线程使用总结
  12. x264 移植到 ARM的方法
  13. mysql current_timestamp 不自动更新_MySQL ON UPDATE CURRENT_TIMESTAMP不更新
  14. 微信小程序教程笔记2
  15. linux自动内存清理
  16. 清理win7系统盘空间
  17. 网易云音乐上关于摇滚歌单的各种排行榜
  18. 如何添加装饰螺纹线规格
  19. 最全的厚黑学,教你怎样混社会(人生格言) 作者 李宗吾
  20. CPU、GPU、TPU的原理简述及其区别

热门文章

  1. Centos 7 zabbix 实战应用
  2. Windows server 2003 伪静态配置方法
  3. 2014年6月5日 深圳 IBM 安全解决方案会议通知
  4. 接收流信息---字符串
  5. Flash 显示全景图
  6. Python 爬虫 PhantomJs 获取JS动态数据
  7. C++从屏幕输入数字以空格分割,存入整型数组
  8. Atitit 消息系统 mq 的艺术 attilax总结 v5 t88.docx Atitit 消息系统 mq 之道 attilax总结 1. 概念 broker topic producer
  9. atitit 项目管理 持续集成 构建管理CI jenkins.docx
  10. atitit.数据验证--db数据库数据验证约束