LINGO 帮我改改,我想要输出的结果是s(1)=1,s(2)=4,s(3)=2,s(4)=3,

问题描述:

LINGO 帮我改改,我想要输出的结果是s(1)=1,s(2)=4,s(3)=2,s(4)=3,
model:
sets:
a/1,2,3,4/;
b/1,2,3,4/;
c(a,b):x;
sx/1,2,3,4/:s;
endsets
data:
x= 0 0 0 1
0 0 1 0
0 0 0 0
0 1 0 0;
enddata
calc:
s(1)=1;
@for(sx(k)|k#ge#1 #and# k#le#3:
@for(c(i,j)|j#ge#2 #and# j#le#4:
s(k+1)=@if(x(s(k),j)#eq#1,j,null)
);
);
endcalc
end
1个回答 分类:综合 2014-11-02

问题解答:

我来补答
你的是这个逻辑?! s(1) = 1;
! k = 1, s(1) = 1, 第 1 行 第 4 个为 1, 所以 s(2) = 4 ;
! k = 2, s(2) = 4, 第 4 行 第 2 个为 1, 所以 s(3) = 2;
! k = 3, s(3) = 3, 第 2 行 第 3 个为 1, 所以 s(4) = 3;
再问: 在那个矩阵中x(1,4)=1, x(4,2)=1,x(2,3)=1,s(1)一定是等于1的,比如说有1,2,3,4,四个地方我们第一个访问的是1,再访问2,3,4。 x(i,j)=1,表示从i地到j,所以x(1,4)=1, x(4,2)=1,x(2,3)=1表示的就是走了1再走4再走2再走3,s就是记录这样的顺序。
再答: 貌似有点明白了,这样修改即可 (修改了注释标注处):model:
  sets:
   a/1,2,3,4/;
   b/1,2,3,4/;
   c(a,b):x;
   sx/1,2,3,4/:s;
endsets

data:
  x= 0 0 0 1
     0 0 1 0
     0 0 0 0
     0 1 0 0;
enddata

calc:
s(1)=1;
! s(1) = 1;
! k = 1, s(1) = 1, 第 1 行 第 4 个为 1, 所以 s(2) = 4 ;
! k = 2, s(2) = 4, 第 4 行 第 2 个为 1, 所以 s(3) = 2;
! k = 3, s(3) = 3, 第 2 行 第 3 个为 1, 所以 s(4) = 3;

  @for(sx(k)|k#ge#1 #and# k#le#3:
    @for(c(i,j)|j#ge#2 #and# j#le#4: 
      s(k+1)=@if(x(s(k),j)#eq#1,j, s(k+1)); ! <-- 把 null 改为 s(k+1);
      );
  );

endcalc

end
 
 
展开全文阅读
剩余:2000