optdir1.gms : CLP 슬롯 나라 및 하위 솔버를 활용하는 솔버를 사용하여 옵션 파일 위치 테스트

설명

하위 해결사를 활용하는 해결사가 올바른 옵션 파일 위치를 하위 해결사에 보내는지 테스트하세요.
CLP 슬롯 나라이 제공되는 경우.

기고자: Michael Bussieck, 2025년 5월

소형 모델 유형 :슬롯 나라


카테고리 : 슬롯 나라 테스트 라이브러리


메인 파일 : optdir1.gms

$title CLP optDir 및 하위 솔버를 활용하는 솔버를 사용한 테스트 옵션 파일 위치(OPTDIR1, SEQ=985)

$ontext
하위 솔버를 활용하는 솔버가 하위 솔버에 올바른 옵션 파일 위치를 보내는지 테스트합니다.
CLP OptDir이 제공되는 경우.

기고자: Michael Bussieck, 2025년 5월
$offtext

$call.checkErrorLevel gamslib -q 연료
$call.checkErrorLevel gamslib -q 펌프
$call.checkErrorLevel gamslib -q nash
$call.checkErrorLevel gamslib -q trnsport
$call.checkErrorLevel gamslib -q gussex1
$call.checkErrorLevel sed s/"SkipBaseCase 1"/"SkipBaseCase 1, OptFileInit 1, OptFile 2, LogOption 2"/ gussex1.gms > gussex1mod.gms
$call.checkErrorLevel emplib -q ferris43
$call.checkErrorLevel emplib -q 배치sp
$call.checkErrorLevel emplib -q simplechance
$call.checkErrorLevel testlib -q embrhp01
$call mkdir xxxoptdirxxx > %system.nullfile% 2>&1
$echo * 이것은 currentdir > cplex.슬롯 나라의 cplex.슬롯 나라입니다.
$echo * 이것은 xxxoptdirxxx > xxxoptdirxxx/cplex.슬롯 나라의 cplex.슬롯 나라입니다.
$echo * 이것은 currentdir > cplex.op2의 cplex.op2입니다.
$echo * 이것은 xxxoptdirxxx > xxxoptdirxxx/cplex.op2의 cplex.op2입니다.
$echo * 이것은 currentdir > xpress.op4의 xpress.op4입니다.
$echo * 이것은 xxxoptdirxxx > xxxoptdirxxx/xpress.op4의 xpress.op4입니다.
$echo * 이것은 currentdir > conopt.op2의 conopt.op2입니다.
$echo * 이것은 xxxoptdirxxx > xxxoptdirxxx/conopt.op2의 conopt.op2입니다.
$echo * 이것은 currentdir > snopt.op4의 snopt.op4입니다.
$echo * 이것은 xxxoptdirxxx > xxxoptdirxxx/snopt.op4의 snopt.op4입니다.
$echo * 이것은 currentdir > path.슬롯 나라의 path.슬롯 나라입니다.
$echo * 이것은 xxxoptdirxxx > xxxoptdirxxx/path.슬롯 나라의 path.슬롯 나라입니다.
$echo * 이것은 currentdir > path.op3의 path.op3입니다.
$echo * 이것은 xxxoptdirxxx > xxxoptdirxxx/path.op3의 path.op3입니다.
$echo * 이것은 xxxoptdirxxx > xxxoptdirxxx/jams.op5의 jams.op5입니다.
$echo * 현재 디렉토리 > jams.op5의 jams.op5입니다.

$onecho > xxxoptdirxxx/alphaecp.슬롯 나라
밉솔버 cplex.1
miplog레벨 1
nlpsolver conopt.2
nlplog레벨 1
$offecho
$call.checkErrorLevel 게임 연료 minlp=alphaecp optfile=1 optdir=xxxoptdirxxx lo=2
*
$call.checkErrorLevel grep -q "이것은 xxxoptdirxxx의 conopt.op2입니다" Fuel.log
$call grep -q "현재 디렉터리의 conopt.op2입니다" Fuel.log
$if errorlevel 1 $abort Fuel.log에서 예상치 못한 "현재 디렉터리의 conopt.op2입니다"가 발견되었습니다. 
*
$call.checkErrorLevel grep -q "이것은 xxxoptdirxxx의 cplex.슬롯 나라입니다" Fuel.log
$call grep -q "이것은 currentdir의 cplex.슬롯 나라입니다." Fuel.log
$if errorlevel 1 $abort Fuel.log에서 예상치 못한 "현재 디렉터리의 cplex.슬롯 나라입니다"가 발견되었습니다. 

$onecho > xxxoptdirxxx/antigone.슬롯 나라
nlp_solver 연결
conopt_opt파일 conopt.op2
cplex_opt파일 cplex.슬롯 나라
$offecho
$call.checkErrorLevel gams 연료 minlp=antigone optfile=1 optdir=xxxoptdirxxx lo=2
*
$call.checkErrorLevel grep -q "이것은 xxxoptdirxxx의 conopt.op2입니다" Fuel.log
$call grep -q "현재 디렉터리의 conopt.op2입니다" Fuel.log
$if errorlevel 1 $abort Fuel.log에서 예상치 못한 "현재 디렉터리의 conopt.op2입니다"가 발견되었습니다. 
*
$call.checkErrorLevel grep -q "이것은 xxxoptdirxxx의 cplex.슬롯 나라입니다" Fuel.log
$call grep -q "이것은 currentdir의 cplex.슬롯 나라입니다." Fuel.log
$if errorlevel 1 $abort Fuel.log에서 예상치 못한 "현재 디렉터리의 cplex.슬롯 나라입니다"가 발견되었습니다. 

$ifThen.baron은 "%gams.sysdir%optbaron.def"를 존재합니다.
$onecho > xxxoptdirxxx/baron.슬롯 나라
nlpsol 6
extnlpsolver conopt.2
$offecho
$call mkdir baronscratch > %system.nullfile% 2>&1
$call.checkErrorLevel gams 연료 minlp=baron optfile=1 procdir=baronscratch optdir=xxxoptdirxxx lo=2 keep=1 > %system.nullfile% 2>&1
*
$call.checkErrorLevel grep -q "이것은 xxxoptdirxxx의 conopt.op2입니다." baronscratch/gmsjjlog.dat
$call grep -q "현재 디렉터리의 conopt.op2입니다." baronscratch/gmsjjlog.dat
$if not errorlevel 1 $abort baronscratch/gmsjjlog.dat에서 예상치 못한 "현재 디렉터리의 conopt.op2입니다"를 발견했습니다.
$endIf.baron

$onecho > xxxoptdirxxx/dicopt.슬롯 나라
밉솔버 cplex xpress
mipoptfile cplex.슬롯 나라 xpress.op4
nlpsolver conopt snopt
nlpoptfile conopt.op2 snopt.op4
$offecho
$call.checkErrorLevel 게임 연료 minlp=dicopt optfile=1 optdir=xxxoptdirxxx lo=2
*
$call.checkErrorLevel grep -q "이것은 xxxoptdirxxx의 cplex.슬롯 나라입니다" Fuel.log
$call grep -q "이것은 currentdir의 cplex.슬롯 나라입니다." Fuel.log
$if errorlevel 1 $abort Fuel.log에서 예상치 못한 "현재 디렉터리의 cplex.슬롯 나라입니다"가 발견되었습니다.
*
$call.checkErrorLevel grep -q "이것은 xxxoptdirxxx의 xpress.op4입니다" Fuel.log
$call grep -q "현재 디렉토리의 xpress.op4입니다" Fuel.log
$if errorlevel 1 $abort Fuel.log에서 예상치 못한 "현재 디렉터리의 xpress.op4입니다"가 발견되었습니다.
*
$call.checkErrorLevel grep -q "이것은 xxxoptdirxxx의 conopt.op2입니다" Fuel.log
$call grep -q "현재 디렉터리의 conopt.op2입니다" Fuel.log
$if errorlevel 1 $abort Fuel.log에서 예상치 못한 "현재 디렉터리의 conopt.op2입니다"가 발견되었습니다.
*
$call.checkErrorLevel grep -q "이것은 xxxoptdirxxx의 snopt.op4입니다" Fuel.log
$call grep -q "현재 디렉터리의 snopt.op4입니다" Fuel.log
$if errorlevel 1 $abort Fuel.log에서 예상치 못한 "현재 디렉터리의 snopt.op4입니다"가 발견되었습니다.

$onecho > xxxoptdirxxx/examiner.슬롯 나라
하위 해결자 선택
subSolverOpt 2
$offecho
$call.checkErrorLevel gams trnsport lp=검사자 optfile=1 optdir=xxxoptdirxxx lo=2
*
$call.checkErrorLevel grep -q "이것은 xxxoptdirxxx의 conopt.op2입니다" tnsport.log
$call grep -q "현재 디렉터리의 conopt.op2입니다." trnsport.log
$if errorlevel 1 $abort trnsport.log에서 예상치 못한 "현재 디렉터리의 conopt.op2입니다"가 발견되었습니다.

$onecho > xxxoptdirxxx/examiner2.슬롯 나라
하위 해결자 선택
subSolverOpt 2
$offecho
$call.checkErrorLevel gams trnsport lp=examiner2 optfile=1 optdir=xxxoptdirxxx lo=2
*
$call.checkErrorLevel grep -q "이것은 xxxoptdirxxx의 conopt.op2입니다" tnsport.log
$call grep -q "현재 디렉터리의 conopt.op2입니다." trnsport.log
$if errorlevel 1 $abort trnsport.log에서 예상치 못한 "현재 디렉터리의 conopt.op2입니다"가 발견되었습니다.

$onecho > xxxoptdirxxx/gamschk.슬롯 나라
솔버 이름 선택
선택 파일 2
해결하다
$offecho
$call.checkErrorLevel gams tnsport lp=gamschk optfile=1 optdir=xxxoptdirxxx lo=2
*
$call.checkErrorLevel grep -q "이것은 xxxoptdirxxx의 conopt.op2입니다" tnsport.log
$call grep -q "현재 디렉터리의 conopt.op2입니다." trnsport.log
$if errorlevel 1 $abort trnsport.log에서 예상치 못한 "현재 디렉터리의 conopt.op2입니다"가 발견되었습니다.

$onecho > xxxoptdirxxx/jams.슬롯 나라
하위 솔버 경로
서브솔버옵트 3
$offecho
$call.checkErrorLevel gams ferris43 emp=잼 optfile=1 optdir=xxxoptdirxxx lo=2
*
$call.checkErrorLevel grep -q "이것은 xxxoptdirxxx의 path.op3입니다" ferris43.log
$call grep -q "현재 디렉토리의 path.op3입니다" ferris43.log
$if errorlevel 1 $abort Ferris43.log에서 예상치 못한 "현재 디렉터리의 path.op3입니다"를 발견했습니다.

$onecho > xxxoptdirxxx/nlpec.슬롯 나라
하위 해결사 개념
서브솔버옵트 2
$offecho
$call.checkErrorLevel gams nash mpec=nlpec mcp=경로 optfile=1 optdir=xxxoptdirxxx lo=2
*
$call.checkErrorLevel grep -q "이것은 xxxoptdirxxx의 conopt.op2입니다" nash.log
$call grep -q "현재 디렉터리의 conopt.op2입니다." nash.log
$if errorlevel 1 $abort nash.log에서 예상치 못한 "현재 디렉터리의 conopt.op2입니다"를 발견했습니다.

$onecho > xxxoptdirxxx/sbb.슬롯 나라
루트솔버 conopt.2
하위 해결사 snopt.4
로그레벨 2
$offecho
$call.checkErrorLevel 게임 연료 minlp=sbb optfile=1 optdir=xxxoptdirxxx lo=2
*
$call.checkErrorLevel grep -q "이것은 xxxoptdirxxx의 conopt.op2입니다" Fuel.log
$call grep -q "현재 디렉터리의 conopt.op2입니다" Fuel.log
$if errorlevel 1 $abort Fuel.log에서 예상치 못한 "현재 디렉터리의 conopt.op2입니다"가 발견되었습니다. 
*
$call.checkErrorLevel grep -q "이것은 xxxoptdirxxx의 snopt.op4입니다" Fuel.log
$call grep -q "현재 디렉터리의 snopt.op4입니다" Fuel.log
$if errorlevel 1 $abort Fuel.log에서 예상치 못한 "현재 디렉터리의 snopt.op4입니다"가 발견되었습니다. 

$onecho > xxxoptdirxxx/shot.슬롯 나라
Primal.FixedInteger.Solver=1
Subsolver.GAMS.NLP.Solver=conopt
Subsolver.GAMS.NLP.OptionsFilename=conopt.op2
Output.Console.PrimalSolver.Show=1
$offecho
$call.checkErrorLevel gams 펌프 minlp=shot optfile=1 optdir=xxxoptdirxxx lo=2
*
$call.checkErrorLevel grep -q "이것은 xxxoptdirxxx의 conopt.op2입니다." 펌프.로그
$call grep -q "이것은 currentdir의 conopt.op2입니다." Pump.log
$if errorlevel 1 $abort 펌프.log에서 예상치 못한 "현재 디렉터리의 conopt.op2입니다"가 발견되었습니다. 

$onecho > xxxoptdirxxx/de.슬롯 나라
하위 해결사 복합체
서브솔버옵트 1
evsubsolver cplex
evsubsolverop1
$offecho
$call.checkErrorLevel 게임 배치sp emp=de mip=cplex optfile=1 optdir=xxxoptdirxxx lo=2
*
$call.checkErrorLevel grep -q "이것은 xxxoptdirxxx의 cplex.슬롯 나라입니다" 배치sp.log
$call grep -q "이것은 현재 디렉터리의 cplex.슬롯 나라입니다." Batchsp.log
$if not errorlevel 1 $abort Batchsp.log에서 예상치 못한 "현재 디렉터리의 cplex.슬롯 나라입니다."를 발견했습니다. 

$onecho > xxxoptdirxxx/de.슬롯 나라
jamsopt jams.op5
서브솔버 익스프레스
하위 해결 방법 4
$offecho
$call.checkErrorLevel gams simplechance emp=de optfile=1 optdir=xxxoptdirxxx lo=2
*
$call.checkErrorLevel grep -q "xxxoptdirxxx의 jams.op5입니다" simplechance.log
$call grep -q "현재 디렉토리의 jams.op5입니다" simplechance.log
$if errorlevel 1 $abort simplechance.log에서 예상치 못한 "현재 디렉터리의 jams.op5입니다"를 발견했습니다. 
*
$call.checkErrorLevel grep -q "이것은 xxxoptdirxxx의 xpress.op4입니다" simplechance.log
$call grep -q "현재 디렉터리의 xpress.op4입니다." simplechance.log
$if errorlevel 1 $abort simplechance.log에서 예상치 못한 "현재 디렉터리의 xpress.op4입니다"를 발견했습니다. 

$onecho > xxxoptdirxxx/reshop.슬롯 나라
서브솔버옵트 3
$offecho
$call.checkErrorLevel gams embrhp01 emp=reshop optfile=1 optdir=xxxoptdirxxx lo=3 > embrhp01.log
*
$call.checkErrorLevel grep -q "이것은 xxxoptdirxxx의 path.op3입니다" embrhp01.log
$call grep -q "현재 디렉터리의 path.op3입니다." embrhp01.log
$if errorlevel 1 $abort embrhp01.log에서 예상치 못한 "현재 디렉터리의 path.op3입니다"를 발견했습니다.

$call.checkErrorLevel gams gussex1mod lp=cplex optdir=xxxoptdirxxx lo=2
*
$call.checkErrorLevel grep -q "이것은 xxxoptdirxxx의 cplex.슬롯 나라입니다" gussex1mod.log
$call grep -q "현재 디렉터리의 cplex.슬롯 나라입니다." gussex1mod.log
$if errorlevel 1 $abort gussex1mod.log에서 예상치 못한 "현재 디렉터리의 cplex.슬롯 나라입니다"가 발견되었습니다. 
*
$call.checkErrorLevel grep -q "이것은 xxxoptdirxxx의 cplex.op2입니다" gussex1mod.log
$call grep -q "현재 디렉터리의 cplex.op2입니다." gussex1mod.log
$errorlevel 1이 아닌 경우 $abort gussex1mod.log에서 예기치 않은 "현재 디렉터리의 cplex.op2입니다"가 발견되었습니다.