QCEDPOPT – Optimalizace tzv. Economic Dispatch problému

Symbol blokuPotřebná licence: ADVANCED
Qt SVG Document Exported by REXYGEN Studio ns p pres uPns uPact uPmin uPmax uabc uDis uEHours uPopt uSTAT uREQ uCost uFeas INIT HLD fopt ifeas bopt bpre ncwc1 lcount mem yDis yEHours yPopt ySTAT yREQ yCost yFeas E iE QCEDPOPT

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 n zdrojů energie (generátorů) s výkony P1,P2,,Pn, které splňují omezení Pi,min Pi Pi,max, i = 1,,n. Náklady na generaci Pi jsou dány kvadratickou funkcí Fi = aiPi2 + biPi + ci,i = 1,,n. Cílem je vyrobit zadaný celkový výkon P = P1 + P2 + + Pn za nejnižší možnou cenu F = F1 + F2 + + Fn. Úloha ekonomického rozvrhování může být přeformulována jako

minF(P) = min i=1n(a iPi2 + b iPi + ci) (15.1)

s ohledem na rovnostní omezení

P = i=1nP i (15.2)

a nerovnostní omezení

Pi,min Pi Pi,max,i = 1,,n. (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 (připojeného na vstupu p bloku). Pokud i-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 P, pokud P je větší nebo rovno nejmenšímu z minimálních výkonů běžících generátorů a zároveň P 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ž 2n (například pokud je všechna minimální výkony generátorů nulová a P 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 P, 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 n řádky, na kterou odkazuje uabc. Koeficienty ai jsou v prvním, bi ve druhém a ci ve třetím sloupci této matice (i = 1,,n). Pokud i-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 ns (vstup ns). Optimální řešení EDP se nehledá jen pro dané období, ale během následujících ns období. V tomto případě je předpověď požadovaného výkonu uložena ve vektoru s alespoň ns prvky, na který odkazuje vstup uPns.

Tento problém je řešen následujícím algoritmem:

  1. Pro každý krok k od 1 do ns vypočítejte optimální řešení EDP pro všechny proveditelné kombinace generátorů (počet těchto kombinací může být až 2n). Vytvoří se stavový prostor s ns vrstvami a maximálním počtem prvků ns × 2n.
  2. Prohledejte stavový prostor do hloubky. Začněte s vrstvou s indexem ins = 0, což odpovídá předpovědi výkonu pro následující periodu.
  3. Projděte danou vrstvu od indexu i = 0 (žádný generátor neběží) po i = 2n 1 (všechny n generátorů běží).
  4. Pokud varianta s indexem i je proveditelná, uložte hodnotu i a přejděte na další krok. Pokud ne, zvyšte i. Pokud i < 2n, opakujte tento krok, jinak přejděte na krok 7.
  5. Pokud ins = ns 1, přejděte na další krok, jinak zvyšte ins a přejděte na krok 3 (hledejte proveditelné řešení o jednu vrstvu níže).
  6. Zde máme posloupnost proveditelných řešení procházejících všemi ns 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 i. Pokud i < 2n, přejděte na krok 4.
  7. Konec aktuální vrstvy ins byl dosažen. Opakujte: přejděte o jednu vrstvu výše (ins = ins 1) a obnovte uložený index i pro tuto vrstvu, dokud i 2n 1 nebo ins = 0. Pokud ins > 0, zvyšte i 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á.

image/svg+xml 0 1 2 k 2n-1 i j 2n-2 a) c) b) 0 1 layer ins-1 ins ins+1 ns-1 ... ... ... ... ... ... ... ... ... ... ... ... ... ...

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:

Cfull = (2n)ns . (15.4)

Tento algoritmus je tedy vypočitatelný pouze pro malý počet generátorů n, (například n 10) a krátký startovací horizont ns (například ns 10). Pro větší počet generátorů a/nebo delší horizont ns 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 m generátorů může být změněn mezi dvěma po sobě jdoucími kroky, což odpovídá počtu m kombinací n generátorů, tj. n m. Pokud dovolíme maximálně m změn v každém kroku, počet variant pro horizont ns se sníží na:

Cr1 = i=0mn i ns . (15.5)

Pro malé hodnoty m, 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 m se nebere v úvahu pro sousední kroky, ale po celý horizont ns . V tomto případě může nastat maximálně n změn v každém z ns kroků. Z všech takových možností nás zajímají pouze ty, kde se n ns hodnot změní právě m-krát. Pro maximální počet m změn dostaneme:

Cr2 = i=0mn ns i . (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)

2024 © REX Controls s.r.o., www.rexygen.com