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 805 Wh erzeugt und von 16 Verbrauchern 1.545 Wh verbraucht. Die Aufteilung auf die Erzeuger und Verbraucher ist in den folgenden Tabellen dargestellt.

Erzeuger

Erzeugungdynstat
Bach167167167
Brahms878787
Chopin115115115
Haydn626262
Liszt189189189
Mahler343434
Mozart130130130
Wagner212121
Summe805805805


0 500 1000 1500 2000 2500 Erzeugung Verbrauch Energie-Gemeinschaft

Verbraucher

Verbrauchdynstat
Brecht1306858
Busch321732
Fontane291529
Goethe1347058
Grün1095758
Heine462446
Herder1487758
Hesse1457658
Jandl1397258
Kleist13713
Lenau1507858
Lessing834358
Mörike522752
Rilke1517958
Schiller1306858
Storm542854
Summe1545805805

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