数学建模社区-数学中国

标题: lingo动态规划求最短路,for循环是如何递推的?求大神指教 [打印本页]

作者: 冬季的期盼    时间: 2013-7-23 13:40
标题: lingo动态规划求最短路,for循环是如何递推的?求大神指教
model:
sets:
nodes/A,B,C,D,E,F,G/:FL;
roads(nodes,nodes)/A,B A,C B,D B,E B,F C,D C,E C,F D,G E,G F,G/:w;
endsets
data:
w=2 4 3 3 1 2 3 1 1 3 4;
enddata
N=@size(nodes);
FL(N)=0;
@for( nodes(i)|i#lt#N: FL(i)=@min(roads(i,j):w(i,j)+FL(j)));
end
!nodes是城市,roads是街道。图起点A,终点G。FL(i)是从i到终点的距离。书上说是从FL(N)往前倒推的,问题是我认为for循环的i应该是从小变大,然后只I的增大过程只有一次,那Lingo到底是怎么完成倒推的?还是for循环的i增大是一次又一次的,到了n又变回1,知道Fl不能在改变为止?纠结了,求原理;

作者: wujianjack2    时间: 2013-7-23 16:26
哇,楼主问题问得好!考虑得很细致!赞一个!
其实我以前也没有仔细想过这个问题,那我个人的看法是,既然是递推,应该是基于某一或某些已有的项来对未知的项进行求解,在这段程序中,首先的已知项是FL(N)=0,而N已是最大下标,故在进行@FOR()循环时,求解的应是与N最邻近的N-1这项,然后依次递减,最终得到结果。
  不知楼主是否能够接受我这样的解释,如果有什么疑问或者我的解决存在错误,望不吝指出,谢谢!
作者: 爱猫的孩子    时间: 2013-7-23 23:14
wujianjack2 发表于 2013-7-23 16:26
哇,楼主问题问得好!考虑得很细致!赞一个!
其实我以前也没有仔细想过这个问题,那我个人的看法是,既 ...

其实我在baidu上问的时候,重点是无法理解for的循环。。。用c语言写这样的程序,for的I应该是由大到小递减的。。。所以不清楚到底Lingo的for是循环的机理。这样不利于自己编写递推。所以想问清楚
作者: wujianjack2    时间: 2013-7-24 00:14
爱猫的孩子 发表于 2013-7-23 23:14
其实我在baidu上问的时候,重点是无法理解for的循环。。。用c语言写这样的程序,for的I应该是由大到小递减 ...

哦,你是在考虑@FOR()的一般循环机理么?个人认为一般还是递增吧,就像MATLAB里for i=1:10,默认是+1的步长,当然,你用C语言写的话可以更灵活地控制吧!我在分析这个问题时是针对性分析的,没有考虑一般。多谢你的提醒!
作者: 冬季的期盼    时间: 2013-7-24 17:43
谢谢 版主大哥 。。。。。。
作者: 冬季的期盼    时间: 2013-7-24 17:44
wujianjack2 发表于 2013-7-23 16:26
哇,楼主问题问得好!考虑得很细致!赞一个!
其实我以前也没有仔细想过这个问题,那我个人的看法是,既 ...

谢谢版主大哥!!!!

作者: 秋之飘枫    时间: 2013-9-2 23:03
不错,赞一个!
作者: madio    时间: 2013-9-3 08:29
你这个问题和@for的循环顺序并没有什么关系,因为在lingo凡是没有被赋值的量都会被认为是未知量。lingo会想办法获得未知量的解,你这里lingo虽然首先遇到了未知量FL(A),但是lingo并不能直接解出它的值,需要通过FL(G)的值获得FL(F)的值,这样逐步的倒推,所以这个过程并不是你的程序所限定的,而是Lingo的求解系统在这样做。
作者: 978111053    时间: 2023-4-19 12:49
好问题,lingo是可以实现动态规划的吧?






欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5