GAMS 공부 (1)
Alireza Soroudi 가 쓴 Power System Optimization Modeling in GAMS 책과 강의를 보며, 기동급전모형(Economic Dispatch)의 기초를 다지는 중.
1. Udemy 강의 - Mastering Energy&Power System.. in GAMS + GAMS책
① Section1 – GAMS 기초 (1주차)
② Section2 – GAMS 예제
③ Section3 – Power System
④ Section4 – Quiz+예제
n GAMS의 기본 구조
|
GAMS 명령문 |
내용 |
|
SETS |
변수명 지정 |
|
DATA |
Parameter를 스칼라, 벡터 등의 형태로 제시 |
|
VARIABLES |
- 변수 지정: 선택변수, 목적변수(비용, 수익
등) - 변수 유형 설정: 실수, 양수, 음수, 이진수(binary), 정수(integer) -(옵션) 초기값, 경계값 지정 |
|
EQUATIONS |
목적식, 제약식, 항등식 명칭 지정 및 수식 제시 |
|
MODEL |
제약식. 항등식 중 분석에 포함되는
수식 설정 |
|
SOLVE |
.LP: linear programming .MIP: mixed integer programming .NLP: non-linear programming |
|
DISPLAY (선택) |
결과를 원하는 형태로 표시 |
-
제약식? 예산, Voltage, Line, Space, Speed, Fuel 등.. 이 될 수 있음
SETS
변수명
지정
VARIABLES
변수
이름 변수 설명
변수
이름2 변수2 설명
EQUATIONS
수식1 수식1 설명
수식2 수식2 설명
수식1.. 변수2 =e=*변수1+2;
수식2.. 10*변수1 =l= 변수2
MODEL
모델1 /all/;
SOLVE
모델1 using 계산할방법
풀이대상변수;
n GAMS 언어 기호
|
기호 |
의미 |
|
= E(e) = |
= (같음) |
|
= G(g) = |
≥ |
|
= L(l) = |
≤ |
|
+ , - |
덧셈, 뺄셈 |
|
* , / |
곱셈, 나눗셈 |
|
** |
지수 |
|
$ |
if |
|
.lo |
Lower bound |
|
.l |
Level or
primal value |
|
.up |
Upper bound |
|
.m |
Marginal or
dual value |
n GAMS 코드 작성 시 유의사항
ü inputs 부문의 각 명령문 또는 진술문(statement)는 세미콜론(;)으로 종료
ex)
SETS i assets /stock, bond/ ;
ü 프로그램 작성 시 영문 대문자와 소문자 구분 필요
없음 (=e=랑 =E=랑 같게 적용)
ü 편의상 GAMS 명령어(SETS, PARAMETERS 등)는 대문자 표기
ü 기타 프로그램 문서 내용은 가급적 소문자로
표기
ex) SETS i assets
/stock, bond/ ;
ü 반드시 변수명, 변수,
파라미터, 목적식, 제약식 등의 명칭 및 정의, 특성에 대한 지정 실시 => 이를 지정하지 않을 경우 value 인식하지 못함
ü MODEL 명령어에서 모형명은 반드시 영문으로 시작
ü 가장 마지막으로 지정되는 명령문(command)이 이전
명령문 보다 우선함
ü 프로그램 중간에 코멘트를 추가하고자 하는 경우 별표(*)
사용
ü 코멘트를 적절히 사용하여 재검토 시 편리하게 활용 가능
ex) SETS i assets
/stock, bond/; * i 변수가 stock, bond로 구성됨을 의미
n Variables – 변수를
선언하고, 그 변수의 범위/성질을 설정 (양수, 음수, 최대값, 최소값)
n Equations – 수식(제약식)을 선언하고, 그 세부 공식을 설정
x1+x2+x3 =>
sum(i$(ord(i)<4), x(i);
n Model Definition – 선언한
Eq.를 어느 범위부터 어떤 그룹으로 SOLVE 할지 지정
n SOLVE – 해를 푸는
method를 지정
①
LP
(Linear Programming) Method
②
MIP
(Mixed Integer linear Programming) Method
n Conditional Expression 조건부 할당
|
기호 |
의미 |
|
기호 |
의미 |
|
lt |
< 많이 작은 |
not |
not |
|
|
le |
≤ 작거나 같음 |
and |
and |
|
|
eq |
= 같은 |
or |
or |
|
|
ne |
≠ 같지 않은 |
xor |
exclusive or |
|
|
ge |
≥ 크거나 같음 |
$ |
if |
if (y > 7.5) THEN (x=20), ELSE (x=0) ⇒
x = 20$(y GT 7.5) + 0$(y LE 7.5); 로 표현
n Loop Expression
반복문을 위한 명령어. 동일한 연산을 반복적으로 수행하는 경우 사용하는 명령문
-
기본 구조: LOOP (control_ area [$(condition)] operator {; operator});
-
입력 방식
SET
t times /1985 * 1990/;
PARAMETER
pop(t) /1985 3456/
growth(t) /1985 25.3
1986 27.3
1987 26.2
1988 27.1
1989 26.6
1990 26.6/;
LOOP
(t,pop(t+1) = pop(t) + growth(t));

댓글
댓글 쓰기