설명
동적 모델에서는 종종 이전 또는 다음 시간 단계에 액세스해야 합니다. 액세스
단일 시간 단계는 지연 및 선도 연산자를 통해 쉽게 구현할 수 있습니다.
더 큰 시간 단계 집합에 액세스해야 하면 더 어려워집니다.
표현식 sum(tt$(ord(tt)<=ord(t) and ord(tt)>=ord(t)-n), ...) 여기서 t는 다음과 같습니다.
외부에서 제어되는 현재 시간 단계는 매우 느릴 수 있습니다.
다음 예제 모델은 예제를 사용하여 크레이지 슬롯에서 이 작업을 빠르게 수행하는 방법을 보여줍니다.
발전 모델링부터. 우리는 일련의 시간 단계와 다양한
발전기. 발전기는 주어진 시간 조각에서 한 번만 시작할 수 있습니다. 우리는 구현
이를 세 가지 다른 방식으로 시행하는 방정식:
1) ord() 계산을 통한 순진한 크레이지 슬롯 구문
2) 주어진 활성 시간 단계에 대한 시간 조각 세트를 계산합니다.
3) 동일한 idas를 사용하여 방정식에서 직접 빠른 구현을 생성합니다.
빠른 2세트
해결 방법 2는 실제로 가장 빠르지만 메모리를 많이 소모합니다. 우리는
결국 모델 생성에 이만큼의 메모리가 필요합니다(우리는 많은 메모리를 가지고 있습니다).
방정식에서 0이 아닌 전체) 그러나 크레이지 슬롯 내부의 추가 금액을 확보할 수 있습니다.
방법 3을 사용하여 데이터를 수집합니다.
키워드: 혼합 정수 선형 계획법, 크레이지 슬롯 언어 기능, 동적
모델링, 시간 단계, 발전
대형 모델 유형 :크레이지 슬롯
카테고리 : 크레이지 슬롯 모델 라이브러리
메인 파일 : timesteps.gms
$title 방정식의 이전(또는 다음) 시간 단계에 빠르게 접근(TIMESTEPS,SEQ=413)
$onText
동적 모델에서는 종종 이전 또는 다음 시간 단계에 액세스해야 합니다. 액세스
단일 시간 단계는 지연 및 선도 연산자를 통해 쉽게 구현할 수 있습니다.
더 큰 시간 단계 집합에 액세스해야 하면 더 어려워집니다.
표현식 sum(tt$(ord(tt)<=ord(t) and ord(tt)>=ord(t)-n), ...) 여기서 t는 다음과 같습니다.
외부에서 제어되는 현재 시간 단계는 매우 느릴 수 있습니다.
다음 예제 모델은 예제를 사용하여 크레이지 슬롯에서 이 작업을 빠르게 수행하는 방법을 보여줍니다.
발전 모델링부터. 우리는 일련의 시간 단계와 다양한
발전기. 발전기는 주어진 시간 조각에서 한 번만 시작할 수 있습니다. 우리는 구현
이를 세 가지 다른 방식으로 시행하는 방정식:
1) ord() 계산을 통한 순진한 크레이지 슬롯 구문
2) 주어진 활성 시간 단계에 대한 시간 조각 세트를 계산합니다.
3) 동일한 idas를 사용하여 방정식에서 직접 빠른 구현을 생성합니다.
빠른 2세트
해결 방법 2는 실제로 가장 빠르지만 메모리를 많이 소모합니다. 우리는
결국 모델 생성에 이만큼의 메모리가 필요합니다(우리는 많은 메모리를 가지고 있습니다).
방정식에서 0이 아닌 전체) 그러나 크레이지 슬롯 내부의 추가 금액을 확보할 수 있습니다.
방법 3을 사용하여 데이터를 수집합니다.
키워드: 혼합 정수 선형 계획법, 크레이지 슬롯 언어 기능, 동적
모델링, 시간 단계, 발전
$offText
$설정되지 않은 경우 $set 2016년
$설정되지 않은 경우 mg $set mg 17
$생각하지 않으면 $생각하지 않음 10
$maxdt를 설정하지 않은 경우 $set maxdt 40
$ifE %mindt%>%maxdt% $abort 최소 가동 중지 시간이 최대 가동 중지 시간보다 깁니다.
세트
t '시간' / t1*t%mt% /
g '발전기' / g1*g%mg% /;
매개변수 pMinDown(g,t) '최소 가동 중지 시간';
pMinDown(g,t) =uniformInt(%mindt%,%maxdt%);
별칭(t,t1,t2);
세트
sMinDown(g,t1,t2) 't1에서 g를 시작하면 t2 시간 동안 g를 시작할 수 없습니다.'
sMinDownFast(g,t1,t2) 't1에서 g를 시작하면 t2 시간 동안 g를 시작할 수 없습니다.'
tt(t) '최대 가동 중지 시간 시간' / t1*t%maxdt% /;
* 주어진 시간 단계 t1에 대한 시간 조각 t2 세트에 대한 느리고 빠른 계산
* 프로필의 출력=1
*---- 50 할당 sMinDown 5.819 5.819 SECS 26MB 850713
*---- 51 할당 sMinDownFast 0.187 6.006 SECS 48MB 850713
sMinDown(g,t1,t2) = ord(t1) >= ord(t2) 및 ord(t2) > ord(t1) - pMinDown(g,t1);
sMinDownFast(g,t1,t + (ord(t1) - pMinDown(g,t1)))$(tt(t) 및 ord(t) <= pMinDown(g,t1)) = 예;
diff(g,t1,t2)를 설정합니다.
diff(g,t1,t2) = sMinDown(g,t1,t2) xor sMinDownFast(g,t1,t2);
abort$card(diff) '세트가 다릅니다', diff;
바이너리 변수 vStart(g,t);
변수 z;
* 방정식을 작성하는 느리고 빠르며 가장 빠른(그러나 sMinDownFast를 저장해야 하기 때문에 메모리를 많이 사용하는 방식)
* 프로필의 출력 = 1
*---- 67 방정식 eStartNaive 6.099 12.215 SECS 106MB 34272
*---- 68 방정식 eStartFast 0.593 12.808 SECS 144MB 34272
*---- 69 방정식 eStartFaster 0.468 13.276 SECS 180MB 34272
방정식 eStartNaive(g,t), eStartFast(g,t), eStartFaster(g,t), defobj;
eStartNaive(g,t1)..
sum(t2$(ord(t1) >= ord(t2) 및 ord(t2) > ord(t1) - pMinDown(g,t1)), vStart(g,t2)) =l= 1;
eStartFast(g,t1)..
sum(tt(t)$(ord(t) <= pMinDown(g,t1)), vStart(g,t + (ord(t1) - pMinDown(g,t1)))) =l= 1;
eStartFaster(g,t1)..
sum(sMinDownFast(g,t1,t2), vStart(g,t2)) =l= 1;
디포브..
z =e= sum((g,t), vStart(g,t));
모델 maxStarts / all /;
mip를 사용하여 maxStarts max z를 해결합니다.