一种用于物流优化的类遗传方法

文档序号:6573098阅读:185来源:国知局
专利名称:一种用于物流优化的类遗传方法
技术领域
本发明涉及一种类遗传方法,特别涉及一种用于物流优化的类遗传方法,其中的染色体由头部和躯干部两部分构成,根据这种的染色体定义其相应的类交叉、类变异、类逆转等遗传操作及适应度,由此能够用它来求解广义旅行商问题,并可以同时实现对常规旅行商问题的求解。
背景技术
一般旅行商(traveling salesman problem,TSP)和广义旅行商(generalizedtraveling salesman problem,GTSP)问题是两类应用范围十分广泛的组合优化问题,其中GTSP是比TSP更为复杂的一类问题。广义旅行商最早是由Henry-Labordere,Saksena and Srivastava等人在计算机记录平衡和福利机构的访问顺序背景下提出的一种组合优化问题。GTSP可以描述为假定存在完全加权图G=(V,E,W),其中V=(v1,v2,…,vn)是v≥3的顶点集;V被分割成可能有部分重合的m组,即V1,V2,…,Vm,其中|Vj|≥1,j=(1,2,…,m)且V=∪j=1mVj;]]>E={eij|vi,vj∈V}是边集;W={wij|wij≥0,wij=0,i,j∈N(n)}是成本集,寻找经过所有的组且成本最小的Hamiltonian回路的问题被称为GTSP。为了叙述的方便,我们有时也称W为成本矩阵,此时有W=(wij)n×n。目前有两个版本的GTSP(1)每组仅有一个顶点在回路中被访问,如图1所示,也称E-GTSP,(2)每组至少有一个顶点在回路中被访问如图2所示。
包括神经网络和遗传算法的计算智能方法是求解组合优化问题的一种有效工具,并且已经被广泛地用于求解TSP。但到目前为止,有关计算智能方法在GTSP求解上的理论与应用研究仍然非常罕见。普通整数编码的GA在求解TSP时具有直观,易操作,执行效率高等优点,因此使得它在求解TSP上的理论和应用都得到了深入细致的研究。但是由于GTSP中一般每组的顶点数都大于1,按照原有的思路,基于常规染色体的GA可以确定各组的访问次序,却无法确定每组被访问的顶点,因此使得已有的GA算法在求解GTSP时失去了原有的优势,GA在求解GTSP上暂时陷入了困境。

发明内容
本发明的目的是提供一种用于物流优化的类遗传方法,该方法利用一般遗传算法中染色体的结构,并且基于这种新的染色体提出了类遗传算法即方法,该方法不需要GTSP向TSP的转化,不需要成本矩阵满足三角不等式,因此极大地简化了求解过程,提高了求解效率。而且它能够以统一的模式来求解TSP、GTSP与TSP-GTSP混合问题。该方法的提出使得基于GA的求解方法能够有效地处理机械加工中的某些问题,以及物流优化的问题,极大地促进了GA在GTSP求解中的应用。
该方法针对广义旅行商问题,首先设计了一种类染色体,它由头部和躯干部两部分组成,其中头部的基因用以确定超顶点在当前回路中被访问的顶点;躯干部分的基因用来确定广义顶点的一条GTSP回路。这样在把类染色体解码成实际的回路时,就能够很容易的得到合法GTSP回路,而不需要进行附加的修正,在有效地提高了计算效率的同时,又可以保持群体中基因片段的多样性,有助于优良个体的产生。本发明设计的类染色体结构的特殊性使得常规遗传操作不再适用,因此本文提出了新的遗传操作方案——基于类染色体的遗传算法(类遗传方法)。模拟实验结果表明,本发明提出的类遗传方法可以有效地求解广义旅行商问题即物流优化问题,和已有方法比较,类遗传方法具有运行速度快的优势,并且对部分测试问题可以获得最优解,大部分测试问题的结果与最优解的误差在8%以内。


图1为每组中仅有一个顶点在回路中被访问的GTSP示意图。
图2为每组至少有一个顶点在回路中被访问的GTSP示意图。
图3为本发明类染色体模式图。
图4为本发明TSP与GTSP混合实例的示意图。
图5为本发明类染色体实例1示意图。
图6为本发明类染色体实例2示意图。
图7为本发明类染色体实例1对应的GTSP回路示意图。
图8为本发明类染色体实例2对应的GTSP回路示意图。
图9为本发明群体初始化算子流程图。
图10为本发明类交叉算子流程图。
图11为本发明类变异算子流程图。
图12为本发明逆转基因位示意图。
图13为本发明类逆转算子流程图。
具体实施例方式
1、相关定义定义1以v1,v2,…,vn方式表示的图G=(V,E,W)中的顶点统称为原始顶点。
定义2若|Vj|>1(j∈N(m)),则称组Vj为超顶点。
定义3若vi∈Vj且|Vj|=1(j∈{1,2,…,m}),则称顶点vi(i∈{1,2,…,n})为散点。
定义4若原始顶点属于某一超顶点,则称它是该超顶点的一个元素。
定义5超顶点和散点统称为广义顶点。
定义6包含所有广义顶点的Hamilton回路称为GTSP回路。
定义7若GTSP回路满足每个原始顶点至多访问一次,则称之为合法GTSP回路。
定义8若包含所有广义顶点的Hamilton回路不是合法GTSP回路,则称之为非法GTSP回路。
2、类染色体按照顶点数目对分割后的组V1,V2,…,Vm进行详细的区分,由上面的定义2,3,可以把原来的组数m分解成两部分,即m=m^+m~,---(1)]]>其中 是超顶点的个数, 是散点的个数,我们称m^≠0]]>且m~≠0]]>且的GTSP问题为TSP-GTSP混合问题,记所有超顶点分别为u1,u2,···,um^,---(N1)]]>其中ui={ui1,ui2,…,uik},(N2)ki(i∈N(m^))]]>表示第i个超顶点所包含元素的数目,uil[l∈N(ki)]表示第i个超顶点中的第l个元素,也称l为uil在超顶点ui内的序号,并记所有散点分别为u~1,u~2,···,u~m~,---(N3)]]>把这些超顶点和散点按照u1,u2,···um^,u~1,u~2,···u~m~---(N4)]]>的顺序排列,同时按照(N4)的顺序记所有广义顶点为w1,w2,···,wm^+m~.---(N5)]]>广义顶点与超顶点和散点的关系为wk=uk1≤k≤m^u~k-m^m^+1≤k≤m^+m~,k∈N(m^+m~).---(2)]]>因此,也称超顶点ui(i=1,2,···,m^)]]>为第i个广义顶点,称散点u~i(i=1,2,···,m~)]]>为第 个广义顶点,易知,广义顶点的个数为 即原来组的数目m,注意到同一原始顶点可能属于多个超顶点,因此有不等式
n≤m~+Σi=1m^ki---(3)]]>成立。
本发明设计的类染色体的模式如图3所示,该染色体分为两部分第一部分含有 个等位基因,称为头部;第二部分含有 个等位基因,称为躯干部;当0<i≤m^]]>时,第i个基因位于类染色体的头部。该基因存放的是第i个超顶点中被访问顶点在超顶点内的序号l[l∈N(ki)](见记号(N2)),当m^<i≤m^+(m^+m~)]]>时,第i个基因位于类染色体的躯干部,该基因存放的是广义顶点的序号k[k∈N(m^+m~)],]]>此时,由(2)式可知若k满足k-m^≤m^,]]>则该基因代表的是第 个超顶点,即 若k满足k-m^>m^,]]>则该基因代表的是第 个散点,即 在进行类染色体解码的时候,躯干部分的基因确定了广义顶点的一条GTSP回路;头部的基因用以确定超顶点在当前回路中被访问的顶点;若记H={h|h=[h(1),h(2),···h(m^)],h(i)∈N(ki),i∈N(m^)},---(4)]]>其中h=[h(1),h(2),···h(m^)]]]>是一个有限序列,h(i)表示第i个超顶点中的某一个元素的序号,则H是类染色体头部所有可行基因片段构成的集合;若记B={b|b=∏(m)} (5)其中b=∏(m)=[b1,b2,…,bm]是1,2,…,m的一个全排列,则b表示一个GTSP回路,因此B是类染色体躯干部所有可行基因片段构成的集合;若记所有GTSP回路所对应的类染色体的集合为D,则D={x|x=hb,h∈H,b∈B},(6)其中x=hb表示由H,B中的基因片段组合而成的类染色体。
以具有20个元素的顶点集V={1,2,…,20}为例,设其部分顶点分成如下三组V1={1,2,3,4,12,13,15,17}, (7)
V2={3,4,6,7,16,19}, (8)V3={8,9,10,11},(9)散点分别为5,14,18,20,如图4所示,此时,有u1={u1,1,u1,2,u1,3,u1,4,u1,5,u1,6,u1,7,u1,8}u2={u2,1,u2,2,u2,3,u2,4,u2,5,u2,6},(10)u3={u3,1,u3,2,u3,3,u3,4}u~1=5,u~2=14,u~3=18,u~4=20]]>其中u1,1=1,u1,2=2,u1,3=3,u1,4=4,u1,5=12,u1,6=13,u1,7=15,u1,8=17u2,1=3,u2,2=4,u2,3=5,u2,4=6,u2,5=16,u2,6=19,u3,1=8,u3,2=9,u3,3=10,u3,4=11u~1=5,u~2=14,u~3=18,u~4=20]]>超顶点内原始顶点可以按任意顺序排列,但是推荐按照降序的方式排列;同样散点的排列也推荐按照降序的方式进行,此时,有m^=3,m~=4,]]>即类染色体的头部有3(m^=3)]]>个基因,躯干部有7(m^+m~=7)]]>个基因;为了更清楚地对类染色体加以解释说明,这里特别设计了两个类染色体的实施例,令h1=h2=[3,1,2], (11)b1=[3,5,6,1,4,2,7],(12)b2=[3,5,6,4,1,2,7],(13)由此可以得到两个类染色体,分别为x1=h1b1, (14)x2=h2b2.(15)其结构可以形象地用图5和图6表示,相应的GTSP回路分别如图7和图8所示。下面以x1为例介绍类染色体的解码过程。该类染色体头部的基因是3,1,2,它们分别代表超顶点u1中被访问的是u1,3,u2中被访问的是u2,1,u3中被访问的是u3,2。躯干部的基因是3,5,6,1,4,2,7,它们代表了7个广义顶点的一条回路a1w3→w5→w6→w1→w4→w2→w7→w3,a2:u3→u~2→u~3→u1→u~1→u2→u~4→u3,]]>当基因值不大于 时,相应的广义顶点是超顶点;当基因值大于 时,相应的广义顶点是散点,因此按照上面的解码规则,该染色体表示的回路应该是a3:u3,2→u~2→u~3→u1,3→u~1→u2,3→u~4→u3,2,]]>用原始顶点表示为a4v9→v14→v18→v3→v5→v3→v20→v9即最后的GTSP回路为a59→14→18→3→5→3→20→9.
同理,按照上面的解码过程,类染色体x2所对应的上述5种形式的回路分别为b1w3→w5→w6→w4→w1→w2→w7→w3,b2:u3→u~2→u~3→u~1→u1→u2→u~4→u3,]]>b3:u3,2→u~2→u~3→u~1→u1,3→u2,1→u~4→u3,2,]]>b4v9→v14→v18→v5→v3→v3→v20→v9,b59→14→18→5→3→3→20→9.
回路a4,a5中v3和v5之间存在一个闭合的回路,其中一部分在图中用点线表示,回路b4,b5中v3上存在一条访问自身的路径,这两种情况下v3都被访问了两次。在图中起点与终点相同的边被称为环,在图8中用虚线表示的就是一个v3上的环,这两种情况的出现都是由于超顶点u1和u2之间存在重叠部分所致;由成本矩阵的定义可知环的成本为0,因此x1的成本必然大于x2的成本,在把类染色体解码成实际的回路时,去掉所有由于超顶点重叠而产生的环,就可以得到合法GTSP回路。
基于类染色体的遗传算法—类遗传方法为了使得该方法容易为应用GA的研究者所接受,在类遗传方法的设计上,本发明继续沿用常规遗传算法的基本框架,但是在遗传操作的实现上,染色体结构的特殊性使得类遗传方法与常规GA具有明显的不同之处,下面给出该方法的实现步骤a.群体初始化算子P初始化算子P用来产生给定规模的初始群体,它是一个二元随机算子,作用的两个变元分别是H,B,其结果是类染色体集合D的一个子集。若记P为一个群体,P的初始化可以表示为P=PN(H,B), (16)其中PN是规模为N的群体的初始化算子,其作用流程如图9所示。
b.类交叉算子C为了完成交叉操作,产生新的染色体,本文定义了类交叉算子 它是一个二元随机算子,作用的变元是类染色体集合D中的元素,若x,y∈D,则x,y在C的作用下可产生一对染色体(x′,y′)=C(x,y), (18)其中x’,y’是C在同一次作用下(即交叉基因片段相同)分别以x,y为母体产生的两个字代染色体,由于C是随机算子,因此一般情况下,若(x1′,y1′)=C(x,y), (19)(x2′,y2′)=C(x,y), (20)
并不能保证x1′=x2′, (21)y1′=y2′ (22)成立。当且仅当交叉算子C随机选择的两个交叉基因位完全相同时,才有(21)、(22)两式成立。
假设x=hxbx,y=hyby,算子C的作用流程如图10所示,该类交叉算子的作用类似于普通GA中典型的两点交叉操作,即在染色体上随机选择两个交叉基因位,记为i1,i2(不妨设i1<i2),i1=random(m^+(m^+m~)),]]>i2=random(m^+(m^+m~)),]]>于是,若i1>m^,]]>则交叉操作发生在躯干部,因为躯干部相当于一个长度为 的普通染色体,因此这种情况下算子C的作用等价于在普通染色体bx,by上的交叉操作,此时由于去掉了父代染色体的头部基因片段,需要平移交叉基因位的序号,即i1⇐i1-m^,---(N6)]]>i2⇐i2-m^.---(N7)]]>在新的交叉基因位确定的片段上进行常规的交叉操作,记为bxby→(bx′,by′), (N8)其中bx′,by′∈B。然后将bx′,by′分别与x,y的头部基因片段组合,即得到代表相应的GTSP回路的子代染色体,记为x′=hxbx′. (23)y′=hyby′. (24)
若i2≤m^,]]>则类交叉操作完全发生在头部,这时类交叉算子只是交换交叉片段上的基因,记为hxhy→(hx′,hy′), (N9)其中hx′,hy′∈H。然后把hx′,hy′分别与x,y的头部基因片段组合,即得到代表相应的GTSP回路的子代染色体,记为x′=hx′bx. (25)y′=hy′by. (26)若i1≤m^]]>且i2>m^,]]>则可看作是上面两个类交叉操作的组合,一个发生在由 和i2确定的基因片段上,另一个发生在由i1,和 确定的基因片段上;按照上面的方式分别进行这两个交叉操作,然后把相应的新产生的头部和躯干部基因片段组合就得到代表GTSP回路的子代染色体,因此,两个广义子代染色体可以分别记为x′=hx′bx′, (27)y′=hy′by′. (28)c.类变异算子M为了增加染色体基因片段的多样性,本发明以插入变异的遗传操作模式定义了类变异算子 它是一元随机算子,作用的变元是类染色体集合D中的元素。若x∈D,则x在M的作用下可产生一个新染色体x′=M(x).(30)类似于类交叉算子C,由于M是随机算子,故一般情况下,若x在类变异算子M的两次作用下产生的变异个体分别为x1′=M(x), (31)x2′=M(x).(32)不能保证有x1′=x2′.(33)当且仅当变异算子M随机选择的预备基因和插入基因位都完全相同时,才有(33)式成立,这对于随机算子M来说概率是非常小的。
假设x=hxbx,且hx=[h(1),h(2),···h(m^)],---(34)]]>bx=[b(1),b(2),···b(m^+m~)],---(35)]]>则算子M的作用流程如图11所示,该类变异算子执行操作类似于普通GA中插入变异的遗传操作,即首先在类染色体上选择一个预备基因作为待插入的基因,假设该预备基因的基因位是i=random(m^+(m^+m~))]]>与普通变异遗传操作不同的是若i>m^,]]>则该预备基因在类染色体的躯干部,并且可以确定是bx的第 个分量,把bx中预备基因后面的基因依次向前移动一个基因位,生成临时基因片段bx′′=[b(1),b(2),···b(i-m^-1),b(i-m^+1),···,b(m^+m~)].---(36)]]>接下来在长度为 的临时基因片段bx″上随机选择一个插入基因位s=random(m^+m~-1),---(37)]]>这与常规的插入变异操作类似,只是插入基因位的选择限制在由躯干部生成的临时基因片段上,得到预备基因和插入基因位之后,变异算子先把插入基因位b(s)后面的基因依次后移一个基因位,并把 插在b(s)的后继基因位上,记变异算子M作用后产生的新类染色体为x′=hxbx′,(38)其中bx′=[b(1),b(2),···,b(i-m^-1),]]>b(i-m^+1),···,b(s),b(i-m^),b(s+1),···,b(m^+m~)]---(39)]]>若i≤m^,]]>则该预备基因在类染色体的头部,并且可以确定是hx的第i个分量h(i)。此时,无需继续选择插入基因位,用在{1,2,…,ki}内随机选择的整数替换预备基因即可,变异算子作用后产生的新类染色体为x′=hx′bx,(40)其中hx=[h(1),h(2),···,h(i-1),random(ki),h(i+1),···h(m^)].---(41)]]>d.类变异算子R为了提高类遗传方法的收敛速度,本文设计了类逆转算子 它是一元随机算子,作用的变元也是类染色体集合D中的元素。若x∈D,则x在R的作用下产生一个新染色体x′=R(x). (43)同样类似于类变异算子M,一般情况下,若x在类逆转算子R的两次作用下产生的变异个体分别为x1′=R(x),x2′=R(x),不能保证有x1′=x2′.(44)当且仅当类逆转算子R随机选择的两个逆转基因位完全相同时,才有(44)式成立。与类变异算子M不同的是,R仅对类染色体的躯干部分施行逆转操作。假设随机选择的两个逆转基因位分别为i1,i2(不妨设i1<i2),如图12所示,则算子R的作用流程如图13所示。
类似于常规逆转操作,算子R首先在bx上选择两个逆转基因位i1,i2i1=random(m^+m~),---(45)]]>i2=random(m^+m~)---(46)]]>如果b(i1),b(i2)中存在超顶点,则下面成本计算中涉及b(i1),b(i2)的地方,都是对该超顶点在当前回路中被访问的原始顶点而言。记g1=d(b(i1),b(i2))+d(b(i1+1),b(i2+1)),(47)g2=d(b(i1),b(i2+1))+d(b(i1+1),b(i2)),(48)如果g2<g1,则把b(i1+1)到b(i2)片段上基因的顺序逆转,得到bx′=[b(1),···,b(i1)b(i2),b(i2-1),]]>···,b(i1+2),b(i1+1),b(i2+1),···,b(m^+m~)],---(49)]]>然后产生新的类染色体x′=hxbx′. (50)否则,不做任何操作。
e.适应度本发明中适应度函数采用类似于普通GA在求解TSP问题时所用适应度函数的形式,仍然取线性定标,其形式为f(x)=αm^+m~A/T(x),---(51)]]>其中x∈D,α为预先设定的常数, 和 分别是超顶点和散点的个数,A是包含顶点集V的最小正多面体的边长,当V是二维欧氏几何意义下的点集时,A就是包含所有顶点的最小正方形的边长,T(x)是目标函数,即实际GTSP回路的访问成本,其形式为;T(x)T(hx⊕bx)=d(b(1),b(m^+m~))+Σi=2m^+m~d(b(i),b(i-1)).---(52)]]>这里需要注意的是在GTSP中不是所有的原始顶点都被包含在当前的回路中,超顶点成本的计算指它在当前回路中被访问的原始顶点与其它顶点之间的访问成本。
权利要求
1.一种用于物流优化的类遗传方法,其特征在于至少包括如下步骤步骤(1)构造类染色体,类染色体对分组信息和被访问的顶点信息编码;步骤(2)定义类交叉算子/操作完成类染色体的交叉任务;步骤(3)定义类变异算子/操作完成类染色体的变异任务;步骤(4)类逆转算子/操作完成类染色体的逆转任务;步骤(5)类适应度函数完成类染色体的评价任务。
2.根据权利要求1所述的一种用于物流优化的类遗传方法,其特征在于通过类染色体对广义旅行商问题中的分组信息和被访问的顶点信息同时进行编码。
3.根据权利要求2所述的一种用于物流优化的类遗传方法,其特征在于所述的类染色体由两部分编码串组成,其中一部分编码串具有与分组书相关的位数;另一部分编码串具有与被访问的两类顶点相关的编码位数。
4.根据权利要求1所述的一种用于物流优化的类遗传方法,其特征在于所述的类交叉操作的过程至少包括交叉区间在头部时,执行一类交叉方案;交叉区间在躯干时,执行一类交叉方案;交叉区间包含头部和躯干编码位时,执行一类交叉方案。
5.根据权利要求1所述的一种用于物流优化的类遗传方法,其特征在于所述的类变异操作的过程至少包括变异位在头部时,执行一类变异方案;变异位在躯干时,执行一类变异方案。
6.根据权利要求1所述的一种用于物流优化的类遗传方法,其特征在于所述的类逆转操作的过程至少包括逆转区间在躯干时,执行一类逆转方案;逆转区间在头部时,执行一类逆转方案。
全文摘要
本发明公开了一种用于物流优化的类遗传方法,该方法提出一种由头部和躯干部两部分组成的染色体模型—类染色体,其中头部的基因用以确定各组在当前回路中被访问的顶点;躯干部分的基因用来确定一条GTSP回路,这样就能够得到有效的GTSP回路,而不需要进行附加的修正。在有效地提高计算效率的同时,又可以保持群体中基因片段的多样性。根据该染色体定义其相应的类交叉类变异类逆转等遗传操作—统称为类遗传操作,在类染色体和类遗传操作的基础上,采用传统遗传算法的流程就可以求解物流优化问题,该方法不需要GTSP向TSP的转化,不需要成本矩阵满足三角不等式,能够以统一的模式求解TSP,GTSP与TSP-GTSP混合问题。
文档编号G06Q10/00GK101051361SQ20071005565
公开日2007年10月10日 申请日期2007年5月18日 优先权日2007年5月18日
发明者梁艳春, 吴春国, 杨金辉, 吴春连, 孙亮 申请人:吉林大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1