第二问程序差不多是这样,当然,我也有可能弄错了。
MODEL:
SETS:
SORT_OF_OIL/1..5/: EI;
MONTH/1..6/: B, C;
LINKS(SORT_OF_OIL, MONTH): A, X, Y, Z;
ENDSETS
DATA:
A = 110, 130, 110, 120, 100, 90,
120, 130, 140, 110, 120, 110,
130, 110, 130, 120, 150, 140,
110, 90, 100, 120, 110, 80,
115, 115, 95, 125, 105, 135;
B = 0, 0.01, 0.02, 0.03, 0.04, 0.05;
C = 0, 0.02, 0.04, 0.06, 0.08, 0.1;
EI = 8.8, 6.1, 2, 4.2, 5;
Q = 1; ! [1, 20], integer;
ENDDATA
MAX = 200 * @SUM(LINKS: Y) - @SUM(LINKS: A * X) - 5 * @SUM(LINKS: Z)
- Q * (@SUM(LINKS(I, J) | I #LE# 3: B(J) * X(I, J) * A(I, J))
+ @SUM(LINKS(I, J) | I #GE# 4: C(J) * X(I, J) * A(I, J)));
@FOR(LINKS(I, J) | J #EQ# 1: Z(I, J) = X(I, J) - Y(I, J) + 500);
@FOR(LINKS(I, J) | J #GE# 2: Z(I, J) = X(I, J) - Y(I, J) + Z(I, J - 1));
@FOR(LINKS: Z <= 1000);
@FOR(LINKS(I, J) | J #EQ# 6: Z(I, J) = 500);
@FOR(MONTH(J): @SUM(SORT_OF_OIL(I) | I #LE# 2: Y(I, J)) <= 200);
@FOR(MONTH(J): @SUM(SORT_OF_OIL(I) | I #GE# 3: Y(I, J)) <= 250);
@FOR(MONTH(J): @SUM(SORT_OF_OIL(I): EI(I) * Y(I, J)) >= 3.0 * @SUM(SORT_OF_OIL(I): Y(I, J)));
@FOR(MONTH(J): @SUM(SORT_OF_OIL(I): EI(I) * Y(I, J)) <= 6.0 * @SUM(SORT_OF_OIL(I): Y(I, J)));
! LINGO sets default lower bounds of variables to 0;
END
注: 原始程序"+"误写为"-",是我失误,我道歉。
其余部分正确。