xpress03.gms : XPRESS 테스트 스위트 - 솔루션 풀 예

설명

시설 위치 문제의 간단한 버전은 다음과 같은 방법을 보여주기 위해 사용됩니다.
솔루션 풀 및 이와 관련된 도구가 작동합니다. 이 예는 취해진 것입니다
Cplex 11 사용자 매뉴얼(ILOG, Cplex 11 사용자 매뉴얼, 2007)에서 발췌

한 회사는 서비스를 제공하기 위해 최대 4개의 창고를 개설하는 것을 고려하고 있습니다.
9개의 다른 지역. 고정비용의 합을 최소화하는 것이 목표
창고 개설 및 다양한 운송과 관련된
창고에서 지역으로 상품을 배송하는 데 발생하는 비용입니다.

창고 오픈 여부는 바이너리 변수 ow로 표현됩니다.
창고 i에서 지역 j로 물품을 배송할지 여부가 표시됩니다.
이진 변수 oa로.

각 지역에는 지정된 양의 물품이 필요하며 각 창고는 보관할 수 있습니다.
한정된 수량의 상품만. 또한 각 지역에서 서비스를 제공해야 합니다.
정확히 하나의 창고로.

소형 모델 유형 :MIP


카테고리 : 무료 슬롯 테스트 라이브러리


메인 파일 : xpress03.gms

$title XPRESS 테스트 모음 - 솔루션 풀 예(XPRESS03,SEQ=548)

$onText

시설 위치 문제의 간단한 버전은 다음과 같은 방법을 보여주기 위해 사용됩니다.
솔루션 풀 및 이와 관련된 도구가 작동합니다. 이 예는 취해진 것입니다
Cplex 11 사용자 매뉴얼(ILOG, Cplex 11 사용자 매뉴얼, 2007)에서 발췌

한 회사는 서비스를 제공하기 위해 최대 4개의 창고를 개설하는 것을 고려하고 있습니다.
9개의 다른 지역. 고정비용의 합을 최소화하는 것이 목표
창고 개설 및 다양한 운송과 관련된
창고에서 지역으로 상품을 배송하는 데 발생하는 비용입니다.

창고 오픈 여부는 바이너리 변수 ow로 표현됩니다.
창고 i에서 지역 j로 물품을 배송할지 여부가 표시됩니다.
이진 변수 oa로.

각 지역에는 지정된 양의 물품이 필요하며 각 창고는 보관할 수 있습니다.
한정된 수량의 상품만. 또한 각 지역에서 서비스를 제공해야 합니다.
정확히 하나의 창고로.

다음 무료 슬롯 프로그램은 솔루션을 수집하는 방법을 보여줍니다.
무료 슬롯/XPRESS를 사용한 최적화 중에 발견되었습니다.  무료 슬롯/XPRESS는
GDX 컨테이너/파일에 개별 솔루션을 추가할 수 있습니다.
다른 프로그램이나 동일한 무료 슬롯 실행에서 사용됩니다.  무료 슬롯/XPRESS의 이름은 다음과 같습니다.
이러한 GDX 컨테이너 'soln_loc_sNN.gdx', 여기서 NN은 직렬입니다.
발견된 솔루션의 수  다양한 솔루션을 관리하려면
무료 슬롯/XPRESS에서 생성된 GDX 컨테이너의 이름은 다음 위치에 저장됩니다.
set elements 파일을 사용하는 set 'index'의 solnpool.gdx*.

$offText

i 창고 설정 / w1*w4 /
    j개 지역 / r1*r9 /
매개변수
    f(i) 고정비 / w1 130, w2 150, w3 170, w4 180 /
    c(i) 용량 / w1 90, w2 110, w3 130, w4 150 /
    d(j) 수요 / r1 10, r2 10, r3 12, r4 15, r5 15,
                        r6 15, r7 20, r8 20, r9 30 /;

표 t(j,i) 운송 비용
        w1 w2 w3 w4
    r1 10 30 25 55
    r2 10 25 25 45
    r3 20 23 30 40
    r4 25 10 26 40
    r5 28 12 20 29
    r6 36 19 16 22
    r7 40 39 22 27
    r8 75 65 55 35
    r9 34 43 41 62;

변수
    totcost 총비용
    fcost 고정 비용
    tcost 운송비
    개방형 창고에 대한 ow(i) 표시기
    oa(i,j) 지역으로의 개방형 선적 아크 창고 표시
이진변수 ow, oa;

방정식
    deftotcost 정의 총 비용
    defcost 정의 고정 비용
    deftcost 정의 운송 비용
    defwcap(i) 용량에 따라 창고 활용을 제한합니다.
    onew(j) 지역당 하나의 창고만 있음
    defow(i,j) i에서 j로 배송되면 창고가 열립니다.

deftotcost..totcost =e= fcost + tcost;

defcost.. fcost =e= sum(i, f(i)*ow(i));

deftcost.. tcost =e= sum((i,j), t(j,i)*oa(i,j));

defwcap(i).. sum(j, d(j)*oa(i,j)) =l= c(i);

onew(j)..sum(i, oa(i,j)) =e= 1;

defow(i,j)..ow(i) =g= oa(i,j);

모델 위치 /all/ ;

* --- 솔루션을 보관할 세트, 매개변수 및 파일을 정의합니다.

가능한 솔루션을 설정합니다. /file1*file1000/
     solnpool(soln) 실제 솔루션;
스칼라 카드솔 솔루션 수;

별칭 (soln,s1,s2), (*,u);
매개변수
    owX(soln,i) 솔루션별 창고 표시기
    oaX(soln,i,j) 솔루션별 호 표시기
    xcostX(soln,*) 솔루션별 비용 구조;
파일 fsoln, fopt / xpress.opt /;
옵션 limrow=0, limcol=0;
옵션 optcr=0;
옵션 mip=xpress;
loc.optfile=1; loc.solprint=%solPrint.quiet%; loc.savepoint = 1;

putclose fopt 'solnpool solnpool.gdx';
mip를 사용하여 loc min totcost를 해결합니다.

Execute_load 'solnpool.gdx', solnpool=index;
Cardoln = 카드(solnpool); 디스플레이 카드솔;
oaX(soln,i,j) = 0; owX(soln,i) = 0; xcostX(soln,u) = 0;
루프(solnpool(soln),
  put_utility fsoln 'gdxin' / solnpool.te(soln);
  실행_로드포인트;
  oaX(soln,i,j) = round(oa.l(i,j));
  owX(soln,i) = round(ow.l(i));
  xcostX(soln,'totcost') = totcost.l;
  xcostX(soln,'tcost') = tcost.l;
  xcostX(soln,'fcost') = fcost.l;
);
* 무료 슬롯에 보고된 솔루션 복원
Execute_loadpoint 'loc_p.gdx';

xcostX 표시;