설명
슬롯 사이트를 사용하여 trnsport의 수정된 버전을 재구성하고 다음을 확인하십시오. 올바른 솔루션. 원본 모델에 대한 수정: 1. 일부 공급 제약을 완화하고 제거하기 위해 데이터를 조정합니다. 퇴보. 2. 방정식 방향을 조정하지 마십시오(emp07과 비교). 3. NLP로 조정 기고자: Steven Dirkse, 2010년 1월
소형 모델 유형 :슬롯 사이트
카테고리 : 슬롯 사이트 테스트 라이브러리
메인 파일 : emp08.gms
$title trnsport 모델을 기반으로 한 슬롯 사이트 테스트(EMP08,SEQ=471)
$onText
슬롯 사이트를 사용하여 수정된 버전의 tnsport를 재구성하고 다음을 확인합니다.
올바른 솔루션. 원래 모델에 대한 수정 사항:
1. 일부 공급 제약을 완화하고 제거하기 위해 데이터를 조정합니다.
퇴보.
2. 방정식 방향을 조정하지 마십시오(emp07과 비교).
3. NLP로 조정
기고자: Steven Dirkse, 2010년 1월
$offText
세트
i 통조림 공장 / 시애틀, 샌디에이고 /
j 마켓 / 뉴욕, 시카고, 토피카 / ;
매개변수
a(i) 경우에 따라 공장 i의 생산 능력
/시애틀 350
샌디에이고 600 /
b(j) 다음과 같은 경우 시장 j의 수요
/ 뉴욕 325
시카고 300
토피카 275 /
esub(j) 수요의 가격 탄력성(가격이 1과 동일할 때) /
뉴욕 1.5
시카고 1.2
토피카 2.0 / ;
테이블 d(i,j) 거리(천 마일)
뉴욕 시카고 토피카
시애틀 1.5 0.7 1.8
샌디에고 2.5 1.8 1.4 ;
스칼라 f 운임(1,000마일당 케이스당 달러) /90/ ;
매개변수 c(i,j) 운송 비용(케이스당 수천 달러) ;
c(i,j) = f * d(i,j) / 1000 ;
* ------------- 최적값 ----
매개변수
costMarg '객관적 eqn 한계' / 1 /
costLev '객관적 균형 수준' / 0 /
sPrice(i) '최적 공급 가격' /
시애틀 0.09
샌디에고 0
/
sLev(i) '최적 공급 수준' /
시애틀 350
샌디에고 550
/
dPrice(j) '최적 수요 가격' /
뉴욕 0.2250
시카고 0.1530
토피카 0.1260
/
dLev(j) '최적 수요 수준' /
뉴욕 325
시카고 300
토피카 275
/
zLev '최적의 z 레벨' / 122.175 /
xMarg(i,j) '최적 x 한계' /
시애틀.뉴욕 0
시애틀.시카고 0
시애틀 .topeka 0.126
샌디에고.뉴욕 0
샌디에고.시카고 0.009
샌디에고.topeka 0
/
xLev(i,j) '최적 x 수준' /
시애틀.뉴욕 50
시애틀.시카고 300
시애틀.토피카 0
샌디에고.뉴욕 275
샌디에고.시카고 0
샌디에고.토페카 275
/
;
긍정적인 변수
x(i,j) 케이스의 배송 수량
spr(i) '공급가격'
dPr(j) '수요 가격'
;
변수
z 총 운송 비용(단위: 수천 달러);
;
방정식
비용 정의 목적 함수
maxcost는 목적 함수를 최대로 정의합니다.
공급(i) 공장 i의 공급 제한을 준수합니다.
mcpsupply(i) 공장 i의 공급 제한을 준수합니다.
수요(j)는 시장 j의 수요를 충족시킵니다.
nldemand(j) '시장 j에서 가격 반응 수요를 충족'
이익(i,j)
;
비용 .. z =e= sum((i,j), c(i,j)*x(i,j)) ;
최대 비용 .. z =e= sum((i,j), -c(i,j)*x(i,j)) ;
공급(i) .. sum(j, x(i,j)) =l= a(i) ;
mcpsupply(i).. a(i) =g= sum(j, x(i,j));
수요(j) .. sum(i, x(i,j)) =g= b(j) ;
nldemand(j) .. sum(i, x(i,j)) =g= b(j)*(dPrice(j)/dPr(j))**esub(j) ;
이익(i,j) .. sPr(i) + c(i,j) =g= dPr(j);
모델 이동 / 비용, 공급, 수요 / ;
모델 transmcp / mcpsupply.sPr, nldemand.dPr,profit.x / ;
모델 transemp '슬롯 사이트를 사용하여 해결' / maxcost, Supply, nldemand /;
파일 FX / '%슬롯 사이트info%' /;
* ------------- LP 풀기/확인하기 -----------------
z 를 최소화하는 lp를 사용하여 translp를 해결합니다.
abort$[abs(costMarg-cost.m) > 1e-5] '나쁜 비용 한계',
비용.m, 비용Marg;
* 공급 방정식의 방향은 한계를 음수로 만듭니다.
abort$[smaxi, abs(sPrice(i)+supply.m(i)) > 1e-5] '공급 가격 불량',
공급.m, sPrice;
abort$[smaxj, abs(dPrice(j)-demand.m(j)) > 1e-5] '잘못된 수요 가격',
수요.m, dPrice;
abort$[abs(costLev-cost.l) > 1e-5] '나쁜 비용 수준',
비용.l, 비용Lev;
abort$[smaxi, abs(sLev(i)-supply.l(i)) > 1e-5] '공급 수준 불량',
공급.l, sLev;
abort$[smaxj, abs(dLev(j)-demand.l(j)) > 1e-5] '나쁜 수요 수준',
수요.l, dLev;
abort$[abs(z.m) > 1e-5] '나쁜 z 한계 - 0이 아님', z.m;
abort$[smax(i,j), abs(xMarg(i,j)-x.m(i,j)) > 1e-5] '불량 x 한계',
xm, xMarg;
abort$[abs(zLev-z.l) > 1e-5] '잘못된 z 레벨',
z.l, zLev;
abort$[smax(i,j), abs(xLev(i,j)-x.l(i,j)) > 1e-5] '잘못된 x 레벨',
xl, xLev;
* ------------- MCP 해결/확인 ----
dPr.l(j) = dPrice(j);
mcp를 사용하여 transmcp를 해결합니다.
abort$[smaxi, abs(sPrice(i)-mcpsupply.m(i)) > 1e-5] '잘못된 mcpsupply 가격',
mcpsupply.m, sPrice;
abort$[smaxj, abs(dPrice(j)-nldemand.m(j)) > 1e-5] '잘못된 수요 가격',
nldemand.m, dPrice;
abort$[smaxi, abs(sLev(i)+mcpsupply.l(i)) > 1e-5] '잘못된 mcpsupply 수준',
mcpsupply.l, sLev;
abort$[smaxj, abs(nldemand.l(j)) > 1e-5] '나쁜 MCP 수요 수준',
nldemand.l;
abort$[smax(i,j), abs(xMarg(i,j)-x.m(i,j)) > 1e-5] '불량 x 한계',
xm, xMarg;
abort$[smax(i,j), abs(xLev(i,j)-x.l(i,j)) > 1e-5] '잘못된 x 레벨',
xl, xLev;
abort$[smaxi, abs(sPrice(i)-sPr.l(i)) > 1e-5] '공급 가격 불량',
sPr.l, sPrice;
abort$[smaxj, abs(dPrice(j)-dPr.l(j)) > 1e-5] '나쁜 수요 가격',
dPr.l, dPrice;
* ------------- Dualvar를 사용하여 슬롯 사이트 풀기/확인 -----------------
* 슬롯 사이트 정보 파일을 사용하여 수요 가격을 정의합니다.
* 수요 방정식의 쌍대
fx '* dPr(j) = nldemand.m(j)'를 넣습니다.
loopj, put / 'dualvar' dPr(j) '-' nldemand(j);
닫다;
z 를 최대화하는 슬롯 사이트를 사용하여 transemp를 해결합니다.
abort$[abs(costMarg-maxcost.m) > 1e-5] '최소 비용 한계',
maxcost.m, 비용Marg;
abort$[smaxi, abs(sPrice(i)-supply.m(i)) > 1e-5] '공급 가격 불량',
공급.m, sPrice;
abort$[smaxj, abs(dPrice(j) + nldemand.m(j)) > 1e-5] '잘못된 수요 가격',
nldemand.m, dPrice;
abort$[abs(costLev-maxcost.l) > 1e-5] '나쁜 비용 수준',
maxcost.l, costLev;
abort$[smaxi, abs(sLev(i)-supply.l(i)) > 1e-5] '공급 수준 불량',
공급.l, sLev;
abort$[smaxj, abs(nldemand.l(j)) > 1e-5] '나쁜 DualEqu 수요 수준',
nldemand.l;
abort$[abs(z.m) > 1e-5] '나쁜 z 한계 - 0이 아님', z.m;
abort$[smax(i,j), abs(xMarg(i,j) + x.m(i,j)) > 1e-5] '불량 x 한계',
xm, xMarg;
abort$[abs(zLev + z.l) > 1e-5] '잘못된 z 레벨',
z.l, zLev;
abort$[smax(i,j), abs(xLev(i,j)-x.l(i,j)) > 1e-5] '잘못된 x 레벨',
xl, xLev;
abort$[smaxj, abs(dPrice(j)-dPr.l(j)) > 1e-5] '나쁜 수요 가격',
dPr.l, dPrice;
* ------------- 평형이 있는 슬롯 사이트 풀기/확인 -----------------
* 슬롯 사이트 정보 파일을 사용하여 슬롯 사이트에서 평형 모델을 설정합니다.
* nldemand가 발생하는 두 곳 모두에서 뒤집어야 한다는 점에 유의하세요.
* 모호한 사양을 피하기 위해
fx를 넣어;
'평형'을 두다 /;
'max z * maxcost'를 입력하세요. /;
루프나,
공급(i) 넣기 /;
;
루프j,
put '-'nldemand(j) /;
;
루프j,
put 'dualVar' dPr(j) '-' nldemand(j) /;
;
닫다;
슬롯 사이트를 사용하여 transemp를 해결합니다.
abort$[abs(costMarg-maxcost.m) > 1e-5] '최소 비용 한계',
maxcost.m, 비용Marg;
abort$[smaxi, abs(sPrice(i)-supply.m(i)) > 1e-5] '공급 가격 불량',
공급.m, sPrice;
abort$[smaxj, abs(dPrice(j) + nldemand.m(j)) > 1e-5] '잘못된 수요 가격',
nldemand.m, dPrice;
abort$[abs(costLev-maxcost.l) > 1e-5] '나쁜 비용 수준',
maxcost.l, costLev;
abort$[smaxi, abs(sLev(i)-supply.l(i)) > 1e-5] '공급 수준 불량',
공급.l, sLev;
abort$[smaxj, abs(nldemand.l(j)) > 1e-5] '나쁜 DualEqu 수요 수준',
nldemand.l;
abort$[abs(z.m) > 1e-5] '나쁜 z 한계 - 0이 아님', z.m;
* 최소에서 최대로 스위치를 사용하여 x 변경 기호의 한계
abort$[smax(i,j), abs(xMarg(i,j) + x.m(i,j)) > 1e-5] '불량 x 한계',
xm, xMarg;
abort$[abs(zLev + z.l) > 1e-5] '잘못된 z 레벨',
z.l, zLev;
abort$[smax(i,j), abs(xLev(i,j)-x.l(i,j)) > 1e-5] '잘못된 x 레벨',
xl, xLev;
abort$[smaxj, abs(dPrice(j)-dPr.l(j)) > 1e-5] '나쁜 수요 가격',
dPr.l, dPrice;
* ==============================================================
* 동일한 테스트를 다시 수행하지만 이제는 색인화되지 않은 슬롯 사이트info 파일을 사용합니다.
* ==============================================================
* ------------- Dualvar를 사용하여 슬롯 사이트 풀기/확인 -----------------
* 슬롯 사이트 정보 파일을 사용하여 수요 가격을 정의합니다.
* 수요 방정식의 쌍대
fx '* dPr(j) = nldemand.m(j)'를 넣습니다.
putclose / 'dualvar dPr -nldemand';
z 를 최대화하는 슬롯 사이트를 사용하여 transemp를 해결합니다.
abort$[abs(costMarg-maxcost.m) > 1e-5] '최소 비용 한계',
maxcost.m, 비용Marg;
abort$[smaxi, abs(sPrice(i)-supply.m(i)) > 1e-5] '공급 가격 불량',
공급.m, sPrice;
abort$[smaxj, abs(dPrice(j) + nldemand.m(j)) > 1e-5] '잘못된 수요 가격',
nldemand.m, dPrice;
abort$[abs(costLev-maxcost.l) > 1e-5] '나쁜 비용 수준',
maxcost.l, costLev;
abort$[smaxi, abs(sLev(i)-supply.l(i)) > 1e-5] '공급 수준 불량',
공급.l, sLev;
abort$[smaxj, abs(nldemand.l(j)) > 1e-5] '나쁜 DualEqu 수요 수준',
nldemand.l;
abort$[abs(z.m) > 1e-5] '나쁜 z 한계 - 0이 아님', z.m;
abort$[smax(i,j), abs(xMarg(i,j) + x.m(i,j)) > 1e-5] '불량 x 한계',
xm, xMarg;
abort$[abs(zLev + z.l) > 1e-5] '잘못된 z 레벨',
z.l, zLev;
abort$[smax(i,j), abs(xLev(i,j)-x.l(i,j)) > 1e-5] '잘못된 x 레벨',
xl, xLev;
abort$[smaxj, abs(dPrice(j)-dPr.l(j)) > 1e-5] '나쁜 수요 가격',
dPr.l, dPrice;
* ------------- 평형이 있는 슬롯 사이트 풀기/확인 -----------------
* 슬롯 사이트 정보 파일을 사용하여 슬롯 사이트에서 평형 모델을 설정합니다.
* nldemand가 발생하는 두 곳 모두에서 뒤집어야 한다는 점에 유의하세요.
* 모호한 사양을 피하기 위해
fx '평형'을 입력하세요 /;
'max z * 최대 비용 공급 -nldemand' /를 입력합니다.
putclose 'dualVar dPr -nldemand' /;
슬롯 사이트를 사용하여 transemp를 해결합니다.
abort$[abs(costMarg-maxcost.m) > 1e-5] '최소 비용 한계',
maxcost.m, 비용Marg;
abort$[smaxi, abs(sPrice(i)-supply.m(i)) > 1e-5] '공급 가격 불량',
공급.m, sPrice;
abort$[smaxj, abs(dPrice(j) + nldemand.m(j)) > 1e-5] '잘못된 수요 가격',
nldemand.m, dPrice;
abort$[abs(costLev-maxcost.l) > 1e-5] '나쁜 비용 수준',
maxcost.l, costLev;
abort$[smaxi, abs(sLev(i)-supply.l(i)) > 1e-5] '공급 수준 불량',
공급.l, sLev;
abort$[smaxj, abs(nldemand.l(j)) > 1e-5] '나쁜 DualEqu 수요 수준',
nldemand.l;
abort$[abs(z.m) > 1e-5] '나쁜 z 한계 - 0이 아님', z.m;
* 최소에서 최대로 스위치를 사용하여 x 변경 기호의 한계
abort$[smax(i,j), abs(xMarg(i,j) + x.m(i,j)) > 1e-5] '불량 x 한계',
xm, xMarg;
abort$[abs(zLev + z.l) > 1e-5] '잘못된 z 레벨',
z.l, zLev;
abort$[smax(i,j), abs(xLev(i,j)-x.l(i,j)) > 1e-5] '잘못된 x 레벨',
xl, xLev;
abort$[smaxj, abs(dPrice(j)-dPr.l(j)) > 1e-5] '나쁜 수요 가격',
dPr.l, dPrice;