基于蚁群遗传的分布式约束优化问题求解方法及其应用
技术领域
本发明涉及约束优化方法,特别涉及基于蚁群遗传的分布式约束优化问题求解方法。
背景技术
DCOP(Distributed Constraint Optimization Problems,DCOP)是多智能体系统(Multi-agent System,MAS)的基本框架,其中智能体之间需要一起合作决策来优化一个全局目标。DCOP模型已经成功地被应用到各种实际问题中,如传感器网络、资源分配等。现有许多求解DCOP的算法,算法根据求解目标的不同,可分为两大类:完备算法和非完备算法。完备算法通过遍历问题的全部解空间得到最优解,典型的基于搜索的完备算法包括SynchBB[7]、ADOPT[8]、BnB-ADOPT[9]等,基于推理的完备算法DPOP[10]则采用了动态规划技术来求解DCOP。然而由于DCOP是NP-hard问题,但对于大规模问题,完备算法的时间和空间成本过大,因此采用非完备算法,在牺牲解的一些精确性下,可大幅的提升时间效率和降低占用空间。在非完备算法中,基于局部搜索策略算法是研究热点,这类算法包括DSA,MGM,MGM2等,然而这些算法寻优时,无法保证解的质量。为提高局部搜索算法的求解质量,ALS,LSGA等框架被提出用于求解DCOP。
近来,许多群体智能优化思想也逐渐被用于求解DCOP,例如蚁群优化思想。相比传统算法,加入群体智能优化思想后,算法能够寻优到质量更好的解。Ziyu Chen等人提出基于蚁群优化思想的DCOP求解算法ACO_DCOP(An Ant-based Algorithm to SolveDistributed Constraint Optimization Problems,ACO_DCOP),该算法利用蚂蚁信息素标记期望解的路径,搜索解空间中有希望得到更好的解的区域。然而由于蚁群算法的信息素衰减机制,算法可能会陷入局部最优。
发明内容
针对现有技术存在的上述问题,本发明的要解决的技术问题是:如何有效地避免求解DCOP时陷入局部最优。
为解决上述技术问题,本发明采用如下技术方案:基于蚁群遗传的分布式约束优化问题求解方法,包括如下步骤:
S100:用一个四元组<A,X,D,F>来表示分布式约束优化问题,其中:
A={a1,...,an}是agent的集合;
X={x1,...,xm}是变量的集合,m≤n;
D={D1,...,Dm}是值域的集合,每个xi的值域为Di,每个Agent从值域Di中取值为变量xi赋值, 表示xi的第t个值;
F={f1,...,fp}是约束代价函数的集合,约束是从任意k个变量的赋值组合到一个非负代价的映射;
设一个agent只控制一个变量且所有的约束关系都是二元关系,则DCOP的解表示为:
将DCOP表示为约束图,在约束图中,每个节点都代表一个agent,每两个节点之间的连线代表这两个节点之间存在约束关系;
S200:对蚁群算法和遗传算法的参数初始化,将约束图转化为广度优先生成的伪树,一个节点对应一个agent,节点与节点之间的连线代表约束,伪树的值消息传递方向为上层节点传给下层节点,同层节点根据优先级或节点命名字母顺序来传递,消息传递方向即agent的优先级和蚂蚁的前进方向;
预设xi取与xi’取时约束的代价和信息素浓度,其中i=1,2,…n,i'=1,2,…n,i≠i't=1,2,…T;
S300:采用蚁群算法对n个agent进行一次遍历,如果当前ai已经从其所有较高优先级的邻居处接收到值消息,则ai对每只蚂蚁在该xi对应的值域中根据值选择概率选择一个值,根据当前取值,计算ai与其所有高优先级邻居取值之间的代价和,与之前算的进行累加,得到当前蚂蚁的代价;
S400:生成随机概率q,若q小于扩展概率p,则满足扩展解空间转至S500,否则转至S900;
S500:设蚁群算法中共有K只蚂蚁,则S300中每只蚂蚁对n个agent取值得到集合则认为是一条染色体,通过S300针对K只蚂蚁则得到K条染色体,将该K条染色体作为遗传算法的父代染色体;
S600:计算S500中每条染色体的适应值,计算每条染色体的适应值在所有染色体适应值之和中的占比,将K条染色体中适应值最大的染色体直接复制保存到第一代子代染色体集合中,然后计算每条染色体的选择概率,每条染色体的选择概率等于该条染色体的适应值与所有染色体适应值之和之比,根据选择概率采用轮盘赌选择新的父代染色体集合k-1条染色体;
轮盘赌选择:计算出每条染色体的累计选择概率,p[k]称为染色体k的累计概率,即前k-1条染色体的选择概率之和;生成K-1个随机数令k=1,在新的父代染色体集合中,按照染色体的排序,当一条染色体的累计概率大于等于则将该染色体复制保存到第一代子代染色体集合中,并令k=k+1,继续在新的父代染色体集合中,按照染色体的排序选择,当一条染色体的累计概率大于等于大于则将该染色体复制保存到第一代子代染色体集合中,依次重复直至k=K-1时停止,此时选择了K-1条第一代子代染色体;
S700:染色体交叉、变异:
染色体交叉:
设置交叉概率,对第k个第一代子代染色体生成一个交叉随机概率,qx表示第x个第一代子代染色体的交叉随机概率,x=1,3,...K-1,当qx小于交叉概率时,则将第x个第一代子代染色体和第x-1个第一代子代染色体对应的交叉位置进行交叉,所述交叉位置随机生成;
需要进行染色体交叉的第一代子代染色体完成染色体交叉后复制保存到新的第一代子代染色体集合中,不需要染色体交叉的第一代子代染色体复制保存到新的第一代子代染色体集合中,第一代子代染色体集合中染色体称为新的第一代子代染色体;
染色体变异:
设置变异概率,对于新的第一代子代染色体上的n个位置分别生成一个变异随机概率,表示第k条新的第一代子代染色体第x个位置的变异随机概率,当小于变异概率时,则将第k条新的第一代子代染色体第x个位置上的取值进行变异,变异方法为从值域中随机选择一个值对该位置重新赋值;
需要进行染色体变异的新的第一代子代染色体完成染色体变异后复制保存到第二代子代染色体集合中,不需要进行染色体变异的新的第一代子代染色体复制保存到第二代子代染色体集合中,第二代子代染色体集合中的染色体称为第二代子代染色体;
S800:判断遗传算法是否迭代结束,若达到遗传算法运行的最大迭代次数表示满足终止条件,则输出当前第二代子代染色体集合中的第二代子代染色体并转至S900,否则采用第二代子代染色体更新父代染色体并转至S600;
S900:更新路径上的信息素浓度和局部信息下文预估值;
当小于扩展概率p时,使用第二代子代染色体集合中的每条染色体的代价更新信息素浓度,否则使用K只蚂蚁集合中的每个条染色体的代价更新信息素浓度,使用K个染色体对每个agent和其邻居间约束的信息素浓度进行更新;
对每个agent更新局部信息下文预估值,对于取值di∈Di,当变量xi=di,计算当前agent与其低优先级邻居节点之间产生的约束代价的平均值,再将当前未更新的预估值和所求平均值再次求平均得到更新的预估值;
S1000:判断蚁群算法是否迭代结束,若达到蚁群算法运行的最大迭代次数表示满足终止条件,输出当前代价最小的染色体对应的代价和n个变量的取值,否则返回步骤S300。
作为改进,所述S300中蚂蚁概率的计算方法参见公式(7):
式中pk,i(di)表示蚂蚁概率,α为信息素因子权重,β为启发式因子权重,θk,i(d′i)表示选择值d′i的信息素浓度,ηk,i(d′i)表示选择值d′i的启发式值,θk,i(di)为信息素因子,ηk,i(di)为启发式因子:
信息素因子θk,i(di)计算公式参见公式(8):
式中Hi为该节点高优先级节点的集合,两个节点间约束的信息素τij(di,Vk,j)、Vk,j表示高优先级节点aj给蚂蚁k选取的值;启发式因子ηk,i(di)计算公式参见公式(9):
式中costij(di,Vk,j)为xi=di,xj=Vk,j时的约束fij产生的代价,当xi=di时,esti(di)是对ai的低优先级邻居的最小代价合的估计,计算公式为公式(10):
其中costij(di,dj)表示xi=di,xj=dj时约束产生的代价;
LB为当前节点ai与其高优先级、低优先级邻居的最小代价合,计算公式为公式(11):
作为改进,所述S400中扩展概率p采用公式(12)计算:
式中maxCycle为最大迭代轮次,curCycle为当前所在轮次。
作为改进,所述S600中计算每条染色体的适应值的方法如下:
其中costk为第k条染色体的代价大小,为所有染色体的代价之和。
作为改进,所述S900中计算每条第二代子代染色体的代价的方法如下:
对于第k第二代子代染色体,将每个agent和其邻居之间约束对应的代价相加,记得第k第二代子代染色体的代价costk。
作为改进,所述S900中对第k个第二代子代染色体中每个agent和其邻居间约束的信息素进行更新的过程如下:
更新过程包括信息素的增加和/或减少,信息素增加时的更新方法参见公式(15):
采用公式(15)的方法对第k个第二代子代染色体中每个agent和其邻居间约束的信息素进行更新k=1,2,…n:
式中Δk为信息素增量,τij(Vk,i,Vk,j)表示ai为蚂蚁k取值为Vk,i,aj为蚂蚁k取值为Vk,j时对应的路径上的信息素浓度,δk,ij为ai和aj之间的信息素加权结果,计算公式参见公式(16):
式中λ是DCOP中的约束个数,costij(Vk,i,Vk,j)表示ai为蚂蚁k取值为Vk,i,aj为蚂蚁k取值为Vk,j时的代价值,cost(Vk,*)表示蚂蚁k的总代价;
式中min cost为第二代子代染色体中的最小代价,costk表示第k条染色体的代价,costk′表示第k′条染色体的代价,为所有第二代子代染色体代价之和的平均值;
信息素减少时的更新方法参见公式(17):
τij(di,dj)=(1-ρ)τij(di,dj)+ρτ0 (17)
式中τij(di,dj)表示ai为蚂蚁k取值为di,aj为蚂蚁k取值为dj时路径上的信息素浓度,j∈Hi,τ0表示初始信息素浓度,τ0=3,0<ρ<1为蒸发率,信息素浓度范围为[τmin,τmax]。
作为改进,所述S900中对每条第二代子代染色体中每个agent的低优先级邻居的最小代价合的估计进行更新的过程如下:首先当xi=di时,计算ai与其低优先级邻居之间产生的约束代价之和的平均值,然后将esti(di)上次迭代求得的值与当前求得的均值进行平均求解,得到的值更新esti(di)。
基于蚁群遗传的分布式约束优化问题求解方法的应用,采用上述的基于蚁群遗传的分布式约束优化问题求解方法应用于城市突发事件紧急救援问题;
给定问题交通路网G(C,E),C表示路网中的节点,E表示两节点间的连线,即路段,同时将城市突发事件可通行路径规划构建为DCOP模型,模型具体描述如下:
A={car1,…,carn}为agent的集合,一辆车表示一个agent;
X={x1,...,xm}为变量的集合,一个agent控制一个变量xi;
D={S1,...,Sm}为值域的集合,每个变量xi的值域为Si,Si中为可行路径的集合,一条可行路径是变量xi的一个取值;
F={f1,...,fp}是约束条件,fij为两辆车行驶路径之间的约束,即两条可行路径之间的路径重合度小于30%,由于每两辆车之间的行驶路径要满足约束,则抽象出的DCOP模型的约束图为全连接约束图。
作为改进,通过如下目标函数求解所述城市突发事件的DCOP模型中xi取与xi’取时约束的代价,具体步骤如下:
1)路段行驶速度,采用式(2)中的Underwood模型计算车辆行驶速度:
式中vf为路段h上的最大速度,为路段h上的车辆行驶速度,c为路段h上的实际车流密度,cm为路段h上的最大车流密度;
2)路径耗时,式(3)为任意一条正常路段的耗时代价costi:
式中si为路段h的长度;
事故影响范围的耗时代价采用BPR路阻函数确定,式(4)为任意一条存在故障的路径的耗时代价:
式中normal为m处正常路段的集合,break为n处故障路段的集合,为路段k处的实际行驶时间,tk为路段k处的自由流的行驶时间,qk为路段k处的交通流量,Ck表示路段k处的通行能力,路段k受到突发事件影响时,设影响因素为服从均匀分布的随机变量φk(0<φk<1),路段k处的最大车流密度为ck,则路段k实际通行能力为φkck,参数a,b为常数;sh表示无故障路段h的长度,表示无故障路段h上的行驶速度;
设路径1的长度为len1,路径2的长度为len2,len1<len2,路径1和路径2之间的重合部分长度为opart,设置路径1和路径2之间的重合率小于30%,则路径1和路径2间的约束为f12:opart/len1<30%,式(5)为每两辆车选出的可行路径之间的约束代价:
式中costi为路径i的耗时代价,costj为路径j的耗时代价,满足约束时的代价为两条路径耗时代价相加,否则取一个极大的值。
相对于现有技术,本发明至少具有如下优点:
本发明提出了基于蚁群遗传的分布式约束优化问题求解方法简称AG_DCOP,该方法通过将蚁群优化思想和遗传算子的搜索优势相结合,可以有效地避免ACO_DCOP陷入局部最优,从而扩大算法对解空间的搜索,得到质量更好的解。
AG_DCOP将蚁群优化思想和遗传算子的搜索优势结合起来,增加动态变化的扩展概率p,以触发遗传算子对蚁群遍历结果进行扩展优化。扩展概率p随着迭代轮次增加而逐渐减小,当产生的随机数q小于扩展概率p,则对蚁群生成的解进行交叉变异。较大的扩展概率p在算法前期进一步打开了解空间,有助于算法在更大的解空间搜索期望解,防止蚁群陷入局部最优。而在迭代后期,扩展概率p减小则有助于保持当前找到的较好的解。
附图说明
图1为DCOP实例图,图1(a)约束图和图1(b)约束矩阵。
图2为本发明方法的流程图。
图3为不同测试问题各算法运行30次的统计结果比较,图3(a)为稀疏随机DCOP问题上的30次统计结果,图3(b)为稠密随机DCOP问题上的30次统计结果,图3(c)为稀疏无尺度问题上的30次统计结果,图3(d)为稠密无尺度问题上的30次统计结果,图3(e)为加权图着色问题上的30次统计结果。
图4为不同算法在随机DCOPs上的寻优性能比较,图4(a)稀疏随机DCOPs,图4(b)稠密随机DCOPs问题。
图5为不同算法在无尺度问题上的寻优性能比较,图5(a)稀疏无尺度问题,图5(b)稠密无尺度问题。
图6为不同算法在加权图着色问题上的寻优性能比较。
图7为实施例2中DCOP约束图。
具体实施方式
下面对本发明作进一步详细说明。
实施例1:参见图2,基于蚁群遗传的分布式约束优化问题求解方法,包括如下步骤:
S100:用一个四元组<A,X,D,F>来表示分布式约束优化问题,其中:
A={a1,...,an}是agent的集合;
X={x1,...,xm}是变量的集合,m≤n;
D={D1,...,Dm}是值域的集合,每个xi的值域为Di,每个Agent从值域Di中取值为变量xi赋值, 表示xi的第t个值;
F={f1,...,fp}是约束代价函数的集合,约束是从任意k个变量的赋值组合到一个非负代价的映射;
设一个agent只控制一个变量且所有的约束关系都是二元关系,则DCOP的解表示为:
将DCOP表示为约束图,在约束图中,每个节点都代表一个agent,每两个节点之间的连线代表这两个节点之间存在约束关系。如图1所示DCOP实例,其中分别为图1(a)约束图和图1(b)约束矩阵。
S200:对蚁群算法和遗传算法的参数初始化,将约束图转化为广度优先生成的伪树,一个节点对应一个agent,节点与节点之间的连线代表约束,伪树的值消息传递方向为上层节点传给下层节点,同层节点根据优先级或节点命名字母顺序来传递,消息传递方向即agent的优先级和蚂蚁的前进方向;该步骤中所述的优先级的确定方法为,上层高于下层,同层中如果定义从左向右传播,在左侧几点优先级高于右侧节点。该步骤中所述的“约束图转化为广度优先生成的伪树”的方法为现有方法,此时不再赘述。
预设xi取与xi’取时约束的信息素浓度,其中i=1,2,…n,i'=1,2,…n,i≠i't=1,2,…T;,即同时xi第t个取与xi’第t’个取时,两个节点之间的连线对应的信息素浓度。
关于xi取与xi’取时约束的代价,在求解DCOP模型时可以预先设定,也可以通过设定目标函数来求解,实施例2则是通过目标函数的方式来求解。
S300:采用蚁群算法对n个agent进行一次遍历,在每一轮迭代中,当ai接收到其高优先级节点的值消息时,它首先合并接收到的解集,ai对每只蚂蚁在该xi对应的值域中根据值选择概率选择一个值,根据当前取值,计算ai与其所有高优先级邻居取值之间的代价和,与之前算的进行累加,得到当前蚂蚁的代价。如果当前ai已经从其所有较高优先级的邻居处接收到值消息,则每只蚂蚁对每个agent在该agent对应的值域中根据蚂蚁概率选择一个值;该步骤中的邻居是指在伪树中与当前ai直接相连的所有个agent。具体的,所述S300中蚂蚁概率的计算方法参见公式(7):蚂蚁概率依赖于信息素因子和启发式因子:
式中pk,i(di)表示蚂蚁概率,α为信息素因子权重,β为启发式因子权重,θk,i(d′i)表示选择值d′i的信息素浓度,ηk,i(d′i)表示选择值d′i的启发式值。θk,i(di)为信息素因子,ηk,i(di)为启发式因子。
信息素因子θk,i(di)计算公式参见公式(8):
式中Hi为该节点高优先级节点的集合,两个节点间约束的信息素τij(di,Vk,j)、Vk,j对应的代价相关,Vk,j表示高优先级节点aj给蚂蚁k选取的值,信息素因子可使蚂蚁记住走过的路径,而启发式因子则可帮助蚂蚁探索新的路径。
启发式因子ηk,i(di)计算公式参见公式(9):
式中costij(di,Vk,j)为xi=di,xj=Vk,j时的约束fij产生的代价,当xi=di时,esti(di)是对ai的低优先级邻居的最小代价合的估计,计算公式为公式(10):
其中costij(di,dj)表示xi=di,xj=dj时约束产生的代价;
LB为当前节点ai与其高优先级、低优先级邻居的最小代价合,计算公式为公式(11):
S400:判断是否满足扩展解空间条件:生成随机概率q,若q小于扩展概率p,则满足扩展解空间转至S500,触发遗传算子机制,扩展解空间,否则转至S900。
具体的,所述扩展概率p采用公式(12)计算:
式中maxCycle为最大迭代轮次,curCycle为当前所在轮次。
S500:得到遗传算法初始染色体集合:设蚁群算法中共有K只蚂蚁,则S300中每只蚂蚁对n个agent取值得到集合则认为是一条染色体,通过S300针对K只蚂蚁则得到K条染色体,将该K条染色体作为遗传算法的父代染色体;基本蚁群算法中每只蚂蚁有编号,即1,2,3…这样的编号,因此每只蚂蚁对应的染色体的编号与该蚂蚁的编号相同。
S600:挑选染色体:计算S500中每条染色体的适应值,适应值越大,表示解对应的代价越小,则解的质量越好;计算每条染色体的适应值在所有染色体适应值之和中的占比,将K条染色体中适应值最大的染色体直接复制保存到第一代子代染色体集合中,然后计算每条染色体的选择概率,设每条染色体的选择概率等于该条染色体的适应值与所有染色体适应值之和之比,;。根据选择概率采用轮盘赌选择新的父代染色体集合k-1条染色体。
轮盘赌选择:计算出每条染色体的累计选择概率,p[k]称为染色体k的累计概率,即前k-1条染色体的选择概率之和。
将K条染色体中适应值最大的染色体直接复制保存到第一代子代染色体集合中,并将该条父代染色体去除,得到新的父代染色体集合。
生成K-1个随机数令k=1,在新的父代染色体集合中,按照染色体的排序,当一条染色体的累计概率大于等于则将该染色体复制保存到第一代子代染色体集合中,并令k=k+1,继续在新的父代染色体集合中,按照染色体的排序选择,当一条染色体的累计概率大于等于大于则将该染色体复制保存到第一代子代染色体集合中,依次重复直至k=K-1时停止,此时选择了K-1条第一代子代染色体。
具体的,所述S600中计算每条染色体的适应值的方法如下:
其中costk为第k条染色体的代价大小,为所有染色体的代价之和。
S700:染色体交叉、变异:
染色体交叉:
设置交叉概率,交叉概率为经验值,对第k个第一代子代染色体生成一个交叉随机概率,qx表示第x个第一代子代染色体的交叉随机概率,x=1,2,...K-1,当qx小于交叉概率时,第x个第一代子代染色体和第x-1个第一代子代染色体对应的交叉位置进行交叉,所述交叉位置随机生成。
需要进行染色体交叉的第一代子代染色体完成染色体交叉后复制保存到新的第一代子代染色体集合中,不需要染色体交叉的第一代子代染色体复制保存到新的第一代子代染色体集合中,第一代子代染色体集合中染色体称为新的第一代子代染色体。
对染色体采用单点交叉操作,根据交叉概率,对两个满足交叉概率的父代染色体随机生成交叉位置,将交叉位置后部分的基因进行交换,得到两个新的子代染色体,对新的到的自带染色体进行变异操作,对满足变异概率的基因值做变动。
染色体变异:
设置变异概率,交叉概率为经验值,对于新的第一代子代染色体上的n个位置【就是n个agent】分别生成一个变异随机概率,表示第k条新的第一代子代染色体第x个位置的变异随机概率,当小于变异概率时,则将第k条新的第一代子代染色体第x个位置上的agent的取值进行变异,变异方法为从要变异的agent对应的值域中随机选择一个值对该agent重新赋值.
需要进行染色体变异的新的第一代子代染色体完成染色体变异后复制保存到第二代子代染色体集合中,不需要进行染色体变异的新的第一代子代染色体复制保存到第二代子代染色体集合中,第二代子代染色体集合中的染色体称为第二代子代染色体.
S800:判断遗传算法是否迭代结束,若达到遗传算法运行的最大迭代次数表示满足终止条件,则输出当前第二代子代染色体集合中的第二代子代染色体并转至S900,否则采用第二代子代染色体更新父代染色体并转至S600;
S900:更新路径上的信息素浓度和局部信息下文预估值,优先级最低的agent计算信息素增量和更新的全局最优解,并将这两个消息通知给所有agent,计算每条第二代子代染色体的代价,方法如下:
当小于扩展概率p时,使用第二代子代染色体集合中的每条染色体的代价更新信息素浓度,否则使用K只蚂蚁集合中的每个条染色体的代价更新信息素浓度,使用K个染色体对每个agent和其邻居间约束的信息素浓度进行更新。
对每个agent更新局部信息下文预估值,对于取值di∈Di,当变量xi=di,计算当前agent与其低优先级邻居节点之间产生的约束代价的平均值,再将当前未更新的预估值和所求平均值再次求平均得到更新的预估值。
具体的:对于第k第二代子代染色体,将每个agent和其邻居之间约束对应的代价相加,记第k第二代子代染色体的代价costk。
对第k个第二代子代染色体中每个agent和其邻居间约束的信息素进行更新,k=1,2,…n,具体的更新过程如下:
更新过程包括信息素的增加和/或减少,信息素增加时的更新方法参见公式(15):
采用公式(15)的方法对第k个第二代子代染色体中每个agent和其邻居间约束的信息素进行更新k=1,2,…n:
式中Δk为信息素增量,τij(Vk,i,Vk,j)表示ai为蚂蚁k取值为Vk,i,aj为蚂蚁k取值为Vk,j时对应的路径上的信息素浓度,δk,ij为ai和aj之间的信息素加权结果,计算公式参见公式(16):
式中λ是DCOP中的约束个数,costij(Vk,i,Vk,j)表示ai为蚂蚁k取值为Vk,i,aj为蚂蚁k取值为Vk,j时的代价值。cost(Vk,*)表示蚂蚁k的总代价。
式中mincost为第二代子代染色体中的最小代价,costk表示第k条染色体的代价,costk′表示第k′条染色体的代价,为所有第二代子代染色体代价之和的平均值;
信息素减少时的更新方法参见公式(17):
τij(di,dj)=(1-ρ)τij(di,dj)+ρτ0 (17)
式中τij(di,dj)表示ai为蚂蚁k取值为di,aj为蚂蚁k取值为dj时路径上的信息素浓度,j∈Hi。τ0表示初始信息素浓度,τ0=3。0<ρ<1为蒸发率,信息素浓度范围为[τmin,τmax]。
对每条第二代子代染色体中每个agent的低优先级邻居的最小代价合的估计进行更新,过程如下:首先当xi=di时,计算ai与其低优先级邻居之间产生的约束代价之和的平均值,然后将esti(di)上次迭代求得的值与当前求得的均值进行平均求解,得到的值更新esti(di)。
S1000:判断蚁群算法是否迭代结束,若达到蚁群算法运行的最大迭代次数表示满足终止条件,输出当前代价最小的第二代子代染色体的代价和n个agent的值,否则返回步骤S300。
实施例2:基于蚁群遗传的分布式约束优化问题求解方法的应用,实施例1限定的基于蚁群遗传的分布式约束优化问题求解方法应用在城市突发事件紧急救援问题;
考虑到同一路段的相反方向车流量并不一致,给定问题交通路网G(C,E),C表示路网中的节点,E表示两节点间的连线,即路段,同时将城市突发事件可通行路径规划构建为DCOP模型,再利用提出的AG_DCOP算法求解该模型,以找到几条满足约束的最优路径集,作为紧急救援的最佳路径和备选路径。模型具体描述如下:
A={car1,...,carn}为agent的集合,一辆车表示一个agent;
X={x1,...,xm}为变量的集合,一个agent控制一个变量xi,因此agent可等同于变量;
D={S1,...,Sm}为值域的集合,每个变量xi的值域为Si,Si中为可行路径的集合,一条可行路径是变量xi的一个取值;
F={f1,...,fp}是约束条件,fij为两辆车行驶路径之间的约束,即两条可行路径之间的路径重合度小于30%,由于每两辆车之间的行驶路径要满足约束,则抽象出的DCOP模型的约束图为全连接约束图,参见图7所示。
对于从出发点到救援点的路径规划来说,最重要的是救援车辆要在尽可能短的时间内到达救援现场,然而突发事件可能会对某些路段产生一定的影响,如路段发生堵车,这会使得救援延迟。因此,对突发事件下的路径耗时进行考虑分析,对于单条路径,其耗时代价包括正常路段行驶耗时和路段上有突发事件造成的额外耗时。对于分布式约束优化问题来说,耗时代价则是几条相互之间满足约束的可行路径的耗时代价之和。
1)路段行驶速度。车辆行驶速度是影响路径耗时的主要因素。在道路上,车辆行驶速度主要受车流量的限制,因此考虑到这些因素,本发明采用式(2)中的Underwood模型计算车辆行驶速度:
式中vf为路段h上的最大速度,为路段h上的车辆行驶速度,c为路段h上的实际车流密度,cm为路段h上的最大车流密度。所述Underwood模型为现有技术。
2)路径耗时。计算单条路径耗时首先需要找出单条完整路径,本发明采用邻接表求得起点到终点的所有路径。式(3)为任意一条正常路段的耗时代价为路段长度与路段行驶速度之比,si为路段h的长度。
在可通行的故障路段上,根据事故路段影响范围,计算这一路段正常部分的行驶时间和事故影响路段加时。事故影响范围的耗时代价采用BPR路阻函数确定,式(4)为任意一条存在故障的路径的耗时代价:
式中normal为m处正常路段的集合,求得正常路段耗时代价之和。break为n处故障路段的集合,为路段k处的实际行驶时间,tk为路段k处的自由流的行驶时间。qk为路段k处的交通流量,Ck表示路段k处的通行能力,路段k受到突发事件影响时,假设影响因素为服从均匀分布的随机变量φk(0<φk<1)。路段k处的最大车流密度为ck,则路段k实际通行能力为φkck。参数a,b一般取a=0.15,b=4,sh表示无故障路段h的长度,表示无故障路段h上的行驶速度。
假设路径1的长度为len1,路径2的长度为len2,len1<len2,路径1和路径2之间的重合部分长度为opart,本发明设置两条路径之间的重合率小于30%。则两条路径间的约束为f12:opart/len1<30%。式(5)为每两辆车选出的可行路径之间的约束代价:
式中costi为路径i的耗时代价,costj为路径j的耗时代价,满足约束时的代价为两条路径耗时代价相加,否则取一个极大的值。在满足约束的情况下,求得5条可行路径作为备选,且可行路径上花费的时间代价最少,因此式(6)为该DCOP模型的解集。
实验结果与分析
为了测试本发明方法的寻优能力和稳定性,在现有软件平台上完成AG_DCOP本发明方法编写。使用多线程通信来模拟分布式环境,每个线程都表示一个agent,线程间的通信即表示agent之间的相互通信。使用ContentWriter问题生成器,自动生成几类通用测试问题。本发明采用随机DCOP问题(稠密问题和稀疏问题)、加权图着色问题和无尺度网络问题(稠密问题和稀疏问题)进行测试。问题的设置参数如下:
1)随机DCOP
Agent个数设置为70,变量值域大小为10,约束代价的取值范围为[1,100]。对于稀疏问题稠密度为p1=0.1,对于稠密问题稠密度为p1=0.6。
2)加权图着色问题
Agent个数设置为120,变量值域大小为3,约束代价的取值范围为[1,100]。问题稠密度p1=0.05。
3)无尺度网络问题
Agent个数设置为70,变量值域大小为10,约束代价的取值范围为[1,100]。稀疏问题中稠密度为,m1=10,m2=3稠密问题中稠密度为m1=10,m2=7。
为证明本发明方法的寻优能力和稳定性,实验对比了目前寻优能力较好的几类DCOP求解算法,ACO_DCOP、ALS_DSA(0.8)、MGM和LSGA_MGM2。为不失实验对比的公正性,对比算法的参数设置采用算法原文推荐值,本发明中由于测试问题的类型不同,每个问题适合的α,β,ρ参数值也有差异,本文的参数根据实验确定,如下:稀疏无尺度问题α=1,β=3,ρ=0.0015,其他问题α=2,β=3,ρ=0.0025。
将本发明方法终止条件设置为迭代1000次,根据ACO_DCOP推荐蚂蚁数量,对于稀疏随机DCOP和稀疏无尺度网络问题蚂蚁的数量设置为K=13,对于稠密随机DCOP、稠密无尺度网络问题和加权图着色问题中蚂蚁的数量设置为K=20。由于本发明方法结果具有随机性,每组问题做30次独立实验,取30次的统计结果做实验对比。
由图3(a)~图3(e)可知,在这5类通用测试问题上,5种算法得到的结果经统计都有基本一致的分布,MGM算法的性能是最差的,由MGM算法得到的解具有很大的代价,且解的质量差异较大。LSGA_MGM2得到的解质量较MGM有所提高,但和MGM相同的是求得的解质量不稳定,相较之下,ALS_DSA拥有更好的稳定性,但ACO_DCOP和AG_DCOP能求的更好的解,其中AG_DCOP在5种算法中得到的解质量最好,解之间的差异较小,这意味着AG_DCOP有更好的寻优性能和稳定性。
为测试AG_DCOP寻优性能,取本发明方法30次迭代平均值验证本发明方法的收敛效果,如图4到图6所示。
图4(a)和图4(b)表示本发明方法分别在稀疏随机DCOPs和稠密随机DCOPs上的寻优结果比较。实验表明,在稀疏随机DCOPs上,MGM算法快速收敛到了一个较差的解。LSGA_MGM2和ALS_DSA算法相比MGM算法性能有所提高,但在200轮迭代后,这两种算法陷入了局部最优状态。ACO_DCOP比上述三种算法的性能有明显的提高,但根据实验结果显示,大概迭代100轮后,ACO_DCOP就已经陷入了局部最优,在后面轮次的迭代中解的质量也没有得到显著的提高。最后,对于AG_DCOP,由于其前期在扩展解空间,虽然AG_DCOP的收敛速度没有ACO_DCOP快,但是解的质量比上述算法都要好。在迭代1000轮次后,AG_DCOP的解的质量比其他算法的解的质量提高了2%~18.3%。在稠密随机DCOPs上,由于稠密问题的约束较多,复杂性较高,AG_DCOP在前期探索解空间需要较长时间,收敛较慢,但在算法后期可收敛到质量更高的解。AG_DCOP的性能除了比ALS_DSA算法略差一点外,均要优于其他对比算法,解的质量提升了1.2%~2.0%。
图5(a)和图5(b)表示本发明方法分别在稀疏无尺度问题和稠密无尺度问题上的寻优结果比较。实验表明,在稀疏无尺度问题上,相比LSGA_MGM2、ALS_DSA和MGM三种算法,ACO_DCOP的算法性能明显更好,但随着迭代轮次增加,ACO_DCOP
在大概100轮次快速收敛后,在迭代后期,解的质量没有什么变化。图5(a)结果显示,AG_DCOP解的质量比上述算法都要好,且仍然有继续下降趋势。AG_DCOP求得的解质量比其他算法的解质量提高了3.0%~35.4%。在稠密无尺度问题上,MGM算法收敛较快,但得到的解质量最差。LSGA_MGM2算法提高了解的质量,但在迭代300轮之后也发生了停滞。ALS_DSA算法与上述两种算法相比,能得到更好的结果,收敛速度也更快,但得到的解质量没有ACO_DCOP好,然而该算法也很快发生了停滞。AG_DCOP在扩大解空间时,维持了得到更优解寻优状态,比上述所有算法的解质量高。在迭代结束后,AG_DCOP得到的解的质量比其他算法的解的质量提高了1.1%~8.5%。
图6表示本发明方法在加权图着色问题上的寻优结果比较。实验表明,在该问题上,本发明方法的性能差别较大,MGM的算法性能最差,LSGA_MGM2和ALS_DSA具有差不多的寻优能力,ACO_DCOP相较于上述两种算法,也极大的提高了解的质量,展现了显著的性能。但AG_DCOP算法所展现出来的性能更好,求得解的质量提高了21.7%~76.8%。
最后说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的宗旨和范围,其均应涵盖在本发明的权利要求范围当中。