这是我写的编程:其中有一个区间变量是七段的分段函数,我不知道怎么放置,
希望有大神可以接受挑战,一同讨论,谢谢
MODEL:
! A 4 supplier 3 manufacture 6 customer Transportation Problem;
SETS:
SUPPLIES/CA1..CA4/: CAI;
MANUFACTURES/CA1..CA3/: CAJ;
CUSTOMERS/D1..D6/: DK;
LINKS1(SUPPLIES, MANUFACTURES): DIJ, RIJ, DBAIJ;
LINKS2(MANUFACTURES, CUSTOMERS): DJK, RJK, DBAJK;
ENDSETS
! Here is the data;
DATA:
!attribute values;
CAI = 2100 2300 2000 1900;
CAJ = 2100 1700 1800;
DK = 900 950 900 850 950 900;
DIJ = 164 353 106
200 385 182
74 197 209
92 97 227;
RIJ = 2.53 1.58 2.69
1.74 1.42 2.21
3.08 2.05 1.90
2.84 2.92 1.82;
DJK = 551 487 503 258 500 699
490 691 462 320 196 490
328 274 502 257 699 916;
RJK = 2.13 2.61 2.05 3.00 1.98 1.58
2.45 1.50 2.37 2.77 3.08 2.21
2.69 2.92 1.90 3.08 1.66 1.34;
DBAIJ = 81.1 81.3 82.0
80.9 81.0 81.2
82.0 81.0 80.5
81.5 80.2 81.0;
DBAJK = 81.7 81.4 82.0 81.6 81.7 81.0
81.3 81.7 82.1 81.3 82.0 81.3
81.8 81.7 81.5 81.7 81.9 81.4;
ENDDATA
! The objective;
MIN=@SUM(LINKS1(I,J):3.81*QIJ*DIJ)+@SUM(LINKS2(J,K):3.81*VJK*DJK)+
@SUM(LINKS1(I,J):0.04*QIJ*DIJ)+@SUM(LINKS2(J,K):0.04*VJK*DJK)+
@SUM(LINKS1(I,J):1.11*EIJ*DIJ)+@SUM(LINKS2(J,K):1.11*GJK*DJK)+
@SUM(LINKS1(I,J):2.58*ADIJ*FIJ*DIJ/100)+@SUM(LINKS2(J,K):2.58*ADJK*SJK*DJK/100)+
@SUM(LINKS1(I,J):12.85*TIJ)+@SUM(LINKS2(J,K):12.85*BJK);
! The constraints;
@FOR( SUPPLIES(I): @SUM( MANUFACTURES(J): QIJ)<=CAI);
@FOR( MANUFACTURES(J): @SUM(CUSTOMERS(K): VJK)<=CAJ);
@FOR( CUSTOMERS(K): @SUM(MANUFACTURES(J): VJK)=DK);
@FOR( MANUFACTURES(J): @SUM(SUPPLIES(I): QIJ)=@SUM(CUSTOMERS(K):VJK));
@FOR(LINKS1(SUP, MAN): QIJ-10^6*XIJ<=0 );
@FOR(LINKS1(SUP, MAN): QIJ-10^6*XIJ>=1-10^6 );
@FOR(LINKS2(MAN, CUS): VJK-10^6*YJK<=0 );
@FOR(LINKS2(MAN, CUS): VJK-10^6*YJK>=1-10^6 );
@FOR(LINKS1(SUP, MAN): @SUM(PIJL=XIJ );
@FOR(LINKS2(MAN, CUS): @SUM(INTERVALS(L):DJKL(J,K,L)=YJK );
@FOR(LINKS1(SUP, MAN): @SUM(INTERVALS(L):UIJL*TIJ=DIJ*PIJL);
@FOR(LINKS2(MAN, CUS): @SUM(INTERVALS(L):HJKL*BJK=DJK*DJKL);
@FOR(LINKS1(SUP, MAN): @SUM(INTERVALS(L):30+25.6*LOG10(UIJL)<=DBAIJ);
@FOR(LINKS2(MAN, CUS): @SUM(INTERVALS(L):30+25.6*LOG10(HJKL)<=DBAJK);
@FOR(LINKS1(SUP, MAN): @SUM(INTERVALS(L):PIJL*MINL<=UIJL<=PIJL*MAXL);
@FOR(LINKS2(MAN, CUS): @SUM(INTERVALS(L):DIJL*MINL<=HJKL<=DIJL*MAXL);
@FOR(LINKS1(SUP, MAN): @SUM(INTERVALS(L):EIJ=θL(UIJL)-10^6*(1-PIJL));
@FOR(LINKS2(MAN, CUS): @SUM(INTERVALS(L):GJK=θL(HJKL)-10^6*(1-DJKL));
@FOR(LINKS1(SUP, MAN): @SUM(INTERVALS(L):FIJ=βL(UIJL)-10^6*(1-PIJL));
@FOR(LINKS2(MAN, CUS): @SUM(INTERVALS(L):SJK=βL(HJKL)-10^6*(1-DJKL));
@FOR(LINKS1(SUP, MAN): @BIN(XIJ, PIJL) );
@FOR(LINKS1(SUP, MAN): @BIN(YJK, DJKL) );
END