질문

GAMS 애플리케이션용 GUI(그래픽 사용자 인터페이스)를 작성하려면 심각한 프로그래밍이 필요하므로 모델러의 지식과 시간에 부담을 줍니다. 이 섹션에서는 몇 가지 간단한 도구를 사용하여 매우 간단한 사용자 인터페이스를 구축할 수 있는 방법을 보여줍니다. 이러한 도구의 주요 목적은 최종 사용자가 GAMS 메가 슬롯을 편집할 필요가 없도록 개발자가 애플리케이션을 신속하게 구성할 수 있도록 하는 것입니다. 최종 사용자가 GAMS Studio에서 GAMS 모델을 실행한다고 가정합니다.

ASK 유틸리티는 최종 사용자로부터 입력을 얻는 데 사용될 수 있으며 GDXViewer 도구는 최종 결과를 제시하는 데 사용될 수 있습니다. 이러한 도구를 함께 사용하면 프로그래밍 없이 최소한의 GUI를 구축할 수 있습니다.

참고
ASK는 Windows에서만 사용할 수 있습니다.

사용법

<옵션> 묻기

여기서옵션아르

T=문자열

여기서문자열추적할 입력 항목의 유형을 식별하고 다음이 될 수 있음

  • 정수- 정수를 원할 때
  • 플로트- 실수를 원할 때
  • 라디오버튼- 라디오 버튼 선택을 원하는 경우
  • 콤보박스- 콤보(드롭다운 선택) 상자를 원할 때
  • 체크리스트박스- 체크리스트 박스를 원할 때
  • fileopenbox- 열려고 하는 메가 슬롯 이름을 원하는 경우
  • 메가 슬롯저장상자- 저장할 메가 슬롯 이름을 원할 때

예:T=정수

M="string"

여기서문자열상자에 있는 텍스트입니다.
예:M="숫자를 입력하세요"

O="메가 슬롯이름"

여기서메가 슬롯 이름향후 GAMS에 포함하기 위한 결과를 저장할 메가 슬롯의 이름입니다.
예:O="file.inc"

D="문자열 1|문자열 2..."

여기서 "문자열 1|문자열 2|문자열 3|...|문자열 n"은 체크박스, 라디오버튼, 콤보박스 또는 체크리스트박스를 사용할 때 n개의 문자열이 다중 선택 항목과 연결되도록 제공합니다. 개별 문자열은 구분 기호 "|"로 구분됩니다.
예:D="소형 데이터 세트|중형 데이터 세트|대형 데이터 세트"

E="숫자 1|숫자 2..."

여기서 "숫자 1|숫자 2|숫자 3|...|숫자 n"은 체크박스, 라디오버튼, 콤보박스 또는 체크리스트박스를 사용할 때 선택한 항목과 관련된 GAMS에 반환될 n개의 숫자를 제공합니다. 개별 번호는 구분 기호 "|"로 구분됩니다.
예:E="1|2|3|4|5"

I="메가 슬롯 경로"

어디에서메가 슬롯 경로fileopenbox 및 filesavebox 대화 상자에서 메가 슬롯을 찾을 경로를 제공합니다. 지정하지 않으면 프로젝트 디렉터리입니다.
예: I="C:\gams\mine"

F="메가 슬롯마스크"

어디에서메가 슬롯마스크fileopenbox 및 filesavebox 대화 상자에서 허용되는 메가 슬롯에 대한 마스크를 제공합니다. 지정하지 않으면 다음과 같습니다...
예:I="*.gdx"

R="문자열"

여기서문자열포함 메가 슬롯에 배치할 GAMS 코드 줄을 제공합니다.
이것은 반환할 정보가 대체되는 s 매개변수를 포함할 수 있습니다.
예: R="$include '%s'" 또는 R="set i /1990*%s/;"

C="문자열"

사용 중인 대화 상자의 제목
예:C="메가 슬롯을 요청하는 상자"

L=숫자

여기서번호숫자 항목에 하한값을 제공합니다
예:L=15

U=숫자

여기서번호숫자 항목의 상한을 제공합니다
예:U=15

@"메가 슬롯 이름"

어디에서메가 슬롯 이름이 표의 위 옵션을 포함하는 입력 명령 메가 슬롯의 이름을 제공합니다.
예:@ask.opt

또한 숫자 자체를 입력하여 여러 항목을 아래 열에 넣을 수 있습니다.체크박스, 라디오버튼, 콤보박스또는체크리스트박스항목.

GAMS에서 ASK 유틸리티 호출 중

ASK 유틸리티는 최종 사용자에게 간단한 대화형 질문을 하는 간단한 도구입니다. 예를 들어, 모델에서 스칼라를 정기적으로 변경해야 하는 경우 최종 사용자가 변경하도록 허용하는 대신.gms소스 메가 슬롯의 경우, 필요한 숫자를 입력할 수 있는 질문 텍스트가 있는 창을 팝업하는 것이 더 나을 수 있습니다. ASK 도구를 사용하면 이 작업을 수행할 수 있습니다. ASK 도구는 표준 GAMS 포함 메가 슬롯을 생성하므로 이 메가 슬롯은 다음을 통해 사용할 수 있습니다.$include진술:

$call =ask T=integer M="도시 수를 입력하세요" o=n.inc
스칼라 n '도시 수' /
$include n.inc
/;
디스플레이 n;

$call문은 ASK 도구를 호출합니다. 만일ASK.EXE는 GAMS 시스템 디렉토리에 있지 않지만 다른 곳에 위치하며 다음과 같이 경로를 제공해야 할 수도 있습니다.

$call =d:\util\ask T=integer M="도시 수를 입력하세요" o=n.inc

매개변수T=정수정수()를 요청하고 싶다는 것을 나타냅니다.T유형을 의미함). 매개변수M="텍스트"질문 텍스트를 지정합니다. 마지막으로O=메가 슬롯이름ASK가 생성해야 하는 포함 메가 슬롯의 이름을 설정합니다.

GAMS Studio에서 이 GAMS 조각을 실행하면 다음을 볼 수 있습니다:

숫자를 입력하고 확인 버튼을 누르면 GAMS가 계속됩니다. 목록 메가 슬롯은 포함 메가 슬롯이 어떻게 구성되었는지 명확하게 보여줍니다.

2 스칼라 n '도시 수' /
C:\Users\user\Documents\GAMS\Studio\workspace\n.inc 포함
   4 * 가져오기 필터 버전 2.1에 문의, 2006년 2월
   5 * Erwin Kalvelagen, GAMS 개발 공사
   6 12
   7 /;
   8 디스플레이 n;

메가 슬롯 요약 포함

   SEQ 전역 유형 상위 로컬 메가 슬롯 이름

     1 1 입력 0 0 C:\Users\user\Documents\GAMS\Studio\workspace\SingleAsk.gms
     2 1 CALL 1 1 =질문 T=정수 M="도시 수를 입력하세요" o=n.inc
     3 3 1 3 포함 .C:\Users\user\Documents\GAMS\Studio\workspace\n.inc

이 경우12입력되었으며확인버튼을 눌렀습니다. 사용자가를 누른 경우취소버튼을 누르면 목록 메가 슬롯에 다음이 표시됩니다:

2 스칼라 n '도시 수' /
C:\Users\user\Documents\GAMS\Studio\workspace\n.inc 포함
   4 * 가져오기 필터 버전 2.1에 문의, 2006년 2월
   5 * Erwin Kalvelagen, GAMS 개발 공사
   6 * 취소를 눌렀습니다.
   7 /;
   8 디스플레이 n;

사용자가 입력할 수 있는 정수를 제한하려는 경우 다음과 같이 하한과 상한을 지정할 수 있습니다:

$call =ask T=integer M="0에서 5 사이의 정수 제공" L=0 U=5 O=n1.inc
스칼라 n1 '정수 0..5' /
$include n1.inc
/;
n1을 표시;

이것은 다음 사이의 값만 허용합니다.0그리고5.

사용자가 부동 소수점 숫자를 지정할 수 있도록 하려면 다음을 사용할 수 있습니다.T=부동산. 예는 다음과 같습니다:

$call =ask T=float M="부동 소수점 수 제공, 범위 없음" O=x.inc
스칼라 x '실수' /
$include x.inc
/;
디스플레이 x;

부동 소수점 팝업 창은 다음을 사용하여 입력된 숫자가 특정 범위 내에 있는지 확인하도록 지시할 수 있습니다.L=하한그리고U=상한구문:

$call =ask T=float M="0과 5 사이의 부동 소수점 수 제공" L=0 U=5.0 O=x1.inc
스칼라 x1 '실수' /
$include x1.inc
/;
디스플레이 x1;

지금까지 ASK에 의해 생성된 포함 메가 슬롯에는 단일 숫자만 포함되어 있었습니다. ASK는 더 복잡한 포함 메가 슬롯을 생성할 수 있습니다. 예를 고려해보세요:

* 세트 가져오기
$call =ask T=integer M="1990년에서 2010년 사이의 연도를 입력하세요." C="내 제목" L=1990 U=2010 R="i /1990*%s/로 설정;" O=i.inc
$include i.inc
나는 표시;

매개변수C="캡션"그리고R="결과문자열"새로운 것입니다. 캡션은 간단합니다. 창의 이름을 설정합니다. 결과 문자열은 ASK가 대체된 후 반환되는 문자열입니다.s30773_308091991, 포함 메가 슬롯에 기록된 결과는 다음과 같습니다.설정 i /1990*1991/;.

목록 메가 슬롯을 사용하여 올바른 동작을 확인할 수 있습니다:

1 * 세트 가져오기
C:\Users\user\Documents\GAMS\Studio\workspace\i.inc 포함
   4 * 가져오기 필터 버전 2.1에 문의, 2006년 2월
   5 * Erwin Kalvelagen, GAMS 개발 공사
   6개 세트 i /1990*1991/;
   7 디스플레이 i;

메가 슬롯 요약 포함

   SEQ 전역 유형 상위 로컬 메가 슬롯 이름

     1 1 입력 0 0 C:\Users\user\Documents\GAMS\Studio\workspace\SingleAsk.gms
     2 2 CALL 1 2 =질문 T=정수 M="1990년에서 2010년 사이의 연도를 입력하세요." C="내 제목" L=1990 U=2010 R="i /1990*%s/로 설정;" O=i.inc
     3 3 1 3 포함 .C:\Users\user\Documents\GAMS\Studio\workspace\i.inc

라디오 버튼

매개변수를 통해 라디오 버튼을 사용할 수 있습니다.T=라디오버튼다음과 같이:

* 라디오 버튼을 통해 숫자 가져오기
$call =질문 T=라디오버튼 M="단일 옵션 선택" D="옵션 1|옵션 2|옵션 3|옵션 4|옵션 5" E="1|2|3|4|5" R="스칼라 n2 옵션 /%s/;" o=n2.inc
$include n2.inc
n2를 표시;

매개변수D="옵션 1|옵션 2|옵션 3|옵션 4|옵션 5"표시된 옵션의 텍스트를 지정합니다. 목록E="1|2|3|4|5"특정 옵션이 선택되면 반환(종료) 문자열을 제공합니다. 즉. 두 번째 옵션이 지정된 목록에서 선택된 경우D매개변수, 그 다음에는의 두 번째 문자열E목록이 반환되었습니다. 결과는 다시에 지정된 문자열로 대체됩니다.R매개변수가 존재하는 경우.

이 예에서는 명령줄이 다소 길어지고 처리하기 어려워졌습니다. 또한 일부 Windows 시스템에는 명령줄의 최대 길이가 제한되어 있습니다. 따라서 별도의 외부 텍스트 메가 슬롯에 명령줄 인수를 지정할 수 있는 가능성을 제공합니다. 이 텍스트 메가 슬롯은 다음을 사용하여 전달됩니다.

@메가 슬롯이름

. 메가 슬롯을 가정ask.opt다음과 같습니다:

T=라디오버튼
M=단일 옵션 선택
D=옵션 1|옵션 2|옵션 3|옵션 4|옵션 5|옵션 6|옵션 7|옵션 8|옵션 9|옵션 10
E=1|2|3|4|5|6|7|8|9|10
2
R=스칼라 n3 옵션 /%s/;
O=n3.inc

모든 명령줄 매개변수는 별도의 줄에 지정됩니다. 이상한 옵션을 확인하세요.2; 이는 ASK에게 두 개의 열에 라디오 단추를 표시하도록 지시합니다. 이 옵션 메가 슬롯을 다음과 같이 사용할 수 있습니다.

* id, 이제 2개의 열 및 매개변수 메가 슬롯 사용
$call =@"ask.opt"에 문의하세요.
$include n3.inc
n3을 표시;

메가 슬롯 이름 주위의 따옴표는 선택 사항이며 메가 슬롯 이름에 공백이 포함된 경우에만 실제로 필요합니다.

모든 로직을 한 곳에 보관하려면 GAMS를 사용하여 옵션 메가 슬롯을 생성할 수 있습니다. 이를 위해 PUT 기능을 사용할 수 없다는 점에 유의하십시오. 즉.:

메가 슬롯 f /asktest.opt/;
f를 넣어;
'T=체크리스트박스'/를 입력하세요.
  'M=여러 옵션 선택'/
  'D=옵션 1|옵션 2|옵션 3|옵션 4|옵션 5'/
  'E=1|2|3|4|5'/
  'R=%s 선택된 목록 상자 선택'/
  'O=k2.inc'/;
넣어닫다;
$call =@asktest.opt에 문의하세요.
k2 / 설정
$include k2.inc
/;
k2를 표시;

정확하지 않음: the$call컴메가 슬롯 시간 이전에 처리됩니다.PUT문이 제대로 작동했습니다. 그러나 다음을 사용할 수 있습니다.

$onEcho > Asktest.opt
T=체크리스트박스
M=여러 옵션 선택
D=옵션 1|옵션 2|옵션 3|옵션 4|옵션 5
E=1|2|3|4|5
R=%s 선택 목록 상자 선택
O=k2.inc
$offEcho
$call =@asktest.opt에 문의하세요.
k2 / 설정
$include k2.inc
/;
k2를 표시;

콤보 상자

다음 유형은T=콤보박스또한 단일 선택을 허용합니다.

* 콤보 상자를 통해 숫자 가져오기
$call =질문 T=combobox M="단일 옵션 선택" D="옵션 1|옵션 2|옵션 3|옵션 4|옵션 5" E="1|2|3|4|5" R="스칼라 n4 옵션 /%s/;" O=n4.inc
$include n4.inc
n4를 표시;

예를 들어 모델에 세 가지 데이터 세트, 즉 작은 데이터 세트, 중간 크기 데이터 세트, 큰 데이터 세트가 있는 경우를 생각해 보십시오. 각 데이터 세트는 별도의 포함 메가 슬롯에 저장됩니다.small.inc, medium.inc그리고대형.inc. 우리는 사용자에게 어떤 데이터 세트를 사용해야 하는지, 올바른 포함 메가 슬롯을 사용해야 하는지 묻고 싶습니다. 이는 다음을 통해 수행할 수 있습니다.

$onEcho > Ask.opt
T=콤보박스
M=데이터 세트 선택
D=소형 데이터 세트|중형 데이터 세트|대형 데이터 세트
E=소형.inc|중형.inc|대형.inc
R=$%s 포함
O=dataset.inc
$offEcho
$call =@ask.opt에 문의하세요.
$include 데이터세트.inc

이 경우dataset.inc한 줄이 포함됩니다: 또 다른 include 문은 다음 중 하나입니다.$include small.inc, $include Medium.inc또는$include Large.inc.

목록 및 체크리스트 상자

어떤 경우에는 목록에서 여러 항목을 선택하는 것이 유용할 수 있습니다. 이것은 다음과 같이 할 수 있습니다.T=목록상자:

* 목록 상자를 통해 세트 가져오기
$call =ask T=listbox M="여러 옵션 선택" D="옵션 1|옵션 2|옵션 3|옵션 4|옵션 5" E="1|2|3|4|5" R="%s 목록 상자 선택" O=k.inc
k /로 설정
$include k.inc
/;
k를 표시;

여러 항목을 선택하려면 CTRL 키를 누르는 것이 필요합니다. 때때로 편리한 대안은 다음과 같습니다.T=체크리스트박스:

* 체크된 목록 상자를 통해 세트 가져오기
$call =ask T=checklistbox M="여러 옵션 선택" D="옵션 1|옵션 2|옵션 3|옵션 4|옵션 5" E="1|2|3|4|5" R="%s '선택한 목록 상자 선택'" O=k2.inc
k2 / 설정
$include k2.inc
/;
k2를 표시;

옵션을 선택할 때1, 3그리고5, 다음 포함 메가 슬롯이 생성됩니다.

* 가져오기 필터 버전 2.1 요청, 2006년 2월
* Erwin Kalvelagen, GAMS 개발 회사
1 '체크된 목록 상자 선택'
3 '체크된 목록 상자 선택'
5 '선택한 목록 상자 선택'

세트를 채울 것입니다k2다음과 같습니다:

1 * 체크된 목록 상자를 통해 세트 가져오기
 3개 세트 k2/
D:\GAMS PROJECTS\ASK\K2.INC 포함
 5 * 가져오기 필터 버전 1.1에 문의, 2002년 8월
 6 * Erwin Kalvelagen, GAMS 개발 공사
 7 1 '체크된 목록 상자 선택'
 8 3 '체크된 목록 상자 선택'
 9 5 '체크된 목록 상자 선택'
10 /;
11 디스플레이 k2;
---- 11개 세트 k2
1, 3, 5

마지막 유형은 일반 문자열 유형입니다:T=문자열. 이를 통해 사용자는 문자열을 입력할 수 있으며, 그 문자열은 그대로 포함 메가 슬롯에 복사됩니다.

메가 슬롯 열기 대화 상자

유형T=fileopenbox사용자가 메가 슬롯을 선택할 수 있는 메가 슬롯 열기 대화 상자를 표시합니다.

관련 옵션은I=초기디렉토리그리고F=필터. 포함 메가 슬롯을 요청하는 완전한 예는 다음과 같습니다.

$call =ask T=fileopenbox I="%system.fp%" F="select*.inc" o=fln.inc R="$include '%s'" C="포함 메가 슬롯 선택"
$include fln.inc

이렇게 하면 시작 디렉터리가 다음과 같은 메가 슬롯 열기 대화 상자가 열립니다.GAMS 프로젝트/작업 중디렉토리(GAMS가 기본적으로 포함 메가 슬롯을 찾는 곳이기도 함). 마스크가 있는 메가 슬롯만SELECT*.INC표시됩니다. 메가 슬롯FLN.INC사용자가 선택한 메가 슬롯과 함께 include 문이 포함됩니다.

관련 방법은 다음과 같습니다:

$call =ask T=fileopenbox I="%system.fp%" F="select*.inc" o=fln.inc R="$setglobal incfile '%s'" C="포함 메가 슬롯 선택"
$include fln.inc
$include %incfile%

우리가 사용하는 곳은$setglobal사용자가 지정한 메가 슬롯 이름을 포함하도록 매크로 incfile을 설정합니다.

사용자가 관련 GDX 메가 슬롯 세트에서 선택할 수 있도록 하려면 다음과 같이 사용할 수 있습니다:

$call =ask T=fileopenbox I="%system.fp%" F="myproject*.gdx" o=setgdxname.inc R="$setglobal gdxfile '%s'" C="GDX 메가 슬롯 선택"
$include setgdxname.inc
$gdxIn %gdxfile%
$load 나
$로드 J

기록할 메가 슬롯의 메가 슬롯 이름을 요청하려는 경우 다음 유형을 사용하십시오.T=filesavebox. 예:

$call =ask T=filesavebox I="%system.fp%" o=fln.inc R="$setglobal gdxfile '%s'" C="gdx 메가 슬롯 지정"
$include fln.inc
i / a, b, c /를 설정하십시오.
Execute_unload '%gdxfile%', i;

디렉토리를 요청하려는 경우 다음 유형을 사용하십시오.T=선택디렉토리. 이 경우 필터 옵션F무시됩니다. 예:

$call =ask T=selectdirectory I="%system.fp%" o=fln.inc R="$setglobal myInputdir '%s'" C="디렉터리 선택"
$include fln.inc
$log 선택한 디렉터리 "%myInputdir%"