Informatik

Werbung
Maturaarbeit
Vorgelegt durch: Samuel P. Plachel
Vorgelegt bei: R. Zellweger / H.R. Schneider
Datum: 14. Februar 2003
Informatik
Die Umsetzung einer mikroökonomischen Simulation in ein
JAVA - Applet
Die Umsetzung einer mikroökonomischen Simulation in ein JAVA - Applet
Samuel P. Plachel
Inhaltsverzeichnis
1. Vorwort
[3]
1.1 Einleitung
3
1.2 Schlüsselfragen
3
2. Zielsetzung
[4]
2.1 Allgemeine Beschreibung
4
2.2 Simulationen
4
2.3 Modelle
[4]
2.3.1 Umweltsphären
4
2.3.2 Nachfrage und Angebot
5
3. Programmierung
7
3.1 Klassenmodell
7
3.1.1 Die Klasse OekoSim
8
3.1.2 Die Klasse CManagement
10
3.1.3 Die Klasse CProdukte
12
3.1.4 Die Klasse CSimulation
13
3.1.5 Die Klasse CKonjunktur
15
3.1.6 Die Klasse COberflaeche
17
3.1.7 Die Klasse CFaktor
20
3.1.8 Die Klasse CFSimulation
21
4. Anleitung zum Applet
23
4.1 Mitarbeiter
24
4.2 Produkte
25
4.3 Lieferanten
26
4.4 Marketing
26
4.5 Wirtschaft
26
4.6 Soziales
26
4.7 Kapitalgeber
27
4.8 Finanzen
27
4.9 Allgemeine Hinweise
28
5. Schluss
29
Seite 2
Die Umsetzung einer mikroökonomischen Simulation in ein JAVA - Applet
Samuel P. Plachel
Die Umsetzung einer mikroökonomischen Simulation in ein
JAVA - Applet
1. Vorwort
1.1 Einleitung
„Täglich treffen wir alle viele Entscheidungen, welche wirtschaftliche Belange betreffen.
Hinter jedem hergestellten Gut steht eine Vielzahl ökonomischer Überlegungen und auch der
Kauf eines Gutes ist das Endresultat einer Kette mehrerer Entscheidungen. Da die Wirtschaftswissenschaften nicht in der Lage sind, die Art und Weise der Entscheidungen, die
Präferenzen (Vorlieben) und Gewohnheiten der Individuen, Produktionsverfahren und –kosten
jedes einzelnen Unternehmens zu erfahren, versuchen sie, Gesetzmässigkeiten wirtschaftlicher
Entscheidungen
herauszufinden.
Schliesslich
wäre
es
unmöglich,
Millionen
von
Konsumentinnen und Konsumenten zu befragen und Tausende von Unternehmen zu untersuchen. (...) In der Mikroökonomie steht jeweils ein einzelnes Individuum oder eine einzelne
Unternehmung im Zentrum der Analyse. Damit wird folgender Zweck verfolgt: Hat man genaue
Vorstellungen über die Prinzipien der Kaufentscheidungen oder der Preisbildung gewonnen,
können Rückschlüsse gemacht werden, welche die Untersuchung ganzer Märkte oder gar
gesamtwirtschaftlicher Prozesse ermöglicht.“ 1 Dieser Ausschnitt aus dem Lehrbuch „Wirtschaft
und Recht“ erläutert den Begriff der sogenannten „Mikroökonomie“ – die Studie von
wirtschaftlichen Vorgängen, die in einer einzelnen Unternehmung ablaufen.
1.2 Schlüsselfragen
Diese Definition lässt einen klaren Schluss zu: Die Wirtschaftswissenschaft – und somit
jegliche Software, die diese simulieren soll – ist auf Modellen aufgebaut und als solche immer
nur eine Vereinfachung der Wirklichkeit, niemals die Wirklichkeit selber. Denn die Realität ist
zu komplex, als dass sie von einem Programm, dass auf mathematischen Gesetzen beruht –
deren Richtigkeit sich darüber hinaus nicht beweisen lässt – genau abgebildet werden kann.
Welche Modelle sollen also verwendet werden, um die Wirklichkeit möglichst gut – wenn
auch niemals perfekt – abbilden zu können? Wie können diese im Allgemeinen in JAVA
umgesetzt werden? Und wie sind im speziellen die Klassendefinitionen in JAVA zu wählen, um
dies zu erreichen? Welche Algorithmen sind nötig, um mathematische Gesetze für das Wirken
ökonomischer Vorgänge in einer Unternehmung entwickeln zu können? Welche Einflüsse aus
Umwelt und Gesellschaft wirken auf eine Unternehmung? Und wie soll zum Schluss eine
übersichtliche Darstellung all dieser Vorgänge erreicht werden?
Seite 3
Die Umsetzung einer mikroökonomischen Simulation in ein JAVA - Applet
Samuel P. Plachel
2. Zielsetzungen
2.1 Allgemeine Beschreibung
Erklärtes Ziel der vorliegenden Software ist es, die Vorgänge, die innerhalb einer Unternehmung ablaufen, zu simulieren. Wie teuer muss ein Produkt verkauft werden, damit der Preis
einerseits genügend hoch ist, um die Kosten zu decken und einen angemessenen Gewinn zu
ermöglichen und andererseits so tief ist, dass sich genügend Käufer für das Gut finden? Welche
Höhe müssen die Löhne haben, um die Kosten tief zu halten und gleichzeitig den Bedürfnissen
der Mitarbeiter entgegenzukommen? Welche Investitionen sind zu tätigen um Produkte zu
verbessern und neue zu entwickeln? Welche Folgen hat die welt- oder landesweite
Wirtschaftsentwicklung für eine Unternehmung? Wie wirkt sich die Beschaffung von
Fremdkapital auf die Unternehmung aus?
Diese und viele weitere Fragen soll eine mikroökonomische Simulation beantworten. Der
Benutzer soll die Möglichkeit erhalten, mit den verschiedenen Faktoren wie Löhne oder hergestellte Menge von Gütern zu experimentieren um das Zusammenspiel derselben beobachten
zu können.
2.2 Simulationen
Wie schon einleitend unter 1.2 erwähnt, liefert eine Simulation lediglich eine annähernde
Beschreibung der Wirklichkeit. Eine Software zeichnet sich dadurch aus, wie nahe sie an die
Realität herankommt.
Um eine Simulation zu entwickeln, die ein brauchbares Abbild von wirtschaftlichen Vorgängen liefert, gilt es, nach geeigneten Modellen zu suchen. Da ich mich ausser Stand sehe,
solche eigens zu entwerfen, werde ich mich im Folgenden auf die Modelle der Schulmeinung
(ich beziehe mich hierbei auf die Ausführungen in „Wirtschaft und Recht Grundlagen“ 2)
stützen.
2.3
Modelle
2.3.1 Umweltsphären
In früheren Zeiten war die Gewinnmaximierung und die dauernde Erhaltung der Unternehmung meist das oberste Ziel der unternehmerischen Tätigkeit. Andere Aspekte, wie z.B. die
Bedürfnisse der Mitarbeiterinnen und Mitarbeiter, wurden nur soweit berücksichtigt als es für
die Gewinnsteigerung von Nutzen war. Kaum jemand sprach damals von Umweltproblemen
und der Vernetzung der Unternehmung mit ihrem Umfeld.
Im Laufe der Zeit haben aber die sogenannten Anspruchsgruppen der Unternehmungen mehr
Einfluss gewonnen. Somit muss eine moderne Unternehmung um hohe Löhne für die
Mitarbeiter bemüht sein, Lieferanten pünktlich zahlen, Eigenkapitalgebern eine Wertsteigerung
Seite 4
Die Umsetzung einer mikroökonomischen Simulation in ein JAVA - Applet
Samuel P. Plachel
der Anteile garantieren können und Fremdkapitalgebern hohe Zinsen zahlen. Der Staat verlangt
von ihr zukunftsorientierte Arbeitsplätze, die Konkurrenz einen fairen Wettbewerb und nicht
zuletzt wollen die Kunden innovative Produkte von hoher Qualität zu günstigen Preisen. Nur so
kann das Überleben einer Unternehmung über längere Zeit hinweg gesichert werden.
Dieser Aspekt ist für eine Simulation einer modernen Unternehmung sehr wichtig – denn mit
reiner Gewinnmaximierung kommt man heute nicht mehr weit – und das soll auch in der
Simulation so sein.
Abbildung 2.1 – Umweltsphären
Ökonomische
Umweltsphäre
Technologische
Umweltsphäre
Unternehmung
Ökologische
Umweltsphäre
Soziale
Umweltsphäre
Rechtliche
Umweltsphäre
2.3.2 Nachfrage und Angebot
Jeder Mensch strebt nach der Erfüllung seiner individuellen Bedürfnisse und Ziele wie
materielle Grundbedürfnisse, aber auch die persönliche Entfaltung. Die Befriedigung von
solchen Zielen nennt man in der Ökonomie Nutzen. Man geht des Weiteren davon aus, dass ein
Individuum danach strebt, möglichst viele Bedürfnisse möglichst gut zu befriedigen.
Der deutsche Ökonom Gossen formulierte hierzu zwei Gesetze. Das erste besagt, dass „mit
zunehmendem Konsum eines Gutes der zusätzliche Nutzen immer geringer wird“. Das bedeute
also: Wenn eine Person ein Auto (= Gut) kauft, hat dieses Fahrzeug einen sehr grossen Nutzen
für die Person. Kauft sie noch ein zweites Auto, so hat dieses mit grösster Wahrscheinlichkeit
einen weniger grossen zusätzlichen Nutzen als das erste. Ein drittes würde der Person noch
weniger zusätzlichen Nutzen stiften als das zweite etc.
Das zweite Gossen’sche Gesetz besagt, dass „ein Individuum im Optimum von jedem Gut so
viel konsumiert, dass die jeweils zuletzt konsumierten Einheiten der verschiedenen Güter alle
den gleichen Grenznutzen haben“. Etwas weniger ökonomisch ausgedrückt heisst das – um auf
das Beispiel mit dem Fahrzeugkauf zurückzukommen: Wenn eine Person bereits ein Auto
Seite 5
Die Umsetzung einer mikroökonomischen Simulation in ein JAVA - Applet
Samuel P. Plachel
besitzt, hat beispielsweise ein Computer einen grösseren Nutzen für sie als ein zweites Auto.
Denn der Computer befriedigt Bedürfnisse – zum Beispiel E-Mails versenden – die ein Auto
nicht befriedigen kann.
Überträgt man diese Theorien auf die Preispolitik einer Unternehmung, so erhält man die
wohlbekannte Regel: Je billiger man ein Produkt anbietet, desto mehr davon wird gekauft.
Denn da der zusätzliche Nutzen immer kleiner wird, ist ein Kunde auch immer weniger bereit,
Geld dafür auszugeben. Mit dem „letzten“ Franken kauft er sich lieber ein anderes Gut, das ihm
einen höheren Nutzen stiftet.
Genau umgekehrt verhält es sich mit den Interessen der Unternehmung, also des Anbieters:
Während der Käufer bei hohen Preisen nicht bereit ist, eine grosse Menge eines Gutes zu
erstehen, sondern tiefe Preise ihn zum Kauf motivieren, möchte der Anbieter gerne grosse
Mengen zu hohen Preisen verkaufen. Bei tiefen Preisen ist er nicht bereit, viel zu produzieren.
Stellt man Angebot und Nachfrage graphisch dar (Abbildung 2.2), so erhält man einen Punkt, in
dem
sich
Angebots-
und
Nachfragekurve
schneiden.
Diese
Stelle
wird
als
„Gleichgewichtspreis“ bezeichnet. Wie der Name schon sagt, halten sich an dieser Stelle
Angebot und Nachfrage die Waage. Dies bedeutet also, dass bei genau diesem Preis alle
hergestellten Güter verkauft werden können. Oder anders gesagt: In diesem Schnittpunkt der
Angebots- und Nachfragekurve befindet sich die „gewinnmaximierende Menge“. Also genau
die Menge, bei der der Gewinn maximal sein wird – denn es werden alle Güter zu einem
„Gleichgewichtspreis“ verkauft.
So einleuchtend das klingt, so schwierig ist die Frage, welche Massnahmen man als Manager
der Unternehmung – also als Benutzer der Software – ergreifen kann oder darf, um den Preis,
bei dem alle Güter verkauft werden, zu finden. Denn wenn der Preis zu tief ist, herrscht ein
sogenannter Nachfrageüberschuss, es wird also mehr nachgefragt, als effektiv vorhanden ist. Ist
der Preis dagegen zu hoch, ist ein Angebotsüberschuss vorhanden, also können nicht alle hergestellten Güter an die Konsumenten verkauft werden. Und natürlich ist nicht der Preis allein
massgebend, sondern ebenso die Menge – denn ein Produkt kann beliebig billig sein, wenn zu
viel davon vorhanden ist, wird nicht die ganze hergestellte Menge verkauft. Ausserdem ist, wie
schon unter 2.3.1 erwähnt, darauf zu achten, dass der tiefe Preis nicht etwa auf Kosten der
Mitarbeiter geht – selbst wenn man ein Produkt sehr billig immer noch gewinnbringend
verkaufen könnte – denn reine Gewinnmaximierung soll sich nicht auszahlen.
Seite 6
Die Umsetzung einer mikroökonomischen Simulation in ein JAVA - Applet
Samuel P. Plachel
Abbildung 2.2 – Angebot und Nachfrage
Preis
Gleichgewichtspreis
Gleich
Angebot
Nachfrage
Menge
3. Programmierung
Nach den einführenden Erläuterungen über ökonomische Modelle und die Ziele dieser Simulation möchte ich nun daran gehen, deren konkrete Umsetzung in ein JAVA-Applet zu
beschreiben.
Um es gleich vorweg zu nehmen: Der Weg vom Modell zur Simulation lässt sich von der
Seite der Programmierung her nur schwer beschreiben. Daher beschränkt sich dieses Kapital auf
das rein Technische, um die Ausführungen nicht unnötig zu komplizieren. Wirtschaftliche
Theorien u.ä. werden hier nur insofern behandelt, als dass sie die Programmierung unmittelbar
betreffen. Auskunft über die Umsetzung der wirtschaftlichen Modelle und Theorien in ein
JAVA-Applet findet sich im Kapital „4. Anleitung zum Applet“.
3.1 Klassenmodell
JAVA verlangt als objektorientierte Sprache vom Programmierer ein gut durchdachtes
Klassenmodell und je geschickter dieses aufgebaut ist, desto mehr gibt JAVA dem Autor zurück. Dies in Form von – gegenüber nicht objektorientierten Programmiersprachen - ganz neuen
Möglichkeiten, die sich durch OOP („Objektorientierte Programmierung“) ergeben. Die
Aufgabe dieses Kapitels ist es, den Aufbau dieses Klassenmodells zu erläutern und auf die
einzelnen Klassen einzugehen.
Zunächst verlangt eine gute Planung des Klassenmodells insbesondere nach der Überlegung,
welche Austauschmöglichkeiten – in Form von Variabeln, auf die mehrere Klassen zugreifen
können - zwischen den einzelnen Klassen nötig sind. Da es in JAVA sowohl Klassenvariabeln
als auch lokale Variabeln gibt, ist es hier jeweils wichtig, sich darüber Gedanken zu machen,
Seite 7
Die Umsetzung einer mikroökonomischen Simulation in ein JAVA - Applet
Samuel P. Plachel
auf welche Variabeln andere Klassen zugreifen können müssen und auf welche nicht. Denn
während die eine Klasse Zugriff auf Klassenvariabeln einer anderen Klasse hat, verschwinden
z.B. lokale Variabeln, die innerhalb einer Methode erzeugt werden, nach dem Ablaufen
derselben einfach wieder.
Ebenfalls wichtig ist natürlich, in welcher Klasse bzw. Instanz derselben eine oder mehrere
Instanz(en) einer anderen Klasse erzeugt werden soll(en). So ergibt sich ein Modell von
Abhängigkeiten, das schliesslich den Programmfluss bestimmt.
Genau diese Überlegungen werden in den folgenden Kapiteln erläutert. Ausserdem wurde zu
jeder Klasse ein besonders wichtiger Codeausschnitte ausgewählt und erläutert.
Abbildung 3.1 „Klassenmodell“
OekoSim
CManagement
CManagement
CProdukte
CSimulation
CFSimulation
CKonjunktur
CObefläche
CF… extends frame
WindowListener
CFaktor
MouseListener
ButtonListener
3.1.1 Die Klasse OekoSim
Wie der Name schon erraten lässt, ist diese Klasse das „Herz“ des Applets und als solches
direkt von der JAVA-Klasse „Applet“ abgeleitet. OekoSim instanziiert die Klassen CManagement, CSimulation, COberflaeche und CKonjunktur je einmal. Ausserdem werden mehrere
Instanzen der Klasse CFaktor angelegt. Von ihr erzeugt werden ausserdem die sechs
wichtigsten Variablen zur Steuerung des Programmflusses: die Integers Runde, Quartal und
Jahr; die Booleans neuZeichnen, simStart und simGraph. Erstere sind blosse Zählvariablen, die
allerdings in Routinen anderer Klassen wichtige Aufgaben übernehmen. neuZeichnen erhält als
Wert entweder true oder false und gibt so über repaint() den Befehl, neu zu zeichnen. simStart
(ebenfalls true oder false) ist dafür verantwortlich, die eigentliche Simulation in Gang zu setzen.
Der Boolean simGraph startet eine graphische Darstellung des Simulationsablaufs, falls er den
Wert true hat.
Seite 8
Die Umsetzung einer mikroökonomischen Simulation in ein JAVA - Applet
Samuel P. Plachel
Nebst diesen Steuerelementen besitzt OekoSim in ihrer Methode paint() Routinen zum
Zeichnen der Oberfläche, die sich vorderhand aus dem Anzeigen einer Hintergrundgraphik und
der Darstellung der wichtigsten Daten zusammensetzen.
Ausserdem besitzt paint() einen Algorithmus für die Simulation des Zusammenwirkens der
einzelnen Faktoren. Allerdings setzt sich dieser hauptsächlich aus Methoden der Klasse
CSimulation zusammen, die unter 3.1.4 noch erläutert werden.
Codeauszug 3.1: Steuerung des Simulationsablaufes
if(simStart == true)
{
int i = 1;
Unternehmung.entwicklungsKosten = 0;
while(i <= 3)
{
Simulation.mitarbeiter(g);
Simulation.investitionen(g);
Simulation.forschung(g);
Simulation.lieferanten(g);
Simulation.produkte(g);
Unternehmung.entwicklungsKosten +=
Simulation.kostenProdukte;
i++;
}
Simulation.verkauf(g);
Simulation.kredit(g);
Simulation.quartalabschluss();
Simulation.kredit2(g);
Simulation.steuern(g);
Simulation.soziales(g);
Unternehmung.entwicklungsKosten /= 3;
if(simGraph == true)
{
CFSimulation fenster = new CFSimulation();
fenster.pack();
fenster.setSize(700,410);
fenster.setResizable(false);
fenster.show();
}
if(simGraph == false)
{
anzMA.simInitProdVerk();
anzMA.simInitEmulieren();
anzMA.simReset();
}
}
Abhängig davon, ob der Boolean simStart den Wert true hat, wird der Simulationsablauf
gestartet. simStart erhält seinen Wert in der Unterklasse CFinanzen der Klasse COberflaeche
zugewiesen. Nacheinander werden in einer dreifachen while-Schleife Methoden der Klasse
CSimulation abgearbeitet. Diese berechnen die neuen Werte in den Bereichen „Lieferanten“,
„Mitarbeiter“, „Produktion“, „Marketing“ und „Investitionen“ (siehe auch Abbildung 3.1
unten). Da diese Werte pro Monat berechnet werden, die Simulation sich jedoch immer auf ein
Seite 9
Die Umsetzung einer mikroökonomischen Simulation in ein JAVA - Applet
Samuel P. Plachel
Quartal bezieht (= 3 Monate), wird dazu eine dreifache while-Schleife benutzt. Ausserdem wird
die Variabel entwicklungsKosten der Klasse CManagement vor dieser Schleife auf 0 gesetzt, in
der Schleife dreimal aktualisiert und nach der Schleife durch 3 geteilt um wieder einen ProMonat-Wert zu erhalten. Diese Variabel spielt jedoch für die eigentliche Simulation keine
Rolle, sie dient später der graphischen Darstellung derselben.
Nach der dreifachen Schleife werden noch mehrere Routinen der Klasse CSimulation abgearbeitet, welche neue Werte für „Wirtschaft“, „Soziales“ und „Kapitalgeber“ berechnen und
den Quartalsabschluss vornehmen, also neue Werte für „Finanzen“ errechnen. Diese werden
also nur einmal pro Quartal ausgeführt.
Falls dem Boolean simGraph der Wert true übergeben wurde, wird die Klasse CFSimulation
instanziiert und somit die graphische Darstellung des Simulationsablaufes gestartet. Falls
simGraph false ist, wird keine Instanz von CFSimulation gebildet. Stattdessen werden
Methoden der Klasse CFaktor abgearbeitet, welche die Werte der Instanzen von CFaktor so
aktualisieren, dass eine korrekte graphische Darstellung der Simulation in der nächsten Runde
gegebenenfalls möglich sein wird.
Abbildung 3.1 „Oberfläche“
3.1.2 Die Klasse CManagement
Hinter diesem etwas abstrakten Namen verbirgt sich eine ebenfalls recht abstrakte Klasse:
CManagement stellt nämlich die zu führende Unternehmung als Ganzes dar. Daher wird sie nur
Seite 10
Die Umsetzung einer mikroökonomischen Simulation in ein JAVA - Applet
Samuel P. Plachel
einmal instanziiert (in OekoSim) und ihre wichtigste Aufgabe ist die Verwaltung bzw.
Erzeugung von Variabeln. Kurz gesagt enthält ihre Instanz sämtliche Variabeln, auf die der
Benutzer Einfluss nehmen kann, also etwa die Anzahl Mitarbeiter, die Höhe der (Neu)investitionen, bestellte Waren und deren Preis oder davon abhängig Werte wie etwa Umsatz und
Gewinn/Verlust.
Des Weiteren enthält sie Methoden zur Ausgabe dieser Daten. Diese Methoden werden in
OekoSim aufgerufen und stellen wie gesagt einen Teil der Oberfläche dar. Nebst diesen besitzt
sie Methoden, die die wichtigsten Operationen an den genannten Daten vornehmen – also etwa
Mitarbeiter einstellen oder Fremdkapital aufnehmen – welche in der Klasse COberfläche
aufgerufen werden.
Im Konstruktor von CManagement wird nebst dem Zuweisen von Startwerten an die oben
genannten Variablen das Anlegen eines Instanzen-Arrays der Klasse CProdukte mit vier
Elementen erledigt.
Codeauszug 3.2: Daten-Ausgabe für die Produkte
void produkteDatenAusgeben(Graphics g)
{
int i = 1;
while(i <= Unternehmung.anzahlProdukte)
{
if(produkte[i].p_entwickelt == 1)
g.drawString(„Produkt“ + i + „: “ +
produkte[i].p_produziert + „ à “ +
produkte[i].p_preis,540,234+(i-1)*15);
if(produkte[i].p_entwickelt == 0)
g.drawString(„Produkt “ + i + „: “ +
produkte[i].p_entwicklungsFortschritt + „/“ +
produkte[i].p_entwicklungsDauer + „ à “ +
produkte[i].p_entwicklungsKosten,540,234+(i-1)*15);
i++;
}
}
Die Methode produkteDatenAusgeben(Graphics g) wird in der paint()-Methode der Klasse
OekoSim aufgerufen und dient dazu, wichtige Kennzahlen der Produktion in das Panel
„Produktion“ zu zeichnen (siehe Abbildung 3.1). Sie arbeitet mit einer Schleife, die sich so oft
wiederholt, wie es verschiedene Produkte gibt. Der Integer i übernimmt dabei einerseits die
Funktion, bis anzahlProdukte zu zählen und andererseits aktiviert er das jeweilige Element des
Arrays produkte[]. So werden nacheinander Werte des Arrays produkte[], welches mehrere
Seite 11
Die Umsetzung einer mikroökonomischen Simulation in ein JAVA - Applet
Samuel P. Plachel
Instanzen der Klasse CProdukte enthält, über die Methode g.drawString(String, int, int) des
AWT ausgegeben.
Es gibt dabei zwei Möglichkeiten:

produkte[i].p_entwickelt hat den Wert 1, d.h. das Produkt produkte[i].p ist entwickelt. In
diesem Falle werden die Produktionszahlen ausgegeben: produzierte Anzahl und der Preis
pro Stück.

produkte[i].p_entwickelt hat den Wert 0. Dies bedeutet, dass das Produkt produkte[i] nicht
entwickelt ist. In diesem Falle werden der Entwicklungsfortschritt und die mit der
Entwicklung anfallenden Kosten ausgegeben.
3.1.3 Die Klasse CProdukte
Wie der Name schon sagt, stellt jede Instanz – oder besser gesagt jedes Element eines
Instanzen-Arrays – ein eigenes Produkt dar. Im Gegensatz etwa zu den Mitarbeitern, die aus
lediglich zwei Zählvariabeln definiert werden, gestaltet sich die Handhabung von Produkten
etwas schwieriger: Jedes Produkte benötigt Variabeln, die über Preis, Produktion, Verkauf und
Entwicklung Angaben enthalten.
So hat dann der Benutzer die Möglichkeit, zunächst ein Produkt zu entwickeln. Je nach
Wunsch wird ein teures Produkt mit hohem Entwicklungsaufwand oder ein billiges, das auch
billiger entwickelt werden kann, erzeugt. Nach Abschluss der Entwicklung beginnen dann die
Produktion und der Verkauf. All diese Angaben werden in Variabeln des Datentyps CProdukte
gespeichert und verwaltet.
Codeauszug 3.3: Konstruktor Produkt
CProdukte( int preis, int innovation )
{
p_preis = preis;
p_aktiv = 1;
p_entwickelt = 0;
p_produziert = 0;
p_verkauft = 0;
p_innovation = innovation;
p_entwicklungsDauer = p_innovation+4;
p_entwicklungsKosten = p_innovation*10000;
p_entwicklungsFortschritt = 0;
p_potential = 0;
p_vorrat = 0;
}
Seite 12
Die Umsetzung einer mikroökonomischen Simulation in ein JAVA - Applet
Samuel P. Plachel
Der Konstruktor von CProdukte hat zwei Parameter: preis und innovation. Anhand von
diesen beiden übergebenen Werten werden allen Variabeln von CProdukte berechnete Werte
übergeben. So erhält das Produkt einen Startpreis, den Entwicklungs- und Produktionsstatus 0,
seine aus p_innovation resultierende(n) Entwicklungsdauer und –kosten usw.
So entsteht eine Instanz der Klasse CProdukt, die sämtliche Angaben über ein bestimmtes
Produkt enthält. CProdukte wird, wie schon erwähnt, von OekoSim instanziiert und zwar in
Form eines Arrays. So entsteht für andere Klassen die Möglichkeit, sehr leicht auf jede Variabel
von jedem der verschiedenen Produkte zugreifen zu können und diese Werte weiterzuverarbeiten.
3.1.4 Die Klasse CSimulation
Die Klasse CSimulation ist eine Klasse, die nur zur Steuerung konzipiert wurde. Sie besitzt
als solche lediglich einen Standardkonstruktor und wird nur einmal – von OekoSim –
instanziiert.
Ihre Integer-Variablen konjProzent, konjProzentNull und konjProzentVorquartal erhalten
Werte übergeben, die Konjunkturwerte in Prozent der Klasse CKonjunktur darstellen. konjProzent gibt an, auf wie viel Prozent die landesweite Wirtschaftsentwicklung aktuell steht.
konjProzentNull hat den Wert konjProzent minus 100, was der Abweichung von 100% entspricht. konjProzentVorjahr schliesslich enthält den Prozentwert der Konjunktur im vergangenen Quartal.
Die Routinen von CSimulation stellen Algorithmen zum Simulieren der Wechselwirkungen
von einzelnen Faktoren dar und werden in OekoSim (in Abhängigkeit von deren Variable
simStart) aufgerufen. Im Folgenden möchte ich ihre Funktionalität kurz erläutern:

void simInitStart() bereitet die Simulation vor

void konjUpdate() aktualisiert die Konjunkturwerte

void quartalabschluss() schliesst das Quartal ab

void steuern() errechnet – abhängig von der Konjunktur – einen Steuersatz und die resultierenden Steuerausgaben

void kredit1() und kredit2() berechnen, wie viel Fremdkapital angeboten wird – abhängig vom
Eigenkapital - und wie viel Zinsen auf den Krediten erhoben werden

void sozales() ermittelt die Motivation der Mitarbeiter

void mitarbeiter() berechnet die Personalkosten

void investitionen() ermittelt die Gesamthöhe der Investitionen

void forschung() berechnet Werbe- und Marktforschungsaufwand

void lieferanten() berechnet Ausgaben für Warenbestellungen
Seite 13
Die Umsetzung einer mikroökonomischen Simulation in ein JAVA - Applet

Samuel P. Plachel
void produkte() ermittelt das Produktionspotential und die effektiv hergestellte Menge –
im Zusammenhang mit dem Vorrat an eingekauften Waren, der Anzahl Mitarbeiter/Manager und den Investitionen.

void verkauf() berechnet die verkaufte Menge. Der Algorithmus stützt sich auf Werte aus der
Weltwirtschaft (Nachfrage: CKonjunktur), Art/Preis des jeweiligen Produkts, Werbung und
Marktforschung. Des Weiteren wird der Warenbestand (Vorrat) verwaltet.
Dazu ist noch zu sagen, dass konjUpdate(), verkauf(), quartalabschluss(), steuern() und
kredit2() einmal pro Quartal ausgeführt werden, die anderen Algorithmen jedoch „monatlich“
(= 3x pro Quartal). Erstere stützen sich auf die resultierenden Werte und werden daher nur
einmal pro Quartal ausgeführt. simInitStart() wird ebenfalls nur einmal pro Quartal ausgeführt.
Im Gegensatz zu allen anderen Routinen wird sie jedoch nicht von der Paint()-Methode der
Klasse OekoSim aufgerufen, sondern in der Unterklasse CFFinanzen der Klasse COberflaeche.
Codeauszug 3.4: Algorithmus für Verkauf/Nachfrage
void verkauf(Graphics g)
{
int i = 1;
int nachfrage = (int)(100-(Konjunktur.konjunktur
[OekoSim.runde*12]100)/10)*Unternehmung.produkte[i].p_innovation*10/(Unternehmu
ng.produkte[i].p_preis/50)+((Unternehmung.forschung+Unternehm
ung.werbung)/10);
while(i <= Unternehmung.anzahlProdukte)
{
if(Unternehmung.produkte[i].p_entwickelt == 1)
{
if(nachfrage <=
Unternehmung.produkte[i].p_produziert)
Unternehmung.produkte[i].p_verkauft += nachfrage;
if(nachfrage >
Unternehmung.produkte[i].p_produziert)
{
if(Unternehmung.produkte[i].p_vorrat <=
nachfrage Unternehmung.produkte[i].p_produziert)
Unternehmung.produkte[i].p_verkauft +=
Unternehmung.produkte[i].p_produziert +
Unternehmung.produkte[i].p_vorrat;
if(Unternehmung.produkte[i].p_vorrat >
nachfrage Unternehmung.produkte[i].p_produziert)
Unternehmung.produkte[i].p_verkauft +=
nachfrage;
}
Unternehmung.f_umsatz +=
Unternehmung.produkte[i].p_verkauft*Unternehmung.pr
odukte[i].p_preis;
Unternehmung.produkte[i].p_vorrat +=
(Unternehmung.produkte[i].p_produziert Unternehmung.produkte[i].p_verkauft);
}
i++;
Seite 14
Die Umsetzung einer mikroökonomischen Simulation in ein JAVA - Applet
Samuel P. Plachel
}
}
In der Routine verkauf(Graphics g) wird die Nachfrage berechnet. Hierzu ist zu sagen, dass
die Werte in diesem Algorithmus teilweise - anhand von Testreihen - relativ willkürlich gewählt
werden mussten.
Die Nachfrage nach einem bestimmten Produkt ist zunächst von der Konjunktur abhängig. Je
besser die allgemeine Wirtschaftslage, desto mehr wird konsumiert. Da die Konjunktur für jede
einzelne Woche simuliert wird, die Nachfrage aber nur einmal pro Quartal, wird das Element
OekoSim.runde*12 aus dem Array Konjunktur.konjunktur[] ausgewählt.
Nachdem dieser Wert um 100 verkleinert und durch 10 dividiert wurde, wird er von 100
abgezogen. Dies scheint kompliziert, dient aber lediglich dazu, einen Prozentwert zu errechnen,
mit dem man einfacher weiterrechnen kann. Mehr über die Errechnung der Konjunkturwerte ist
im nächsten Kapital 3.1.5 zu lesen.
Dieser Konjunktur-Prozentwert wird nun mit dem Zehnfachen der Innovation des Produktes
multipliziert. Die 10 ist willkürlich gewählt und soll den grossen Einfluss der Qualität eines
Produktes auf dessen Nachfrage zum Ausdruck bringen.
Das Zwischenresultat wird nun durch den fünfzigsten Teil des Preises des Produktes dividiert. Die 50 ist wiederum willkürlich gewählt und soll aufzeigen, wie stark sich Preissenkungen
positiv auf die Nachfrage auswirken können.
Zum Schluss wird noch ein Zehntel der Summe von den Investitionen in Marktforschung
und Werbung zum entstehenden Wert addiert. Auch hier ist die 10 willkürlich gewählt, jedoch
lediglich zur Abschwächung der Auswirkungen von diesen Investitionen.
Somit entsteht ein Wert, d.h. die Nachfrage, der genau der Anzahl Produkte entspricht, die
maximal verkauft werden kann.
Die folgenden if-Schleifen werten aus, ob ein Produkt bereits entwickelt ist und berechnen,
falls dies der Fall ist, eine Anzahl verkaufter Stück und den daraus resultierenden Vorrat sowie
den erzielten Umsatz von jedem Produkt.
3.1.5 Die Klasse CKonjunktur
Die Instanz dieser Klasse enthält ein Array, dessen Elemente Werte der Konjunktur zu
bestimmten Zeiten darstellen. CKonjunktur enthält einen Algorithmus zur Simulation der
Weltwirtschaft. Dieser folgt dem Prinzip „auf einen Abschwung folgt immer ein Aufschwung“
und umgekehrt. Somit wird – vereinfacht gesagt - durch einen „kontrollierten Zufall“ eine ganze
Konjunkturkurve berechnet. Die berechneten Werte werden im Array konjunktur[] gespeichert,
welches
5000
Elemente
enthält,
und
können
so
über
die
Methode
konjunkturZeichnen(Graphics g) als Kurve graphisch dargestellt werden. Darüber hinaus wird
Seite 15
Die Umsetzung einer mikroökonomischen Simulation in ein JAVA - Applet
Samuel P. Plachel
aus dem aktuellen Wert für jedes Quartal eine Angabe in Prozent errechnet, die so in die
Errechnung einer Nachfrage (CSimulation) einfliessen kann.
Codeauszug 3.5: Konjunktur zeichnen
void konjunkturZeichnen(Graphics g)
{
g.drawString(„Konjunktur:“,10,50);
g.drawString(„1. Quartal 2003 bis “ + OekoSim.quartal +
„. Quartal “ + OekoSim.jahr,10,65);
int i = 1;
if(konjunktur[runde*12] > 100)
g.setColor(Color.red);
while(i <= runde*12)
{
g.fillOval(10+i,100+konjunktur[i],2,2);
i++;
}
g.setColor(Color.black);
g.drawLine(10,300,700,300);
g.drawLine(10+i,290,10+i,310);
g.drawString(OekoSim.quartal + “. “ + OekoSim.jahr,10+i20,320);
g.drawString(„4. 2002“,10,290);
}
Die Routine konjunkturZeichnen(Graphics g) übernimmt die Aufgabe, die Werte, die vom
Konstruktor der Klasse CKonjunktur errechnet wurden, graphisch darzustellen.
Zunächst wird links oben eine Information ausgegeben, bis zu welchem Quartal die
Konjunkturkurve gezeichnet wurde. Daraufhin wird von einer if-Anweisung überprüft, ob sich
der letzte Wert der zu zeichnenden Kurve unter- oder oberhalb der 100%-Grenze befindet. Ist
Ersteres der Fall, wird die Zeichenfarbe auf rot gesetzt, andernfalls bleibt sie automatisch auf
schwarz.
Danach wird eine while-Schleife gestartet, die genau wie ein Funktionsplotter arbeitet: In
jedem Durchlauf wird ein Punkt gezeichnet, während jedes Mal der x-Wert um 1 erhöht wird
und der y-Wert aus dem Array konjunktur[] ausgelesen wird - wobei der aktuelle x-Wert jeweils das zu wählende Element des Arrays ist. Die Schleife wird so lange ausgeführt, bis für
jede bereits vergangene Woche ein Punkt bzw. Wert gezeichnet wurde (runde*12).
Seite 16
Die Umsetzung einer mikroökonomischen Simulation in ein JAVA - Applet
Samuel P. Plachel
Zu beachten ist noch, dass die y-Werte jeweils vom Konstruktor „umgedreht“ wurden,
sodass sie leichter gezeichnet werden können. Dies zieht jedoch mit sich, dass im Algorithmus
für die Nachfrage die Werte wiederum korrigiert werden müssen (siehe Kapitel 3.1.4).
Abbildung 3.2 „Konjunktur“
3.1.6 Die Klasse COberflaeche
Ebenfalls nicht als eigentlicher Datentyp erkennbar ist die Klasse COberflaeche. Sie besteht
zunächst einmal aus verschiedenen Unterklassen, welche von der AWT-Klasse Frame abgeleitet
sind. Jede dieser Unterklassen erzeugt ein PopUp-Fenster, welches das Bearbeiten oder
Betrachten von Informationen eines bestimmten Faktors ermöglicht. Die Frame-Klassen sind
sowohl mit einem WindowListener, der das Schliessen des Fensters ermöglicht, als auch mit
verschiedenen ButtonListenern versehen. Diese stellen ein „Event-Handling“ für die im Fenster
enthaltenen AWT-Buttons dar und führen Befehle aus, die der Benutzer per Maus-Klick geben
kann.
Somit kann der Benutzer über Maus-Klicks auf die Oberfläche (siehe Abbildung 3.1) PopUpFenster öffnen und durch deren Buttons Preise von Produkten ändern, die Werbung intensivieren oder einen unfähigen Manager entlassen, um seine Unternehmung zum Erfolg zu
führen.
Nebst den PopUp-Fenstern, die dazu dienen, Einstellungen an der Unternehmung vorzunehmen, besteht die Möglichkeit, auf das gelbe Hilfesymbol eines Panels (siehe Abbildung 3.1) zu
klicken und so ein PopUp-Fenster mit einer kurzen Anleitung zum jeweiligen Thema zu öffnen.
Diese Fenster sind alle Instanzen der Klasse CFHilfe. Diese besitzt einen Konstruktor, der als
Parameter einen String verlangt, aufgrund dessen bestimmt werden kann, zu welchem Thema
Seite 17
Die Umsetzung einer mikroökonomischen Simulation in ein JAVA - Applet
Samuel P. Plachel
Hilfe angefordert wurde. Die paint()-Methode von CFHilfe gibt dann anhand des Parameters
den Inhalt zum entsprechenden Thema in das Fenster aus.
Was natürlich ebenfalls zur Aufgabe von COberfläche gehört, ist die Kontrolle der Koordinaten bei Mausklicks, um zu ermitteln, auf welches Panel der Benutzer geklickt hat, damit das
entsprechende Fenster gestartet wird. Ausserdem übernimmt der WindowListener der FrameKlassen noch die Funktion, die gesamte Anzeige neu zu zeichnen, damit die Oberfläche stets
auf dem neuesten Stand ist.
Codeauszug 3.6: Fensterklasse FFinanzen
class CFFinanzen extends Frame
{
Button Start,Start2;
CFFinanzen()
{
super("Hauptmenü - Finanzen");
setLayout(new FlowLayout());
Button Start = new Button("Quartal mit Visualisierung
simulieren (" + OekoSim.runde + " - " + OekoSim.quartal
+ "/" + OekoSim.jahr + ")");
Button Start2 = new Button("Quartal ohne Visualisierung
simulieren (" + OekoSim.runde + " - " + OekoSim.quartal
+ "/" + OekoSim.jahr + ")");
add(Start);
add(Start2);
addWindowListener(
new WindowAdapter() {
public void windowClosing(WindowEvent event)
{
setVisible(false);
dispose();
OekoSim.neuZeichnen = true;
}
}
);
class CBLStart implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
OekoSim.simStart = true;
OekoSim.simGraph = true;
Simulation.simInitStart();
setVisible(false);
dispose();
OekoSim.neuZeichnen = true;
}
}
class CBLStart2 implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
Seite 18
Die Umsetzung einer mikroökonomischen Simulation in ein JAVA - Applet
Samuel P. Plachel
OekoSim.simStart = true;
OekoSim.simGraph = false;
Simulation.simInitStart();
setVisible(false);
dispose();
OekoSim.neuZeichnen = true;
}
}
Start.addActionListener(new CBLStart());
Start2.addActionListener(new CBLStart2());
}
}
CFFinanzen ist eine der Unterklassen von COberflaeche. Sie wird von Frame des AWT
abgeleitet. Somit stellt jede Instanz dieser Klasse ein PopUp-Fenster dar.
Nachdem zwei Instanzen von Button gebildet wurden und durch die Methode super
(String) ein Titel für das PopUp gesetzt wurde (siehe auch Abbildung 3.3), wird ein Layout für die
Buttons festgelegt. Der Konstruktor von Button wird für beide Buttons aufgerufen. Dieser
benötigt als Parameter lediglich einen String, der auf dem Knopf ausgegeben wird.
Danach werden dem Layout die beiden Buttons hinzugefügt. Für jeden der Buttons wird nun
eine Hilfsklasse gebildet, die ActionListener implementiert. Diese beiden Klassen sorgen dafür,
dass simStart und simGraph ein Wert zugewiesen wird – woraufhin die Simulation in der
Paint()-Methode von OekoSim gestartet wird. Ausserdem wird die Methode Simulation.
simInit() aufgerufen und das Fenster zum Schluss automatisch durch setVisibleFalse() und
dispose() geschlossen und gelöscht. Zuletzt werden die beiden Buttons bei den ActionListenern
registriert.
Ausserdem erhält CFFinanzen einen WindowListener, der dafür sorgt, dass das Fenster
durch einen Klick auf das Schliess-Symbol (etwa das X unter Windows) geschlossen werden
kann.
Abbildung 3.3 „Oberfläche - Produktion“
Seite 19
Die Umsetzung einer mikroökonomischen Simulation in ein JAVA - Applet
Samuel P. Plachel
3.1.7 Die Klasse CFaktor
Die Instanzen der Klasse CFaktor stellen Balkendiagramme dar, welche zur Visualisierung
des Simulationsvorganges dienen. Die Instanzen von CFaktor werden in OekoSim angelegt,
wobei jede Instanz ein Diagramm für einen Simulations-Faktor darstellt. Die fünf
Klassenvariabeln bezeichnung, startWert, endWert, balkenFarbe und ueberhoehungsFaktor
werden vom Konstruktor jeder Instanz zugewiesen.
Zu den Instanzen dieser Klasse – also den Diagrammen - ist allgemein zu sagen, dass jedes
Diagramm bzw. jeder Faktor in jeder Runde bzw. jedem Quartal einen Start- und einen Endwert
hat. Der Startwert entspricht dem Wert, den der Faktor im vergangenen Quartal hatte, der
Endwert dem des aktuellen Quartals. So lässt sich die Veränderung gegenüber dem Vorquartal
graphisch darstellen.
Da CFaktor recht viele Methoden enthält, seien diese im Folgenden ganz kurz erklärt:

faktorZeichnen(Graphics,int,int,int) zeichnet ein Balkendiagramm. Zuerst wird ein gelber
Balken gezeichnet, der den Startwert, also den Wert des Vorquartals, darstellt. Danach wird die
Veränderung in einer anderen Farbe dargestellt. Diese Farbe entspricht der Färbung des
entsprechenden Panels auf der Oberfläche (siehe Abbildung 3.1).

simInit() und simInitProdVerk() aktualisieren Werte um die Visualisierung vorzubereiten.

simReset() wird nach der Visualisierung aufgerufen und bewirkt, dass die Endwerte des
abgeschlossenen Quartals zu den Startwerten des neuen Quartals werden.

verzoegerung() sorgt in faktorZeichnen(Graphics,int,int,int) für kleine Verzögerungen, damit die
Visualisierung in einem angemessenen Tempo ablaufen kann. Sie bedient sich der Methode
sleep(int) von Thread.

simInitEmulieren() und faktorZeichnenEmulieren() gaukeln dem Programm vor, dass die
Methoden simInit() und faktorZeichnen(Graphics,int,int,int) ablaufen. Dies ist nötig, weil in
letzteren die Start- und Endwerte u.ä. aktualisiert werden. Wenn sich der Benutzer jedoch für die
Simulation ohne Visualisierung entscheidet, werden diese Schritte nicht ausgeführt. Dies hat zur
Folge, dass die Faktoren nicht korrekt angezeigt werden, wenn die Visualisierung nachträglich,
d.h. erst während der Simulation, aktiviert wird
Codeauszug 3.7: Diagramm zeichnen
if (endWert == startWert)
{
if(startWert >= 0)
{
while (i <= (int)startWert*ueberhoehungsFaktor)
{
g.setColor(Color.yellow);
g.drawLine(x,y,x,y+25);
x += 1;
i += 1;
verzoegerung(50);
}
}
Seite 20
Die Umsetzung einer mikroökonomischen Simulation in ein JAVA - Applet
Samuel P. Plachel
if(startWert < 0)
{
while (i <= (int)-startWert*ueberhoehungsFaktor)
{
g.setColor(Color.yellow);
g.drawLine(x,y,x,y+25);
x -= 1;
i += 1;
verzoegerung(50);
}
}
}
Obenstehender Quellcode ist ein Ausschnitt aus der Methode faktorZeichnen(Graphics, int,
int, int). Er stellt die einfachste Variante eines Balkendiagrammes dar: Start- und Endwert sind
gleich, es muss also keine Veränderung visualisiert werden.
Dabei wird eine while-Schleife benutzt, in der so oft eine senkrechte gelbe Linie gezeichnet
wird und der x-Wert erhöht wird, bis ein gelber Balken mit der korrekten Länge entstanden ist.
Falls der Endwert negativ ist, wird - statt wie gerade beschrieben nach rechts - nach links
gezeichnet, die x-Werte also in jedem Durchlauf der Schleife um 1 gesenkt.
Zu beachten ist hier auch die Variabel ueberhoehungsFaktor. Da die Grössenordnung der
Werte sehr unterschiedlich ist, ist es bei manchen Faktoren z.B. nötig, die Werte durch 1000 zu
teilen oder mit 10 zu multiplizieren. Ausserdem wird ueberhoehungsFaktor automatisch
halbiert, sobald die Werte so gross würden, dass sie nicht mehr im Visualisierungs-Fenster
dargestellt werden könnten (in Codeauszug 3.7 nicht sichtbar).
3.1.8 Die Klasse CFSimulation
CFSimulation wird von Frame des AWT abgeleitet. Die Instanz von CFSimulation stellt ein
PopUp-Fenster dar, in deren paint()-Methode die Balkendiagramme zur Visualisierung des
Simulationsvorganges gezeichnet werden, also die Methode faktorZeichnen(Graphics, int, int,
int) der Instanzen von CFaktor aufgerufen werden. Somit läuft in diesem Fenster die eigentliche
Visualisierung ab.
Codeauszug 3.8: Visualisierung der Simulation
if(i == 3)
{
g.setColor(Color.white);
g.fillRect(0,0,700,400);
mengeProd.faktorZeichnen(g,50,50,mengeProd.endWert);
mengeVerk.faktorZeichnen(g,50,100,mengeVerk.endWert);
g.setColor(Color.black);
g.drawLine(50,150,650,150);
fUmsatz.faktorZeichnen(g,50,200,Unternehmung.f_umsatz);
Seite 21
Die Umsetzung einer mikroökonomischen Simulation in ein JAVA - Applet
Samuel P. Plachel
g.setColor(Color.black);
g.drawString("Bitte warten...",600,350);
verzoegerung(20000);
i++;
}
Dieser Ausschnitt stellt den dritten Bildschirm (i = 3) der Visualisierung dar. Gezeigt werden
die Diagramme für Produktionsmenge und Verkauf. Darunter wird eine schwarze Linie zur
optischen Abgrenzung gezeichnet, worauf das Diagramm für den Umsatz gezeichnet wird. So
lässt sich für den Benutzer beobachten, wie sich Produktion und Verkauf entwickelt haben und
welcher Umsatz sich daraus ergibt.
Ausserdem wird ganz zu Anfang des Ausschnittes ein weisses ausgefülltes Viereck gezeichnet, das dem Löschen der vorhergehenden Visualisierung dient. Zum Schluss wird die
Meldung „Bitte warten…“ ausgegeben und eine Verzögerung eingeschaltet, damit der Benutzer
genügend Zeit hat, sich die Graphik anzusehen.
Ganz zuletzt wird i um 1 erhöht, womit die nächste if-Abfrage wahr wird und daraufhin die
folgende Visualisierung startet.
Hierzu ist noch zu sagen, dass dank der CFaktor-Klasse, die eigentlich die ganze Arbeit für
die graphische Darstellung des Simulationsvorganges bereits erledigt hat, die Routine für die
eigentliche Visualisierung sehr simpel geworden ist – und auch das Hinzufügen weiterer
Darstellungen relativ schnell zu erledigen ist.
Abbildung 3.4 „Visualisierung des Simulationsvorganges“
Seite 22
Die Umsetzung einer mikroökonomischen Simulation in ein JAVA - Applet
Samuel P. Plachel
4. Anleitung zum Applet
Die Aufgabe dieses Kapitels ist es, die Bedienung des Programms zu beschreiben und einen
Einblick in die wichtigsten Zusammenhänge der einzelnen Faktoren zu geben. Darüber hinaus
soll die Anleitung auch die Ideen hinter der Umsetzung – vom Modell zur Simulation in JAVA
– vermitteln.
Wie sich auf Abbildung 4.1 (unten) erkennen lässt, ist die Oberfläche der Simulation dem
„Umweltenmodell“ (Kapital 2.3.1) nachempfunden. Die verschiedenen Gruppen werden durch die
Farben rot, blau und grün gekennzeichnet. Ausserdem wird ein Einfluss, der von einer
bestimmten Gruppe auf eine andere einwirkt, durch einen Pfeil in der entsprechenden Farbe
dargestellt:

BLAUE Felder kennzeichnen diejenigen Faktoren, die der Benutzer direkt beeinflussen
kann. Dazu gehören „Lieferanten“, „Mitarbeiter“, „Produktion“, „Marketing“ und
„Investitionen“. Die fünf blauen Pfeile stellen Einflüsse dar, die von diesen Faktoren
ausgehen.

ROTE Felder kennzeichnen Faktoren, die der Benutzer nur indirekt oder gar nicht beeinflussen kann, die aber auf die Unternehmung einwirken. Diese sind „Soziales“,
„Wirtschaft“ und „Kapitalgeber“. Die drei roten Pfeile stellen Einflüsse dar, die von
diesen Faktoren ausgehen

Das GRÜNE Feld „Finanzen“ stellt die wichtigsten Kennzahlen der Unternehmung dar.
Die drei grünen Pfeile stellen Geldströme dar, die in direkt beeinflussbare Faktoren
fliessen.
Durch einen Mausklick auf eines der blauen Felder oder „Panels“ wird ein PopUp-Fenster
geöffnet, über welches der Benutzer auf den jeweiligen Faktor Einfluss nehmen kann. Die
genauen Möglichkeiten werden in den folgenden Kapiteln erläutert. Unten findet sich eine
Legende zur Abbildung 4.1, die kurz die Auswirkungen der einzelnen Faktoren untereinander
zusammenfasst.
Hinweis: Im Anhang „Screenshots“ sind Abbildungen der einzelnen PopUp-Fenster, die
oben erwähnt wurden und in den folgenden Kapiteln beschrieben werden, vorhanden.
Seite 23
Die Umsetzung einer mikroökonomischen Simulation in ein JAVA - Applet
Samuel P. Plachel
Abbildung 4.1 „Zusammenspiel der Faktoren“
Legende zu Abbildung 3.1
1
Motivation der Arbeiter beeinflusst die Produktion
2
Rechnungen für bestellte Waren werden bezahlt
3
Löhne für Mitarbeiter und Manager werden bezahlt
4
Bestellte Waren werden für die Produktion benötigt
5
Mitarbeiter stellen Produkte her
6
Konjunktur nimmt Einfluss auf die Unternehmung (Nachfrage)
7
Produkte können verkauft werden
8
Kredite können aufgenommen werden
9
Ausgaben für Netto- und Ersatzinvestitionen
10
Markforschung und Werbung verursachen Kosten
11
Ersatzinvestitionen für vorhandene Produktionsanlagen
Nettoinvestitionen für neue Produktionsanlagen
12
Marktforschung und Werbung erhöhen den Absatz der Produkte
4.1 Mitarbeiter
Im blauen Panel oben rechts (siehe Abbildung 3.1) finden sich die wichtigsten Angaben zum
Personalwesen: Anzahl und Lohn der Mitarbeiter / Manager sowie die jeweiligen sich daraus
ergebenden Kosten. Durch Klicken auf das Panel wird ein PopUp-Fenster gestartet. Dies bietet
Seite 24
Die Umsetzung einer mikroökonomischen Simulation in ein JAVA - Applet
Samuel P. Plachel
die Möglichkeit, über Mausklicks auf die Buttons neue Mitarbeiter einzustellen oder zu
entlassen sowie ihren Lohn zu erhöhen oder zu senken. Analog verhält es sich mit den Einstellungen für die Manager.
Die Anzahl Mitarbeiter / Manager wirkt sich in erster Linie auf das Produktionspotential aus
– je mehr Mitarbeiter, desto mehr kann produziert werden.
4.2 Produkte
Das blaue Panel Mitte rechts dient der Anzeige der wichtigsten Daten zu der Produktion:
Auflistung der Produkte mit Entwicklungs- bzw. Produktionsstand und Preis.
Durch einen Mausklick wird ein Fenster geöffnet, über das der Benutzer Einstellungen
vornehmen kann und ein zweites, das Verkaufszahlen ausgibt. Im ersteren gibt es drei verschiedene Abteilungen: Durch die oberen Buttons lassen sich Einstellungen für ein Produkt
vornehmen, das neu entwickelt werden soll. Hierzu gehört das sogenannte „Innovationsniveau“,
welches die Qualität des Produktes bestimmt. Davon abhängig ist einerseits, wie kostenintensiv
die Entwicklung ist und andererseits wie viel die Kunden später bereit sind, für ein Produkt zu
bezahlen. Ausserdem kann der Benutzer einen Startpreis festlegen. Durch einen Klick auf den
Button „Produkt entwickeln“ wird der Bau einer Maschine für ein neues Produkt gestartet.
Maximal können vier Maschinen für vier verschiedene Produkte gebaut werden.
Im mittleren Abteil lassen sich bestehende Produkte ändern. Nach dem Festlegen einer
Nummer (entspricht der Reihenfolge auf dem Panel) kann der Benutzer den Verkaufspreis
sowie die herzustellende Menge ändern. Diese Anzeige besteht aus „Produktionsmenge /
Maximale Produktionsmenge“ also z.B. „1000 / 1200“.
Das unterste Abteil dient dazu, die Produktion eines Produktes, das beispielsweise zu wenig
rentabel ist, einzustellen. Nach dem „Aussortieren“ eines Produktes ist die Herstellung nicht
mehr möglich. Die Reaktivierung eines ‚aussortierten’ Produkts ist somit nur durch den Bau
einer neuen Maschine möglich. Die Entfernung einer Maschine bringt keine direkten
finanziellen Vorteile, jedoch kann danach eine zusätzliche Maschine gebaut werden.
Die Nachfrage nach einem bestimmten Produkt ist etwa von Faktoren wie Qualität und Preis
abhängig. Aber auch die Konjunktur, Werbung und Marktforschung haben einen Einfluss auf
die verkaufte Menge.
Durch Nettoinvestitionen kann das Produktionspotential erhöht werden. Dies ist zwar
kurzfristig gesehen sehr kapitalintensiv, gibt dafür aber dem Benutzer die Möglichkeit, Fixkosten in Form von Gehältern – sprich durch Stellenabbau – zu reduzieren.
Seite 25
Die Umsetzung einer mikroökonomischen Simulation in ein JAVA - Applet
Samuel P. Plachel
4.3 Lieferanten
Oben links findet sich das Panel „Lieferanten“. Dargestellt sind die bestellte Menge sowie
der Stückpreis und der derzeitige Vorrat. Im Fenster, das sich durch einen Klick auf das Panel
öffnen lässt, kann der Benutzer eine bestimmte Menge bestellen. Zu beachten ist, dass auf
grosse Mengen Rabatte gewährt werden.
Die Produktion ist abhängig von der verfügbaren Menge an eingekauften Waren: Jedes
hergestellte Produkt – unabhängig von der Qualität - benötigt ein geliefertes Gut. Eine häufige
Ursache für einen Produktionsstillstand bzw. eine plötzliche Produktionsabnahme ist eine zu
kleine bestellte Menge an Waren.
4.4 Marketing
Das Panel „Marketing“ (unten Mitte) stellt die Investitionen für Werbung und Marktforschung dar. Im PopUp-Fenster dieses Panels lassen sich Ausgaben für die zwei genannten
Faktoren festlegen.
Wie bereits unter 4.2 erwähnt haben Marktforschung und Werbung einen wesentlichen
Einfluss auf den Verkauf der Produkte – je mehr investiert wird, desto höher wird die Nachfrage.
4.5 Wirtschaft
Durch Klicken auf das Panel „Wirtschaft“ wird eine graphische Darstellung der Weltwirtschaftsentwicklung seit Spielbeginn (1. Quartal 2003) in einem PopUp-Fenster geöffnet.
Anhand der Konjunkur-Kurve kann der Benutzer versuchen, die unmittelbare zukünftige
Entwicklung abzuschätzen und seine Entscheide danach auszurichten. Ist die Kurve rot, liegt
eine Abnahme des BIPs seit Spielbeginn vor, ist sie schwarz, eine Zunahme. Dies lässt sich
ausserdem der Prozentangabe auf dem Panel entnehmen.
Die Konjunktur fliesst wie etwa der Preis eines Produktes in die Nachfrage ein – je besser
die gesamtwirtschaftliche Entwicklung, desto kauffreudiger die Kunden.
Ausserdem wird auf dem Panel „Wirtschaft“ angegeben, auf wie viel Prozent sich die
Steuern auf dem erwirtschafteten Gewinn belaufen. Die Höhe der Steuern ist indirekt
proportional zum Konjunkturverlauf.
4.6 Soziales
Im Panel „Soziales“ wird die Motivation der Arbeiter dargestellt. Die Prozentzahl wird
anhand der getätigten Entlassungen/Einstellungen und Lohnerhöhungen/-senkungen errechnet.
Seite 26
Die Umsetzung einer mikroökonomischen Simulation in ein JAVA - Applet
Samuel P. Plachel
Ausserdem ist das Verhältnis zwischen erwirtschaftetem Gewinn und Mitarbeiteranzahl /-lohn
wesentlich – wenn der Benutzer seine Unternehmung erfolgreich führt und viel Gewinn macht,
möchten natürlich die Arbeiter auch einen Teil davon für ihre gute Leistung erhalten.
Unterhalb der Prozentangabe findet sich eine kurze Beschreibung der Motivation:

„Mitarbeiter motiviert!“: Bei 75% und mehr arbeiten die Angestellten motiviert und
erhöhen somit das Produktionspotential – proportional zu ihrer Motivation.

„Mitarbeiter zufrieden.“: Von 50% bis 74% sind die Angestellten durchschnittlich motiviert. Das Produktionspotential wird nicht beeinflusst.

„Mitarbeiter unzufrieden“: Von 25% bis 49% sind die Angestellten nicht motiviert. Dies
kann sich – je nach Grad der Demotivierung – sehr negativ auf das Produktionspotential
auswirken.

„Mitarbeiter streiken!“: Unter 25% Motivation gehen die Angestellten in den (Dauer)Streik. Die Produktion wird solange angehalten, bis der Benutzer den Mitarbeitern mehr
Lohn zahlt bzw. mehr Leute einstellt.
Wichtig ist es vor allem darauf zu achten, dass Gewinn und Anzahl / Lohn der Mitarbeiter in
einem angemessenen Verhältnis steht. Falls sich der Benutzer einen hohen Gewinn nur durch
Investitionen zu erarbeiten versucht, fangen die Mitarbeiter an, weniger zu arbeiten, was je nach
Demotivierungs-Grad zu sehr erheblichen Umsatz-Einbussen führen kann.
4.7 Kapitalgeber
Im Panel „Kapitalgeber“ werden folgende Kennzahlen ausgegeben: Derzeitige Kredite,
angebotene Kredite und der jährliche Zinssatz auf Kredite.
Durch einen Klick auf dieses Panel kann der Benutzer Kredite aufnehmen. Der Benutzer
kann durch aufgenommenes Fremdkapital seine Liquidität erhöhen. Allerdings ist zu beachten,
dass zu Zeiten eines starken Wirtschaftswachstums die Zinsen wesentlich höher sein können als
während eines Abschwungs. Somit ist es oft empfehlenswert, das Fremdkapital abzubauen,
sobald genügend hohe Gewinne erwirtschaftet werden.
Die Höhe der angebotenen Kredite hängt vom Eigenkapital der Unternehmung ab – welches
nicht mit dem Kapital gleichzusetzen ist. Das Eigenkapital ist das Kapital minus das
aufgenommene Fremdkapital.
4.8 Finanzen
Im Panel „Finanzen“ werden die wichtigsten Kennzahlen der Unternehmung ausgegeben:
Kapital, Umsatz (letztes Quartal), Ausgaben (letztes Quartal), Gewinn bzw. Verlust (letztes
Quartal).
Seite 27
Die Umsetzung einer mikroökonomischen Simulation in ein JAVA - Applet
Samuel P. Plachel
Nachdem alle Einstellungen für das aktuelle Quartal vorgenommen worden sind, kann der
Benutzer durch Klicken auf dieses Panel das Quartals-Abschluss-Menü öffnen. Es stehen zwei
Möglichkeiten zur Verfügung, das Quartal abzuschliessen:

„Quartal mit Visualisierung simulieren“: Durch Klicken auf diesen Button startet die
Simulation des aktuellen Quartals mit Visualisierung. D.h. der Benutzer kann in einem
Fenster verfolgen, welche Auswirkungen seine Entscheidungen haben. Jeder Faktor –
etwa Anzahl Mitarbeiter, Produktion oder Verlauf der Konjunktur – wird graphisch als
Balken-Diagramm dargestellt, aus welchem sich ersehen lässt, wie sich der Faktor
verändert hat und auf welche anderen Faktoren er sich ausgewirkt hat bzw. von welchen
anderen Faktoren er beeinflusst worden ist. Es folgen nacheinander: Darstellung der
Produktion, des Verkaufs, Umsatzes, der Ausgaben, des Fremdkapitals und des
Quartalsabschlusses mit Gewinn und neuem Kapital. Das aktuelle Quartal wird abgeschlossen, das nächste beginnt.

„Quartal ohne Visualisierung simulieren“: Durch Klicken auf diesen Button startet die
Simulation des aktuellen Quartals ohne Visualisierung. Die graphische Darstellung der
Auswirkungen von getroffenen Entscheidungen fällt weg, die neuen Zahlen werden direkt
berechnet, das neue Quartal beginnt.
Nach dem beschriebenen Abschluss eines Quartals können die Entscheidungen für das
nächste Quartal getroffen werden – die neue Runde beginnt, das „Spiel geht von vorne los“.
4.9 Allgemeine Hinweise und Zusammenfassung

Zu jedem Faktor ist ein Panel vorhanden, in dem die wichtigsten Daten angezeigt werden.

Durch Klicken auf ein Panel wird der jeweilige „Bearbeiten“-Dialog aufgerufen. Das
Vornehmen von Einstellungen erfolgt durch weitere Klicks auf die entsprechenden Buttons.

Durch das Klicken auf das Panel „Finanzen“ und das Wählen zwischen „Simulation mit
Visualisierung“ und „Simulation ohne Visualisierung“ wird das aktuelle Quartal simuliert und
abgeschlossen, das nächste Quartal beginnt.

In jedem Panel befindet sich in der rechten oberen Ecke ein gelbes Hilfe-Symbol „?“. Durch
einen Mausklick auf dieses wird ein PopUp mit einem kurzen Hilfetext zum entsprechenden
Panel geöffnet.

Achtung: Alle Mengen- und Betragsangaben (z.B. Löhne Mitarbeiter, bestellte Menge,
Nettoinvestitionen usw.) beziehen sich auf einen Monat. Eine Runde im Spiel entspricht jedoch
einem Quartal. Somit werden mit einer Runde (= 1 Quartal) jeweils 3 einzelne Monate simuliert
und die Ausgaben / Produktionszahlen / Bestellungen etc. belaufen sich jeweils auf den
dreifachen angezeigten Wert.
Seite 28
Die Umsetzung einer mikroökonomischen Simulation in ein JAVA - Applet
Samuel P. Plachel
5. Schluss
Das beiliegende JAVA – Applet ‚OekoSim’ ist eine Umsetzung von mikroökonomischen
Modellen durch objektorientierte Programmierung. ‚OekoSim’ basiert v.a. auf der Theorie der
„Umweltsphären“ (siehe Kapital 2.3.1), womit eine Computer-Anwendung entstanden ist, deren
Oberfläche diesem Modell nachgebildet ist (siehe Abbildung 3.1).
Dieses Applet gibt die Möglichkeit, die Einflüsse, die von den „Umwelten“ auf die
Unternehmung wirken, zu simulieren und die Auswirkungen von Entscheidungen, die vom
Management getroffen werden, im Zusammenhang mit den Umwelten darzustellen. Jede
Entscheidung ruft bestimmte Reaktionen oder sogar Kettenreaktionen hervor, welche durch eine
Balken-Diagramm-Darstellung visualisiert werden können.
Ein besonderer Schwerpunkt wurde in dieser mikroökonomischen Simulation auf soziale
Aspekte gelegt: nicht die Gewinnmaximierung führt zum Ziel, sondern ein Mittelweg zwischen
dem Streben nach einem Gewinn – welcher schliesslich das Überleben einer Unternehmung
sichert - und dem Berücksichtigen sozialer Belange. Somit ergibt sich eine UnternehmungsSimulation, die leicht idealistisch angehaucht ist; ich bin aber der Meinung, dass etwas
Idealismus einer Simulation keinen Abbruch tut. Eine Simulation kann beliebig komplex sein,
sie wird trotzdem nicht in der Lage sein, die Realität wirklich exakt abzubilden. Vielmehr ist es
das Ziel jeder Simulation, einen Idealfall der Realität abzubilden – und genau dies wurde mit
‚OekoSim’ erreicht.
Literaturverzeichnis
Primärliteratur:
„Wirtschaft und Recht Grundlagen“ / Jan Atteslander et al. – Aarau: Bildung Sauerländer.
1
3. erg. Aufl. 2000
Sekundärliteratur:

„Jetzt lerne ich Java“ / Louis, Dirk und Peter Müller – München: Markt und Technik Verlag. 1.
Aufl. 2002

„Wirtschaft und Recht Grundlagen“ / Jan Atteslander et al. – Aarau: Bildung Sauerländer.
3. erg. Aufl. 2000

Konzept des beiliegenden JAVA – Applets in Anlehnung an das Brettspiel „Ökolopoly. Ein
kybernetisches Umweltspiel von Frederic Vester“ / Frederic Vester – Ravensburg: Otto Maier
Verlag. 1984
Verwendete Software:
Seite 29
Die Umsetzung einer mikroökonomischen Simulation in ein JAVA - Applet

Metrowerks CodeWarrior IDE Version 4.1

Microsoft Windows XP

Microsoft Office XP
Samuel P. Plachel
Anlagen:

JAVA-Applet: Ordner ‘Java Sources’ mit sämtlichen Klassendateien

Quellcode: MCP-File ‘OekoSim.mcp’ inkl. ‘OekoSim.java’, ’OekoSim.html’, ‘Debug.html’

Anlage “Screenshots”
Bestätigung der Eigentätigkeit
Ich bestätige mit Unterschrift, dass die Arbeit selbständig verfasst und in schriftliche Form
gebracht worden ist, dass sich die Mitwirkung anderer Personen auf Beratung und
Korrekturlesen beschränkt hat und dass alle verwendeten Unterlagen und Gewährspersonen
aufgeführt sind.
Samuel P. Plachel
Seite 30
Herunterladen