- 1、本文档共14页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
xxxxxxxx大学
解决旅行售货商问题xxxxxxxxxxxxx院 系:xxxxxxxxxxxxxx学生姓名:xxxxxx学 号:xxxxxxxxx指导教师:xxxxxx2015年月5日摘要:
旅行商问题(TSP问题)时是指旅行家要旅行n个城市然后回到出发城市,要求各个城市经历且仅经历一次,并要求所走的路程最短。该问题又称为货郎担问题、邮递员问题、售货员问题,是图问题中最广为人知的问题。 动态规划 ( dynamic programming )算法 是解决 多阶段决策过程最优化问题 的一种常用方法,难度比较大,技巧性也很强。利用动态规划算法,可以优雅而高效地解决很多贪婪算法或分治算法不能解决的问题。
本次课程设计运用动态规划解决旅行售货员问题,动态规划的基本思想是:把求解的问题分成许多若干阶段或许多子问题,然后按顺序求解各子问题。前一子问题的解,为后一子问题的求解提供了有用的信息,在求解任一子问题时列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。通过图的关系矩阵来表示个城市之间的关系,二维数组表示顶点之间的距离关系,对子问题进行求解比较,最后得出所求结果。
关键字:旅行商问题 动态规划法 图 矩阵目录
第一章 绪论
1.1算法介绍
1.2算法应用
第二章 动态规划理论知识
2.1动态规划的基本思想
2.2动态规划设计步骤
第三章 旅行售货员问题3.1问题描述:旅行售货员问题
3.2算法设计内容
3.3算法分析
3.4流程图
第四章 物流配送网络
第五章 结论第一章 绪论
1.1算法介绍1.2算法应用第二章i出发,令d(i,V’)表示从顶点i出发经过V’中各个顶点一次且仅一次,最后回到出发点i的最短路径的长度,开始时,V’=V-{i},于是,旅行商问题的动态规划函数为:
d(i,V’) = min{cik + d(k,V’-{k})} (k∈V’)1)
d(k,{}) = cki (k ≠ i)2)
简单来说,就是用递归表达:从出发点0到1号点,假设1是第一个,则剩下的路程就是从1经过剩下的点最后回到0点的最短路径. 所以当V’为空的时候, d(k,{}) = cki (k ≠ i), 找的是最后一个点到0点的距离.递归求解1之后,再继续求V’之中剩下的点,最后找出min.
如果按照这个思想直接做,对于每一个i都要递归剩下的V中所有的点,所以这样的时间复杂度就近似于N!,其中有很多重复的工作.
可以从小的集合到大的集合算,并存入一个二维数组,这样当加入一个节点时,就可以用到之前的结果,如四个点的情况:
邻接矩阵:
node 0 1 2 3 0 ? 5 3 2 1 5 ? 7 9 2 3 7 ? 12 3 2 9 12 ? 动态填表:
表中元素代表第i个节点经过V集合中的点最后到0点的最短值.如果有多个值,取其中最小的一个.
i\Vj 0 1 2 3 1,2(取min) 1,3(取min) 2,3(取min) 1,2,3(取min) 0c[0][i]+d[i][v’]=21 1 5 ? 10 11{c[1][2]+
d[2][{3}]=21,
c[1][3]+
d[3][{2}]=24} ? 2 3 12 ? 14 ? {c[2][1]+
d[1][{3}]=18,
c[2][3]+
d[3][{1}]=26}3 2 14 15 ? {c[3][1]+
d[1][{2}]=19,
c[3][2]+
d[2][{1}]=24}这样一共循环(2^(N-1)-1)*(N-1)次,就把时间复杂度缩小到O(N*2N )的级别.
核心伪代码如下:
{
for (i =1;in;i++)d[i][0]=c[i][0];
for( j=1;j2^(N-1)-1;j++)for(i=1 ; in ;i++)
{if(子集Vj中不包含i){对Vj中的每个元素k,计算d[i][Vj] = min{c[i][k] + d[k][{Vj-k}] | 每一个k∈Vj};}
}
对V[2^(n-1)-1]中的每个元素k,计算:
d[0][2^(n-1)-1] = min{c[0][k] + d[k][2^(n-1)-2]};
输出最短路径:d[0][2^(n-1)-1];
}
具体代码如下:
// TravRoadD.cpp : Defines the entry point for the console application.
//
#include stdafx.h
#include windows.h
#include math.h
#include stdio.h
#include ctime
#incl
您可能关注的文档
- 办学治校必之“道”.doc
- 办公楼监控统技术方案.doc
- 办公自动化统灾难应急方案.doc
- 功放模块设 - 基于CAN总线的语音节点设计方案.doc
- 功率音频放器管脚及功能描述.doc
- 功率电感对源的改善.doc
- 功能性胃肠诊治指南.doc
- 加入大小额付系统资格模拟考试试题.doc
- 办公自动化五次作业.doc
- 加多宝凉茶场营销策略探讨.doc
- 2025春季中国农业银行河北省分行招聘351人笔试备考试题及答案解析.docx
- 2025春季中国农业银行天津市分行招聘54人笔试备考试题及答案解析.docx
- 2025北京市平谷区农业中关村学校第一批招聘教师2人笔试备考试题及答案解析.docx
- 2025福建省港口集团有限责任公司春季校园招聘219人笔试备考试题及答案解析.docx
- 2025甘肃陇南市成县招聘城镇公益性岗位人员13人笔试备考试题及答案解析.docx
- 2025大庆“庆蓝优引·社会招引”市属事业单位人才引进118人笔试备考试题及答案解析.docx
- 2025福建福州市交通运输部东海第二救助飞行队编外劳务人员招聘1人笔试备考试题及答案解析.docx
- 2025福建三明市政协办公室直属事业单位选聘2人笔试备考试题及答案解析.docx
- 2025安徽亳州市公共交通集团有限公司国企招聘11人笔试备考试题及答案解析.docx
- 2025安徽工业大学招聘笔试备考试题及答案解析.docx
文档评论(0)