목차
소개
GAMS 슬롯 커뮤니티드 시설을 사용하면 고성능 컴퓨팅 슬롯 커뮤니티드와 여러 CPU가 있는 시스템을 활용할 수 있습니다. 이 언어 기능은 플랫폼 독립적인 방식으로 모델 솔루션 작업의 비동기 제출 및 수집 관리를 용이하게 합니다. 기존 운영 체제 기능에 의존하는 간단한 아키텍처를 통해 새로운 환경을 신속하게 도입하고 개방형 연구 아키텍처를 제공할 수 있습니다.
일반적인 애플리케이션은 병렬로 수행될 수 있는 수백 또는 수천 개의 모델 솔루션 작업과 관련된 대략적인 접근 방식을 사용합니다. 예에는 시나리오 분석, 몬테카를로 시뮬레이션, 라그랑주 완화, 분해 알고리즘 및 고급 솔루션 접근 방식이 포함되지만 이에 국한되지는 않습니다.
슬롯 커뮤니티드 기능은 모든 GAMS 플랫폼에서 작동하며 다음과 같은 다양한 환경에 맞게 조정되었습니다.콘도르리소스 관리자(Resource Manager)는 위스콘신 대학교 매디슨 캠퍼스의 높은 처리량 컴퓨팅을 위한 시스템입니다. Condor를 사용하는 연구원들은 벽시계 시간 20시간 동안 5000 CPU 시간을 제공했다고 보고했습니다.
마찬가지로 슬롯 커뮤니티 멀티스레딩 해결 기능을 사용하면 슬롯 커뮤니티와 솔버 간의 효율적인 메모리 내 통신을 사용하는 동시에 단일 멀티스레드 시스템에서 모델 솔루션 작업의 비동기 제출 및 수집이 가능합니다.
면책조항:슬롯 커뮤니티드 컴퓨팅이라는 용어의 사용은 컴퓨터 과학계의 일부 순수주의자에게는 불쾌감을 줄 수 있습니다. 우리는 특정 애플리케이션에 높은 처리량을 제공할 수 있는 컴퓨팅 구성 요소 모음을 지칭하기 위해 매우 느슨하게 사용합니다. 약 30년 전의 상업 서비스국 개념이 부활한 것이라고 생각할 수도 있습니다.
주의:이러한 기능은 모든 플랫폼에서 테스트되었으며 표준 릴리스의 일부이지만 향후 접근 방식을 변경하고 대체 메커니즘을 도입할 수 있습니다.
감사의 말씀:교수. 당시 펜실베니아 대학 Wharton School의 Monique Guignard-Spielberg와 Antoine Sauré는 SUN Grid 환경에서 평행 라그랑지안 완화를 소개했습니다. University of Wisconsin-Madison의 Michael Ferris 교수는 높은 처리량 시스템 Condor에 대한 당사의 원래 GAMS 슬롯 커뮤니티드 접근 방식을 채택하여 이 접근 방식을 실용적인 제안으로 만드는 데 도움을 주었습니다.
슬롯 커뮤니티드 시설: 기본 개념
슬롯 커뮤니티드 시설은 솔루션 프로세스를 여러 단계로 분리하여 별도로 제어할 수 있습니다. 먼저 동기식 솔루션 중에 수행된 단계를 검토한 다음 비동기식 또는 병렬 솔루션 단계를 소개하겠습니다.
슬롯 커뮤니티가 a를 발견할 때해결문실행 중에는 세 가지 기본 단계로 진행됩니다:
- 세대:모델의 기호 방정식은 슬롯 커뮤니티 데이터베이스의 현재 상태를 사용하여 모델을 인스턴스화하는 데 사용됩니다. 이 인스턴스에는 솔루션을 시도하기 위해 솔루션 방법에 필요한 모든 정보와 서비스가 포함되어 있습니다. 이 표현은 솔버 및 컴퓨팅 플랫폼과 독립적입니다.
- 해결책:모델 인스턴스는 솔버에게 넘겨지고 슬롯 커뮤니티는 종료될 때까지 기다립니다.
- 업데이트:상세한 해와 통계가 솔버에서 슬롯 커뮤니티로 전달되어 슬롯 커뮤니티 데이터베이스를 업데이트합니다.
대부분의 경우 모델을 생성하고 솔루션으로 데이터베이스를 업데이트하는 데 걸리는 시간은 특정 솔버에서 소요되는 실제 시간보다 훨씬 짧습니다. 모델 생성에는 몇 초가 소요되는 반면, 최적의 솔루션을 얻는 데는 몇 분에서 몇 시간 또는 그 이상이 걸릴 수 있습니다. 순차 모델 솔루션이 서로 의존하지 않는 경우 병렬로 해결하고 데이터베이스를 무작위 순서로 업데이트할 수 있습니다. 우리에게 필요한 것은 모델을 생성하고 솔루션을 위해 제출하고 계속 진행하는 시설뿐입니다. 그런 다음 슬롯 커뮤니티 프로그램의 편리한 시점에 완성된 솔루션을 찾고 그에 따라 데이터베이스를 업데이트합니다. 요약하자면, 병렬로 해결하려면 두 단계가 필요합니다.
- 제출 루프:이 단계에서는 독립적으로 해결할 수 있는 솔루션에 대한 모델을 생성하고 제출할 것입니다.
- 수집 루프:이전에 제출된 모델의 솔루션은 솔루션이 제공되는 즉시 수집됩니다. 잠시 동안 실행을 일시 중지하여 일부 솔루션이 완료될 때까지 기다려야 할 수도 있습니다.
우리는 이 모든 단계에서 오류가 없을 것이라고 가정했습니다. 물론 항상 그런 것은 아니며 작업이 실패하지 않도록 정교한 메커니즘이 마련되어 있습니다.
- 참고
- 시나리오 분석을 위한 솔버거스특히 관심이 있을 수도 있습니다. 모델[GUSSGRID]GUSS가 슬롯 커뮤니티드 기능과 함께 사용되는 방법을 보여줍니다.
슬롯 커뮤니티드 시설: 첫 번째 예
이 섹션에서는 모델과 함께 기본 슬롯 커뮤니티드 기능의 사용을 설명합니다.[QMEANVAR]. 이 모델은 투자 포트폴리오를 재구성하기 위한 효율성 경계를 추적합니다. 프론티어의 각 지점에는 독립적인 2차 혼합 정수 모델의 솔루션이 필요합니다.원본 해결책 루프아래에 표시됩니다.
루프(p(pp),
ret.fx = rmin + (rmax-rmin)/(카드(pp)+1)*ord(pp) ;
miqcp를 사용하여 minvar min var를 해결합니다.
xres(i,p) = x.l(i);
보고서(p,i,'inc') = xi.l(i);
보고서(p,i,'dec') = xd.l(i);
);
이것루프모델의 솔루션을 저장합니다minvar다른 반품의 경우ret. 솔루션은 실행 순서에 의존하지 않으므로 이 루프를 다시 작성하여 병렬로 작동할 수 있습니다.
제출 루프
슬롯 커뮤니티드 기능을 사용하여 병렬로 해결하는 첫 번째 단계는 제출 루프를 작성하는 것입니다.
매개변수 h(pp) '모델 핸들';
minvar.solveLink = 3;
루프(p(pp),
ret.fx = rmin + (rmax-rmin)/(카드(pp)+1)*ord(pp) ;
miqcp를 사용하여 minvar min var를 해결합니다.
h(pp) = minvar.handle;
);
모델 속성solveLink의 동작을 제어합니다해결문. 3의 값(이는 다음과 같습니다.컴파일 시간 상수%solveLink.asyncGrid%)는 슬롯 커뮤니티에 모델을 생성하고 솔루션을 위해 제출한 다음 솔루션 단계가 완료될 때까지 기다리지 않고 계속 진행하도록 지시합니다. 따라서 설정으로minvar.solveLink3에 슬롯 커뮤니티드 컴퓨팅을 활성화합니다.
A처리31100_31209처리제출된 각 솔루션 요청의 고유 ID를 포함하며 일반적으로 모든 모델 인스턴스를 포괄하는 세트에 대해 정의된 매개변수에 저장됩니다. 핸들의 특정 수치 값은 GAMS에 의해 할당되며 솔루션을 복구하고 슬롯 커뮤니티드에서 해결된 모델을 관리하는 데 사용될 수 있습니다. 이 예에서 핸들 매개변수는 다음과 같습니다.h슬롯 커뮤니티고 모든 모델 인스턴스의 집합은pp. 에 저장된 핸들 값h나중에 솔루션 프로세스가 완료되면 솔루션을 수집하는 데 사용됩니다.
수집 루프
우리는 다음 수집 루프를 통해 솔루션을 수집합니다:
loop(pp$handleCollect(h(pp))),
xres(i,pp) = x.l(i);
보고서(pp,i,'inc') = xi.l(i);
보고서(pp,i,'dec') = xd.l(i);
);
참고하세요달러 조건루핑 세트를 제한합니다pp함수에 0이 아닌 값을 반환하는 요소handleCollect(h(pp)). 함수handleCollect세트의 각 요소에 대한 솔루션 상태를 테스트합니다.pp. 슬롯 커뮤니티고 솔루션을 사용할 수 있으면 이를 GAMS 데이터베이스로 읽어 들입니다. 이 경우 함수는 값 1을 반환합니다. 솔루션을 검색할 준비가 되지 않은 경우 값 0이 반환됩니다.
위의 수집 루프에는 하나의 큰 결함이 있음을 관찰하십시오. 솔루션이 준비되지 않은 경우(즉,handleCollect0과 같음) 검색되지 않습니다. 모든 솔루션이 검색되거나 지쳐서 종료할 때까지 이 루프를 여러 번 호출해야 합니다. 우리는 a를 사용할 것입니다구성할 때까지 반복및 핸들 매개변수h아직 로드되지 않은 솔루션만 찾도록 루프를 제어합니다. 코드는 다음과 같습니다:
반복
루프(pp$handleCollect(h(pp))),
xres(i,pp) = x.l(i);
보고서(pp,i,'inc') = xi.l(i);
보고서(pp,i,'dec') = xd.l(i);
display$handleDelete(h(pp)) '핸들 삭제 문제' ;
h(pp) = 0;
) ;
display$readyCollect(h, 100) '다음 인스턴스가 완료되기를 기다리는 동안 문제가 발생했습니다.';
카드(h) = 0 또는 경과 시간 > 100이 될 때까지;
xres(i,pp)$h(pp) = na;
해법을 추출한 후에는 핸들 매개변수를 설정하겠습니다h0으로. 또한 함수를 호출하여 시스템에서 인스턴스를 제거하려고 합니다.핸들삭제성공하면 0을 반환합니다. 실패하더라도 해를 끼치지는 않지만 우리는를 통해 알림을 받고 싶습니다.조건부 표시문. 수집 루프를 다시 실행하기 전에 시스템이 더 많은 솔루션 단계를 완료할 시간을 주기 위해 잠시 기다리는 것이 좋습니다. 이는 함수를 사용하여 수행됩니다.ready수집핸들이 있는 다른 모델 인스턴스가 들어올 때까지 기다립니다.h수집할 준비가 되었습니다(또는 선택적으로 정의된 시간(초)이 경과했습니다). 마지막 주름은 모든 솔루션을 얻지 못하더라도 솔루션을 검색한 이후 또는 100초가 경과한 후 모든 모델 인스턴스가 시스템에서 삭제된 경우 종료되는 것입니다. 이는 다음 함수로 수행됩니다.시간경과슬롯 커뮤니티고 해결 단계 중 하나가 실패하더라도 우리 프로그램은 절대 종료되지 않기 때문에 중요합니다. 핸들 매개변수를 기억하세요.h집합의 모든 요소에 대해 0과 같습니다.pp관련 모델이 해결되었으며 해당 솔루션이 추출되었습니다. 위 코드의 마지막 문은놓침해결 방법나실패한 해결을 알립니다. 매개변수h이제 향후 분석을 위해 실패한 해결 핸들이 포함됩니다.
또는 다음 함수를 사용할 수도 있습니다.핸들상태슬롯 커뮤니티고 a에 저장된 솔루션을 수집합니다.GDX 파일. 예를 들어 다음과 같이 작성할 수 있습니다.
loop(pp$(handleStatus(h(pp))) = 2),
minvar.handle = h(pp);
Execute_loadhandle minvar;
xres(i,pp) = x.l(i);
보고서(pp,i,'inc') = xi.l(i);
보고서(pp,i,'dec') = xd.l(i);
);
함수핸들상태은 솔루션 프로세스를 테스트하고 솔루션 프로세스가 완료되어 결과를 검색할 수 있는 경우 값 2를 반환합니다. 솔루션은 다른 GDX 솔루션 포인트와 유사한 방식으로 로드할 수 있는 GDX 파일에 저장됩니다. 먼저, 모델 속성을 설정하여 검색할 솔루션을 지정해야 합니다.minvar.handle적절한 값으로 설정하세요. 그런 다음 다음 명령문을 사용할 수 있습니다.execute_loadhandle minvar;모델에 대한 솔루션 로드minvar슬롯 커뮤니티 데이터베이스로 돌아갑니다.
- 참고
- 이전에 지정된 핸들이 있는 모델의 요구 사항을 제외하고, 명령
execute_loadhandle절차처럼 작동합니다execute_loadpoint.
기능 사용핸들상태슬롯 커뮤니티고 명령execute_loadhandle간단한 대신handleCollect, 최종 수집 루프에 제어 계층을 하나 더 추가합니다. 이제 하나가 더 필요합니다.if 문위의 수집 루프 내부:
반복
루프(pp$h(pp),
if(handleStatus(h(pp))) = 2,
minvar.handle = h(pp);
Execute_loadhandle minvar;
xres(i,pp) = x.l(i);
보고서(pp,i,'inc') = xi.l(i);
보고서(pp,i,'dec') = xd.l(i);
display$handleDelete(h(pp)) '핸들 삭제 문제' ;
h(pp) = 0;
);
) ;
display$readyCollect(h, 100) '다음 인스턴스가 완료되기를 기다리는 동안 문제가 발생했습니다.';
카드(h) = 0 또는 경과 시간 > 100이 될 때까지;
xres(i,pp)$h(pp) = na;
마지막으로 수정된 모델을 실행할 준비가 되었습니다.
실행 로그
실행 로그에는 고급 응용프로그램에 유용할 수 있는 몇 가지 새로운 정보가 포함됩니다:
--- 루프 pp = p1
--- 행 46개, 열 37개, 0이 아닌 숫자 119개
--- 311 nl-code 7 nl-0이 아닌 값
--- 14개의 개별 열
--- 핸들 슬롯 커뮤니티드137000002를 사용하여 모델 minvar 제출 중
--- 해결 후 실행
...
--- GDXin=C:\answerv5\gams_srcdev\225j\grid137000003\gmsgrid.gdx
--- 핸들 Grid137000003 제거로그에는 솔루션 인스턴스의 제출, 검색 및 제거에 대한 몇 가지 추가 정보가 포함되어 있습니다. 다음 섹션에서는 이 추가 정보를 활용하겠습니다.
실행 로그에는 솔버 로그가 포함되어 있지 않습니다. 하지만, 만약에로그옵션값이 설정되어 파일 쓰기를 트리거합니다(예:2또는4), 각 작업의 솔버 로그는슬롯 커뮤니티드 디렉토리. 따라서 작업이 완료될 때 솔버 로그를 검사해야 하는 경우 이러한 폴더가 자동으로 정리되지 않는지 확인해야 합니다. 설정하여gridDir명령줄 매개변수.
멀티 스레드 해석을 사용하는 경우sl=6, 슬롯 커뮤니티는 이름이인 스크래치 파일에 솔버 로그를 저장합니다.threadlog*.dat. 이러한 스레드 로그 파일을 보존하고 실행이 완료된 후 검사하려면 다음을 수행해야 합니다.
슬롯 커뮤니티가 종료되면 다음은threadlog*.dat파일은 스크래치(또는 지정된) 디렉토리에 남아 있으며 자세한 솔버 로그를 검사할 수 있습니다.
슬롯 커뮤니티드 컴퓨팅에 대한 전체 예를 보려면 슬롯 커뮤니티드 지원 전송 모델을 참조하세요.[TRNSGRID].
우리가 어떤 종류의 솔버와 어떤 종류의 컴퓨팅 환경을 운영할지에 대해 아무런 가정도 하지 않았음을 관찰하십시오. 위의 예는 완전히 플랫폼 및 솔버 독립적이며 GAMS 소스 코드를 변경하지 않고 Windows 노트북이나 Condor 시스템과 같은 대규모 슬롯 커뮤니티드 네트워크에서 실행됩니다.
슬롯 커뮤니티드 기능의 고급 사용
이 섹션에서는 몇 가지 특별한 응용 프로그램 요구 사항을 설명하고 현재 시스템에서 이를 처리할 수 있는 방법을 보여줍니다. 이러한 애플리케이션 중 일부에는 각각 몇 시간의 솔루션 시간을 갖는 수천 개의 모델 인스턴스가 포함될 수 있습니다. 일부는 실패하여 다시 제출해야 할 수도 있습니다. 더 복잡한 예에는 통신과 다음과 같은 슬롯 커뮤니티 기능의 사용이 필요합니다.BCH(Branch-and-Cut-and-Heuristic Facility), 실행 중인 솔버 내에서 다른 모델을 제출합니다.
수천 개의 모델 인스턴스가 각각 해결하는 데 몇 분에서 몇 시간이 걸리는 상황을 상상해 보십시오. 우리는 마스터 프로그램을 다음과 같이 나눌 것입니다.제출 중프로그램, an문의프로그램 및 최종컬렉션프로그램. 모델을 다시 사용하겠습니다.[QMEANVAR]원리를 보여줍니다. 수정된 코드를 분할하겠습니다.[QMEANVAR]슬롯 커뮤니티 코드를 세 가지 구성요소로 나누기:q제출, qcheck슬롯 커뮤니티고qreport.
매우 긴 작업 기간: 제출 프로그램
파일qsubmit.gms에는 새로운 제출 루프까지의 모든 것이 포함됩니다. 인스턴스를 저장하려면 고유한 값이 필요합니다.슬롯 커뮤니티드 디렉토리 gdir문제를 다시 시작하려면 다음을 만들어야 합니다.저장 파일. 슬롯 커뮤니티의 저장 및 다시 시작 기능에 대한 자세한 내용은 장을 참조하세요.저장 및 다시 시작 기능. 첫 번째 작업을 실행할 때 명령줄 매개변수를 사용합니다.저장또는 그 동의어s필수 생성저장 파일:
> 슬롯 커뮤니티 qsubmit s=submit gdir=c:\test\grid
매우 긴 작업 기간: 문의 프로그램
모든 모델 인스턴스의 솔루션은 몇 시간이 걸릴 수 있습니다. 때때로 상태를 알아보기 위해 빠른 조회 작업을 실행할 수 있습니다. 다음 프로그램qcheck.gms현재 상태를 나열합니다:
매개변수 상태(pp,*);
스칼라 핸들;
약어 BadHandle, 대기 중, 준비;
루프(pp,
핸들 = 핸들상태(h(pp));
if(핸들=0,
핸들 = BadHandle;
elseif 핸들=2,
핸들 = 준비;
minvar.handle = h(pp);
Execute_loadhandle minvar;
status(pp,'solvestat') = minvar.solvestat;
status(pp,'modelstat') = minvar.modelstat;
status(pp,'초') = minvar.resusd;
그렇지 않으면
핸들 = 대기 중;
);
상태(pp,'상태') = 핸들;
);
표시 상태;
자세한 내용은모델 속성위 코드에서 참조됨, 참조처리, solveStat, modelStat슬롯 커뮤니티고resUsd. 위 프로그램을 실행하기 위해 이전 프로그램부터 다시 시작하겠습니다.저장 파일명령줄 매개변수 사용다시 시작또는 그 동의어r.
> 슬롯 커뮤니티 qcheck r=제출 gdir=c:\test\grid
display 문에 의해 생성된 출력은 다음과 같을 수 있습니다:
---- 173 PARAMETER 상태
solvstat modelstat 초 상태
p1 1.000 1.000 0.328 준비됨
p2 1.000 1.000 0.171 준비됨
p3 대기 중
p4 대기 중
p5 1.000 1.000 0.046 준비해결된 모델 인스턴스 중 하나에 대해 좀 더 자세한 분석을 수행하고 싶을 수도 있습니다. 해당 프로그램은qanalyze.gms, 다음 코드 줄이 포함될 수 있습니다.
$인스턴스가 설정되지 않은 경우 $abort --인스턴스가 누락되었습니다.
if(handleStatus(h('%instance%')가 아님)),
abort$yes '모델 인스턴스 %instance%가 준비되지 않음');
minvar.handle = h('%instance%');
Execute_loadhandle minvar;
x.l,xi.l,xd.l을 표시합니다.
...
달러 통제 옵션에 대한 정보는 장을 참조하세요.달러 통제 옵션, 특히 옵션에 대한 자세한 설명$if슬롯 커뮤니티고$중단. 참고하세요인스턴스은컴파일 시간 변수. 프로그램은 다음을 사용하여 호출될 수 있습니다.이중 대시 매개변수45677_45733
> 슬롯 커뮤니티 qanalyze r=제출 gdir=c:\test\grid --instance=p4
매우 긴 작업 기간: 수집 프로그램
모든 작업이 완료되면 수집 루프를 시작할 준비가 된 것입니다. 단순화를 위해 반복 루프를 포함하지 않습니다. 왜냐하면 우리가 원하는 대부분의 솔루션을 얻었는지 만족하지 않는 한 최종 수집 프로그램을 실행하지 않기 때문입니다. 파일qreport.gms다음과 같이 보일 수 있습니다:
loop(pp$handleStatus(h(pp))),
minvar.handle = h(pp);
Execute_loadhandle minvar;
xres(i,pp) = x.l(i);
보고서(pp,i,'inc') = xi.l(i);
보고서(pp,i,'dec') = xd.l(i);
display$handleDelete(h(pp)) '핸들 삭제 문제' ;
h(pp) = 0;
);
xres(i,pp)$h(pp) = na;
...
위의 프로그램을 다음에서 다시 시작하겠습니다.저장 파일이전에 생성된 것:
> 슬롯 커뮤니티 qreport r=제출 gdir=c:\test\grid
초기 제출에 사용한 것과 동일한 디렉토리에서 작업을 실행할 필요는 없습니다. 다른 운영 체제를 사용하는 것도 가능합니다.
네트워크 라이센스로 해결
비동기 해결을 사용하는 경우(solveLink=3또는solveLink=%solveLink.asyncGrid%)와네트워크 라이센스*, 특정 특수한 경우, 특히 슬롯 커뮤니티 프로세스가 솔버가 완료될 때까지 기다리지 않는 경우 라이선스 문제가 발생할 수 있습니다.
명시적인 메커니즘이 없는 경우(예:슬롯 커뮤니티드 핸들 기능)은 비동기 해석이 완료될 때까지 기다리는 데 사용되며, 슬롯 커뮤니티는 솔버 호출을 시작한 다음 솔버의 진행 상황이나 상태에 관계없이 슬롯 커뮤니티 스크립트가 완료되면 즉시 종료합니다. 종료 시 슬롯 커뮤니티는 라이선스를 반환하고 라이선스 서버에 대한 통신 파이프를 닫습니다. 그러나 네트워크 라이센스를 사용할 때 솔버는 라이센스 확인을 받기 위해 활성 슬롯 커뮤니티 프로세스에 의존합니다. 솔버가 시작되기 전에 슬롯 커뮤니티가 완료되고 라이선스를 반환하면 솔버는 필요한 확인을 얻을 수 없으므로 실행에 실패합니다.
이 문제를 피하려면 아래 제안 사항 중 하나를 따르십시오.
- 슬롯 커뮤니티 계속 실행
슬롯 커뮤니티가 비동기 해결이 완료될 때까지 기다리는지 확인하세요. 예를 들어, 다음을 사용하세요.슬롯 커뮤니티드 핸들 기능솔버 완료를 기다리고 결과를 수집합니다. - 네트워크 라이센스를 로컬 라이센스로 일시적으로 변환
병렬 사용이 제한되지 않는 네트워크 라이센스가 있는 경우 다음을 수행할 수 있습니다.라이센스 확인, 사전 정의된 기간 동안 네트워크 라이센스를 로컬 라이센스로 효과적으로 변환합니다. 이렇게 하면 기본 슬롯 커뮤니티 프로세스가 완료된 후에도 솔버가 라이선스에 대한 액세스 권한을 유지할 수 있습니다.
*네트워크 라이센스는 다음에서만 사용할 수 있습니다.solveLink=3또는solveLink=%solveLink.asyncGrid%병렬 사용에 대한 제한이 포함되지 않은 경우.
슬롯 커뮤니티드 기능 요약
우리는 비동기식 또는 병렬 실행을 용이하게 하기 위해 여러 슬롯 커뮤니티 기능을 도입했습니다.해결문. 이러한 슬롯 커뮤니티 기능은 다음 하위 섹션에 요약되어 있습니다.
아래 설명된 기능 외에도 옵션 또는 명령줄 매개변수스레드비동기소개되었습니다.스레드비동기다음에서 사용되는 스레드 수를 제어합니다.멀티스레딩 컴퓨팅. 좀 더 구체적으로 말하자면,스레드비동기병렬로 실행할 수 있는 최대 솔버 작업 수를 설정합니다.
슬롯 커뮤니티드 핸들 함수
슬롯 커뮤니티드 핸들 기능은 다음에 나열되어 있습니다.표 1. 일반적인 슬롯 커뮤니티 기능에 대한 자세한 내용과 모든 슬롯 커뮤니티 기능의 전체 목록은 섹션을 참조하세요.기능. 원하는 반환 값(오류가 발생하지 않았음을 나타내는 반환 값)은 굵은 글씨로 표시되어 있습니다.
| 기능 | 설명 | 반환 값 |
|---|---|---|
핸들수집(핸들) | 다음으로 식별된 모델 인스턴스의 해결 여부를 테스트합니다.처리완료: 그렇다면 솔루션을 슬롯 커뮤니티 데이터베이스에 로드합니다. 옵션인 경우asyncSolLst활성화되면 솔루션 목록이 목록 파일에 인쇄됩니다.참고그거 핸들수집옵션 설정을 무시SolveOpt항상 기본값을 사용합니다병합. | 0: 모델 인스턴스가 준비되지 않았거나 로드할 수 없습니다. >0: 모델 인스턴스 솔루션이 로드되었습니다.. (슬롯 커뮤니티드 기능을 사용하는 경우 항상 1이고, 멀티스레딩 옵션을 사용하는 경우 사용된 스레드 ID를 반환합니다.) |
핸들상태(핸들) | 다음으로 식별된 모델 인스턴스의 해결 여부를 테스트합니다.처리완료되었습니다.다음이 있음을 참고하세요컴파일 시간 상수이 기능과 관련된 것입니다. | 0: 모델 인스턴스가 시스템에 알려지지 않았습니다. 1: 모델 인스턴스가 존재하지만 솔루션 프로세스가 불완전합니다. 2: 솔루션 프로세스가 종료되었으며 솔루션을 검색할 준비가 되었습니다. 3: 솔루션 프로세스가 완료되었음을 알렸지만 솔루션을 검색할 수 없습니다. |
핸들삭제(핸들) | 다음으로 식별된 모델 인스턴스를 삭제합니다.처리슬롯 커뮤니티고 삭제 상태의 숫자 표시기를 반환합니다. 만약처리주어진 내용이 유효하지 않아 실행 오류가 발생합니다. | 0: 모델 인스턴스가 제거되었습니다. 1: 인수 핸들법적 핸들이 아닙니다.2: 모델 인스턴스가 시스템에 알려지지 않았습니다. 3: 모델 인스턴스를 삭제하는 중에 오류가 발생했습니다. |
핸들제출(핸들) | 다음으로 식별된 모델 인스턴스를 다시 제출합니다.핸들솔루션용. 0이 아닌 값을 반환하는 경우 실행 오류가 발생합니다. | 0: 해결을 위해 모델 인스턴스가 다시 제출되었습니다. 1: 인수 핸들법적 핸들이 아닙니다.2: 모델 인스턴스가 시스템에 알려지지 않았습니다. 3: 완료 신호를 제거할 수 없습니다. 4: 다시 제출 절차를 찾을 수 없습니다. 5: 다시 제출 프로세스를 시작할 수 없습니다. |
readyCollect(HANDLES[,maxWait]) | 모델 솔루션을 수집할 준비가 될 때까지 기다립니다.핸들하나 이상의 모델 핸들을 포함하는 스칼라 또는 매개변수이거나 핸들 속성이 있는 모델이어야 합니다.MaxWait초 단위로 대기할 최대 시간을 지정합니다. 기본값은+inf. | 0: 요청한 작업 중 하나 이상이 준비되었습니다. 1: 대기할 활성 작업도 없고 수집할 준비가 된 작업도 없습니다. 2: 핸들 기호가 비어 있습니다. 3: 인수가 합법적인 핸들이 아닙니다. 4: 사용자가 지정한 시간 초과(solveLink= 핸들 6개). 5: 사용자가 지정한 시간 초과(solveLink= 핸들 3개). 8: 알 수 없는 오류(발생해서는 안 됨). |
표 1: 슬롯 커뮤니티드 핸들 기능
슬롯 커뮤니티는 문제의 원인을 식별하는 데 도움이 될 수 있는 추가 정보를 제공할 수 있는 실행 오류를 발행할 수 있습니다. 함수execError실행 오류 수를 가져오고 설정하는 데 사용될 수 있습니다.
슬롯 커뮤니티드 모델 속성
모델 속성은 섹션에 소개되어 있습니다.모델 속성. 다음 세 가지 모델 속성은 특히 슬롯 커뮤니티드 컴퓨팅과 관련이 있습니다.
| 기능 | 설명 |
|---|---|
| solveLink | 솔버 연결 규칙을 지정합니다. 다음 값은 3, 4, 6 및 7과 같이 풀이 문에 슬롯 커뮤니티드 컴퓨팅 또는 다중 스레드 컴퓨팅을 사용하도록 지시합니다. 이 모델 속성의 기본값은 다음과 같이 설정될 수 있습니다.명령줄 매개변수슬롯 커뮤니티고옵션 설명. 자세한 내용은 다음을 참조하세요.자세한 설명. |
| 처리 | 현재 인스턴스 핸들을 지정합니다. 이는 특정 모델 인스턴스를 식별하고 프로세스 신호 관리에 필요한 추가 정보를 제공하는 데 사용됩니다(하위 섹션 비교)제출 루프슬롯 커뮤니티고수집 루프위). |
| 번호 | 현재 인스턴스 번호를 지정합니다. 모델에 대한 해결을 시도할 때마다 인스턴스 번호가 1씩 증가하고 그에 따라 핸들이 업데이트됩니다. 인스턴스 번호는 사용자가 재설정한 다음 핸들을 다시 동기화할 수 있습니다. |
표 2: 슬롯 커뮤니티드 핸들 속성
슬롯 커뮤니티드 솔루션 검색
기능의 대안으로handleCollect다음 명령문으로 해결책을 검색할 수 있습니다:
execute_loadhandle mymodel;
이 명령문은 현재 인스턴스의 상태 및 해결 방법으로 슬롯 커뮤니티 데이터베이스를 업데이트합니다.내모델. 기본 메커니즘은 다음과 같습니다.GDX 파일. 이전에 지정된 핸들이 있는 모델의 요구 사항을 제외하고 이 명령은 절차와 같이 작동합니다.execute_loadpoint. 옵션인 경우asyncSolLst활성화되면 솔루션 목록이 목록 파일에 인쇄됩니다.
슬롯 커뮤니티드 디렉토리
인스턴스화된(생성된) 모델과 해당 솔루션은 제출 시스템에서 접근할 수 있는 고유한 디렉토리에 보관됩니다. 각 슬롯 커뮤니티 작업에는 하나만 있을 수 있습니다.슬롯 커뮤니티드 디렉토리. 기본적으로 슬롯 커뮤니티드 디렉터리는 스크래치 디렉터리로 간주됩니다. GAMS 명령줄 매개변수를 사용하여 덮어쓸 수 있습니다.gridDir또는 짧게gdir. 예는 다음과 같습니다.
> 슬롯 커뮤니티 myprogram ... GDir=gridpath
만약슬롯 커뮤니티드패스은(는) 완전한 이름이 아닙니다. 이름은 현재 디렉토리를 사용하여 완성됩니다. 슬롯 커뮤니티드 경로가 존재하지 않으면 오류가 발생하고 GAMS 작업이 종료됩니다. 관련 GAMS 매개변수는 다음과 같습니다.scrDir또는 짧음SD.
다음 기본 메커니즘을 기억하세요: 슬롯 커뮤니티 작업이 시작되면 고유한 프로세스 디렉토리가 현재 디렉토리에 생성됩니다. 이 디렉토리의 이름은 다음과 같습니다.225a에225zz. 슬롯 커뮤니티 작업이 종료되면 시스템은 슬롯 커뮤니티 작업 완료 시 프로세스 디렉터리를 삭제합니다. 슬롯 커뮤니티 핵심 시스템에서 생성되지 않은 모든 파일에는 플래그가 지정됩니다. 전화가 오면감킵대신게임을 사용하면 다른 종료 스크립트가 활성화되어 프로세스 디렉터리가 유지됩니다.
스크래치 디렉터리를 지정하지 않으면 스크래치 디렉터리는 프로세스 디렉터리와 동일하게 됩니다. 슬롯 커뮤니티드 디렉터리를 지정하지 않으면 슬롯 커뮤니티드 디렉터리는 스크래치 디렉터리와 동일하게 됩니다.
모델 인스턴스 중 일부가 실패할 수 있다고 가정하거나 슬롯 커뮤니티 프로그램을 여러 조각으로 나누어 별도의 작업으로 실행하려는 경우 완전히 처리하지 않은 모델 인스턴스를 제거하지 않도록 주의해야 합니다. 이러한 경우 매개변수를 사용해야 합니다.슬롯 커뮤니티드디르, 이전에 생성된 모델 인스턴스에 액세스할 수 있습니다.
슬롯 커뮤니티드 시설: 아키텍처 및 사용자 정의
현재 슬롯 커뮤니티드 시설은 매우 기본적인 운영 체제 기능에 의존하며 실제적이고 직접적인 작업 또는 프로세스 제어를 제공하려고 시도하지 않습니다. 파일 시스템은 제출된 작업의 완료를 알리는 데 사용되며 GAMS는 현재 제출된 작업의 우선순위를 강제 종료하거나 변경하는 등 제출된 프로세스와 직접 상호작용할 수 있는 다른 방법이 없습니다. 이 접근 방식에는 분명한 장점과 단점이 있습니다. 부가가치가 높은 상용 원격 컴퓨팅 서비스를 제공하기 위해 슬롯 커뮤니티드 컴퓨팅을 사용하려는 시도가 많이 있습니다.
슬롯 커뮤니티가 옵션을 사용하여 해결을 실행할 때solveLink3으로 설정하면 다음 단계를 수행합니다:
- 다음에 하위 디렉토리를 생성하세요슬롯 커뮤니티드디르이름으로
gridnnn. 여기nnn은 핸들의 숫자 값을 나타냅니다. 핸들 값은 내부 기호 ID 번호 x 1e6 + 모델 인스턴스 번호입니다. 예를 들어,[QMEANVAR]예: 첫 번째 슬롯 커뮤니티드 하위 디렉토리는grid137000002. - 파일이 이미 존재하는 경우 완료 신호를 제거하십시오. 현재 신호는
완료. 예를 들어,grid137000002/완료. - 다음이라는 GDX 파일 생성 또는 교체
gmsgrid.gdx여기에는 실패한 모델 및 솔버 상태가 있는 더미 솔루션이 포함됩니다. 이 파일은 솔루션 프로세스의 마지막 단계에서 덮어쓰여지며 호출 시 읽혀집니다.execute_loadhandle. - 모든 표준 슬롯 커뮤니티 솔버 인터페이스 파일을 위의 인스턴스 디렉토리에 넣으십시오.
- 라는 제출 래퍼를 실행합니다.
gmsgrid.cmdWindows 또는gmsgrid.run유닉스에서. 이러한 제출 스크립트는 일반적으로 슬롯 커뮤니티 시스템 디렉터리에 있으며, 슬롯 커뮤니티 시스템 디렉터리에 없으면 현재 경로를 통해 찾을 수 있습니다.
슬롯 커뮤니티드 제출 스크립트gmsgrid.cmd또는gmsgrid.run은 표준 슬롯 커뮤니티 솔버 호출을 수행하는 데 필요한 네 가지 인수(솔버 실행 파일 이름, 솔버 제어 파일 이름, 솔버 스크래치 디렉터리 및 솔버 이름)와 함께 호출됩니다. 그런 다음 제출 스크립트는 운영 체제에 최종 제출을 수행합니다. 이 최종 스크립트는 다음 단계를 수행합니다.
- 해결사를 호출하세요.
- 최종 GDX 파일을 생성할 유틸리티 호출
gmsgrid.gdx, - 완료 신호 설정
완료.
기능을 사용하고 싶다면핸들제출또한 스크립트를 만들어야 합니다gmsrerun.cmd또는gmsrerun.run. 이 스크립트는 나중에 작업을 다시 제출하는 데 사용될 수 있습니다.
예를 들어, Windows용 기본 제출 스크립트는 아래와 같습니다:
@에코 꺼짐 : 게임 슬롯 커뮤니티드 제출 스크립트 : : arg1 솔버 실행 가능 : 제어 파일 2개 : 스크래치 디렉토리 3개 : 4 솔버 이름 : : gmscr_nx.exe가 솔루션을 처리하고 'gmsgrid.gdx'를 생성합니다. : : 참고: %3은(는) 짧은 이름입니다. 이 이름이 필요한 이유는 다음과 같습니다. : START 명령은 공백이나 "...'을 처리할 수 없습니다. : %~3을 사용하기 전에 "..." 주변을 제거합니다. : 이름을 짧게 만든다 : : gmsrerun.cmd는 runit.cmd를 다시 제출합니다. 에코 @echo 끄기 > %3runit.cmd 에코 % 1 % 2 % 4 >> % 3runit.cmd 에코 gmscr_nx.exe %2 >> %3runit.cmd echo echo OK ^> %3finished ^& 종료 >> %3runit.cmd echo @start /b /belownormal %3runit.cmd ^> nul > %3gmsrerun.cmd 시작 /b /belownormal %3runit.cmd > nul 종료
슬롯 커뮤니티드 제출 테스트
슬롯 커뮤니티드 제출 프로세스는 소스 텍스트를 변경하지 않고도 모든 GAMS 프로그램에서 테스트할 수 있습니다. 옵션solveLink=4solv 문에 슬롯 커뮤니티드 제출 프로세스를 사용한 다음 결과를 사용할 수 있을 때까지 기다리도록 지시합니다. 옵션에 유의하세요.solveLink슬롯 커뮤니티 명령줄 매개변수, 슬롯 커뮤니티 옵션 설명 또는 모델 속성 할당을 통해 설정할 수 있습니다. 솔루션을 위해 모델 인스턴스가 제출되면 슬롯 커뮤니티는 작업이 완료되었는지 확인합니다. 계속해서 두 번 확인합니다.레스림65454_65675감킵또는 슬롯 커뮤니티 명령줄 매개변수를 설정했습니다계속.
멀티스레딩
이 장에서 설명했듯이 각 해결은 슬롯 커뮤니티드 기능을 사용하여 자체 프로세스 공간에서 처리됩니다. 옵션이나 모델 속성을 설정하면 슬롯 커뮤니티드 기능이 활성화된다는 점을 기억하세요.solveLink3 또는 4로. 만약solveLink6으로 설정됨(또는컴파일 시간 상수 %solveLink.asyncThreads%) 대신 별도의 스레드가 사용됩니다. 이를 통해 옵션인 경우처럼 슬롯 커뮤니티와 솔버 간의 효율적인 메모리 내 통신이 가능합니다.solveLink5로 설정됨(또는컴파일 시간 상수 %solveLink.loadLibrary%).
이 외에도 멀티스레딩 기능은 슬롯 커뮤니티드 기능과 동일한 방식으로 작동합니다. solv 문은 모델을 생성하고 이를 별도의 스레드로 솔버에 전달한 다음 모델 속성을 사용하여 모델 인스턴스의 핸들을 저장할 수 있습니다.처리슬롯 커뮤니티고슬롯 커뮤니티드 핸들 함수솔루션을 수집하고 모델 인스턴스를 처리하는 데 사용될 수 있습니다.handleCollect, 핸들삭제, 핸들상태슬롯 커뮤니티고준비수집.
옵션 또는 명령줄 매개변수에 유의하세요.스레드비동기비동기 해결에 사용해야 하는 최대 스레드/동시 작업 수를 설정합니다.
다음 매트릭스는 어떤 솔버와 함께 사용할 수 있는지 보여줍니다.solveLink = 6어떤 플랫폼에서:
| 해결사 | x86 64비트 MS 윈도우 | x86 64비트 리눅스 | 암 64비트 리눅스 | x86 64비트 맥OS | 암 64비트 맥OS |
|---|---|---|---|---|---|
| CONOPT3 | × | × | × | × | × |
| CONOPT | × | × | × | × | × |
| 변환 | × | × | × | × | × |
| COPT | × | × | × | × | × |
| CPLEX | × | × | × | × | × |
| 구로비 | × | × | × | × | × |
| 최고 | × | × | × | × | |
| IPOPT | × | × | × | × | × |
| 모세크 | × | × | × | × | × |
| ODHCPLEX | × | × | |||
| 리샵 | × | × | × | × | × |
| SCIP | × | × | × | × | × |
| 샷 | × | × | × | × | × |
| SNOPT | × | × | |||
| 소플렉스 | × | × | × | × | × |
| 익스프레스 | × | × | × | × | × |
어떤 솔버가 선택되면solveLink = 6해당 플랫폼에서는 지원되지 않습니다.solveLink = 3대신 사용되며 로그에 기록됩니다.
멀티스레딩 제출 테스트
멀티스레딩 제출 프로세스는 소스 텍스트를 변경하지 않고도 모든 슬롯 커뮤니티 프로그램에서 테스트될 수 있습니다. 옵션solveLink= 7(또는 동등하게,컴파일 시간 상수 %solveLink.threads시뮬레이트%)는 멀티스레딩 제출 프로세스를 사용하고 결과를 사용할 수 있을 때까지 기다린 다음 솔루션을 슬롯 커뮤니티 데이터베이스에 로드하도록 해석 문에 지시합니다. 솔루션을 위해 모델 인스턴스가 제출되면 슬롯 커뮤니티는 작업이 완료되었는지 확인합니다. 계속해서 두 번 확인합니다.레스림74698_74886