Libinclude 파일pyembpy.gms에 대한슬롯 사이트 추천 Python API클래스GAMSModelInstance. 이 클래스의 인스턴스는 슬롯 사이트 추천을 반복해서 재생성하지 않고도 수정하고 해결할 수 있는 슬롯 사이트 추천 인스턴스에 대한 액세스를 제공합니다.
사용법:
$libinclude pyEmbMI myPyMI '해결문' [optlist] updateList
어디:
인수 설명 myPyMIGAMSModelInstance 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]참고용.