파일 : sosweird.inc 다음 사용자: sosmiqcp01.gms[html] sosmip01.gms[html] sosminlp01.gms[html]
i /1*4/로 설정;
SOS1 변수 x1(i);
SOS2 변수 x2(i);
변수 z;
방정식 e1,e2;
e1..z =e= sum(i, ord(i)*x1(i));
e2.. z =e= sum(i, ord(i)*x2(i));
모델 m1 /e1/, m2 /e2/;
옵션 optCR=0;
x1.up(i) = 2;
m1 max z us %MTYPE%를 풀어보세요;
if (m1.solvestat = %solveStat.capabilityProblems%),
abort$(m1.modelstat <> %modelStat.noSolutionReturned%) '잘못된 modelstat';
abort.NoError 'SOS 변수를 처리할 수 없습니다';
abort$(abs(z.l-8)>1e-6) '잘못된 목표 값';
x1.lo('3') = 1;
m1 max z us %MTYPE%를 풀어보세요;
abort$(abs(z.l-6)>1e-6) '잘못된 목표 값';
x1.lo('1') = 1;
m1 max z us %MTYPE%를 풀어보세요;
abort$(m1.modelstat<>%modelStat.integerInfeasible% 및
m1.modelstat<>%modelStat.infeasibleNoSolution% 및
m1.modelstat<>%modelStat.infeasible%) '잘못된 모델 상태';
옵션 클리어=x1;
x1.lo(i) = -inf;
x1.up(i) = 0;
m1 max z us %MTYPE%를 풀어보세요;
abort$(abs(z.l)>1e-6) '잘못된 목표 값';
x1.up('3') = -1;
m1 max z us %MTYPE%를 풀어보세요;
abort$(abs(z.l+3)>1e-6) '잘못된 목표 값';
x1.up('1') = -1;
m1 max z us %MTYPE%를 풀어보세요;
abort$(m1.modelstat<>%modelStat.integerInfeasible% 및
m1.modelstat<>%modelStat.infeasibleNoSolution% 및
m1.modelstat<>%modelStat.infeasible%) '잘못된 모델 상태';
x2.up(i) = 2;
m2 max z us %MTYPE%를 풀어보세요;
abort$(abs(z.l-14)>1e-6) '잘못된 목표 값';
x2.lo('2') = 1;
m2 max z us %MTYPE%를 풀어보세요;
abort$(abs(z.l-10)>1e-6) '잘못된 목표 값';
x2.lo('4') = 1;
m2 max z us %MTYPE%를 풀어보세요;
abort$(m2.modelstat<>%modelStat.integerInfeasible% 및
m2.modelstat<>%modelStat.infeasibleNoSolution% 및
m2.modelstat<>%modelStat.infeasible%) '잘못된 모델 상태';
옵션 클리어=x2;
x2.lo(i) = -inf;
x2.up(i) = 0;
m2 max z us %MTYPE%를 풀어보세요;
abort$(abs(z.l)>1e-6) '잘못된 목표 값';
x2.up('3') = -1;
m2 max z us %MTYPE%를 풀어보세요;
abort$(abs(z.l+3)>1e-6) '잘못된 목표 값';
x2.up('1') = -1;
m2 max z us %MTYPE%를 풀어보세요;
abort$(m2.modelstat<>%modelStat.integerInfeasible% 및
m2.modelstat<>%modelStat.infeasibleNoSolution% 및
m2.modelstat<>%modelStat.infeasible%) '잘못된 모델 상태';