Lingo中的线性规划

时间:2015-06-16 12:12:50

标签: lingo

我想用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)超出范围,所以我无法解决问题。

谢谢

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您需要一个索引过滤器

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

这相当于I(0)= 0,但只是隐式。如果你有I(0)> 0,例如如果您的初始广告资源为正,那么您需要将索引集扩展为包含' 0' 0并添加一个额外的约束I(0)= INITIAL_VALUE

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

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