1

我想用 Lingo 进行线性编程,我有解决方案,但我想改进代码。

这是我想做的事情:

SETS:
 SEMANA/ 1..12/: D, X, I, Y, Z, R, n;
ENDSETS

X(1)>=D(1); 

X(2)+I(1)>=D(2);

X(3)+I(2)>=D(3);

X(4)+I(3)>=D(4);

X(5)+I(4)>=D(5);

X(6)+I(5)>=D(6);

X(7)+I(6)>=D(7);

X(8)+I(7)>=D(8);

X(9)+I(8)>=D(9);

X(10)+I(9)>=D(10);

X(11)+I(10)>=D(11);

X(12)+I(11)>=D(12);

我试过这个选项,但有一个错误提示:属性 I 的下标超出范围。

@FOR (SEMANA(j): 

X(j)+ I(j-1)>= D(j)) ; 

I(j-1)超出范围,所以我无法解决问题。

谢谢

4

2 回答 2

0

你需要一个索引过滤器

@FOR (SEMANA(j) | j#GT#1: 
  X(j)+ I(j-1)>= D(j)) ;

这等效于 I(0)=0,但只是隐含的。如果您有 I(0)>0,例如您有正的初始库存,那么您需要扩展您的索引集以包含“0”并添加一个额外的约束 I(0)=INITIAL_VALUE

因此,您的 @for 循环必须是

@FOR (SEMANA(j) | j#GT#0: 
  X(j)+ I(j-1)>= D(j)) ;
于 2018-06-08T23:23:30.097 回答
0

请注意,当 j=1 时,您的代码将尝试进入 I(0)。I(0) 没有定义,这就是它超出范围问题的原因。

于 2016-03-03T13:13:38.133 回答