Autor Beitrag
Shorty_89
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Sa 20.07.13 20:46 
Hallo!

ich sitze gerade an einer Projektarbeit, bei der es darum geht ein Klassendiagramm zu erstellen, mit dem man verschiedene Finanzmodelle abbilden kann.

Insgesamt habe ich mir das wie folgt vorgstellt: Ein Finanzmodell soll im groben aus Parametern und Cashflows bestehen.
Parameter sind beispielsweise : Einwohnerzahl der Stadt, Anzahl Neukunden je Einwohner oder Regristiergebühr. Damit sollen alle Werte abgebildet werden, die von vorne herein bekannt sind und sich nicht ändern.
Cashflows sind beispielsweise : Anzahl Neukunden oder Einnahmen durch Registierungen. Es sind also alle Werte, die sich aus anderen Parametern und Cashflows berechnen lassen.
ausblenden Quelltext
1:
2:
3:
Anzahl Neukunden(Cashflow) = Einwohnerzahl der Stadt(Parameter) * Anzahl Neukunden je Einwohner (Parameter)

Einnahmen durch Registierungen(Cashflow) = Anzahl Neukunden(Cashflow) * Regristiergebühr(Parameter)

Ziel ist es also im Endeffekt später für ein beliebiges Finazmodell ein Objektdiagramm erstellen zu können, welches die Parameter und Cashflows, sowie deren Rechenzusammenhänge abbildet. Im Anhang hab ich mal mein Klassendiagramm dazu angehängt.

Zusätzlich ist noch anzumerken, dass ich das Finanzmodell nicht in C# durchrechnen lassen will sondern lediglig die Struktur abbilden will. Am Ende möchte ich mir daraus einen String generieren lassen, den ich in einem Simulationstool durchrechnen lasse.

String für das Simualtionstool sieht beispielweise wie folgt aus:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
"
starttime = 0.0;
stoptime = 9;
dt= 1; (zeitschritt)

EINWOHNERZAHL= table ((0, 1000000), (1, 1000000), (2, 0.015),(3, 1000000),(4, 1000000),(5, 1000000),(6, 1000000),(7, 1000000),(8, 10000008),(9, 1000000),(10, 1000000)) (time);

ANZAHL_NEUKUNDEN_JE_EINWOHNER= table ((0, 0.0289977306739764), (1, 0.0191313675093869), (2, 0.015),(3, 0.0126219953862697),(4, 0.0110403288422675),(5, 0.0098963093307967),(6, 0.00902204913289638),(7, 0.00832741138096095),(8, 0.0077592278695768),(9, 0.00728390062245306),(10, 0.00728390062245306)) (time);

anzahl_neukunden=EINWOHNERZAHL*ANZAHL_NEUKUNDEN_JE_EINWOHNER;
"

Mein Problem: Rechenzusammenhänge zwischen Cashflows und Parametern in C# zu implementieren. (im Groben sind das eigentlich nur -,+,*,/,^) Klammern müsste man auch abbilden können, weil auch beispielsweise solche Rechenzusammenhänge vorkommen können: Cashflow = (Parameter1-Parameter2)^Parameter3 .

Mein erster Ansatz war, ne Liste <Parameter> und Liste <Cashflows> in der Klasse Cashflow zu erstellen, in die ich dann die Cashflows und Parameter adden kann, die zusammengerechnet den Cashflow ergeben. Aber da hab ich ja dann immer noch keine Rechenzusammenhänge abgebildet.

Mein zweiter Ansatz war dann beim adden der Cashflows in die Listen noch den Operator als String zu übergeben und dann direkt immer einen String in der Klasse Cashflow zu erweitern.
ausblenden C#-Quelltext
1:
2:
3:
Cashflow amount_new_customers = new Cashflow("new_customers");
amount_new_customers.addElement(amount_inhabitant,"*");
amount_new_customers.addElement(new_customers_per_inhabitant, ";");

Aber das ist ja irgendwie auch nicht Sinn der Sache (da könnt ich dann auch gleich die Rechenregeln als String erstellen. Am Ende sollen die ja aus den Objekten und deren Relationen generiert werden.)

Meine letzte Überlegung war, noch eine Klasse "Rechenoperator" zu erstellen, so dass man zb. zwei Cashflowobjekte über ein Rechenoperatorobjekt verknpüft. Aber da müsst ich ja am ende hunderte Objekte anlegen.

Hat jemand vielleicht einen kleinen Denkanstoß für mich?

Vielen Dank schonmal!
Grüße
Stephan

Moderiert von user profile iconTh69: Code- und C#-Tags hinzugefügt
Moderiert von user profile iconTh69: Topic aus C# & .NET Tutorials verschoben am So 21.07.2013 um 11:22
Einloggen, um Attachments anzusehen!
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: So 21.07.13 11:37 
Hallo Shorty_89 :welcome:

ich habe deinen Beitrag mal in das richtige Unterforum verschoben und ein paar Formatierungen (zum besseren Lesen) vorgenommen.

Du wirst nicht drumherum kommen, die Formeln in irgendeiner Form abzubilden, entweder eben als String oder als Baumstruktur. Wer (und in welcher Form) erstellt denn diese Formeln?

Als Anregung könntest du dir mal meinen Parser für mathematische Formeln anschauen (dort speziell die Klasse ExprTree<T>).

P.S: Und den Klassennamen "Steakholder" solltest du vllt. noch abändern - du meinst sicherlich "Stakeholder" ;-)
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 21.07.13 12:58 
user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
P.S: Und den Klassennamen "Steakholder" solltest du vllt. noch abändern - du meinst sicherlich "Stakeholder" ;-)
Wer kann das während der Grillsaison schon mit Sicherheit sagen :mrgreen:

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Shorty_89 Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: So 21.07.13 23:01 
Hey,

danke schonmal für die Antwort!

Das mit den Bäumen und dem Parser sieht auf jedenfall schonmal ganz vielversprechend aus.
Ich gehe gerade mal den Quellcode durch und versuche das Nachzuvollziehen. Da meine Programmierkenntnisse nicht gerade gut sind und ich C# Neuling bin wird das wohl einige Stunden dauern :wink:
Ich melde mich auf jedenfall wieder hier wenn ich eine Idee hab wie ich das auf mein Problem übertragen kann oder Fragen habe.

Zur Frage: Wer (und in welcher Form) erstellt denn diese Formeln?

Ich bin nicht ganz sicher ob ich die Frage richtig verstanden habe. Ich Antworte mal so wie ich denke.

Die ganzen Objekte für ein Finanzmodell wollte ich zunächste in C# per Hand erstellen und verknüpfen mit den Rechenregeln (also nicht aus irgendeinem anderen Programm ein Finanzmodell einlesen).

Wenn alles verknüpft ist wollte ich eine Methode drüber laufen lassen, die alle Cashflows und Parameter durchläuft und daraus einen String für das Simulationsprogramm (MapSim) erstellt.

Für die Konstruktoren habe ich keine Vorgaben bekommen, also müsst ich mir da überlegen, wie man mit möglichst wenig Aufwand das Finanzmodell erstellen kann.

P.S: Danke für den Hinweis wegen den Stakeholder. Das hätte ich garantiert falsch gemacht :D
Grüße
Stephan