설명
이것은 몇 가지 어려운 기능의 MIP 공식을 보여줍니다.
소형 모델 유형 :MIP
카테고리 : 슬롯 커뮤니티 모델 라이브러리
메인 파일 : absmip.gms
$title 불연속 함수 abs, min, max 및 MIP로 서명(ABSMIP,SEQ=208)
$onText
이는 일부 어려운 기능의 MIP 공식을 보여줍니다.
슬롯 커뮤니티 Development Corporation, 공식화 및 언어 예제.
키워드: 혼합 정수 선형 계획법, 불연속 함수,
슬롯 커뮤니티 언어 예제, 수학, 변환 기술
$offText
변수 x '다양한 기능에 대한 인수';
양수 변수
xp 'x의 양수 부분'
xn 'x의 음수 부분';
이진 변수 b 'x가 양수인지 음수인지 결정';
방정식
e1 'x를 양수 부분과 음수 부분으로 분할'
e2 'x의 양수 부분을 제한합니다'
e3 'x의 음수 부분을 제한합니다';
e1.. x =e= xp - xn;
e2.. xp =l= abs(x.up)*b;
e3.. xn =l= abs(x.lo)*(1 - b);
변수 y '함수 평가 결과';
방정식
defabs 'y = abs(x)의 정의'
defzmax 'y = zmax(x) = max(x,0)의 정의'
defzmin 'y = zmin(x) = min(x,0)의 정의';
defabs.. y =e= xp + xn;
defzmax..y =e= xp;
defzmin..y =e= - xn;
모델
ABSM / e1, e2, e3, defabs /
zmaxM / e1, e2, e3, defzmax /
zminM / e1, e2, e3, defzmin /;
스칼라 tol '0에 대한 허용오차' / 1e-04 /;
바이너리 변수
b1 'xp가 양수인지 결정합니다'
b2 'xn이 양수인지 결정합니다';
방정식
e2up 'XP에 대한 상한 제한'
e2lo 'XP에 대한 낮은 제한'
e3up 'xn에 대한 상한 제한'
e3lo 'xn에 대한 낮은 제한'
하나는 'b1 또는 b2'입니다.
defsign 'y = 부호(x)의 정의';
e2up.. xp =l= abs(x.up)*b1;
e2lo.. xp =g= tol*b1;
e3up.. xn =l= abs(x.lo)*b2;
e3lo..xn =g= tol*b2;
하나.. b1 + b2 =l= 1;
설계.. y =e= b1 - b2;
모델 signM / e1, e2up, e2lo, e3up, e3lo, one, defsign /;
옵션 limCol = 0, limRow = 0, optCr = 1e-6;
세트
실행 '테스트 실행 횟수' / 1*5 /
nos / "v.lo", "v.up", "w.lo", "w.up" /
mm '최소 및 최대' / 최대, 최소 /;
매개변수 bnds_unary(runs,*) / 1.lo -5, 1.up 5
2.lo -5, 2.up -2
3.로 2, 3.위 5
4.lo 0, 4.up 5
5.lo -5, 5.up 0 /;
매개변수 rep_unary;
루프(실행,
x.lo = bnds_unary(runs,"lo"); rep_unary(mm,runs,"x.lo") = x.lo;
x.up = bnds_unary(runs,"up"); rep_unary(mm,runs,"x.up") = x.up;
mip를 사용하여 absM max y를 해결합니다. rep_unary("max",runs,"abs" ) = y.l;
mip를 사용하여 zmaxM max y를 해결합니다. rep_unary("max",runs,"zmax") = y.l;
mip를 사용하여 zminM max y를 해결합니다. rep_unary("max",runs,"zmin") = y.l;
mip를 사용하여 signM max y를 해결합니다. rep_unary("max",runs,"sign") = y.l;
mip를 사용하여 absM min y를 해결합니다. rep_unary("min",runs,"abs" ) = y.l;
mip를 사용하여 zmaxM min y를 해결합니다. rep_unary("min",runs,"zmax") = y.l;
mip를 사용하여 zminM min y를 해결합니다. rep_unary("min",runs,"zmin") = y.l;
mip를 사용하여 signM min y를 해결합니다. rep_unary("min",runs,"sign") = y.l;
);
변수
z '함수 평가 결과'
v '최대/최소에 대한 인수'
w '최대/최소 인수';
방정식
defvwx '대체 x = v - w'
defmXX 'z = max/min(v,w) = max/min(x,0) + w의 정의';
defvwx.. x =e= v - w;
defmXX.. z =e= y + w;
모델
maxM / e1, e2, e3, defzmax, defvwx, defmXX /
minM / e1, e2, e3, defzmin, defvwx, defmXX /;
매개변수 bnds_binary(runs,*) / 1.vlo -5, 1.vup 5, 1.wlo -2, 1.wup 2
2.vlo -2, 2.vup 2, 2.wlo -5, 2.wup 5
3.vlo -5, 3.vup -2, 3.wlo 2, 3.wup 5
4.vlo 2, 4.vup 5, 4.wlo -5, 4.wup -2
5.vlo -5, 5.vup 2, 5.wlo -2, 5.wup 5 /;
매개변수 rep_binary;
루프(실행,
v.lo = bnds_binary(runs,"vlo"); rep_binary(mm,runs,"v.lo") = v.lo;
v.up = bnds_binary(runs,"vup"); rep_binary(mm,runs,"v.up") = v.up;
w.lo = bnds_binary(runs,"wlo"); rep_binary(mm,runs,"w.lo") = w.lo;
w.up = bnds_binary(runs,"wup"); rep_binary(mm,runs,"w.up") = w.up;
x.lo = -max(abs(w.up-v.lo), abs(v.up-w.lo)); x.up = -x.lo;
mip를 사용하여 maxM max z를 해결합니다. rep_binary("max",runs,"max") = z.l;
mip를 사용하여 minM max z를 해결합니다. rep_binary("max",runs,"min") = z.l;
mip를 사용하여 maxM min z를 해결합니다. rep_binary("min",runs,"max") = z.l;
mip를 사용하여 minM min z를 해결합니다. rep_binary("min",runs,"min") = z.l;
);
대표_유나리, 대표_이진 표시;