mcp10.gms : 음수 equ.var을 사용한 무료 슬롯 게임 모델

설명

transmcp를 기반으로 하며 다양한solvLink 값에 대한 '부호 뒤집기'를 테스트합니다.

기여자: Alex

소형 모델 유형 :무료 슬롯 게임


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


메인 파일 : mcp10.gms

$title 무료 슬롯 게임 모델(음수 equ.var 포함)(MCP10,SEQ=604)

$onText
transmcp를 기반으로 하며 다양한solvLink 값에 대한 '부호 뒤집기'를 테스트합니다.

기여자: 알렉스
$offText

세트
     i 통조림 공장 / 시애틀, 샌디에이고 /
     j 마켓 / 뉴욕, 시카고, 토피카 / ;

매개변수

     a(i) 경우에 따라 공장 i의 생산 능력(가격이 단일인 경우)
       /시애틀 350
            샌디에이고 600 /,

     b(j) 경우에 시장 j의 수요(가격이 1일 때)
       / 뉴욕 325
            시카고 300
            토피카 275 /,

      esub(j) 수요의 가격 탄력성(가격이 1과 동일할 때)
       / 뉴욕 1.5
            시카고 1.2
            토피카 2.0 /;

* 공급 제약에 대해 0이 아닌 PI를 얻기 위해 거리를 변경했습니다.

테이블 d(i,j) 거리(천 마일)
                  뉴욕 시카고 토피카
    시애틀 2.5 1.7 1.8
    샌디에이고 52.5 31.8 1.4 ;

스칼라 f 운임(1,000마일당 케이스당 달러) /90/ ;

매개변수 c(i,j) 운송 비용(케이스당 수천 달러) ;

          c(i,j) = f * d(i,j) / 1000 ;

변수
     x(i,j) 케이스의 배송 수량
     z 총 운송 비용(단위: 수천 달러);

양의 변수 x;

방정식
     비용 정의 목적 함수
     공급(i) 공장 i의 공급 제한을 준수합니다.
     수요(j)는 시장 j의 수요를 충족시킵니다.

비용 .. z =e= sum((i,j), c(i,j)*x(i,j)) ;

공급(i) .. sum(j, x(i,j)) =l= a(i);

수요(j) .. sum(i, x(i,j)) =g= b(j) ;

* 무료 슬롯 게임에 필요한 새로운 equs 및 vars

긍정적인 변수
     w(i) 공급 노드 i의 그림자 가격,
     p(j) 수요 노드 j의 그림자 가격;

방정식
     공급x(i) 방향이 재설정된 방정식
     이익(i,j) 영 이익 조건;

이익(i,j).. w(i) + c(i,j) =g= p(j);

Supplyx(i).. a(i) =g= sum(j, x(i,j));

* 방정식-변수의 사양을 포함하는 모델 선언
* 연관:

모델 운송 / 비용, 공급, 수요 /
       거래 / 비용, 공급x, 수요 /
       transmcp /profit.x,-supply.w,demand.p/
       transmcpX / 이익.x, 공급x.w, 수요.p/ ;

세트 실행 / lp,lpX,mcpX,0*6,13 'sl=3이지만 Readycollect 사용' /
     슬링크(실행) / 0*6,13 /;

매개변수 담당자(i,runs) 공급 한계에 대한 Q&D 요약 보고서;

옵션 limcol=0,limrow=0;

운송 min z us lp를 해결하십시오.
담당자(i,'lp') = -supply.m(I);

transx us lp min z를 풀어보세요;
담당자(i,'lpX') = 공급x.m(I);

transmcpx us 무료 슬롯 게임를 해결하십시오.
담당자(i,'mcpX') = 공급x.m(I);

옵션 solprint=off;

$ontext
주의: 선택한solvLink 값으로 실행할 수 없는 솔버의 경우,
      CMEX는 필요에 따라solvLink 값을 재설정합니다.
      사용된 값(재설정 후)은 <modelname>.linkUsed에서 확인할 수 있습니다.
새로운 코드는 그리드 해석(solveLink=3)에도 ReadyCollect를 사용해야 합니다.
하지만 이전 스타일의 수면 루프는 여전히 작동하며 이전 코드에서 사용됩니다.
$offtext

스칼라
  핸들, 카운트, RC
  useOldCollect '오래된 투박한 수면 루프 사용'
  useNewCollect '더 새롭고 더 나은 ReadyCollect를 사용하세요'
  ;
루프 스링크,
   transmcp.solveLink = mod(slink.val,10);
   x.l(i,j) = 0;
   이익.m(i,j) = 0;
   공급.m(i) = 0;
   transmcp를 우리 무료 슬롯 게임로 해결하십시오.
   useOldCollect = (transmcp.linkUsed = 3) 및 (slink.val < 10);
   useNewCollect = (transmcp.linkUsed = 6) 또는 (slink.val > 10);
   transmcp.solveLink, transmcp.linkUsed, useOldCollect, useNewCollect를 표시합니다.
   if useOldCollect,
      핸들 = transmcp.handle;
      개수 = 0;
      while handlecollect(처리)가 아님,
         abort.noError$[count >= 50] '기다렸지만 그리드 해석이 완료되지 않았습니다.';
         개수 = 개수 + 1;
         display$sleep(0.1) '0.1초 동안 자고 있었습니다', count;
      ;
      display$handledelete(handle) '핸들 삭제 문제';
   ;
   if useNewCollect,
      핸들 = transmcp.handle;
      rc = ReadyCollect(핸들,5);
      abort.noError$[4=rc] '멀티 스레드 해결을 기다렸지만 사용자 시간 초과에 도달했습니다.';
      abort.noError$[5=rc] '그리드 해석을 기다렸지만 사용자 시간 초과에 도달했습니다.';
      abort$rc '멀티 스레드 또는 그리드 해석이 잘못 반환될 때까지 기다리세요', rc;
      abort$[0=handlecollect(handle)] '모델 솔루션 수집 오류';
      display$handledelete(handle) '핸들 삭제 문제';
   ;
   담당자(i,slink) = 공급.m(I);
;

디스플레이 담당자;

매개변수 repx(i,runs)는 허용오차를 초과합니다.

repx(i,runs) = max(0,abs(rep(i,runs)-rep(i,'lp'))-1e-6);

디스플레이 repx;

abort$card(repx) '여백이 잘못되었습니다.';