交叉操作通过基因组合产生新的染色体,通过多点交叉,可以改变产品服务中心和客户点的指派关系。对于多点交叉,多个交叉位置可无重复地随机选择,在交叉点之间的变量连续相互交换,产生新的后代。但是,为了避免非法解的大量出现,交叉和变异完成后需要对染色体进行基因修复,基于约束检查的交叉操作流程如图3-8所示,具体步骤如下:
步骤1 依据适应度值从种群中选择一对个体,并随机选择一条子染色体和若干交叉点进行交叉操作(两个母体选择同样的子染色体)。
图3-8 交叉操作流程
步骤2 按照交叉概率执行交叉操作,交换被选择部分的元素值,如图3-9所示。
图3-9 交叉操作示例(www.daowen.com)
步骤3 检查产生的新个体是否满足约束(7)和约束(8),也就是子个体上被交换的元素值在交换后是否等于该元素值对应的序号:
如果等于(如图3-9中子体1的最后一条子染色体上的第3个和第5个元素值),执行基因修复Ⅰ:
●假设子染色体t′上的第k个元素值等于该元素值的序号,表明在k点有一个产品服务中心(可能是新建的,也可能是原来就有的),需要把第t′+1到第s个子染色体的第k个元素值修改为k。也就是说,如果在某点有一个产品服务中心,该产品服务中心将一直存在,并且该点的服务由该产品服务中心提供。如果不等于,执行步骤4。
步骤4 检查该子个体的被交换元素值在交叉前是否等于该元素值的序号,如果等于的话,表明在交叉前在该客户点有一个产品服务中心,交叉后该产品服务中心不存在了(也就是一个产品服务中心交叉后被取消了),如图3-9中子体1的第一条子染色体上的第2个和第4个元素值,此时需要执行基因修复Ⅱ:
假设子染色体t′上的第k个元素值不再等于该元素值对应的序号,检查该子个体的从第1个至第t′个子染色体上的所有元素值是否等于第k个元素值,如果等于的话,把这些元素的值修改为该时期距离其最近的产品服务中心所在客户点的序号值,也就是从该时期的产品服务中心里选择一个距离其最近的产品服务中心为其提供服务。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。