请教一下,我这段代码哪里错了,为什么lingo会报错?

lingo求解出现问题,不知为何,代码如下

model:

sets:
basic/1..10/:kls,dzc1,yc,ysl,dzc2,ck,cy,p,f;
dis/1..5/:q;
config1(basic,dis):x,c;
endsets
data:
kls=5.26,5.19,4.21,4.00,2.95,2.74,2.46,1.90,0.64,1.27;
dzc1=1.90,0.99,1.90,1.13,1.27,2.25,1.48,2.04,3.09,3.51;
yc=5.89,5.61,5.61,4.56,3.51,3.65,2.46,2.46,1.06,0.57;
ysl=0.64,1.76,1.27,1.83,2.74,2.60,4.21,3.72,5.05,6.10;
dzc2=4.42,3.86,3.72,3.16,2.25,2.81,0.78,1.62,1.27,0.50;
ck=0.95,1.05,1.00,1.05,1.10,1.25,1.05,1.30,1.35,1.25;
cy=1.25,1.10,1.35,1.05,1.15,1.35,1.05,1.15,1.35,1.25;
p=0.30,0.28,0.29,0.32,0.31,0.33,0.32,0.31,0.33,0.31;
Enddata
min=@sum(basic(i):@sum(dis(j):x(i,j)*c(i,j)));
@for(basic(i):@sum(dis(j):x(i,j))<=((x(i,j)*2/28+3+5)/5)*((8*60-((x(i,j)*2/28+3+5)/5-1)*5)/(x(i,j)*2/28+3+5)));
@for(dis(j):@sum(basic(i):x(i,j)<=f(i)*8*60/5*154));
@for(dis(j):@sum(basic(i):x(i)<=8*20*154));
@for(basic(i):@for(dis(j):x(i,1)+x(i,2)+x(i,5)<=ck(i)*10000));
@for(basic(i):@for(dis(j):x(i,3)+x(i,4)<=cy(i)*10000));
@for(dis(j):@sum(basic(i):x(i,j)>=q(j)));
@for(dis(j)|i#ne#4 #and# i#ne#3:@sum(basic(i):x(i,j)*(p(i)-30.5))<=0);
@for(dis(j)|i#ne#4 #and# i#ne#3:@sum(basic(i):x(i,j)*(p(i)-28.5))>=0);
@for(config1:@gin(x(i,j)/154));
@sum(basic(i):f)<=7;
@sum(config1(i,j):x(i,j)/154/(8*60-((x(i,j)*2/28+3+5)/5-1)*5)/(x(i,j)*2/28+3+5)<=20;
end

出现以下问题


 [Error Code:  161]

 Index variables may not share names with other variables.

     20]  @for(dis(j):@sum(basic(i):x(i,j)<=f
                   ^

感谢大家指导,谢谢!

你在LINGO代码中定义了一个索引变量,但该索引变量的名称与其他变量冲突了。在LINGO中,索引变量和其他变量必须具有不同的名称。这是LINGO的语法规则之一,旨在避免混淆和冲突。你错误的行数是:@for(dis(j):@sum(basic(i):x(i,j)<=f(i)860/5*154));问题可能是 j 是索引变量,但它也在 dis(j) 中使用,这会导致冲突。你可以考虑更改索引变量的名称,以确保它与其他变量不发生冲突

题主,这个问题我来替你解决,若有帮助,还望采纳,点击回答右侧采纳即可。


这个错误提示是因为你在 sets 定义中使用了变量名"q",但在 data 部分没有为其赋值。因此在第 21 行代码中使用了"q"时会出现错误。

另外,你还需要注意以下几点:

  • 第11行的注释中使用了中文符号,可能会导致编译错误。
  • 第14行中,变量名"c"可能需要在 data 部分中进行赋值。
  • 第20到22行中,变量名"f"需要在 data 部分中进行赋值。

希望这些指导可以帮助你解决问题。

【以下回答由 GPT 生成】

根据提供的代码,发现这是Lingo modeling语言的代码,用于建立数学规划模型。但是给出的代码存在一些问题,导致Lingo报错。

问题1:缺少objective函数:在Lingo中,需要使用minmax关键字来定义目标函数,但是给出的代码中缺少了目标函数的定义。

解决方案:在model:endsets之间添加一行代码,使用min关键字定义目标函数。例如:min=@sum(basic(i):@sum(dis(j):x(i,j)*c(i,j)));

问题2:语法错误:在第一个@for语句中,x(i, j)c(i, j)之间使用了*运算符,但是Lingo中的乘法运算使用#符号。

解决方案:将第一个@for语句中的*运算符替换为#。例如:@for(basic(i):@sum(dis(j):x(i,j))<=((x(i,j)#2/28+3+5)/5)*((8*60-((x(i,j)#2/28+3+5)/5-1)*5)/(x(i,j)#2/28+3+5)))

问题3:语法错误:在第二个@for语句中,x(i, j)f(i)之间使用了*运算符,但是Lingo中的乘法运算使用#符号。

解决方案:将第二个@for语句中的*运算符替换为#。例如:@for(dis(j):@sum(basic(i):x(i,j)<=f(i)#8*60/5*154))

综上所述,修改后的代码如下:

model:

min=@sum(basic(i):@sum(dis(j):x(i,j)*c(i,j)));  // 添加目标函数定义

sets:
basic/<span class="hljs-number">1.</span><span class="hljs-number">.10</span>/:kls,dzc1,yc,ysl,dzc2,ck,cy,p,f;
dis/<span class="hljs-number">1.</span><span class="hljs-number">.5</span>/:q;
config1(basic,dis):x,c;
endsets
data:
kls=<span class="hljs-number">5.26</span>,<span class="hljs-number">5.19</span>,<span class="hljs-number">4.21</span>,<span class="hljs-number">4.00</span>,<span class="hljs-number">2.95</span>,<span class="hljs-number">2.74</span>,<span class="hljs-number">2.46</span>,<span class="hljs-number">1.90</span>,<span class="hljs-number">0.64</span>,<span class="hljs-number">1.27</span>;
dzc1=<span class="hljs-number">1.90</span>,<span class="hljs-number">0.99</span>,<span class="hljs-number">1.90</span>,<span class="hljs-number">1.13</span>,<span class="hljs-number">1.27</span>,<span class="hljs-number">2.25</span>,<span class="hljs-number">1.48</span>,<span class="hljs-number">2.04</span>,<span class="hljs-number">3.09</span>,<span class="hljs-number">3.51</span>;
yc=<span class="hljs-number">5.89</span>,<span class="hljs-number">5.61</span>,<span class="hljs-number">5.61</span>,<span class="hljs-number">4.56</span>,<span class="hljs-number">3.51</span>,<span class="hljs-number">3.65</span>,<span class="hljs-number">2.46</span>,<span class="hljs-number">2.46</span>,<span class="hljs-number">1.06</span>,<span class="hljs-number">0.57</span>;
ysl=<span class="hljs-number">0.64</span>,<span class="hljs-number">1.76</span>,<span class="hljs-number">1.27</span>,<span class="hljs-number">1.83</span>,<span class="hljs-number">2.74</span>,<span class="hljs-number">2.60</span>,<span class="hljs-number">4.21</span>,<span class="hljs-number">3.72</span>,<span class="hljs-number">5.05</span>,<span class="hljs-number">6.10</span>;
dzc2=<span class="hljs-number">4.42</span>,<span class="hljs-number">3.86</span>,<span class="hljs-number">3.72</span>,<span class="hljs-number">3.16</span>,<span class="hljs-number">2.25</span>,<span class="hljs-number">2.81</span>,<span class="hljs-number">0.78</span>,<span class="hljs-number">1.62</span>,<span class="hljs-number">1.27</span>,<span class="hljs-number">0.50</span>;
ck=<span class="hljs-number">0.95</span>,<span class="hljs-number">1.05</span>,<span class="hljs-number">1.00</span>,<span class="hljs-number">1.05</span>,<span class="hljs-number">1.10</span>,<span class="hljs-number">1.25</span>,<span class="hljs-number">1.05</span>,<span class="hljs-number">1.30</span>,<span class="hljs-number">1.35</span>,<span class="hljs-number">1.25</span>;
cy=<span class="hljs-number">1.25</span>,<span class="hljs-number">1.10</span>,<span class="hljs-number">1.35</span>,<span class="hljs-number">1.05</span>,<span class="hljs-number">1.15</span>,<span class="hljs-number">1.35</span>,<span class="hljs-number">1.05</span>,<span class="hljs-number">1.15</span>,<span class="hljs-number">1.35</span>,<span class="hljs-number">1.25</span>;
p=<span class="hljs-number">0.30</span>,<span class="hljs-number">0.28</span>,<span class="hljs-number">0.29</span>,<span class="hljs-number">0.32</span>,<span class="hljs-number">0.31</span>,<span class="hljs-number">0.33</span>,<span class="hljs-number">0.32</span>,<span class="hljs-number">0.31</span>,<span class="hljs-number">0.33</span>,<span class="hljs-number">0.31</span>;
Enddata

// 修改*为#符号
@for(basic(i):@sum(dis(j):x(i,j))<=((x(i,j)#2/28+3+5)/5)*((8*60-((x(i,j)#2/28+3+5)/5-1)*5)/(x(i,j)#2/28+3+5)))
@for(dis(j):@sum(basic(i):x(i,j)<=f(i)#8*60/5*154))

这样修改后的代码应该可以正确运行。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^