1.一种改进帝国竞争算法解决柔性作业车间调度的方法,其特征在于,该改进的帝国竞争算法步骤如下:步骤1:参数设置,设置帝国竞争算法求解柔性作业车间调度问题的相关参数,包括:国家数量Npop、帝国主义国家数量Nimp、殖民地国家数量Ncol、迭代次数Niter,帝国内部同化概率Pcimp,帝国内部革命概率Pmimp,殖民地国家影响因子α,中立国群体数量为国家数量的10%;
其中,Npop=Nimp+Ncol,0
帝国竞争算法的终止条件为:若在还未达到迭代次数Niter就只剩一个帝国时,算法终止;否则,运行到迭代次数为止;
其中,国家数量Npop:国家数量Npop的取值为200;
帝国主义国家数量Nimp:帝国主义国家数量Nimp取值为20;
殖民地国家数量Ncol:殖民地国家数量Ncol的取值为180;
迭代次数Niter:迭代次数Niter为50;
帝国内部同化概率Pcimp,0
帝国内部革命概率Pmimp,0
殖民地国家影响因子α;0<α<1,取值为0.5;
步骤2:设计初始化方法产生初始国家群体,每一个国家代表一组柔性作业车间调度问题的可行方案,结合柔性作业车间调度问题特点设计两段式实数编码方式;
在初始化时,提出以下初始化方法;
1)全领域搜索:在所有工件的工序的加工机器选择中,保证最短加工机器先被选到而且保证加工机器上的工作负荷平衡;
具体执行步骤为:
a)设置一个长度为机器总台数的向量,向量上的每个位置记录对应机器上的总负荷初始值为0,称为负荷向量;
b)随机选择某个工件的第一道工序;
c)将该工序可选机器集中每个机器的加工时间和负荷向量中记录的对应机器的加工时间相加,从中选择最小的那台机器作为该工序的加工机器,并将当前机器的加工时间记录到负荷向量中;
d)选择当前工件的下一道工序,执行步骤c),直到当前工件的所有工序的加工机器选择完毕;
e)从工件集中删除该工件,然后执行步骤b)到d),直到全部工件被执行完毕;
2)局部领域搜索:保证一个工件的工序中优先加工时间最短或者说选择机器负荷最小的加工机器进行加工;
具体执行步骤为:
a)设置一个长度为机器总台数的向量,向量上的每个位置记录对应机器上的总负荷初始值为0,称为负荷向量;
b)随机选择某个工件的第一道工序;
c)将该工序可选机器集中每个机器的加工时间和负荷向量中记录的对应机器的加工时间相加,从中选择最小的那台机器作为该工序的加工机器,并将当前机器的加工时间记录到负荷向量中;
d)选择当前工件的下一道工序,执行步骤c),直到当前工件的所有工序的加工机器选择完毕;
g)将负荷向量中的所有值重置为0;
h)从工件集中删除该工件,然后执行步骤b)到g),直到全部工件被执行完毕;
3)随机搜索:为保证初始种群的多样性,使初始种群分散于解空间,一部分国家个体中的工序加工机器在工序可选机器集中随机选择;
具体执行步骤如下:
a)随机选择一个工件的第一道工序,从该工序的加工机器集中随机选择一个机器;
b)在当前工件下一道工序的加工机器集中随机选择一台;
c)重复执行b),直到所有工序执行完毕;
d)从工件集中删除当前工件,然后重复执行a)到c),直到所有工件执行完毕;
步骤3:通过成本函数,计算每个国家的成本值;
Cost=f(Country)=f(O1,O2,O3,…,OL);其中,O1、O2、O3、…OL代表工序;
所述的成本函数主要是计算每个国家个体转换为一个调度方案时,该调度方案的完工时间,在国家个体转换为调度方案时,首先需要将加工机器部分依据每个工序的加工机器集转换为对应的加工机器号,然后,依次读取加工工序部分,并且按照顺序安排到相应的机器上,直到最后一个工序安排完毕,计算出完工时间;
步骤4:产生帝国主义国家和殖民地国家,按照每个国家的成本值计算每个国家的势力大小,依据之前设定的帝国主义国家数量,将殖民地国家随机分配给帝国主义国家,形成Nimp个帝国,将最强的帝国的帝国主义国家个体保存到中立国中;
依据步骤3中得到的每个国家个体的成本值,按照由低到高的顺序进行排列,取前Nimp个成本低的国家作为帝国主义国家,那么后面的Ncol个国家就是殖民地国家;
然后,对Nimp个帝国主义国家进行规范化处理,得到每个帝国主义国家的相对势力:NCimp=round{pimp×Ncol}
其中,Cimp是cimp标准化代价,cimp是第imp个帝国主义国家的成本函数值,pimp是标准化势力大小,round是一个将小数四舍五入成整数的函数,NCimp是第imp个帝国主义国家的初始殖民地国家数量;
从Ncol个殖民地国家中随机选择相应个数的国家分配给各个帝国主义国家,国家势力相对强大的帝国主义国家被分配到的殖民地国家数量就会多,帝国主义国家和它所拥有的殖民地国家形成初始的Nimp个帝国;
步骤5:帝国内部进行同化操作,帝国内部的殖民地国家与帝国主义国家之间进行同化操作,使得殖民地国家不断向帝国主义国家移动;
在殖民地国家中选择一部分个体进行同化操作,选择步骤为:
1)随机产生与该帝国所属殖民地国家数量相等的向量 向量Rc中的每个变量服从[0,1]均匀分布;
2)向量Rc中的值小于帝国内部同化概率Pcimp的殖民地国家作为同化操作对象;
国家个体采用两段式表达方法,当殖民地国家与帝国主义国家进行信息交换时,分别对两个部分进行操作,确保同化操作后的国家仍是可行的;
加工机器部分:此部分必须保证国家个体表达式的先后顺序保持不变;
1)在[1L]之间随机产生一个整数r,r=rand(1,L);
2)在[1L]之间产生r个互不相等的整数组成的序列R;
3)按照序列R中的顺序,依次将对应位置上的数字替换掉殖民地国家加工机器部分表达式中的数字;
加工工序部分:将殖民地国家的加工工序部分与帝国主义国家的加工工序部分进行信息交换,更新殖民地国家的加工工序部分,按照下面的步骤进行操作:
1)将所有工件J={J1,J2,...,Jn}随机划分为两个工件集Jobset1和Jobset2;
2)随机选择其中一个工件集Jobset;
3)复制帝国主义国家中包含在工件集Jobset中的工件到新的殖民地国家,保持它们的位置和顺序;
4)将殖民地国家中不包含在工件集Jobset中的工件复制到新的殖民地国家中,保持它们的顺序;
步骤6:帝国内部进行革命操作,帝国内部的殖民地国家为防止同化作用造成过早收敛,需要进行革命操作;
在殖民地国家中选择一部分个体进行革命操作,殖民地国家选择步骤为:
1)随机产生与该帝国所属殖民地国家数量相等的向量 向量Rc中的每个变量服从[0,1]均匀分布;
2)向量Rc中的值小于帝国内部革命概率Pmimp的殖民地国家作为同化操作对象;
1)在加工机器部分,随机选择某个加工机器,然后用对应机器集中的其他机器代替它;
2)在加工工序部分,随机选择两个位置上的工序进行交换;
步骤7:帝国内部判断是否更换帝国主义国家,对各个帝国内部的国家进行成本计算,将成本最小的殖民地与其所属的帝国主义国家进行比较,如果比帝国的成本还低,就替换该帝国主义国家,而成为统治者,如果所有帝国中的最强帝国的势力比中立国中最弱的要好,就替换掉中立国中最弱的国家,更新中立国群体;反之,不更新;
步骤8:帝国之间的竞争操作,首先,势力最强的帝国占有势力最弱的帝国中的殖民地,使得强大的帝国更加强大,弱小的帝国更加弱小;
具体的操作步骤如下:
1)计算每个帝国的总成本函数值,也就是总的势力大小,包括帝国主义国家和所属的殖民地国家,计算公式为:其中,TCimp表示第imp个帝国的总成本值,f(imp)表示第imp个帝国主义国家的成本值,α是殖民地国家影响因子,其大小决定了殖民地国家对整个帝国势力的影响程度,且0<α<1;
2)依据上述1)中计算的每个帝国的总成本值,选择最弱的帝国中最弱的殖民地作为各个帝国间竞争的对象,势力越大的帝国越有可能占有该殖民地国家,每个帝国占有最弱殖民地国家的占有概率按照下式进行计算,其中,TCimp和NTCimp分别是第imp个帝国的总成本和标准化总代价,pimp是第imp个帝国占有殖民地的概率;
每个帝国的占有概率计算完毕后,形成一个概率向量P:
3)对形成的每个帝国的占有概率值进行处理;
随机生成一个与向量P同维的,且每个变量服从在[0,1]区间均匀分布的向量R,将向量P和R进行相减操作,产生向量D;
在向量D中,dk(0<k≤Nimp)是经过调整改进后的每个帝国的势力大小,将最弱的殖民地国家分配给D中最大值,也就是势力最强的帝国;
4)将中立国中势力最强的国家个体,替换掉最弱帝国中的帝国主义国家;
步骤9:弱势帝国的灭亡,删除掉没有殖民地的帝国,该帝国灭亡;
步骤10:计算每个国家成本;
步骤11:判断算法是否终止,依据参数中对算法停止条件的设定,判断算法是否终止,若算法终止,则输出运行结果;反之,算法还没有终止,则回到步骤5继续执行。