冬季的期盼 发表于 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 static/image/common/back.gif
哇,楼主问题问得好!考虑得很细致!赞一个!
其实我以前也没有仔细想过这个问题,那我个人的看法是,既 ...

其实我在baidu上问的时候,重点是无法理解for的循环。。。用c语言写这样的程序,for的I应该是由大到小递减的。。。所以不清楚到底Lingo的for是循环的机理。这样不利于自己编写递推。所以想问清楚

wujianjack2 发表于 2013-7-24 00:14

爱猫的孩子 发表于 2013-7-23 23:14 static/image/common/back.gif
其实我在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 static/image/common/back.gif
哇,楼主问题问得好!考虑得很细致!赞一个!
其实我以前也没有仔细想过这个问题,那我个人的看法是,既 ...

谢谢版主大哥!!!!

秋之飘枫 发表于 2013-9-2 23:03

不错,赞一个!

发表于 1970-1-1 08:00

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是可以实现动态规划的吧?

页: [1]
查看完整版本: lingo动态规划求最短路,for循环是如何递推的?求大神指教