- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
动态规划求解TSP问题
动态规划求解TSP问题 货郎担问题(Traveling Salesman Problem) 设有n个城市, 其中每两个城市之间都有道路相连, 城市i和城市j之间的距离为Cij。从某城市出发周游所有城市, 经过每个城市一次且仅一次, 最后回到出发地, 求总行程最短的周游路线。对于一般的情况可以假设两城市之间往返距离不相等。在此例中, 为了简化问题, 设往返距离相等, 即Cij=Cji。 这就是所谓的货郎担问题(TSP)。这个问题与最短路径问题不同, 最短路径问题以当前所在的位置作为状态变量, 而在货郎担问题中, 状态变量除了要指明当前所在位置外, 还要指明已经经过哪几个城市。 由于货郎担问题经过的路线是一条经过所有城市的闭合回路, 因此从哪一点出发是无所谓的, 因此不妨设从城市1出发。 动态规划模型构造 阶段k:已经历过的城市个数, 包括当前所在的城市。k=1, 2, …, n, n+1, k=1表示出发时位于起点, k=n+1表示结束时回到终点。 状态变量:xk=(i, Sk), 其中i表示当前所在的城市, Sk表示尚未访问过的城市的集合。很明显 S1={2, 3, …, n}, …, Sn=Sn+1=? 其中?表示空集。并且有 xn=(i, ?), i=2, 3, …, n, xn+1=(1, ?) 动态规划模型构造 决策变量:dk=(i, j), 其中i为当前所在的城市, j为下一站将要到达的城市。 状态转移方程:若当前的状态为 xk=(i, Sk) 采取的决策为 dk=(i, j) 则下一步到达的状态为 xk+1=T(xk, dk)=(j , Sk\{j}) 动态规划模型构造 阶段指标:vk(xk, dk)=Cij 最优指标函数:fk(xk)=fk(i, Sk) 表示从城市i出发, 经过Sk中每个城市一次且仅一次, 最后返回城市1的最短距离。 终端条件:fn+1(xn+1)=fn+1(1, ?)=0 实例——五个城市的货郎担问题 求解步骤如下: 对于k=5, 有 f5(i, ?)=min{Cij+f6(1, ?)}=Ci1, d5?(i, 1), i=2, 3, 4, 5 f5(i, ?)的值列表如下: 对于k=4, 有 f4(i, S4)=min{Cij+f5(j, S5)}, j?S4, f4(i, S4)的值列表如下: 对于k=3, 有 f3(i, S3)=min{Cij+f4(j, S4)}, j?S3, f3(i, S3)的值列表如下: 对于k=2, 有 f2(i, S2)=min{Cij+f3(j, S3)}, j?S2, f2(i, S2)的值列表如下: 对于k=1, 有 f1(i, S1)=min{Cij+f2(j, S2)}, j?S1, f1(i, S1)的值列表如下: 由状态x1=(1, {2, 3, 4, 5})开始回朔, 得到 即得到以下四条回路: ①?②?⑤?③?④?① ①?⑤?②?③?④?① ①?④?③?②?⑤?① ①?④?③?⑤?②?① 其中(1)和(4)是同一条回路, (2)和(3)是同一条回路, 这两条回路的图示如下: 容易验证, 两条回路的长度都是15。 算法分析 0: f1(v1, S1=V) 1: f2(vi1, v-{vi1}) 2: f3(vi2, v-{vi1, vi2}) …… k: fk(vik, v-{vi1, vi2, …, vik}) 从V中选出vi1, vi2, …, vik, C(n-1, k)有种方案, 再从中选出vik, 有k种方案, 共有kC(n-1, k)种方案。 空间复杂性 需要的空间数量为: 时间复杂性 计算fk(vik, v-{vi1, vi2, …, vik})要做k-1次加法 计算中所需的加法和比较的次数等于: * * 4 3 5 2 1 5 2 3 3 4 1 6 2 5 7 5 5 2 4 7 3 2 2 f5(i, ?) i 4 5 3+f5(4, ?)=3+2=5 ? 3 {4} (5, {4}) 3 13 6+f5(3, ?)=6+7=13 ? 6 {3} (5, {3}) 2 3 1+f5(2, ?)=1+2=3 ? 1 {2} (5, {2}) 5 8 3+f5(5, ?)=3+5=8 ? 3 {5} (4, {5}) 3 11 4+f5(3, ?)=4+7=11 ? 4 {3} (4, {3}) 2 7 5+f5(2, ?)=5+2=7 ? 5 {2} (4, {2}) 5 11 6+f5(5, ?)=6+5=11 ? 6 {5} (3, {5}) 4 6 4+f5(4, ?)=4+2=6 ? 4 {4} (3, {4})
文档评论(0)