QCEDPOPT – Optimalizace tzv. Economic Dispatch problému
Symbol blokuPotřebná licence: ADVANCED
Popis funkce
Úloha ekonomického rozvrhování (economic dispatch problem - EDP) s kvadratickými nákladovými
funkcemi může být formulována jako optimalizační problém. Předpokládejme, že máme
zdrojů energie (generátorů)
s výkony , které
splňují omezení ,
. Náklady na generaci
jsou dány kvadratickou
funkcí . Cílem je vyrobit
zadaný celkový výkon za
nejnižší možnou cenu .
Úloha ekonomického rozvrhování může být přeformulována jako
(15.1) |
s ohledem na rovnostní omezení
(15.2) |
a nerovnostní omezení
(15.3) |
Funkční blok QCEDPOPT řeší nejen úlohu ekonomického rozvrhování (15.1) – (15.3), ale i mnohem složitější problém. Pojďme popsat rozšíření této úlohy.
Velmi často není nutné spustit všechny generátory pro dosažení výkonu (připojeného na vstupu p bloku). Pokud -tý generátor neběží, předpokládá se, že cena jeho nulového výkonu je nulová. Daná kombinace běžících generátorů je proveditelná pro daný výkon , pokud je větší nebo rovno nejmenšímu z minimálních výkonů běžících generátorů a zároveň je menší nebo rovno součtu maximálních výkonů běžících generátorů. Bohužel takových kombinací může být až (například pokud je všechna minimální výkony generátorů nulová a je menší nebo rovno nejmenšímu maximálnímu výkonu všech generátorů). V reálných aplikacích je vyžadováno, aby daná kombinace generátorů dokázala dodávat nejen , ale s určitou rezervou (připojenou na vstup pres), tj. součet výkonů běžících generátorů musí být alespoň p + pres. Minimální a maximální výkony ve (15.3) jsou prvky vektorů, na které odkazují vstupy uPmin a uPmax.
Blok QCEDPOPT vypočítává cenu všech proveditelných kombinací generátorů, kde koeficienty ceny ve (15.1) jsou předány v matici s řádky, na kterou odkazuje uabc. Koeficienty jsou v prvním, ve druhém a ve třetím sloupci této matice (). Pokud -tý generátor neběží a měl by být spuštěn, lze tento start vyhodnotit pomocí nákladů na spuštění (generátor je studený, při startu se spotřebuje určité množství paliva atd.). Podobně lze vyhodnotit i náklady na zastavení běžícího generátoru. Náklady na spuštění a zastavení jsou volitelné a mohou být předány do funkčního bloku jako čtvrtý a pátý sloupec matice, na kterou odkazuje uabc.
Často je krátkodobě vyžadován vyšší celkový dodaný výkon. To může vést ke spuštění dalších generátorů pouze na jednu nebo pár period. Provozování generátoru jen krátkou dobu a následné vypnutí zkracuje životnost generátoru. Podobná situace nastává při krátkodobém poklesu požadovaného výkonu, kdy je některý generátor vypnut na krátkou dobu. Aby se tyto jevy eliminovaly, je v bloku QCEDPOPT zaveden takzvaný startovací horizont (vstup ns). Optimální řešení EDP se nehledá jen pro dané období, ale během následujících období. V tomto případě je předpověď požadovaného výkonu uložena ve vektoru s alespoň prvky, na který odkazuje vstup uPns.
Tento problém je řešen následujícím algoritmem:
- Pro každý krok od do vypočítejte optimální řešení EDP pro všechny proveditelné kombinace generátorů (počet těchto kombinací může být až ). Vytvoří se stavový prostor s vrstvami a maximálním počtem prvků .
- Prohledejte stavový prostor do hloubky. Začněte s vrstvou s indexem , což odpovídá předpovědi výkonu pro následující periodu.
- Projděte danou vrstvu od indexu (žádný generátor neběží) po (všechny generátorů běží).
- Pokud varianta s indexem je proveditelná, uložte hodnotu a přejděte na další krok. Pokud ne, zvyšte . Pokud , opakujte tento krok, jinak přejděte na krok 7.
- Pokud , přejděte na další krok, jinak zvyšte a přejděte na krok 3 (hledejte proveditelné řešení o jednu vrstvu níže).
- Zde máme posloupnost proveditelných řešení procházejících všemi vrstvami. Vypočítejte a uložte hodnotu cílové funkce této proveditelné posloupnosti jako součet uložených hodnot cílových funkcí jednotlivých řešení v každé vrstvě plus součet (volitelných) startovacích a (volitelných) zastavovacích nákladů mezi sousedními vrstvami. Zvyšte . Pokud , přejděte na krok 4.
- Konec aktuální vrstvy byl dosažen. Opakujte: přejděte o jednu vrstvu výše () a obnovte uložený index pro tuto vrstvu, dokud nebo . Pokud , zvyšte a přejděte na krok 4, jinak je prohledávání stavového prostoru kompletní.
Následující obrázek demonstruje prohledávání stavového prostoru do hloubky. Zelené obdélníky odpovídají proveditelnému stavu, červené obdélníky neprůchodnému stavu. Varianty a) a b) reprezentují proveditelné cesty, cesta ve variantě c) není proveditelná.
Počet všech stavů tohoto algoritmu ve stavovém prostoru roste exponenciálně. Ideálně je počet všech proveditelných stavů roven:
(15.4) |
Tento algoritmus je tedy vypočitatelný pouze pro malý počet generátorů , (například ) a krátký startovací horizont (například ). Pro větší počet generátorů a/nebo delší horizont je nutné snížit počet stavů ve stavovém prostoru. Jedna možnost je omezit maximální počet změn stavu generátoru (tj. spustit zastavený generátor nebo zastavit běžící generátor) v každém kroku.
Předpokládejme, že stav pouze generátorů může být změněn mezi dvěma po sobě jdoucími kroky, což odpovídá počtu kombinací generátorů, tj. . Pokud dovolíme maximálně změn v každém kroku, počet variant pro horizont se sníží na:
(15.5) |
Pro malé hodnoty , což je velmi časté v reálných případech, je významné snížení počtu variant. Efektivní implementace algoritmu tohoto bloku je založena na výpočtu interních polí pro všechny kombinace v jednom kroku. Pro snížení počtu stavů, jak bylo navrženo, by muselo dojít k přepočítání pokaždé, když se změnil stav jakéhokoliv generátoru, tj. i během hledání proveditelné cesty.
Nakonec bylo rozhodnuto implementovat ještě větší snížení počtu stavů ve stavovém prostoru tak, že maximální počet změn se nebere v úvahu pro sousední kroky, ale po celý horizont . V tomto případě může nastat maximálně změn v každém z kroků. Z všech takových možností nás zajímají pouze ty, kde se hodnot změní právě -krát. Pro maximální počet změn dostaneme:
(15.6) |
Maximální počet změn je specifikován parametrem mchng. Základní algoritmus zůstává v podstatě stejný, pouze se testuje snížený počet variant. Původní algoritmus je použit pro speciální hodnotu mchng = 0.
Tento blok nepropaguje kvalitu signálu. Více informací je uvedeno v sekci 1.4.
Vstup
ns | Horizont startování zdrojů 1 10 | Long (I32) |
p | Výkon k rozdělení mezi zdroje 0.0 1000000.0 | Double (F64) |
pres | Rezerva výkonu 0.0 1000000.0 | Double (F64) |
uPns | Vstupní odkaz na vektor predikce rozdělovaného výkonu | Reference |
uPact | Vstupní odkaz na vektor výkonů aktivních (běžících) zdrojů | Reference |
uPmin | Vstupní odkaz na vektor minimálních výkonů zdrojů | Reference |
uPmax | Vstupní odkaz na vektor maximálních výkonů zdrojů | Reference |
uabc | Vstupní odkaz na matici cenových koeficientů | Reference |
uDis | Vstupní odkaz na celočíselný vektor důvodů deaktivace zdrojů | Reference |
uEHours | Vstupní odkaz na vektor motohodin | Reference |
uPopt | Vstupní odkaz na alokovaný vektor pro optimální rozdělení výkonu | Reference |
uSTAT | Vstupní odkaz na vektor typu bool indikující běžící stav zdrojů | Reference |
uREQ | Vstupní odkaz na alokovaný vektor typu bool pro požadavky na běh zdrojů | Reference |
uCost | Vstupní odkaz na nepovinný vektor hodnot kritéria optimality | Reference |
uFeas | Vstupní odkaz na nepovinný vektor typu byte pro typy řešitelnosti | Reference |
INIT | Je-li TRUE, pak reinicializuj optimalizaci, jinak optimalizuj v reálném čase | Bool |
HLD | Pozastavení | Bool |
Parametr
modesh | Režim heuristiky pro startování 0 3 | Long (I32) |
mchng | Maximálně dovolený počet změn běhu m za periodu 0 10 3 | Long (I32) |
nmax | Maximální hodnota n, nmax <= 10 0 10 10 | Long (I32) |
nsmax | Maximální hodnota ns, nsmax <= 10 0 10 10 | Long (I32) |
logflags | Příznaky výpisů do systémového logu 0 63 3 | Long (I32) |
ts | Perioda vzorkování. Pro ts = 0 je použita perioda vzorkování úlohy obsahující tento blok 0.0 1000000.0 | Double (F64) |
tspre | Doba pro předstart výkonového zdroje 0.0 1000000.0 | Double (F64) |
svNF1 | Náhradní hodnota v yCost pro neřešitelné úlohy v prvním kroku optimalizace -1.0 | Double (F64) |
svNFns | Náhradní hodnota v yCost pro neřešitelné úlohy v celém horizontu ns -1.0 | Double (F64) |
Výstup
fopt | Optimální hodnota kritéria pro horizont ns | Double (F64) |
ifeas | Typ řešitelnosti vybraného řešení | Long (I32) |
bopt | Bitová kombinace běžících zdrojů pro fopt | Long (I32) |
bpre | Bitová kombinace zdrojů, které mají být předstartovány | Long (I32) |
ncwc1 | Počet kombinací v nejhorším případě závislý na n zdrojích a parametru mchng | Long (I32) |
lcount | Počet stavů projitých při prohledávání stavového prostoru | Large (I64) |
mem | Velikost paměti v bajtech interně alokovaných pracovních polí | Long (I32) |
yDis | Výstupní odkaz na celočíselný vektor důvodů deaktivace zdrojů | Reference |
yEHours | Výstupní odkaz na vektor motohodin | Reference |
yPopt | Výstupní odkaz na alokovaný vektor pro optimální rozdělení výkonu | Reference |
ySTAT | Výstupní odkaz na vektor typu bool indikující běžící stav zdrojů | Reference |
yREQ | Výstupní odkaz na alokovaný vektor typu bool pro požadavky na běh zdrojů | Reference |
yCost | Výstupní odkaz na nepovinný vektor hodnot kritéria optimality | Reference |
yFeas | Výstupní odkaz na nepovinný vektor typu byte pro typy řešitelnosti | Reference |
E | Příznak chyby | Bool |
iE | Kód chyby | Long (I32) |
[Na začátek] [Výše] [Další]
2024 © REX Controls s.r.o., www.rexygen.com