lindorng.gms : LindoGlobals CheckRange 옵션 테스트

설명

이 테스트 모델은 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가 다릅니다';