소개
CONVERT는 GAMS 모델 인스턴스를 모든 기밀 정보가 제거된 스칼라 모델 또는 다른 모델링 및 솔루션 시스템에서 사용되는 형식으로 피망 슬롯하는 유틸리티입니다. CONVERT는 다음 목표를 달성하도록 설계되었습니다.
- 사용자가 기밀 모델을 GAMS 스칼라 형식으로 피망 슬롯하여 식별 가능한 구조가 제거되도록 허용합니다. 그런 다음 기밀성을 유지하면서 조사를 위해 다른 사람에게 전달할 수 있습니다.
- 다른 모델링 시스템 또는 솔버와 함께 사용할 수 있도록 피망 슬롯 테스트 문제를 공유하는 방법입니다.
CONVERT는 라이선스가 부여된 모든 GAMS 시스템과 함께 무료로 제공되며 GAMS 모델을 다양한 형식으로 피망 슬롯할 수 있습니다. 섹션 참조대상 언어 및 형식목록용.
피망 슬롯 사용 방법
CONVERT는 다른 피망 슬롯 솔버처럼 실행됩니다. 명령줄에서는 다음과 같습니다.
>> gams 모델명 모델 유형=피망 슬롯
어디에서모델명은 피망 슬롯 모델 이름이고모델 유형특정 모델 유형(예: LP, MIP, RMIP, QCP, MIQCP, RMIQCP, NLP, DNLP, CNS, MINLP 또는 MCP)에 대한 솔버 표시기입니다. CONVERT는 풀이 문 앞에 있는 모델 자체 내의 옵션 문을 통해 지정할 수도 있습니다.
옵션 모델 유형=피망 슬롯;
피망 슬롯 스칼라 형식
기본적으로 CONVERT는 스칼라 피망 슬롯 모델을 생성합니다(피망 슬롯gms)을 입력 모델에서 가져옵니다. 스칼라 모델은 다음과 같은 특징을 나타냅니다.
- 세트 또는 색인화된 매개변수가 없는 모델입니다. 모델링 시스템의 고급 특성을 전혀 나타내지 않으며 쉽게 피망 슬롯할 수 있습니다.
- 새로운 개별 변수 세트가 있는 모델로, 피망 슬롯 모델의 각 변수를 양수, 정수 또는 이진수 유형의 3가지 유형 중 하나로 묘사합니다. 각 변수는 순차적으로 번호가 지정됩니다. 즉, 모든 양수 피망 슬롯 변수는 n개의 단일 변수에 매핑됩니다.
x1, x2, ..., xn. - 피망 슬롯 모델의 각 변수를 묘사하는 개별 방정식이 포함된 모델입니다. 모든 방정식은 순차적으로 번호가 매겨져 있습니다. 즉 방정식입니다.
e1, e2, ..., em.
방정식과 변수 경계, 변수 시작 값은 원래 피망 슬롯 공식에서 보존됩니다.
예를 들어, 사용자가 피망 슬롯 모델 라이브러리 모델을 번역하기를 원한다고 가정합니다.trn스포츠스칼라 형식으로, 하나는 실행될 것입니다
gams trnsport.gms lp=피망 슬롯
다음 스칼라 모델을 생성합니다피망 슬롯gms:
* 피망 슬롯 Convert가 2020년 11월 19일 15:28:05에 작성한 LP
*
* 방정식 개수
* 합계 E G L N X C B
* 6 1 3 2 0 0 0 0
*
* 변수 개수
* x b i s1s s2s sc si
* 총 연속 이진 정수 sos1 sos2 scont sint
* 7 7 0 0 0 0 0 0
* FX 0
*
* 0이 아닌 개수
* 총 const NL
* 19 19 0
* x7을 최소화하는 LP를 사용하여 m을 해결합니다.
변수
x1,x2,x3,x4,x5,x6,x7;
양수 변수
x1,x2,x3,x4,x5,x6;
방정식
e1,e2,e3,e4,e5,e6;
e1.. -0.225 * x1 - 0.153 * x2 - 0.162 * x3 - 0.225 * x4 - 0.162 * x5 - 0.126 *
x6 + x7 =E= 0;
e2.. x1 + x2 + x3 =L= 350;
e3.. x4 + x5 + x6 =L= 600;
e4.. x1 + x4 =G= 325;
e5.. x2 + x5 =G= 300;
e6.. x3 + x6 =G= 275;
모델 m / 모두 /;
m.limrow = 0;
m.limcol = 0;
x7을 최소화하는 LP를 사용하여 m을 해결합니다.결과 스칼라 모델에는 데이터 또는 제약 조건의 컨텍스트에 대한 설명 정보가 포함되어 있지 않습니다.
추가로 사전 파일(dict.txt)은 스칼라 모델의 변수 및 방정식 이름과 원본 모델의 해당 이름 간의 매핑을 지정하는 기본적으로 생성됩니다.
위의 예에서 사전 파일은
GAMS 피망 슬롯에 의해 작성된 LP, 11/19/20 15:28:05
방정식 개수
합계 E G L N X C B
6 1 3 2 0 0 0 0
변수 개수
x b 나는 s1s s2s sc si
총 연속 이진 정수 sos1 sos2 scont sint
7 7 0 0 0 0 0 0
FX 0
0이 아닌 개수
총 const NL
19 19 0
방정식 1 ~ 6
e1 비용
e2 공급(시애틀)
e3 공급(샌디에이고)
e4 수요(뉴욕)
e5 수요(시카고)
e6 수요(토피카)
변수 1~7
x1 x(시애틀,뉴욕)
x2 x(시애틀,시카고)
x3 x(시애틀,토피카)
x4 x(샌디에고,뉴욕)
x5 x(샌디에고,시카고)
x6 x(샌디에고,토피카)
x7zGAMS 모델을 스칼라 모델로 피망 슬롯하면 모델 디버깅에 유용할 수 있습니다. 그러나 이 경우에는 원래의 변수 및 방정식 이름을 유지하는 것이 좋을 수 있습니다. 다음의 간단한 sed 명령이 이를 달성하려고 시도합니다.
sed -n -e "s:^ *\([exbi][0-9][0-9]*\) \(.*\):s/\1/\2/g:gp" dict.txt | sed -n '1!G;h;$p' > mod.txt sed -f mod.txt 피망 슬롯gms
위의 예에서는 다음과 같이 출력됩니다.
변수
x(시애틀,뉴욕),x(시애틀,시카고),x(시애틀,토피카),x(샌디에고,뉴욕),x(샌디에고,시카고),x(샌디에고,토피카),z;
양수 변수
x(시애틀,뉴욕),x(시애틀,시카고),x(시애틀,토피카),x(샌디에이고,뉴욕),x(샌디에고,시카고),x(샌디에고,토피카);
방정식
비용,공급(시애틀),공급(샌디에고),수요(뉴욕),수요(시카고),수요(토피카);
비용.. -0.225 * x(시애틀,뉴욕) - 0.153 * x(시애틀,시카고) - 0.162 * x(시애틀,토피카) - 0.225 * x(샌디에고,뉴욕) - 0.162 * x(샌디에이고,시카고) - 0.126 *
x(산디에고,토피카) + z =E= 0;
공급(시애틀).. x(시애틀,뉴욕) + x(시애틀,시카고) + x(시애틀,토피카) =L= 350;
공급(샌디에고).. x(샌디에고,뉴욕) + x(샌디에고,시카고) + x(샌디에고,토피카) =L= 600;
수요(뉴욕).. x(시애틀,뉴욕) + x(샌디에이고,뉴욕) =G= 325;
수요(시카고).. x(시애틀,시카고) + x(샌디에고,시카고) =G= 300;
수요(토피카).. x(시애틀,토피카) + x(샌디에고,토피카) =G= 275;물론 이것은 유효한 피망 슬롯 코드가 아니며 컴파일할 수 없습니다. 그러나 피망 슬롯 컴파일러에 의해 생성된 모델 대수를 보는 데는 충분할 수 있습니다.
사용하여
sed -n -e "y/(),-/____/" -e "s:^ *\([exbi][0-9][0-9]*\) \(.*\):s/\1/\2/g:gp" dict.txt | sed -n '1!G;h;$p' > mod.txt sed -f mod.txt 피망 슬롯gms
이 예에서는 하나를 얻습니다.
변수
x_seattle_new_york_,x_seattle_chicago_,x_seattle_topeka_,x_san_diego_new_york_,x_san_diego_chicago_,x_san_diego_topeka_,z;
양수 변수
x_seattle_new_york_,x_seattle_chicago_,x_seattle_topeka_,x_san_diego_new_york_,x_san_diego_chicago_,x_san_diego_topeka_;
방정식
비용,supply_seattle_,supply_san_diego_,demand_new_york_,demand_chicago_,demand_topeka_;
비용.. -0.225 * x_seattle_new_york_ - 0.153 * x_seattle_chicago_ - 0.162 * x_seattle_topeka_ - 0.225 * x_san_diego_new_york_ - 0.162 * x_san_diego_chicago_ - 0.126 *
x_san_diego_topeka_ + z =E= 0;
Supply_seattle_.. x_seattle_new_york_ + x_seattle_chicago_ + x_seattle_topeka_ =L= 350;
Supply_san_diego_.. x_san_diego_new_york_ + x_san_diego_chicago_ + x_san_diego_topeka_ =L= 600;
Demand_new_york_.. x_seattle_new_york_ + x_san_diego_new_york_ =G= 325;
Demand_chicago_.. x_seattle_chicago_ + x_san_diego_chicago_ =G= 300;
수요_topeka_.. x_seattle_topeka_ + x_san_diego_topeka_ =G= 275;이것은 피망 슬롯로 컴파일될 수도 있으며 올바른 솔루션을 제공합니다.
제안된 명령에는 몇 가지 제한 사항이 있으며 모든 경우에 원하는 출력을 생성하지 못할 수 있습니다. 예를 들어, 원본 모델에 다음으로 시작하는 변수 또는 방정식 이름이 포함되어 있으면 잘못된 결과가 인쇄됩니다.b,i,e,x[숫자]. 또한 반연속 또는 반정수 변수 또는 특수 순서 세트는 위에서 지원되지 않습니다. 명령을 적절하게 확장하는 것은 숙련된 사용자에게 맡깁니다.
OSiL 형식
최적화 서비스 인스턴스 언어(OSiL) [68]은 최적화 문제 인스턴스를 나타내기 위해 XML 기반 형식을 지정합니다. 피망 슬롯/CONVERT는 MINLP 모델 인스턴스를 작성할 수 있습니다.OSiL 형식. 표현식 트리는 다음과 같이 작성되었습니다.OSnL 형식.
옆에인덱싱된 작업합계, 곱, 최소값, 최대값 및 뺄셈과 나눗셈 연산의 경우 다음과 같습니다.내장 함수다음에 매핑되어 있습니다.OSnL상대:sqr, sqrt, 특급, 로그, 로그2, 로그10, 복근, cos, 죄, 탄, 아르코스, 아르크신, 아르탄, 신, 코시, 탄, 파이, div, 감마, 로그감마, 바닥, 실, 라운드, 트렁크, 로그인 사실, 이항. 기능cvPower, 힘, rpower, vcpower모두 OSnL에 매핑되어 있습니다힘연산자이므로 인수 조건은 유지되지 않습니다. 기능arctan2, 중심점, 편집, 오류f및폴리은 대수적 정의에 따른 표현식으로 표현됩니다. 본질적인 기능signpower, 엔트로피, 시그모이드, 감마레그, 베타, 로그베타및베타레그또한 OSiL 파일에 기록되지만 OSnL 표준을 따르지 않습니다(현재 이러한 기능을 제공하지 않기 때문). 따라서 OSiL 판독기는 이러한 기능을 사용하는 XML 파일을 거부할 수 있습니다. 마지막으로, 또한논리 함수OSnL 대응 항목을 사용하여 OSiL에 기록됩니다.
사용자 지정 옵션
CONVERT 옵션은 옵션 파일을 통해 전달됩니다. 지정하는 경우<모델 이름>.optfile = 1;피망 슬롯 모델의 SOLVE 문 앞에 CONVERT는 이름이 있는 옵션 파일을 찾아 읽습니다.convert.opt(참조솔버 옵션 파일솔버 옵션 파일의 일반적인 사용용). CONVERT 옵션 파일의 구문은 다음과 같습니다.
optname 값
각 줄에 하나의 옵션이 있습니다. 예를 들어,
앰플
이 옵션 파일은 CONVERT에게 AMPL 입력 파일을 생성하라고 지시합니다. 파일 형식 옵션의 경우 사용자는 생성할 파일의 파일 이름을 지정할 수 있습니다. 예를 들어, 옵션 파일 항목
lingo myfile.lng
다음이라는 LINGO 입력 파일 형식을 생성합니다.myfile.lng. 옵션 사용링고그 자체로 해당 옵션에 대한 기본 출력 파일을 생성합니다(lingo.lng).
사용 가능한 모든 옵션은 다음 표에 나열되어 있습니다.
대상 언어 및 형식
기타 옵션
| 옵션 | 설명 | 기본값 |
|---|---|---|
| AmplNLBin | 바이너리 .nl 파일을 활성화합니다 | 0 |
| AmplNlInitDual | .nl 파일에 쓸 초기 방정식 한계 값0: 값 쓰기 없음1: 기본값이 아닌 값만 쓰기2: 모든 값 쓰기 | 1 |
| AmplNlInitPrimal | .nl 파일에 쓸 초기 변수 레벨 값0: 값 쓰기 없음1: 기본값이 아닌 값만 쓰기2: 모든 값 쓰기 | 2 |
| GDXHessian | 헤센 정보 활성화DumpGDX | 0 |
| GDX이름 | 다음에 대한 변수 및 방정식 이름 활성화DumpGDX | 1 |
| GDX2차 | 다음에 대한 2차 정보 활성화DumpGDX | 0 |
| GDXUELs | UEL 활성화DumpGDX | 1 |
| GmsInsert | solv 문 앞에 삽입할 라인 | $if NOT '피망 슬롯u1' == '' $include '피망 슬롯u1' |
| HeaderTimeStamp | 출력 파일 헤더의 타임스탬프 제어 형식기본값: 기존 기본 타임스탬프 사용없음: 타임스탬프 사용 안 함 | 기본값 |
| 간격 평가 | 다음에 간격 평가 포함DumpGDX | 0 |
| ObjVar | 객관변수 이름 | 피망 슬롯 색인 이름, 예: x1 |
| PermuteEqus | 방정식 순열을 위한 무작위 시드(0: 순열 없음) | 0 |
| PermuteVars | 변수 순열을 위한 무작위 시드(0: 순열 없음) | 0 |
| QExtractAlg | 피망 슬롯 인터페이스의 2차 추출 알고리즘0: 자동1: ThreePass: 3패스 정방향/역방향/정방향 AD 기술을 사용하여 함수/그라디언트/헤시안 값을 계산하고 저장을 위한 하이브리드 방식을 사용합니다.2: DoubleForward: 정방향 AD를 사용하여 필요에 따라 각 노드 또는 스택 수준에서 함수, 그래디언트 및 헤세 값을 계산하고 저장합니다. 그래디언트와 헤세 행렬은 연결된 목록에 저장됩니다.3: 동시: ThreePass와 DoubleForward를 병렬로 사용합니다. 하나가 끝나자마자 다른 하나가 멈춥니다. | 0 |
| qextractdenseswitchfactor | 피망 슬롯 인터페이스의 2차 추출 알고리즘에 대한 희소/밀도 인자 범위: [ 0, ] | 0.008 |
| qextractdenseswitchlog | 피망 슬롯 인터페이스의 2차 추출 알고리즘에서 희소/밀도 인자 선택에 대한 추가 정보를 활성화합니다. | 0 |
| 개혁 | 강제 재구성 | 100 |
| SkipNRows | =N= 유형의 제약 조건 건너뛰기 | 0 |
| 너비 | 출력 형식의 최대 선 너비 범위: 40, ..., 무한 | 80 |