슬롯 사이트 추천 인스턴스(pyEmbMI)

Libinclude 파일pyembpy.gms에 대한슬롯 사이트 추천 Python API클래스GAMSModelInstance. 이 클래스의 인스턴스는 슬롯 사이트 추천을 반복해서 재생성하지 않고도 수정하고 해결할 수 있는 슬롯 사이트 추천 인스턴스에 대한 액세스를 제공합니다.

사용법:

$libinclude pyEmbMI myPyMI '해결문' [optlist] updateList

어디:

인수설명
myPyMI GAMSModelInstance Python 식별자의 이름.
해결문 슬롯 사이트 추천 이름, 솔버 유형 및 최적화 방향/변수를 제공하는 해석 문의 일부, 예:운송 최소화 z us lp.
선택 목록 선택적 목록-optkey=optval옵션 쌍, 예:-reslim=100 -all_model_types=cplex빌드 업데이트 aGamsOption인스턴스화 호출에 사용된 개체입니다. 참조슬롯 사이트 추천control.options.GamsOptions 클래스 참조자세한 내용은.
업데이트 목록 업데이트 튜플 목록(아래 세부정보 참조):
변수 업데이트 튜플:gmsModelVar.Lower|상위|고정|원시|Dual.gmsPar.Zero|BaseCase|누적
매개변수 업데이트 쌍:gmsModelPar.Zero|BaseCase|누적

업데이트 튜플에는 변수/방정식 속성(주로 경계) 및 매개변수 업데이트를 처리하는 방법에 대한 지침이 포함되어 있습니다: 매개변수를 변경하려면 항목에 구문이 포함됩니다:x.액션어디에서x는 매개변수의 슬롯 사이트 추천 이름이고액션은 매개변수의 업데이트 유형입니다. 매개변수를 정의하는 집합 교차점에 해당하는 데이터가 없는 경우 매개변수가 어떻게 업데이트되는지 식별합니다.

  • 매개변수 이름.제로명시적으로 설정되지 않은 모든 매개변수 값을 설정합니다.제로.
  • 매개변수 이름.BaseCase첫 번째 슬롯 사이트 추천 인스턴스화의 값으로 명시적으로 설정되지 않은 모든 매개변수 값을 설정합니다.
  • 매개변수 이름.Accumulate명시적으로 마지막으로 알려진 값으로 설정되지 않은 모든 매개변수 값을 유지합니다.

변수/등식의 속성을 업데이트하려면 다음 4가지 사항을 고려해야 합니다.

  • 어떤 변수나 방정식을 사용할지
  • 변경할 속성(예: 해당 상한 및 하한)
  • 새 값이 포함된 매개변수는 무엇입니까
  • 0으로 무엇을 해야 할까요?제로, BaseCase축적위로부터. 이는 다음과 같이 표현됩니다.튜플 VariableName.attribute.parameterWithNewValues.zeroKeyword. 예를 들어x.Upper.xUp.BaseCase상한을 재설정합니다x매개변수의 값으로xup명시적으로 설정되지 않은 값을 마지막으로 알려진 값으로 설정합니다.

따라서 이 포함에 대한 호출은 다음과 같습니다:

$libinclude pyEmbMI miTransport 'lp를 사용하여 z를 최소화하는 전송' -all_model_types=cplex x.Upper.xUp.BaseCase b.zero


임베디드 코드 슬롯 사이트 추천 인스턴스 예

슬롯 사이트 추천임베디드 코드 시설슬롯 사이트 추천가 실행되는 동안 외부 코드(예: Python)를 실행하고 디스크 액세스(예: GDX) 없이 슬롯 사이트 추천와 데이터를 교환할 수 있습니다.

이 예에서는 임베디드 코드 기능을 슬롯 사이트 추천 Python OO-API 클래스와 결합합니다.GAMSModelInstance. 이 클래스의 인스턴스는 슬롯 사이트 추천을 반복해서 재생성하지 않고도 수정하고 해결할 수 있는 슬롯 사이트 추천 인스턴스에 대한 액세스를 제공합니다.

여기서는 libinclude를 사용하여 슬롯 사이트 추천 인스턴스를 한 번 생성합니다.pyEmbMI. 이 호출에 대한 인수는 a의 인스턴스를 인스턴스화하는 데 필요한 모든 정보를 제공합니다.GAMSModelInstance. 특히 우리는 해결 문의 관련 부분과 수정자 목록을 제공합니다. 이는 변경될 수 있는 슬롯 사이트 추천의 매개변수입니다. 또한 GAMS/Python OO-API 클래스에 속하는 몇 가지 옵션을 제공할 수 있습니다.슬롯 사이트 추천옵션경유-키=값쌍. 의 사용법에 대해 자세히 알아보세요.GAMSModelInstance그리고슬롯 사이트 추천옵션에서슬롯 사이트 추천/파이썬 OO-API.

배경:

시나리오 루프의 전통적인 슬롯 사이트 추천 구현은 다음과 같습니다:

loop(실행할 시나리오,
   a(i) = newsupply(ScenariosToRun,i);
   b(j) = newdemand(ScenariosToRun,j);
   z를 최소화하는 lp를 사용하여 전송을 해결합니다.
   결과x(ScenariosToRun,i,j) = x.l(i,j)
);

임베디드 코드/GAMSModelInstance 솔루션을 사용하면 이 루프는 다음과 같습니다.

$libInclude pyEmbMI tMI '우리에게 lp min z 전송' -all_model_types=cplex a.Zero b.Zero
loop(실행할 시나리오,
   a(i) = newsupply(ScenariosToRun,i);
   b(j) = newdemand(ScenariosToRun,j);
   계속임베디드코드:
   슬롯 사이트 추천db['a'].copy_symbol(tMI.sync_db['a'])
   슬롯 사이트 추천db['b'].copy_symbol(tMI.sync_db['b'])
   tMI.solve()
   tMI.sync_db['x'].copy_symbol(슬롯 사이트 추천db['x'])
   일시 중지EmbeddedCode x
   resultantx(ScenariosToRun,i,j) = x.l(i,j);
);

약간의 도우미 기능 포함solveMI(아래 참조) 이 코드는 더욱 유사해집니다.

$libInclude pyEmbMI tMI '우리에게 lp min z 전송' -all_model_types=cplex a.Zero b.Zero
loop(실행할 시나리오,
   a(i) = newsupply(ScenariosToRun,i);
   b(j) = newdemand(ScenariosToRun,j);
   계속임베디드코드:
   solvMI(tMI,['a','b'],['x'])
   일시 중지EmbeddedCode x
   resultantx(ScenariosToRun,i,j) = x.l(i,j);
);

반대GUSS/시나리오 해결사여기서 우리는 슬롯 사이트 추천에 루프 로직을 구현하고 루프 본문에서 다음의 해석 메소드를 실행합니다.GAMSModelInstance27911_27975슬롯 사이트 추천get|세트우리가 사용하는 내장 코드 기능의 방법GAMSDatabase.copy_symbol슬롯 사이트 추천 간 데이터 이동(슬롯 사이트 추천db) 및GAMSModelInstance.sync_db.

참고
이 예에서는 능력을 행사하지 않더라도 다음의 조합GAMSModelInstance및 포함된 코드는 n번째 시나리오의 결과(원원 및 쌍대)를 기반으로 시나리오 n+1을 정의하는 방법을 제공합니다. GUSS/Scenario Solver에서는 불가능합니다.

예:

* GMSPYTHONLIB는 sysdir/GMSPython의 내부 Python 설치를 사용하도록 자동으로 설정됩니다.
$if setEnv GMSPYTHONLIB $abort.noError 내장 코드 Python을 사용할 준비가 되지 않았습니다.
$log --- Python 라이브러리 %sysEnv.GMSPYTHONLIB% 사용

세트
   i '통조림 식물' / 시애틀, 샌디에고 /
   j 'markets' / 뉴욕, 시카고, 토피카 /;

매개변수
   a(i) '경우에 따라 식물 i의 용량'
        /시애틀 350
          샌디에이고 600 /

   b(j) '경우에 따라 시장 j의 수요'
        / 뉴욕 325
          시카고 300
          토피카 275 /;

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

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

매개변수 c(i,j) '케이스당 운송 비용(단위: 수천 달러)';
c(i,j) = f*d(i,j)/1000;

변수
   x(i,j) '케이스의 선적 수량'
   z '총 운송 비용(천 달러)';

양수 변수 x;

방정식
   비용 '목적 함수 정의'
   Supply(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);

슬롯 사이트 추천 운송 / 모두 /;

'실행할 시나리오' 설정 / base, run1, run2 /;

테이블 newsupply(s,i) '(용량)에 대한 업데이트 프로그램'
         시애틀 샌디에고
   베이스 350 600
   실행1 300 650
   실행2 400 550;

테이블 newdemand(s,j) 'b(수요)에 대한 업데이트'
         뉴욕 시카고 토피카
   베이스 325 300 275
   실행1 325 300 275
   실행2 350 300 250;

$set 솔버로그
$if set useSolverLog $setsolverlog 출력=sys.stdout
임베디드 코드 Python:
defsolvMI(mi, SymIn=[], SymOut=[]):
  SymIn의 Sym에 대해:
    gams.db[sym].copy_symbol(mi.sync_db[sym])
  mi.solve(%solverlog%)
  SymOut의 Sym에 대해:
    시도해 보세요:
      gams.db[sym].clear() # Sym에 대해 "writerTo" 플래그가 설정되었는지 확인하기 위해 기호를 명시적으로 지웁니다.
      mi.sync_db[sym].copy_symbol(gams.db[sym])
    제외:
      통과
일시중지임베디드코드
abort$execerror '파이썬 오류입니다. 로그를 확인하세요';

$libInclude pyEmbMI tMI 'lp min z 전송' -all_model_types=cplex a.Zero b.Zero

매개변수 repX(s,i,j) 'x 수준에 대한 수집기';

루프(들,
   a(i) = 뉴스공급(s,i);
   b(j) = 새로운 수요(s,j);
   계속임베디드코드:
   solvMI(tMI,['a','b'],['x'])
   일시 중지EmbeddedCode x
   repX(s,i,j) = x.l(i,j);
);

옵션 담당자X:0:1:2;
대표X 표시;

오류 '빈 솔루션' 설정;
오류(들) = sum((i,j), repX(s,i,j)) = 0;
abort$card(error) '일부 시나리오에 대한 솔루션 누락', 오류;

완전한 예는 GAMS 슬롯 사이트 추천 라이브러리의 일부이기도 합니다. 슬롯 사이트 추천 참조[embmiex1]참고용.