1、,一、问 题,二、假 设,1)通信站点集合V0是整数坐标的平面点集;2)两点间的距离为直角折线距离,线路费用正比于 线路长度;3)虚设站位于格点(即坐标为整数的点)上。,例如:设有三个通讯站,直角坐标分别为a(0,0),b(4,3),c(6,0)。两点间的距离为直角折线距离。以这三个站为顶点,距离为边权的加权完全图见左下图。右下图是增加了一个“虚设站”后,得到的费用更少的树图。,三、问题分析,Z2:平面上所有格点的集合;V0:Z2中给定的n个通信站点的集合Vs;Vs:Z2中任意s个点的集合,且VsV0=。点集V0的最小Steiner树:以V=VsV0为顶点集的完全图Ks+n,其中的边uv的权取
2、为点u与v之间的直角折线距离,得到一个赋权完全图,其最小生成树记为TVs。对任意非负整数s和任意点集Vs,所有TVs 中权最小者记为T*,T*即为最小Steiner树。T*中不属于V0的点称为Steiner点。特别,s=0时的TV0称为V0的最小支撑树。,三、问题分析,1.基本概念,(1)T*中包含多少个Steiner点(即虚设站);(2)Steiner点的位置如何;(3)是否可能建立有效算法,以及如何解决该问题。,三、问题分析,2.几个小问题,定理1 设T*是n个给定点的所有最小Steiner树中Steiner点个数s最小的,则sn-2。,三、问题分析,3.已有的结论,定理2 Steiner
3、点位于给定通信站点的x坐标线,y坐标线形成的格点上。,推论:最多有n2-n=n(n-1)个Steiner点的可能位置,定理3 求n个点的最小Steiner树的问题是NPC问题。,令C,从mn(n-1)个可能的Steiner点位置中任取s个点,s=0,1,2,.,n-2,将取到的s个点与给定的n个点合并,构造以这n+s个点为顶点的赋权完全图G(图中边权取为两点间的直角折线距离)用Kruskal算法,求G的最小生成树Ts及其费用Cs。若CsC,则 C Cs,T Ts.从m个点中另取s个点重复2),3)直到穷尽m个点中所有可能的点组合。,四、问题求解算法,1.穷举法,共需进行,四、问题求解算法,1.
4、穷举法,次迭代。若m不大,此法可行,否则若m大,此法将无效。对给定的9个通讯站,m可减少到31个,从而,共需进行3572224次迭代,设每次迭代需要0.017秒,3572224次迭代需花大约17个小时。,定理4 设V0=vi(xi,yi):i=1,2,.,n,对每个yk,k=1,2,.,n,记,四、问题求解算法,1.穷举法,则在下述四类区域中不含Steiner点:,1.穷举法,定理4 说明四个角点位置也不可能有Steiner点。如图,星号点是给定的9个通讯站点。根据定理2,共有n(n-1)=72个Steiner点的可能位置。再根据定理4,区域D1,D2,D3和D4内不含Steiner点。由此可
5、确定,对给定的9个点,只有31个可能的Steiner点位置(图中小圆圈所示的31个位置),m=31。,四、问题求解算法,(1)求给定的n个点上的最小支撑树,记录其费用;(2)取一个可能的Steiner点加入,求最小支撑树;(3)若该树的费用小于当前的最小费用,则记录此 树并更新费用;(4)重复(2)到(4)直到已有n-2个Steiner点,或任何剩余的Steiner点加入都不能减少费用。,2.构造型启发算法,四、问题求解算法,(1)输入给定的n个通信站点的坐标;(2)计算最小直角折线支撑树;(3)找重边,则重边的端点便是Steiner点的侯选点;(4)分别计算出每个侯选点作为Steiner点加
6、入后所 减少的费用,该费用称为此点的价值;(5)把最大价值的侯选点也作为一个给定点,重复(2)到(5)直到没有正价值的侯选点。,3 贪婪算法,(1)给定点集连同一些虚设点一起构成点集Z,求Z的最小支撑树,其费用记为C,置k=0;(2)产生新的点集S 从以下几种方式中随机选择一种:加入一个新的虚设点 去掉一个存在的虚设点 移动一个现有的虚设点到一个随机的允许位置(3)确定新点集S的最小支撑树,其费用记为C1,若C1C,则更新C为C1,更新当前点集Z为S,当k=M时停止,否则k=k+1,转(2);若C1C,则仅以一定的概率(可取为exp-(C1-C)/T(k),其中T为一控制参数,称为温度,随k的增大而减小,比如取T(k)=T(0)/k,称为冷却方案)接受S作为当前点集Z,转(2)。,4.模拟退火法,五、计算结果,
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1