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年前 已收到1个回答 举报

沉淀中的清澈 幼苗

共回答了17个问题采纳率:88.2% 举报

你的是这个逻辑?! 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;

1年前 追问

4

空气爱猪头 举报

在那个矩阵中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
可能相似的问题
Copyright © 2024 YULUCN.COM - 雨露学习互助 - 17 q. 0.026 s. - webmaster@yulucn.com