sl601.gms :solvLink=6 사용 시 올바른 동작 확인

설명

무료 슬롯 사이트 24.6에서는 SolveLink 옵션 및 모델 속성에 대한 새로운 변형이 있습니다.
추가되었습니다. SolveLink가 %solveLink.aSyncThreads%로 설정된 경우 무료 슬롯 사이트는 기다리지 않습니다.
솔버가 반환하고 솔브 문이 실행될 때 결과를 수집하지 않습니다.
실행됩니다. 대신, 모델이 생성된 다음
무료 슬롯 사이트가 실행을 계속하는 동안 별도의 스레드. 이렇게 하면 여러 모델이
동시에 해결할 수 있으며 나중에 결과를 수집할 수 있습니다.

이는 그리드 기능(SolveLink = %solveLink.asyncGrid%)과 유사합니다.
차이점은 솔버가 자체 프로세스 공간에서 작동하지 않고
무료 슬롯 사이트 간의 효율적인 메모리 내 통신을 가능하게 하는 별도의 스레드
및 솔버(SolveLink = %solveLink.loadLibrary%로 수행되는 것과 같음).
해결 문 다음에 모델 인스턴스의 핸들을 저장할 수 있습니다(다음을 사용).
모델 속성 mymodel.handle)에 사용되는 것과 동일한 기능을 사용합니다.
솔루션을 수집하고 모델 인스턴스를 처리하는 그리드 시설:
HandleCollect(핸들), HandleStatus(핸들) 및 HandleDelete(핸들).

새로운 함수 ReadyCollect(handleParameter [, maxWait])를 사용하여 대기할 수 있습니다.
모델을 수집할 준비가 될 때까지. SolveLink = 모두에 사용할 수 있습니다.
%solveLink.aSyncThreads% 및 SolveLink = %solveLink.asyncGrid%.

이 모델에서는 기본 기능이 테스트됩니다.

키워드:solveLink=%solveLink.aSyncThreads%

기고자: Lutz Westermann, 2016년 1월

소형 모델 유형 :무료 슬롯 사이트


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


메인 파일 : sl601.gms

$title 'solveLink=%solveLink.aSyncThreads% 사용 시 올바른 동작을 확인하세요' (SL601,SEQ=691)

$onText
무료 슬롯 사이트 24.6에서는 SolveLink 옵션 및 모델 속성에 대한 새로운 변형이 있습니다.
추가되었습니다. SolveLink가 %solveLink.aSyncThreads%로 설정된 경우 무료 슬롯 사이트는 기다리지 않습니다.
솔버가 반환하고 솔브 문이 실행될 때 결과를 수집하지 않습니다.
실행됩니다. 대신, 모델이 생성된 다음
무료 슬롯 사이트가 실행을 계속하는 동안 별도의 스레드. 이렇게 하면 여러 모델이
동시에 해결할 수 있으며 나중에 결과를 수집할 수 있습니다.

이는 그리드 기능(SolveLink = %solveLink.asyncGrid%)과 유사합니다.
차이점은 솔버가 자체 프로세스 공간에서 작동하지 않고
무료 슬롯 사이트 간의 효율적인 메모리 내 통신을 가능하게 하는 별도의 스레드
및 솔버(SolveLink = %solveLink.loadLibrary%로 수행되는 것과 같음).
해결 문 다음에 모델 인스턴스의 핸들을 저장할 수 있습니다(다음을 사용).
모델 속성 mymodel.handle)에 사용되는 것과 동일한 기능을 사용합니다.
솔루션을 수집하고 모델 인스턴스를 처리하는 그리드 시설:
HandleCollect(핸들), HandleStatus(핸들) 및 HandleDelete(핸들).

새로운 함수 ReadyCollect(handleParameter [, maxWait])를 사용하여 대기할 수 있습니다.
모델을 수집할 준비가 될 때까지. SolveLink = 모두에 사용할 수 있습니다.
%solveLink.aSyncThreads% 및 SolveLink = %solveLink.asyncGrid%.

이 모델에서는 기본 기능이 테스트됩니다.

키워드:solveLink=%solveLink.aSyncThreads%

기고자: Lutz Westermann, 2016년 1월
$offText

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

매개변수
     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 ;

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

모델 전송 /all/ ;

*모델 해결, 결과 대기, 결과 수집, 핸들 삭제 및 일부 확인 수행
$onEcho > SolveWaitCollectDelete.inc
z 를 최소화하는 lp를 사용하여 전송을 해결합니다.
abort$(ReadyCollect (transport.handle)<>0) '모델을 기다리는 동안 문제가 발생했습니다.', Transport.handle;
abort$(HandleCollect(transport.handle)<>1) '결과 수집 중 문제 발생', Transport.handle;

abort$(transport.objVal<>153.675) '잘못된 목표 값';
abort$(z.l<>153.675) 'z에 대한 값이 잘못되었습니다.';

z.l = 0;
* 이상해 보이지만 sl=6에 대해 이를 허용하지 않는 오류가 있습니다.
운송.핸들 = 운송.핸들;
Execute_loadhandle 전송;

abort$(HandleDelete (transport.handle)<>0) '삭제 결과 문제 발생', Transport.handle;
$offEcho

* 솔브링크 설정
옵션solvelink = %solveLink.aSyncThreads%;

* 모든 솔버가 sl=6에서 작동하는 것은 아닙니다. 6을 사용할 수 없는 경우 3으로 재설정하면 작동하는지 테스트합니다.
* %solveLink.aSyncThreads%를 지원하는 솔버를 선택하세요.
옵션 lp=cplex;
$include SolveWaitCollectDelete.inc
abort$(transport.LinkUsed<>%solveLink.aSyncThreads%) 'sl이 예기치 않게 재설정되었습니다.'

* %solveLink.aSyncThreads%를 지원하지 않는 솔버를 선택하세요.
옵션 lp=미노스;
$include SolveWaitCollectDelete.inc
abort$(transport.LinkUsed<>%solveLink.asyncGrid%) 'sl은 %solveLink.asyncGrid%로 재설정되어야 합니다.'

* 함수의 반환 코드를 확인하세요
스칼라 잘못된 핸들 /111/;
abort$(ReadyCollect(wrongHandle)<>1) 'ReadyCollect가 대기할 작업이 없다는 신호를 보낼 것으로 예상됩니다.';
abort$(HandleStatus(wrongHandle)<>0) 'HandleStatus에서 오류가 반환될 것으로 예상됩니다.';
abort$(HandleCollect(wrongHandle)<>0) 'HandleCollect에서 오류 반환이 예상됩니다.';
abort$(HandleDelete(wrongHandle)<>1) 'HandleDelete에서 오류가 반환될 것으로 예상됩니다.';

s /s1*s3/을 설정합니다;
매개변수 핸들;
핸들=아니요;
abort$(ReadyCollect(handles)<>2) '제공된 기호가 비어 있음을 알리는 ReadyCollect가 필요합니다.';