具体实施方式
下面结合图1、图2及实施例对本发明做进一步详细说明,但本发明并不仅限于以下的实施例。
一个项目由编号为0至11的12个任务组成,其任务结构即任务间的时序关系如图2所示,其中t0和t11是人为增加的虚拟任务,即不占用项目工期也不占用资源,t1到t10的可执行模式,以及该模式下执行时需要的时间、占用可更新资源和不可更新资源的数量如表1所示。在该项目中可更新资源1在任意时刻的可使用量为18、可更新资源2在任意时刻的可使用量为16、不可更新资源1在整个项目工期中的可使用量为61、不可更新资源2在整个项目工期中的可使用量为62。
表1
针对上述案例,如图1所示,一种使用分层自适应智能算法的多模资源受限项目调度方法,包括以下实施步骤:
执行步骤1:形式化多模资源受限项目调度问题,获取调度优化所需的信息;
获取项目的任务集T={t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11},其中任务0和任务11,即t0和t11是虚拟任务,任务1到任务10,即t1,…,t10是实际需要调度的任务;
获取任务间的时序关系,即任务j的父任务集PR
j和子任务集SC
j:
SC
0={t
1,t
2,t
3};PR
1={t
0},SC
1={t
4,t
5,t
8};PR
2={t
0},SC
2={t
6,t
8,t
10};PR
3={t
0},SC
3={t
7,t
8};PR
4={t
1},SC
4={t
9};PR
5={t
1},SC
5={t
6};PR
6={t
2,t
5},SC
6={t
7};PR
7={t
3,t
6},SC
7={t
9};PR
8={t
1,t
2,t
3},SC
8={t
11};PR
9={t
4,t
7},SC
9={t
11};PR
10={t
2},SC
10={t
11};PR
11={t
8,t
9,t
10},
获取项目中可更新资源k在任意时刻的可使用量Rk:R1=18,R2=16;获取不可更新资源l在整个项目工期中的可使用量Nl:N1=61,N2=62;
获取任务j在模式m下执行时需要的时间dj,m和占用的可更新资源数量rj,m,k、不可更新资源数量nj,m,l:d1,1=3,r1,1,1=7,r1,1,2=0,n1,1,1=8,n1,1,2=9;d1,2=4,r1,2,1=1,r1,2,2=7,n1,2,1=8,n1,2,2=7;d1,3=8,r1,3,1=2,r1,3,2=7,n1,3,1=6,n1,3,2=6;……;d10,3=7,r10,3,1=2,r10,3,2=2,n10,3,1=4,n10,3,2=6;
执行步骤2:如果存在不可更新资源l满足
或存在一个任务j和可更新资源k满足
那么该问题不存在可行的调度方案,求解结束,否则转到步骤3;
对于不可更新资源1,
对于不可更新资源2,
对于可更新资源1,对于所有的任务j都满足
对于可更新资源2,对于所有的任务j都满足
因此,则该问题可能存在可行的调度方案,转到步骤3。执行步骤3:进行预处理:对模式和资源进行冗余和无效检查,去除冗余模式、无效模式和冗余资源;
执行步骤3.1:mflg=0,rflg=0;由于不存在rj,m,k>Rk及nj,m,l>Nl,j=1,…,10,m=1,…,Mj,k=1,2,l=1,2,因此本项目不存在无效模式;
执行步骤3.2:由于mflg=0,因此令mflg=1,转到步骤3.3;
执行步骤3.3;由于存在任务7及其模式2和模式3满足:d7,2=5<d7,3=8,r7,2,1=8≤r7,3,1=8,r7,2,2=0<r7,3,2=1,n7,2,1=3≤n7,3,1=3,n7,2,2=3<n7,3,2=4,因此对于任务7来说,模式3是冗余的,从任务7中去除模式3:令M7=3-1=2,rflg=0;
执行步骤3.4:由于rflg=0,因此令rflg=1,转到步骤3.5;
执行步骤3.5:对于可更新资源1:
对于可更新资源2:
因此不存在可更新资源k满足:
本项目不存在冗余的可更新资源;
执行步骤3.6:对于不可更新资源1:
对于不可更新资源2:
因此不存在不可更新资源l满足:
本项目不存在冗余的不可更新资源;
执行步骤3.7:由于mflg=1∧rflg=1,因此转到步骤3.8;
执行步骤3.8:预处理结束。
执行步骤4:计算任务的层次值;
t0没有父任务,其层次值为lvl0=0;
同理,可以获得其它任务的层次值:lvl2=lvl3=1;lvl4=lvl5=lvl8=lvl10=2;lvl6=3;lvl7=4;lvl9=5;lvl11=6。
执行步骤5:初始化当代种群;
取种群规模N=10;
基于层次的个体随机生成方法生成一个个体的具体实施过程如下:
执行步骤A1:生成执行模式列表:对于任务1,在其可执行模式1、2、3中随机选择一个模式,其为模式1,即g1=1;对于任务2,在可执行模式1、2、3中随机选择一个模式,其为模式1,即g2=1;……,同理,随机选择剩余任务的执行模式:g3=2,g4=1,g5=1,g6=3,g7=1,g8=1,g9=2,g10=2;
执行步骤A2:生成调度顺序列表:随机排列层次1内的任务,其为3,1,2,随机排列层次2内的任务,其为10,8,4,5,……,同理,随机排列层次3、4、5内的任务分别为:6;7;9,将层次1至层次5内的任务排列依次连接,形成个体的调度顺序列表部分的基因{g11,g12,…,g20}={3,1,2,10,8,4,5,6,7,9};
通过步骤A1和步骤A2生成个体ch1={1,1,2,1,1,3,1,1,2,2;3,1,2,10,8,4,5,6,7,9};
基于层次的个体随机生成方法生成当代种群中的其它个体如下:ch2={1,3,3,1,2,3,2,1,1,1;3,2,1,4,5,10,8,6,7,9};ch3={3,2,3,1,2,2,2,2,1,3;3,1,2,8,5,10,4,6,7,9};ch4={1,2,2,2,2,2,1,2,3,2;3,2,1,5,4,8,10,6,7,9};ch5={1,3,2,1,2,1,1,3,2,3;2,3,1,5,10,8,4,6,7,9};ch6={2,3,2,2,2,1,2,2,3,2;3,2,1,4,8,10,5,6,7,9};ch7={2,1,2,3,1,2,1,2,1,1;3,2,1,8,10,5,4,6,7,9};ch8={1,2,3,2,1,1,2,1,3,3;2,3,1,8,10,5,4,6,7,9};ch9={1,3,2,1,2,3,2,1,3,2;3,2,1,10,4,8,5,6,7,9};ch10={1,1,2,3,2,1,2,1,1,2;1,2,3,5,10,4,8,6,7,9};
这样最终生成的初始当代种群为CP={ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8,ch9,ch10}。
执行步骤6:采用FBI&D方法改进初始当代种群中的所有个体并计算其适应度值;
例如对初始当代种群中的ch8={1,2,3,2,1,1,2,1,3,3;2,3,1,8,10,5,4,6,7,9}采用FBI&D方法改进并计算其适应度值的具体实施过程如下:
执行步骤B1:令θ=1,对个体ch8进行基于插入模式的串行个体解码获得所有任务完成时间:f1=9,f2=6,f3=10,f4=14,f5=17,f6=19,f7=24,f8=15,f9=32,f10=16,以及适应度值fit8=32;
执行步骤B2:把任务0变成任务11,任务11变成任务0,颠倒任务间的时序关系,即:
SC
0={t
8,t
9,t
10};PR
10={t
0},SC
10={t
2};PR
9={t
0},SC
9={t
4,t
7};PR
8={t
0},SC
8={t
1,t
2,t
3};PR
7={t
9},SC
7={t
3,t
6};PR
6={t
7},SC
6={t
2,t
5};PR
5={t
6},SC
5={t
1};PR
4={t
9},SC
4={t
1};PR
3={t
7,t
8},SC
3={t
11};PR
2={t
6,t
8,t
10},SC
2={t
11};PR
1={t
4,t
5,t
8},SC
1={t
11};PR
11={t
1,t
2,t
3},
根据任务完成时间f
j从大到小重新排列个体ch
8中的调度顺序列表,即把个体中的基因g
J+j设置为倒数第j个完成的任务,j=1,…,10,形成个体
执行步骤B3:θ=1+1=2,对个体
进行基于插入模式的串行个体解码获得所有任务的完成时间:
及其适应度值
执行步骤B2:把任务11变成任务0,任务0变成任务11,颠倒任务间的时序关系,即:
SC
0={t
1,t
2,t
3};PR
1={t
0},SC
1={t
4,t
5,t
8};PR
2={t
0},SC
2={t
6,t
8,t
10};PR
3={t
0},SC
3={t
7,t
8};PR
4={t
1},SC
4={t
9};PR
5={t
1},SC
5={t
6};PR
6={t
2,t
5},SC
6={t
7};PR
7={t
3,t
6},SC
7={t
9};PR
8={t
1,t
2,t
3},SC
8={t
11};PR
9={t
4,t
7},SC
9={t
11};PR
10={t
2},SC
10={t
11};PR
11={t
8,t
9,t
10},
根据任务完成时间f
j从大到小重新排列个体ch
8中的调度顺序列表,即把个体中的基因g
J+j设置为倒数第j个完成的任务,j=1,…,10,形成个体
执行步骤B3:θ=1+2=3,对个体
进行基于插入模式的串行个体解码获得所有任务的完成时间:
及其适应度值
执行步骤B5:由于θ=3为奇数,故输出个体
以上述个体ch8={1,2,3,2,1,1,2,1,3,3;2,3,1,8,10,5,4,6,7,9}θ=1时的解码为例,所述基于插入模式的串行个体解码的具体实施过程如下:
执行步骤C1:系统状态初始化:任务0的完成时间f0=0,
任务完成时间集F={f
0,lf}={0,80};对应于F中各完成时间可更新资源的剩余可用量为:
执行步骤C2:取出任务j=g10+1=g11=2,及其采用的模式m=g2=2;
执行步骤C3:计算任务2的完成时间;即执行步骤C3.1:令任务2的开始时间
令flag=1;执行步骤C3.2:在F={f
0,lf}={0,80}中找出大于等于rt
2=0的元素,组成集合TF={f∈F|f≥rt
2=0}={f
0,lf}={0,80};执行步骤C3.3:从TF={f
0,lf}={0,80}中取出一个值最小的元素,其为f
0=0;执行步骤C3.4:由于f
0-s
2=0-0=0<d
2,2=6,转到步骤C3.5;执行步骤C3.5:由于此时flag=1,直接转到步骤C3.6;执行步骤C3.6:由于
f
0=0时刻所有可更新资源的剩余可用量满足任务2的需求,因此直接转到步骤C3.3;执行步骤C3.3:从TF={lf}={80}中取出一个值最小的元素,其为lf=80;执行步骤C3.4:由于flag=1且lf-s
2=80-0=80>d
2,2=6,转到步骤C3.7;执行步骤C3.7:f
2=s
2+d
2,2=0+6=6;
执行步骤C4:由于
则F=F∪{f
2}={f
0,lf}∪f
2={f
0,f
2,lf}={0,6,80},增加f
2=6时刻可更新资源的剩余可用量:
执行步骤C5:更新[s
2,f
2)=[0,6)时段内可更新资源的剩余可用量:
执行步骤C6:δ=δ+1=1+1=2,由于δ=2≤J=10,转到步骤C2;
执行步骤C2:取出任务j=g10+2=g12=3,及其采用的模式m=g3=3;
执行步骤C3:计算任务3的完成时间;即执行步骤C3.1:令任务3的开始时间s
3=rt
3=max{f
0}=f
0=0,令flag=1;执行步骤C3.2:在F={0,6,80}找出大于等于rt
3=0的元素,组成集合TF={0,6,80};执行步骤C3.3:从TF={0,6,80}中取出一个值最小的元素,其为0;执行步骤C3.4:由于0-0=0<d
3,3=10,转到步骤C3.5;执行步骤C3.5:由于此时flag=1,直接转到步骤C3.6;执行步骤C3.6:由于
0时刻所有可更新资源的剩余可用量满足任务3的需求,因此直接转到步骤C3.3;执行步骤C3.3:从TF={6,80}中取出一个值最小的元素,其为6;执行步骤C3.4:由于6-0=6<d
3,3=10,转到步骤C3.5;执行步骤C3.5:由于此时flag=1,直接转到步骤C3.6;执行步骤C3.6:由于
f
2=6时刻所有可更新资源的剩余可用量满足任务3的需求,因此直接转到步骤C3.3;执行步骤C3.3:从TF={80}中取出一个值最小的元素,其为80;执行步骤C3.4:由于flag=1且80-0=80>d
3,3=10,转到步骤C3.7;执行步骤C3.7:f
3=0+10=10;
执行步骤C4:由于
则F={0,6,10,80},增加f
3=10时刻可更新资源的剩余可用量:
执行步骤C5:更新[s3,f3)=[0,10)时段内可更新资源的剩余可用量:
执行步骤C6:δ=2+1=3,由于δ=3≤J=10,转到步骤C2;
……
这样不断重复执行步骤C2至步骤C6,直至δ=11>J=10,转到步骤C7;
执行步骤C7:获得所有任务完成时间:f
1=9,f
2=6,f
3=10,f
4=14,f
5=17,f
6=19,f
7=24,f
8=15,f
9=32,f
10=16,由于
则该个体为可行个体,故个体适应度值为fit
8=ms
8=f
11=max{f
8,f
9,f
10}=32,操作结束。
同理,当代种群中的其它个体经FBI&D方法改进后变为:
ch1={1,1,2,1,1,3,1,1,2,2;3,1,2,10,8,4,5,6,7,9};ch2={1,3,3,1,2,3,2,1,1,1;1,5,2,3,6,7,8,4,9,10};
ch3={3,2,3,1,2,2,2,2,1,3;3,1,2,8,5,10,4,6,7,9};ch4={1,2,2,2,2,2,1,2,3,2;3,2,1,5,4,8,10,6,7,9};
ch5={1,3,2,1,2,1,1,3,2,3;2,3,1,5,10,8,4,6,7,9};ch6={2,3,2,2,2,1,2,2,3,2;3,2,1,4,8,10,5,6,7,9};
ch7={2,1,2,3,1,2,1,2,1,1;3,2,1,8,10,5,4,6,7,9};ch9={1,3,2,1,2,3,2,1,3,2;3,2,1,10,4,8,5,6,7,9};
ch10={1,1,2,3,2,1,2,1,1,2;1,2,3,5,10,4,8,6,7,9};
其适应度值分别为:fit1=106,fit2=26,fit3=26,fit4=103,fit5=102,fit6=28,fit7=97,fit9=32,fit10=101。
执行步骤7:判断是否满足进化终止条件,如满足,则转到步骤13,否则转到步骤8;
终止条件设为连续迭代GG=20代最优个体没有改进;
由于是初始化种群,迭代进化了一代,没有满足迭代终止条件,因此转到步骤8。
执行步骤8:基于值的轮赌法选择一组遗传操作;
基于值的轮赌法选择一组遗传操作的具体实施过程如下:执行步骤8.1:根据遗传操作的适应度值计算各组遗传操作被选中概率:
同理,A
2=0.161,A
3=0.065,A
4=0.161,A
5=0.161,A
6=0.065,A
7=0.097,A
8=0.097,A
9=0.032;执行步骤8.2:计算累计概率:
同理,
执行步骤8.3:产生一个[0,1)之间的随机数,其为0.919,由于
因此选择第8组遗传操作,即调度顺序交叉和执行模式变异,选择遗传操作结束;
其中,遗传操作中各种交叉操作的具体实施过程说明如下:
(1)层次交叉CO1
不妨设ch1和ch6为父体1和父体2,层次交叉操作的具体实施步骤如下:
执行步骤D1:在ch1和ch6的两个父体中,层次1、2、3、4、5内的所有任务在调度顺序列表中都是连续排列,因此从中随机选择一个,其为层次2,层次2内的任务包括任务4、5、8、10,转到步骤D2;
执行步骤D2:交换父体1和父体2中层次2内的任务的调度顺序与执行模式,形成子体1和子体2;如表2所示:
基因 |
g<sub>1</sub> |
g<sub>2</sub> |
g<sub>3</sub> |
g<sub>4</sub> |
g<sub>5</sub> |
g<sub>6</sub> |
g<sub>7</sub> |
g<sub>8</sub> |
g<sub>9</sub> |
g<sub>10</sub> |
g<sub>11</sub> |
g<sub>12</sub> |
g<sub>13</sub> |
g<sub>14</sub> |
g<sub>15</sub> |
g<sub>16</sub> |
g<sub>17</sub> |
g<sub>18</sub> |
g<sub>19</sub> |
g<sub>20</sub> |
父体1 |
1 |
1 |
2 |
1 |
1 |
3 |
1 |
1 |
2 |
2 |
3 |
1 |
2 |
10 |
8 |
4 |
5 |
6 |
7 |
9 |
父体2 |
2 |
3 |
2 |
2 |
2 |
1 |
2 |
2 |
3 |
2 |
3 |
2 |
1 |
4 |
8 |
10 |
5 |
6 |
7 |
9 |
子体1 |
1 |
1 |
2 |
2 |
2 |
3 |
1 |
2 |
2 |
2 |
3 |
1 |
2 |
4 |
8 |
10 |
5 |
6 |
7 |
9 |
子体2 |
2 |
3 |
2 |
1 |
1 |
1 |
2 |
1 |
3 |
2 |
3 |
2 |
1 |
10 |
8 |
4 |
5 |
6 |
7 |
9 |
表2
执行步骤D3:输出子体1和子体2,操作结束;
(2)执行模式交叉CO2
不妨设ch1和ch6为父体1和父体2,执行模式交叉操作的具体实施步骤如下:
执行步骤E1:随机产生一个1到10之间的正整数,其为4;
执行步骤E2:生成子体1,子体1的第4个到第10个基因来自于父体2,其余基因来自于父体1;如表3所示;
执行步骤E3:生成子体2,子体2的第4个到第10个基因来自于父体1,其余基因来自于父体2;如表3所示;
执行步骤E4:输出子体1和子体2,操作结束;
表3
(3)调度顺序交叉CO3
不妨设ch1和ch6为父体1和父体2,调度顺序交叉操作的具体实施步骤如下:
执行步骤F1:随机产生一个11到20之间的正整数,其为14;
执行步骤F2:生成子体1:子体1的前14个基因g1,…,g14来自于父体1,后6个基因来自于父体2的调度顺序列表中删除基因值等于父体1中第11、12、13、14个基因值后的基因列表;如表4所示;
执行步骤F3:生成子体2:子体2的前14个基因g1,…,g14来自于父体2,后6个基因来自于父体1的调度顺序列表中删除基因值等于父体2中第11、12、13、14个基因值后的基因列表;如表4所示;
执行步骤F4:输出子体1和子体2,操作结束;
表4
其中,遗传操作中各种变异操作的具体实施过程说明如下:
(1)基于层次的调度顺序列表变异MT1
不妨设ch1为要进行MT1操作的个体;
执行步骤G1:在ch1中,由于层次1、2内的所有任务在调度顺序列表中都是连续排列的且层内任务数量大于1,因此从中随机选择一个层次,其为2,转到步骤G2;执行步骤G2:从层次2中随机选择两个任务,其为t10和t5,在调度顺序列表中交换这两个任务,如表5所示;执行步骤G3:基于层次的调度顺序列表变异操作结束;
表5
(2)执行模式列表变异MT2
不妨设ch1为要进行MT2操作的个体;
执行步骤H1:从执行模式列表{g1,…,g10}中随机选择一位基因,其为g8;执行步骤H2:从任务8的执行模式中重新随机选择一个执行模式,其为模式2,则g8=2,如表6所示;执行步骤H3:执行模式列表变异操作结束;
基因 |
g<sub>1</sub> |
g<sub>2</sub> |
g<sub>3</sub> |
g<sub>4</sub> |
g<sub>5</sub> |
g<sub>6</sub> |
g<sub>7</sub> |
g<sub>8</sub> |
g<sub>9</sub> |
g<sub>10</sub> |
变异前 |
1 |
1 |
2 |
1 |
1 |
3 |
1 |
1 |
2 |
2 |
变异后 |
1 |
1 |
2 |
1 |
1 |
3 |
1 |
2 |
2 |
2 |
表6
(3)基于拓扑排序的调度顺序列表变异MT3
不妨设ch1为要进行MT3操作的个体;
执行步骤I1:从调度任务顺序列表{g11,…,g20}中随机选择一个基因,其为任务g16即任务4,执行步骤I2:由于在任务1至任务10中存在其父任务与子任务,故向前找到第一个父任务,其为任务g12即任务1,则位置值pos1=12+1=13,向后找到第一个子任务,其为任务g20即任务9,则位置值pos2=20-1=19。在g12和g20之间即[13,19]之间重新随机选择一个位置进行插入,其为g19,如表7所示;执行步骤I3:基于拓扑排序的调度顺序列表变异操作结束;
基因 |
g<sub>11</sub> |
g<sub>12</sub> |
g<sub>13</sub> |
g<sub>14</sub> |
g<sub>15</sub> |
g<sub>16</sub> |
g<sub>17</sub> |
g<sub>18</sub> |
g<sub>19</sub> |
g<sub>20</sub> |
变异前 |
3 |
1 |
2 |
10 |
8 |
4 |
5 |
6 |
7 |
9 |
变异后 |
3 |
1 |
2 |
10 |
8 |
5 |
6 |
7 |
4 |
9 |
表7
执行步骤9:对当代种群进行交叉变异操作形成新种群;
执行步骤9.1:令新种群为空;
执行步骤9.2:采用基于排序的轮赌法从当代种群中随机选择两个不同的个体作为父体,即:执行步骤9.2.1:对当代种群中的个体按优到劣即适应度值从小到大进行排序,获得每个个体的排序值:rk
1=10,rk
2=1,rk
3=2,rk
4=9,rk
5=8,rk
6=4,rk
7=6,rk
8=3,rk
9=5,rk
10=7;执行步骤9.2.2:令R=1+1/N=1.1,计算个体ch
1被选中的概率
同理A
2=0.148,A
3=0.135,A
4=0.069,A
5=0.076,A
6=0.111,A
7=0.092,A
8=0.122,A
9=0.101,A
10=0.083;执行步骤9.2.3:计算累计概率
执行步骤9.2.4:产生一个[0,1)的随机数,其为0.894,由于
因此选择ch
9作为第一个父体;执行步骤9.2.5:产生一个[0,1)的随机数,其为0.343,由于
且3≠9,因此选择ch
3作为第二个父体;步骤9.2.6:获得两个不同的个体ch
9和ch
3作为父体,个体选择操作结束。
执行步骤9.3:对父体ch9和ch3采用选中遗传操作中的交叉方法即调度顺序交叉操作生成两个子体ch′1={1,3,2,1,2,3,2,1,3,2;3,2,1,8,5,10,4,6,7,9}和ch′2={3,2,3,1,2,2,2,2,1,3;3,1,2,10,4,8,5,6,7,9};
执行步骤9.4:对子体ch′1进行选中遗传操作中的变异操作即执行模式列表变异操作,其变为ch′1={1,3,3,1,2,3,2,1,3,2;3,2,1,8,5,10,4,6,7,9},对子体ch′2进行选中遗传操作中的变异方法即执行模式列表变异操作,其变为ch′2={3,2,3,1,2,2,2,2,3,3;3,1,2,10,4,8,5,6,7,9};
执行步骤9.5:将经过交叉变异后的子体ch′1和ch′2加入到新种群NP中,由于NP的数量为2小于10,故转到步骤9.2;
……
这样不断重复执行步骤9.2至步骤9.5,直至|NP|=10,操作结束。
经交叉变异操作后形成的新种群的剩余个体为:
ch′3={1,1,2,1,2,3,2,1,3,2;3,2,1,10,4,8,5,6,7,9};ch′4={3,3,2,2,2,1,2,2,3,2;3,2,1,4,8,10,5,6,7,9};
ch′5={1,1,2,1,1,2,1,1,2,2;3,1,2,10,8,4,5,6,7,9};ch′6={1,3,2,1,2,2,2,1,3,2;3,2,1,10,4,8,5,6,7,9};
ch′7={2,3,1,2,2,1,2,2,3,2;3,2,1,4,8,10,5,6,7,9};ch′8={2,1,2,3,1,2,1,3,1,1;3,2,1,8,10,5,4,6,7,9};
ch′9={1,3,3,2,2,3,2,1,1,1;1,5,2,3,8,10,4,6,7,9};ch′10={3,2,3,1,2,2,1,2,1,3;3,1,2,8,5,6,7,4,9,10};
新种群NP={ch′1,ch′2,ch′3,ch′4,ch′5,ch′6,ch′7,ch′8,ch′9,ch′10}。
执行步骤10:采用FBI&D方法改进新种群中的所有个体并计算其适应度值,并更新遗传操作的适应度值;
新种群NP中的所有个体经过FBI&D改进后变为:
ch′1={1,3,3,1,2,3,2,1,3,2;1,5,2,3,6,7,4,9,10,8};ch′2={3,2,3,1,2,2,2,2,3,3;1,5,3,2,6,7,4,9,10,8};
ch′3={1,1,2,1,2,3,2,1,3,2;3,2,1,10,4,8,5,6,7,9};ch′4={3,3,2,2,2,1,2,2,3,2;3,2,1,4,8,10,5,6,7,9};
ch′5={1,1,2,1,1,2,1,1,2,2;3,1,2,10,8,4,5,6,7,9};ch′6={1,3,2,1,2,2,2,1,3,2;3,2,1,10,4,8,5,6,7,9};
ch′7={2,3,1,2,2,1,2,2,3,2;3,2,1,4,8,10,5,6,7,9};ch′8={2,1,2,3,1,2,1,3,1,1;3,2,1,8,10,5,4,6,7,9};
ch′9={1,3,3,2,2,3,2,1,1,1;1,5,2,3,8,10,4,6,7,9};ch′10={3,2,3,1,2,2,1,2,1,3;3,1,2,8,5,6,7,4,9,10};
其适应度值分别为:fit′1=32,fit′2=32,fit′3=112,fit′4=32,fit′5=101,fit′6=27,fit′7=108,fit′8=97,fit′9=26,fit′10=22;
根据新种群中所有个体的编码和适应度值更新第8组遗传操作的适应度值,取
ω=0.3,由于新种群所有个体的编码都是不同的,因此V
1=1;又由于当代种群中的最优个体的适应度值为26,个体平均适应度值为
新种群最优个体的适应度值为22,个体平均适应度值为
因此V
2=1;则
执行步骤11:从当代种群和新种群中从优到劣选出N个不同的个体形成下一代种群;
根据适应度值,选择当代种群的ch2,ch3,ch6,ch8,ch9和新种群的ch′1,ch′2,ch′6,ch′9,ch′10形成下一代种群,即GP={ch2,ch3,ch6,ch8,ch9,ch′1,ch′2,ch′6,ch′9,ch′10}。
执行步骤12:令下一代种群为当代种群,转到步骤7;
令CP=GP,则当代种群的所有个体为:
ch1={1,3,3,1,2,3,2,1,1,1;1,5,2,3,6,7,8,4,9,10};ch2={3,2,3,1,2,2,2,2,1,3;3,1,2,8,5,10,4,6,7,9};
ch3={2,3,2,2,2,1,2,2,3,2;3,2,1,4,8,10,5,6,7,9};ch4={1,2,3,2,1,1,2,1,3,3;1,5,3,2,6,7,4,9,10,8};
ch5={1,3,2,1,2,3,2,1,3,2;3,2,1,10,4,8,5,6,7,9};ch6={1,3,3,1,2,3,2,1,3,2;1,5,2,3,6,7,4,9,10,8};
ch7={3,2,3,1,2,2,2,2,3,3;1,5,3,2,6,7,4,9,10,8};ch8={1,3,2,1,2,2,2,1,3,2;3,2,1,10,4,8,5,6,7,9};
ch9={1,3,3,2,2,3,2,1,1,1;1,5,2,3,8,10,4,6,7,9};ch10={3,2,3,1,2,2,1,2,1,3;3,1,2,8,5,6,7,4,9,10};
其适应度值分别为:fit1=26,fit2=26,fit3=28,fit4=26,fit5=32,fit6=32,fit7=32,fit8=27,fit9=26,fit10=22;转到步骤7。
执行步骤7:判断是否满足进化终止条件,如满足,则转到步骤13,否则转到步骤8;
终止条件设为连续GG=20代最优个体没有改进;由于只迭代进化到第二代,没有满足迭代终止条件,因此转到步骤8。
执行步骤8:基于值的轮赌法选择一组遗传操作;
基于值的轮赌法选择一组遗传操作的过程如下:执行步骤8.1:根据适应度值计算各组遗传操作被选中概率A
i,
A
1=0.159,A
2=0.159,A
3=0.064,A
4=0.159,A
5=0.159,A
6=0.064,A
7=0.096,A
8=0.108,A
9=0.032;执行步骤8.2:计算累计概率
执行步骤8.3:产生一个[0,1)之间的随机数,其为0.721,由于
因此选择第6组遗传操作,即执行模式交叉和基于拓扑排序的调度顺序列表变异;选择遗传操作结束。
执行步骤9:对当代种群进行交叉变异操作形成新种群;
执行步骤9.1:令新种群为空;
执行步骤9.2:采用基于排序的轮赌法从当代种群中随机选择两个不同的个体,其为ch8和ch9;
执行步骤9.3:对父体ch8和ch9采用选中遗传操作中的交叉方法即执行模式交叉操作生成两个子体ch′1={1,3,2,2,2,3,2,1,1,1;3,2,1,10,4,8,5,6,7,9}和ch′2={1,3,3,1,2,2,2,1,3,2;1,5,2,3,8,10,4,6,7,9};
执行步骤9.4:对子体ch′1进行选中遗传操作中的变异操作即基于拓扑排序的调度顺序列表变异操作,其变为ch′1={1,3,2,2,2,3,2,1,1,1;3,2,1,10,4,8,5,6,7,9},对子体ch′2进行选中遗传操作中的变异操作即基于拓扑排序的调度顺序列表变异操作,其变为ch′2={1,3,3,1,2,2,2,1,3,2;1,5,2,3,8,6,10,4,7,9};
执行步骤9.5:将经过交叉变异后的子体ch′1和ch′2加入到新种群NP中,由于NP的数量为2小于10,故转到步骤9.2;
……
这样不断重复执行步骤9.2至步骤9.5,直至|NP|=10,操作结束。
经交叉变异操作后形成的新种群的剩余个体为:
ch′3={3,2,3,2,1,1,2,1,3,3;3,2,1,8,5,10,4,6,7,9};ch′4={1,2,3,1,2,2,2,2,1,3;1,5,2,3,6,7,4,9,10,8};
ch′5={1,3,2,1,2,2,2,2,3,3;3,2,1,10,4,8,5,6,7,9};ch′6={3,2,3,1,2,3,2,1,3,2;1,5,3,2,6,7,4,9,10,8};
ch′7={3,2,3,1,2,3,2,1,3,2;3,1,2,8,5,6,7,4,10,9};ch′8={1,3,3,1,2,2,1,2,1,3;1,2,3,5,6,7,4,9,10,8};
ch′9={3,2,3,1,2,2,2,2,1,1;3,1,2,8,5,10,6,4,7,9};ch′10={1,3,3,2,2,3,2,1,1,3;1,5,2,3,10,4,6,7,9,8};
新种群NP={ch′1,ch′2,ch′3,ch′4,ch′5,ch′6,ch′7,ch′8,ch′9,ch′10}。
执行步骤10:采用FBI&D方法改进新种群中的所有个体并计算其适应度值,并更新遗传操作的适应度值;
新种群NP中的所有个体经过FBI&D改进与解码后变为:
ch′1={1,3,2,2,2,3,2,1,1,1;3,2,1,10,4,8,5,6,7,9};ch′2={1,3,3,1,2,2,2,1,3,2;1,5,2,3,8,6,10,4,7,9};
ch′3={3,2,3,2,1,1,2,1,3,3;3,2,1,8,5,10,4,6,7,9};ch′4={1,2,3,1,2,2,2,2,1,3;1,5,2,3,6,7,4,9,10,8};
ch′5={1,3,2,1,2,2,2,2,3,3;3,2,1,10,4,8,5,6,7,9};ch′6={3,2,3,1,2,3,2,1,3,2;1,5,3,2,6,7,4,9,10,8};
ch′7={3,2,3,1,2,3,2,1,3,2;3,1,2,8,5,6,7,4,10,9};ch′8={1,3,3,1,2,2,1,2,1,3;1,3,2,5,10,8,6,4,7,9};
ch′9={3,2,3,1,2,2,2,2,1,1;3,1,2,8,5,10,6,4,7,9};ch′10={1,3,3,2,2,3,2,1,1,3;1,5,2,3,10,4,6,7,9,8};
其适应度值分别为:fit′1=26,fit′2=27,fit′3=31,fit′4=21,fit′5=27,fit′6=37,fit′7=37,fit′8=18,fit′9=26,fit′10=26;
根据新种群中所有个体的编码和适应度值更新第6组遗传操作的适应度值,取
ω=0.3,由于新种群所有个体的编码都是不同的,因此V
1=1;又由于当代种群中的最优个体的适应度值为22,个体平均适应度值为
新种群最优个体的适应度值为18,个体平均适应度值为
因此V
2=1;则
OprFit6=0.8×0.400+0.2×(0.3×1+0.7×1)=0.520。
执行步骤11:从当代种群和新种群中从优到劣选出N个不同的个体形成下一代种群;
根据适应度值,选择当代种群的ch1,ch2,ch4,ch9,ch10和新种群的ch′1,ch′4,ch′8,ch′9,ch′10形成下一代种群,其中即GP={ch1,ch2,ch4,ch9,ch10,ch′1,ch′4,ch′8,ch′9,ch′10}。
执行步骤12:令下一代种群为当代种群,转到步骤7;
令CP=GP,则当代种群的所有个体为:
ch1={1,3,3,1,2,3,2,1,1,1;1,5,2,3,6,7,8,4,9,10};ch2={3,2,3,1,2,2,2,2,1,3;3,1,2,8,5,10,4,6,7,9};
ch3={1,2,3,2,1,1,2,1,3,3;1,5,3,2,6,7,4,9,10,8};ch4={1,3,3,2,2,3,2,1,1,1;1,5,2,3,8,10,4,6,7,9};
ch5={3,2,3,1,2,2,1,2,1,3;3,1,2,8,5,6,7,4,9,10};ch6={1,3,2,2,2,3,2,1,1,1;3,2,1,10,4,8,5,6,7,9};
ch7={1,2,3,1,2,2,2,2,1,3;1,5,2,3,6,7,4,9,10,8};ch8={1,3,3,1,2,2,1,2,1,3;1,3,2,5,10,8,6,4,7,9};
ch9={3,2,3,1,2,2,2,2,1,1;3,1,2,8,5,10,6,4,7,9};ch10={1,3,3,2,2,3,2,1,1,3;1,5,2,3,10,4,6,7,9,8};
其适应度值分别为:fit1=26,fit2=26,fit3=26,fit4=26,fit5=22,fit6=26,fit7=21,fit8=18,fit9=26,fit10=26;转到步骤7。
……
这样不断重复步骤7至步骤12,直到进化终止条件满足,即连续20代最优个体没有改进,当代种群为:
ch1={2,3,3,3,1,1,1,1,1,3;1,3,5,2,4,10,8,6,7,9};ch2={3,3,3,2,1,2,2,3,1,1;1,3,5,2,6,8,7,4,9,10};
ch3={2,3,3,3,1,1,1,3,1,3;1,3,5,2,4,10,8,6,7,9};ch4={2,3,3,2,1,2,1,3,2,2;1,3,5,2,6,8,7,4,9,10};
ch5={2,3,3,2,1,2,2,3,1,1;1,3,5,2,6,8,7,4,9,10};ch6={1,3,2,3,1,2,2,1,1,3;1,3,2,5,6,10,7,8,4,9};
ch7={1,3,2,3,1,2,1,1,1,3;1,3,2,5,4,8,6,7,10,9};ch8={2,3,3,2,3,2,1,3,1,3;1,3,5,2,4,10,8,6,7,9};
ch9={2,3,3,2,3,2,1,3,2,2;1,3,5,2,4,10,8,6,7,9};ch10={2,3,3,2,1,2,1,3,3,2;1,3,5,2,6,8,7,4,9,10};
其适应度值分别为:fit1=17,fit2=25,fit3=18,fit4=22,fit5=21,fit6=20,fit7=16,fit8=19,fit9=24,fit10=23;
执行步骤13:如果当代种群中的最优个体为可行个体,那么输出最优个体对应的调度方案,及其项目执行时间ms=fJ+1=max{fj|tj∈PRJ+1},否则该问题无可行调度方案;
当代种群中最优的个体为ch7={1,3,2,3,1,2,1,1,1,3;1,3,2,5,4,8,6,7,10,9},其为可行个体,对应的项目执行时间为ms7=16,对应的调度方案如表8所示。
表8
上述实施例只是本发明的较佳实施例,并不是对本发明技术方案的限制,只要是不经过创造性劳动即可在上述实施例的基础上实现的技术方案,均应视为落入本发明专利的权利保护范围内。