Beispiel Verteilung der Energie


Die Energie, die innerhalb der Energiegemeinschaft erzeugt wird, wird auf die Verbraucher aufgeteilt. In dieser Viertelstunde wurden zum Beispiel von 8 Erzeugern 1.829 Wh erzeugt und von 16 Verbrauchern 1.924 Wh verbraucht. Die Aufteilung auf die Erzeuger und Verbraucher ist in den folgenden Tabellen dargestellt.

Erzeuger

Erzeugungdynstat
Bach354354354
Brahms200200200
Chopin328328328
Haydn225225225
Liszt295295295
Mahler182182182
Mozart121212
Wagner233233233
Summe182918291829


0 500 1000 1500 2000 2500 Erzeugung Verbrauch Energie-Gemeinschaft

Verbraucher

Verbrauchdynstat
Brecht136129136
Busch206196206
Fontane308293232
Goethe747074
Grün908690
Heine464446
Herder363436
Hesse132125132
Jandl131125131
Kleist363436
Lenau107102107
Lessing948994
Mörike726872
Rilke251239232
Schiller434143
Storm162154162
Summe192418291829

Die nächsten
Viertelstundenwerte

Quellcode

Dieser Code stellt sicher, dass Erzeugung und Verbrauch in der Energiegemeinschaft eindeutig zugeordnet werden können. Die dynamische Verteilung ordnet die Energie proportional zum Verbrauch bzw Erzeugung zu. Wer mehr verbraucht bekommt mehr. Die statische Verteilung gewährt jedem Teilnehmer den gleichen Anteil. Wird dieser nicht benötigt, so wird dieser Anteil gleichmäßig unter den verbliebenen Verbrauchern aufgeteilt.

        	
erzeuger = matrix(
				"Bach"    => 1,
				"Brahms"  => 2,
				"Chopin"  => 3,
				"Haydn"   => 4,
				"Liszt"   => 5,
				"Mahler"  => 6,
				"Mozart"  => 7,
				"Wagner"  => 8
				)


verbraucher = matrix(
				"Brecht"   => 1,
				"Busch"    => 2,
				"Fontane"  => 3,
				"Goethe"   => 4,
				"Grün"     => 5,
				"Heine"    => 6,
				"Herder"   => 7,
				"Hesse"    => 8,
				"Jandl"    => 9,
				"Kleist"   => 10,
				"Lenau"    => 11,
				"Lessing"  => 12,
				"Mörike"   => 13,
				"Rilke"    => 14,
				"Schiller" => 15,
				"Storm"    => 16	
				)

gesamterzeugung = matrixsumme( erzeuger)
gesamtverbrauch = matrixsumme( verbraucher)



## statische Aufteilung

ergebniserzeuger = erzeuger
ergebnisverbraucher = verbraucher

matrixsortieren( ergebnisverbraucher)
matrixsortieren( ergebniserzeuger)

## statische Aufteilung auf die Verbraucher

summeverbraucht = 0
verbleibendezeilen = anzahl( verbraucher)

fürjeden ( ergebnisverbraucher als schlüssel => wert) {
	ergebnisverbraucher[ schlüssel] = 
			wenn ( gesamterzeugung - summeverbraucht) / verbleibendezeilen >= verbraucher[ schlüssel] 
				dann verbraucher[ schlüssel] 
				sonst ( gesamterzeugung - summeverbraucht) / verbleibendezeilen
	summeverbraucht += ergebnisverbraucher[ schlüssel]
	verbleibendezeilen--
}

## statische Aufteilung auf die Erzeuger

summeerzeugt = 0
verbleibendezeilen = anzahl( erzeuger)

fürjeden ( ergebniserzeuger als schlüssel => wert) {
	ergebniserzeuger[ schlüssel] = 
			wenn ( gesamtverbrauch - summeerzeugt) / verbleibendezeilen >= erzeuger[ schlüssel] 
				dann erzeuger[ schlüssel] 
				sonst ( gesamtverbrauch - summeerzeugt) / verbleibendezeilen
	summeerzeugt += ergebniserzeuger[ schlüssel]
	verbleibendezeilen--
}



## dynamische Aufteilung

ergebniserzeuger = erzeuger
ergebnisverbraucher = verbraucher

wenn ( gesamtverbrauch > gesamterzeugung) 
	dann
		anteilerzeuger = 1
		anteilverbraucher = gesamterzeugung / gesamtverbrauch
	sonst
		anteilerzeuger = gesamtverbrauch / gesamterzeugung
		anteilverbraucher = 1

## dynamische Aufteilung auf die Verbraucher

fürjeden ( verbraucher als schlüssel => wert) 
	ergebnisverbraucher[ schlüssel] = wert * anteilverbraucher


## dynamische Aufteilung auf die Erzeuger

fürjeden ( erzeuger als schlüssel => wert)
	ergebniserzeuger[ schlüssel] = wert * anteilerzeuger