설명
이 모델은 잘 알려진 운송 문제를 구현하고 해결합니다. 슬롯 머신 문제에 대한 몇 가지 시나리오를 비동기적으로 엔진. 슬롯 머신가 내보내는 시나리오에 대한 제출 루프에서 workfile을 작성하고 해결 문과 함께 슬롯 머신 작업을 엔진에 제출합니다. 이는 다음을 사용하는 내장 코드 Python 코드 섹션에서 수행됩니다. 파이썬 엔진 API. 작업 핸들은 요소에 저장됩니다. 동적 세트의 텍스트(h). 수집 루프에서 작업 결과 엔진에서 작업이 완료되자마자 다운로드됩니다. 결과 모델 속성이 포함된 GDX 포인트 파일인 GDX 파일로 다시 돌아옵니다. 예: Transport.modelStat 및 Transport.solveStat. 슬롯 머신를 사용한 비동기식 해결의 독립성을 확인하기 위해 특정 모델 및 데이터의 엔진, 제출할 논리 및 수집 모델이 batInlude 파일인engine_async.gms로 이동되었습니다. 비동기 해결의 전반적인 논리는 다음의 아이디어를 따릅니다. 슬롯 머신 그리드 및 멀티스레딩은 시설 아이디어를 해결합니다. 기고자: Michael Bussieck, 2023년 12월 모델이 제대로 작동하려면 환경 변수가 설정되어 있어야 합니다. ENGINE_URL, ENGINE_USER, ENGINE_PASSWORD ENGINE_NAMESPACE
카테고리 : 슬롯 머신 데이터 유틸리티 라이브러리
메인 파일 : EngineSolveAsync.gms 포함: EngineSolveAsync.gms engine_async.gms
$title 해결 문을 엔진에 비동기적으로 제출하는 방법을 보여줍니다(ENGINESOLVEASYNC,SEQ=150)
$onText
이 모델은 잘 알려진 전송 문제를 구현하고 해결합니다.
슬롯 머신 문제에 대한 몇 가지 시나리오를 비동기적으로
엔진. 슬롯 머신가 내보내는 시나리오에 대한 제출 루프에서
workfile을 작성하고 해결 문과 함께 슬롯 머신 작업을 엔진에 제출합니다.
이는 다음을 사용하는 내장 코드 Python 코드 섹션에서 수행됩니다.
파이썬 엔진 API. 작업 핸들은 요소에 저장됩니다.
동적 세트의 텍스트(h). 수집 루프에서 작업 결과
엔진에서 작업이 완료되자마자 다운로드됩니다. 결과
모델 속성이 포함된 GDX 포인트 파일인 GDX 파일로 다시 돌아옵니다.
예: Transport.modelStat 및 Transport.solveStat.
슬롯 머신를 사용한 비동기식 해결의 독립성을 확인하기 위해
특정 모델 및 데이터의 엔진, 제출할 논리 및
수집 모델이 batInlude 파일인engine_async.gms로 이동되었습니다.
비동기 해결의 전반적인 논리는 다음의 아이디어를 따릅니다.
슬롯 머신 그리드 및 멀티스레딩은 시설 아이디어를 해결합니다.
기고자: Michael Bussieck, 2023년 12월
$offText
* 모델이 제대로 작동하려면 환경 변수가 설정되어 있어야 합니다.
* ENGINE_URL, ENGINE_USER, ENGINE_PASSWORD ENGINE_NAMESPACE
$if not setEnv ENGINE_URL $abort.noError 슬롯 머신 엔진의 환경 변수가 설정되지 않았습니다.
세트
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);
모델 운송 / 모두 /;
s '시나리오' 설정 / 1*5 /;
매개변수
dem(s,j) '무작위 수요';
세트
h(s) '인스턴스 핸들/토큰을 저장합니다';
* 임의의 요구 사항 만들기
dem(s,j) = b(j)*uniform(.95,1.15);
$batInclude 엔진_async 초기화 s h
루프(들,
b(j) = dem(s,j);
$ batIncludeengine_async lp를 사용하여 전송 최소 z 해결
);
loop(s, put_utility 'MsgLog' / s.tl:5 ' ' h.te(s));
매개변수
repx(s,i,j) '솔루션 보고서'
repy(s,*) '요약 보고서';
repy(s,'SolveStat') = na;
repy(s,'ModelStat') = na;
$onImplicitAssign
스칼라는 수집됨 /0/;
반복하다
루프(s$h(s),
$ batIncludeengine_async 수집 isCollected
if(isCollected=1,
repx(s,i,j) = x.l(i,j);
repy(s,'solvestat') = Transport.solveStat;
repy(s,'modelstat') = Transport.modelStat;
repy(s,'resusd' ) = Transport.resUsd;
repy(s,'objval') = 전송.objVal;
elseif isCollected>0,
put_utility 'MsgLog' / 'Job ' s.tl:0 '이(가) ' isCollected:0:0 상태로 성공적으로 반환되지 않았습니다.
);
);
display$sleep(card(h)*0.2) '한동안 자고 있었습니다';
카드(h) = 0 또는 경과 시간 > 20이 될 때까지;
응답 표시, 응답;
abort$sum(s$(repy(s,'solvestat') = na),1) '일부 작업이 반환되지 않았습니다.';