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

Erzeuger

Erzeugungdynstat
Bach262626
Brahms723723723
Chopin838383
Haydn440440440
Liszt184184184
Mahler412412412
Mozart309309309
Wagner771771771
Summe294829482948


0 1600 3200 4800 6400 8000 Erzeugung Verbrauch Energie-Gemeinschaft

Verbraucher

Verbrauchdynstat
Brecht371737
Busch17280172
Fontane455212220
Goethe743346220
Grün288134220
Heine446207220
Herder655305220
Hesse404188220
Jandl624290220
Kleist735342220
Lenau422042
Lessing325151220
Mörike295137220
Rilke804374220
Schiller253118220
Storm592759
Summe633729482948

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