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

Erzeuger

Erzeugungdynstat
Bach636363
Brahms156156156
Chopin909090
Haydn222222222
Liszt443443443
Mahler183183183
Mozart269269269
Wagner182182182
Summe160816081608


0 1600 3200 4800 6400 8000 Erzeugung Verbrauch Energie-Gemeinschaft

Verbraucher

Verbrauchdynstat
Brecht16139101
Busch517124101
Fontane10224101
Goethe504121101
Grün33380101
Heine33981101
Herder31676101
Hesse608146101
Jandl648155101
Kleist593142101
Lenau651156101
Lessing499120101
Mörike26864101
Rilke17843101
Schiller455109101
Storm534128101
Summe670616081608

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