[0085] 图1本发明流程图。
[0086] 图2历史最佳个体适应度变化曲线。
[0087] 图3历史种群平均适应度变化曲线。
[0088] 图4混合启发式算法历史最佳个体适应度变化与其他两种算法的对比。
[0089] 图5适应度拉伸操作流程图。
[0090] 图6交叉操作流程图。
[0091] 图7变异操作流程图。
[0092] 具体的实施方式
[0093] 下面结合附图和实施例对本发明作进一步说明。
[0094] 一种基于混合启发式算法的智能公交调度方法,具体包括如下步骤:
[0095] 步骤(1)读取乘客的刷卡记录,统计每天乘车总人数和每个时间段I内的人数。从2345天气预报网站和万年历中抓取每天的历史天气状况和节假日情况。使用层次聚类方法,对获取的历史数据进行聚类分析;即将一天当中的乘车总人数、不同时间段内的乘车人数、天气情况和节假日情况组合成一个向量,然后对该向量进行归一化操作,使用系统聚类算法中的Ward法进行聚类操作,根据聚类的结果提取每个类别的特征。经过这些操作之后,我们可以根据调度日的具体情况对客流量进行较为准确的预测。
[0096] 刷卡记录包括上车刷卡时间、上车站点、下车刷卡时间和下车站点。
[0097] 获取的历史数据包括乘客的刷卡记录、历史天气状况和节假日情况。
[0098] 步骤(2)根据第二天的天气预报信息和节假日情况,从步骤1的聚类结果中匹配到一个类,并从该类中抽取一个向量作为预测值;
[0099] 步骤(3)根据预测值,结合公交企业期望的满载率,两者相除,得到第二天的总发车班次;
[0100] 步骤(4)随机生成N个向量,向量的维度与总发车班次相等。每个分量代表对应班次的发车时间,发车时间以分钟为单位,设定第一个分量等于0,最后一个分量等于末班车发车时间与首班车发车时间之间的分钟数;向量中的分量按从小到大的顺序排列,这N个向量组成初始解的集合P0,并设定迭代次数g为0;其中N为偶数;
[0101] 步骤(5)建立公交调度的数学模型,以乘客的等待时间最短为目标设定适应度函数,计算每个初始解的适应度,然后通过混合启发式算法进行求解。
[0102] 5-1.使用适应度拉伸函数进行适应度拉伸操作,用拉伸后的值替换掉原来的适应度;
[0103] 5-2.按照轮盘赌选择策略从集合Pg中选择任意两个解,按照设定的交叉概率进行交叉操作,即随机选择一个交叉位置,交换两个解交叉点前后的部分,得到两个交叉后的解;然后对两个交叉后的解进行模拟退火操作:计算交叉后的解的适应度,如果适应度增大,接受新的解,否则以当前的接受概率接受新的解;从而获取两个新的解;
[0104] 5-3.按照设定的变异概率,对步骤5-2中获取的两个新解的每一个分量进行变异操作,即随机生成一个大小位于前后两个分量之间的自然数,替换掉原来的值,得到两个变异后的解。然后进行模拟退火操作:计算变异后的解的适应度,如果适应度增大,接受新的解,否则以当前的接受概率接受新的解;从而获取两个新的解,并将获取的两个新的解放入解集Pg+1;
[0105] 5-4.重复步骤5-2和5-3,直至解集Pg+1中解的个数与N相等;
[0106] 步骤(6)更新迭代次数g=g+1,若已经达到最大的迭代次数Gmax,则输出解集Pg中适应度最高的解,即为优化后的发车时刻表。否则,转到步骤5-1。
[0107] 所述的迭代次数Gmax为正整数。
[0108] 步骤5所述的公交调度数学模型的建立具体如下:
[0109] (1)所述的公交调度数学模型有以下前提条件:
[0110] BRT车辆停站后,等待乘客全部上车,不存在滞留现象。
[0111] BRT全线采用车外收费的方式,不存在投币或刷卡对车辆行驶时间的影响。
[0112] BRT全线采用相同的车辆型号,座位数量和最大载客数量相同。
[0113] 不考虑线路的配车,认为车辆足够多。
[0114] BRT车辆按调度时间表发车。
[0115] BRT车辆在道路上顺序和发车顺序一致,不存在超车现象。
[0116] 以分钟作为调度的最小单位。
[0117] (2)所述的公交调度数学模型中使用的变量及其含义如下:
[0118] m为整个调度周期内的发车次数;
[0119] n为线路指定方向上总的站点数量;
[0120] ti为一个调度周期中第i次车的发车时间,以分钟为单位,i=1,2,...,m;
[0121] rj为线路指定方向上第j个站点随时间变化的到达率,单位为人/分钟,j=1,2,...,n;
[0122] T为调度周期内乘客的总等待时间。
[0123] 则
[0124]
[0125] 公交运营的成本分为不变成本和可变成本,公交调度和不变成本之间不存在直接的关系,因此这里只考虑可变成本。设一个调度周期内公交运营收益为R,P为人均乘车费用(元),L为指定方向线路总长度(km),C为公交车辆的可变成本(元/km)。公交公司的收益为总收入减去总的可变成本,因此有
[0126]
[0127] 设μ为乘客等待时间权系数,ν为公交公司收益权系数。根据二次惩罚法,公交调度优化模型的目标函数为
[0128] minz=μ×T-ν×R
[0129] 为了充分利用公共交通资源,公交公司要求车辆满载率要高于期望满载率。设Nmax为最大车容量,ρ为期望满载率,则有约束条件Ⅰ:
[0130]
[0131] 为了保证规律到达乘客和随机到达乘客都能在较短的时间内等到所候车辆。假设Hmin和Hmax分别为公交公司要求的最小和最大发车间隔,则发车间隔应满足下面的约束条件Ⅱ:
[0132] Hmin≤ti-ti-1≤Hmax i=2,3,...,m
[0133] 同时,相邻两个班次车辆的发车间隔之差不宜太大,避免造成发车的不连续现象。假设τ为公交公司允许的最大发车间隔差值,则约束条件Ⅲ:
[0134] |(ti+1-ti)-(ti-ti-1)|≤τ i=2,3,...,m-1
[0135] 通过罚函数法来保证产生的解不违反调度问题的约束条件;基于以上的描述,调度问题的目标函数min f(X)形式如下:
[0136]
[0137] 其中min f(X)为加入罚函数后的目标函数值,ω1、ω2、ω3、ω4分别为约束条件Ⅰ、约束条件Ⅱ最小发车间隔、约束条件Ⅱ最大发车间隔、约束条件Ⅲ对应的惩罚系数。调度问题的解X是长度为m的向量,每个分量xi代表调度周期内第i次车距首班车的发车时间,以分钟为单位。
[0138] 公交调度的目标函数是最小化问题,为了保证每个个体(每个个体对应解集当中的一个解)的适应度均大于0,同时也为了方便运用轮盘赌选择策略,对目标函数进行变换得到适应度函数的最终形式为:
[0139]
[0140] 模拟退火算法能够加强遗传算法的局部搜索能力,在遗传算法中每次完成交叉操作和变异操作以后,比较前后两个个体的适应度,进行模拟退火操作。模拟退火算法中需要设定初始温度T0,当前温度的计算公式为:
[0141] T*=T0×σg-1
[0142] 其中σ表示温度降低的速度,其取值为0<σ<1,其值越大,温度降低的越慢,值越小,温度降低的越快;g为算法当前迭代的次数。当新产生的个体的适应度减小时,接受新个体的概率为:
[0143]
[0144] 其中F(Xnew)、F(Xold)分别为新个体和原个体的适应度。
[0145] 同时为了保证每个种群中最有优秀的个体能顺利进入下一代产生新的个体,在模拟退火和遗传算法的融合算法中,加入精英保留策略。每产生新的一代种群后,比较新一代种群和上一代种群中最佳个体的适应度值。如果新一代种群的最佳个体的适应度小于上一代的最佳个体,则用上一代的最佳个体替换新一代中适应度最小的个体。否则直接进入下一次迭代。
[0146] 步骤5-1中拉伸函数的形式为:
[0147]
[0148] 其中F(Xi)代表个体Xi的适应度,F(Xi)'是拉伸后的适应度,T*指模拟退火算法中当前的温度,N代表种群中个体的数量,λ代表拉伸系数。
[0149] 实施例1
[0150] 下面举例说明拉伸函数在遗传-模拟退火算法中的作用。当T*=5000,λ=200,假设有10个个体的适应度分别为0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,拉伸前后个体被选择的概率的对比结果如表1所示。当T*=50,λ=200,假设有10个个体的适应度分别为0.71,0.72,0.73,0.74,0.75,0.76,0.77,0.78,0.79,0.80,拉伸前后个体被选择的概率的对比结果如表2所示。表格中No.代表个体编号,fitness代表个体的适应度,P1代表拉伸前个体被选择的概率,P2代表拉伸后个体被选择的概率。从对比结果中,明显可以得到以下结论:当温度较高时,经过拉伸后,个体之间的差异减小;当温度较低时,经过拉伸,个体之间的差异变大。
[0151] 表1T*=5000时拉伸前后个体被选择概率的对比
[0152]No. 1 2 3 4 5 6 7 8 9 10
fitness 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
P1 0.0182 0.0364 0.0545 0.0727 0.0909 0.1091 0.1273 0.1455 0.1636 0.1818P2 0.0982 0.0986 0.0990 0.0994 0.0998 0.1002 0.1006 0.1010 0.1014 0.1018[0153] 表2T*=50时拉伸前后个体被选择概率的对比
[0154]No. 1 2 3 4 5 6 7 8 9 10
fitness 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.80
P1 0.0940 0.0954 0.0967 0.0980 0.0993 0.1007 0.1020 0.1033 0.1046 0.1060P2 0.0830 0.0864 0.0899 0.0936 0.0974 0.1013 0.1055 0.1098 0.1143 0.1189[0155] 由于编程语言能够提供的基本数据类型所表达的数字范围是有限的,为了能够进行适应度拉伸,要在拉伸前对种群中所有的个体进行适应度标准化,令
[0156]
[0157] 其中fitness指个体的适应度,fitness′指标准化后的适应度,max fitness指当前种群中最佳个体的适应度。
[0158] 最后使用改进后的混合启发式算法进行求解。图1给出了该算法的流程图,从图中可以看出改进的混合启发式算法主要包含了选择、交叉、变异、模拟退火、精英保留、标准化和适应度拉伸操作,求解过程中这些操作一一作用于群体Pg,继而产生新一代种群Pg+1。图2、3、4分别是算法执行过程中历史最佳个体适应度变化曲线、历史种群平均适应度变化曲线以及该算法和其他两种算法的对比图。
[0159] 步骤5中所述的混合启发式算法的基本步骤如下:
[0160] 12).设定如下参数的值:种群大小N,染色体长度Lc,交叉概率Pc,变异概率Pm,最大进化代数Gmax,初始温度T0,退火速度σ,拉伸系数λ。
[0161] 13).初始化种群P0,即随机产生N个可行解构成初始化种群P0。计算初始种群中个体的适应度,进行标准化,对适应度进行拉伸操作。图5给出的拉伸操作的流程图。设定迭代次数g为0。
[0162] 14).按照拉伸后的适应度进行轮盘赌选择,从种群Pg中随机选取两个个体。
[0163] 15).交叉和模拟退火操作。采用单点交叉策略,将被选择的两个个体p1、p2按概率Pc进行交叉操作产生两个新的个体c1、c2。如果F(ci)>F(pi),则接受个体c1,否则以概率exp((F(ci)-F(pi))/T*)接受新个体。图6给出的是该步骤的流程图。
[0164] 16).变异和模拟退火操作。对新产生的个体c1、c2逐位进行变异操作,如果变异后的个体c1'适应度增大,则接受变异,否则以概率exp((F(ci')-F(ci))/T*)接受新个体。图7给出的是该步骤的流程图。
[0165] 17).把新产生的两个个体加入新种群Pg+1中,如果Pg+1中个体数量小于N,则转到步骤3),否则进行下一步。
[0166] 18).计算新种群中每个个体的适应度,并进行标准化操作。
[0167] 19).对新种群中的个体进行适应度拉伸。
[0168] 20).实施精英保留策略,用新种群替换原种群。
[0169] 21).降温操作。
[0170] 22).更新迭代次数g=g+1,如果达到最大迭代次数Gmax,则输出种群Pg中的最优解,否则转到步骤3)。