설명
이 테스트 모델은 GAMSLIB의 기회 모델을 기반으로 합니다. 기여자: Michael Bussieck 날짜: 2010년 11월 19일
소형 모델 유형 :메가 슬롯
카테고리 : 메가 슬롯 테스트 라이브러리
메인 파일 : lindorng.gms
LindoGlobal의 CheckRange 옵션에 대한 $title 테스트(LINDORNG,SEQ=505)
$onText
이 테스트 모델은 GAMSLIB의 기회 모델을 기반으로 합니다.
기여자: Michael Bussieck
날짜: 2010년 11월 19일
$offText
$eolCom !
사료 세트 / 보리, 귀리, 참깨, 가루 식사 /
n 영양소 / 단백질, 지방 /
nn(n) n의 부분집합;
매개변수 가격(f) 사료 가격(톤당 fgld) / 보리 24.55
귀리 26.75
참깨 39.00
갈은 식사 40.50 /
req(n) 요구사항(pct) / 단백질 = 21, 지방 = 5 /
테이블 char(*,n,f) 피드 특성(pct)
보리 귀리 참깨 가루 식사
평균.단백질 12.0 11.9 41.8 52.1
평균지방 2.3 5.6 11.1 1.3
분산.단백질 .28 .19 20.5 .62
변수 x(f) 사료 혼합(%)
비용 톤당 총 비용
양의 변수 x;
방정식 cdef 비용 정의
MC 믹스 제약
cc(n) 영양 균형;
cdef.. 비용 =e= sum(f, 가격(f)*x(f));
mc..sum(f, x(f)) =e= 1;
cc(nn(n)).. sum(f, char("평균",n,f)*x(f)) - 1.645*sqrt(sum(f, char("분산",n,f)*sqr(x(f)))) =g= req(n);
모델 기회 기회 모델 / mc, cc, cdef /
옵션 nlp=lindoglobal, optcr=0; nn(n) = 예;
nlp를 사용하여 비용을 최소화하는 기회를 해결합니다.
매개변수 xsol(f); xsol(f) = x.l(f);
* 이제 최적의 지점에서 범위를 평가합니다.
찬스.optfile=1; 비용.lo=0; ! 재구성을 막다
$echo checkrange range.gdx > lindoglobal.opt
nlp를 사용하여 비용을 최소화하는 기회를 해결합니다.
hdr / lo, hi / 설정;
매개변수 cdef_cost(hdr)
cdef_x(f,hdr)
mc_x(f,hdr)
cc_x(n,f,hdr);
매개변수 pickf(f);
변수 z;
방정식 defz; defz.. z =e= sum(f$pickf(f), x(f));
모델 m1 / mc, defz /;
모델 m2 / cc, defz /;
모델 m3 / cdef, defz /;
* 엠씨
별칭 (f,ff), (np,n); x.fx(f) = xsol(f);
루프(ff,
픽프(ff) = 1; x.lo(ff) = 0; x.up(ff)=inf;
nlp를 사용하여 m1 min z를 해결합니다. mc_x(ff,'lo') = z.l; if (mc_x(ff,'lo')<-1e12, mc_x(ff,'lo')=-inf);
nlp를 사용하여 m1 max z를 해결합니다. mc_x(ff,'hi') = z.l; if (mc_x(ff,'hi')> 1e12, mc_x(ff,'hi')= inf);
픽프(ff) = 0; x.fx(ff) = xsol(ff));
* 참조
nn(n) = 아니요;
루프((np,ff),
nn(np) = 예; 픽프(ff) = 1; x.lo(ff) = 0; x.up(ff)=inf;
nlp를 사용하여 m2 min z를 해결합니다. cc_x(np,ff,'lo') = z.l; if (m2.modelstat=18 또는 cc_x(np,ff,'lo')<-1e12, cc_x(np,ff,'lo')=-inf);
nlp를 사용하여 m2 max z를 해결합니다. cc_x(np,ff,'hi') = z.l; if (m2.modelstat=18 또는 cc_x(np,ff,'hi')> 1e12, cc_x(np,ff,'hi')= inf);
nn(np) = 아니요; 픽프(ff) = 0; x.fx(ff) = xsol(ff));
* CDEF
비용.fx = 비용.l;
루프(ff,
픽프(ff) = 1; x.lo(ff) = 0; x.up(ff)=inf;
nlp를 사용하여 m3 min z를 해결합니다. cdef_x(ff,'lo') = z.l; if (cdef_x (ff,'lo')<-1e12, cdef_x (ff,'lo')=-inf);
nlp를 사용하여 m3 max z를 해결합니다. cdef_x(ff,'hi') = z.l; if (cdef_x (ff,'hi')> 1e12, cdef_x (ff,'hi')= inf);
픽프(ff) = 0; x.fx(ff) = xsol(ff));
비용.lo=0; 비용.up=inf;
nlp를 사용하여 m3 최소 비용을 해결합니다. cdef_cost('lo') = 비용.l; if (cdef_cost('lo')<-1e12, cdef_cost('lo')=-inf);
nlp를 사용하여 m3 최대 비용을 해결합니다. cdef_cost('hi') = 비용.l; if (cdef_cost('hi')> 1e12, cdef_cost('hi')= inf);
Execute_unload 'rangeWant.gdx' cdef_cost, cdef_x, mc_x, cc_x;
'gdxdiff range.gdx rangeWant.gdx Eps=1e-4 > %system.nullfile%'을 실행합니다.
abort$errorlevel 'range.gdx와 rangeWant.gdx가 다릅니다';