2004.10.12:
最短路径算法是 Drew
最近才开始接触的,起因是在前几个月英国伦敦为德国宝马(BMW)公司的动态路径诱导研究项目做算法测试程序,从而对路径搜索算法产生了极大的兴趣。在此程序的基础上、同时得到北京工业大学交通研究中心陈艳艳老师在专业和算法方面的指导,目前正在逐步扩展针对于交通路网的分析和规划功能。好在软件编程是本人的强项和
读研时积累了一定的算法基础,从几个月前的一点不懂开始做起,到现在已经有声有色了。有时候做的非常辛苦,达到费寝忘餐的程度,编程中经常是兴奋和绝望交织在一起,
经常为一个bug折腾得一夜不睡,绝望得想跳楼;也会为一个问题的解决,兴奋得在屋子里来回绕圈。不过进展很快,也很快乐,纯快乐,没有功利的那种快乐。目前常用的最短
路径算法(Dijkstra,
A*,D*,K条路,不交化等)都已程序实现,并加入了许多我们自己的一些想法在里面,效果相当好。下一步是继续测试一些我们新的想法,读入
GIS 地图数据,加入流量分配,遗传算法...,很多东西等着去做呀。真的很希望能这样一直做下去。可是在兴趣和工作之间,换句话说兴趣和生存之间,经常不得不放弃兴趣了,没办法。
2005.7.13:
转眼大半年过去了,尽管中间停了几个月,还是陆续做了MIF文件格式读取接口和邻接关系建立,增加了数据库信息动态实时读取,不交路可靠性分析及系统可靠性计算,最短路径中加入考虑直行、左右转弯方面的内容。程序中的主要算法部分是在实现一些基本算法的基础上,结合各个算法的优点,对算法进行了有效的改进和优化,加入了一些新的计算参数和评价指标,主要来自朋友的算法思路,效果非常好。同时在算法编程实现的过程也会发现算法和想法中存在的问题并加以解决,例如
K条路算法中权重系数的等值下降导致计算迭代次数增加等问题,经过比较、试验最后找出好的解决办法,大大提高了算法的计算效率。
算法编程不同于其它的程序编程,首先,必须对算法中具体的细节完全理解,设计合理的数据结构,然后是编程调试和测试。如路径诱导中的拐弯的问题,在路径计算中非常重要,都知道通常在交叉口花费的时间比路段上的更多,而右转比直行和左转花费的时间短。
我的数据结构采用了扩展的前向关联结构(extended forward star structure),这一部分是编程中最头痛的部分,
数据结构非常复杂,常常被自己的数据结构搞蒙,比如一个十字路口,一个边到前面左中右三个方向的信息和上一个路口的三个方向信息都要考虑,一个边倒没什么,问题是十字路口的四条边,每条边及相关的三条边和上一个节点都要存储,整个路网就有大量的信息要处理。一旦处理出现问题,搞不清时程序出错还是算法本身有缺陷。查找问题的方式只能是,一张纸一只笔手工计算出每一步的数值,和程序单步执行的结果对比,痛苦不堪。好在这部分完成了,不过感觉实用价值不大,很小的路网,计算量非常大。
2006.1.2:与某计算机公司合作开发手持GPS定位导航仪产品。
2006.8.7: 我的兴趣依然继续,这一段时间因私事请假出国,难得这段时间静下心来做自己感兴趣的东西,尽管一个人在外,没什么收入,可是过的非常充实,每天疯狂的写程序,疯狂的在网上看电影,周末疯狂的出去玩,部分内容可参见我的
博客:编程以外
http://wangdrew.blogcn.com/
2006.12.23:前几个月与某科研单位合作研发了两个交通GIS查询规划软件,通过测试和验收,并获得了两个软件著作权。
2007.5.20:
为某单位做的最优路径搜索算法终于通过了他们的测试,在这个算法中必须考虑道路单向禁行、限行,道路禁止左、右转弯、禁止掉头等实际道路行驶中常见的情况。过去一直想做,只是苦于没有真实的道路数据,所以没有进行下去。这次由于这件事的推动得以 继续。开始时想的非常复杂,程序特别是数据结构改动较大,不过最后其实并没有想象的那样复杂,因为只要转弯延误不考虑和参与计算,
数据结构就不会太复杂,计算量也会大大降低。
最后对最短路径搜索算法进行了部分优化,搜索速度并没有明显的降低,基本达到对方的技术要求,当然如果进一步优化还可以提高搜索速度,不过对于某一区域的路网来说目前的搜索速度基本上足够用了。