作业帮 > 综合 > 作业

Lingo@for循环和@if的语句 Lingo新手,不知道该怎么写程序,

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/04/28 02:31:01
Lingo@for循环和@if的语句 Lingo新手,不知道该怎么写程序,
MODEL:
SETS:
city/A1..A4/:U;;
links(city,city):distance,;
quan/1..4/:A;
demond/1..4/:D;
link(quan,demond):c;
ENDSETS
DATA:
distance=0,34,84,8,
34,0,63,7,
84,63,0,5,
8,7,5,0;
d=12,18,23,16;
ENDDATA
max=@sum(link:a(i)*d(i));
@for(quan:a(i)=@if(distance(i,j)#gt#10,0.3,0.5));
end
那你解释一下你这个@if的条件是什么 否则不好写啊 你写的恐怕是有问题的
再问: 就是希望如果距离小于10权重为0.5,距离大于10权重为0.3,然后根据权重计算权重a乘以d
再答: 什么距离 具体是哪个距离 你这个distance可不止一个数
再问: 这个距离矩阵是对称的, 实际上就是四个点之间的距离。 如果两个城市间距离超过10,那么权重为0.3,距离在10以内,权重是0.5。 d是商品,距离大的会出现损耗。希望可以找到一个最优的点,使得损耗最少,得到的加总的d最大
再答: 那你的权重也是两两城市之间的 你给的是a(i)啊 这个对吗
再问: 那应该怎么改呢~我是新手,确实不是很会
再答: MODEL: SETS: city/A1..A4/:U,d; links(city,city):distance,a,c; ENDSETS DATA: distance=0,34,84,8, 34,0,63,7, 84,63,0,5, 8,7,5,0; d=12,18,23,16; ENDDATA calc: @for(links:a=@if(distance#gt#10,0.3,0.5)); endcalc max=@sum(links(i,j):a(i,j)*d(i));
再问: 实在是太感谢啦~~大神。。。。能不能再问一下~ 那如果4个城镇变成100个(100阶阵),然后最优点不止一个呢,怎么改程序能够求出来优化方案,使得损耗最少,加总的d最大呢~~
再答: 那就要你自己想了 不是那么容易的