Zum Forum springen
Simulationsprogramm...
 
Benachrichtigungen
Alles löschen

[Geschlossen] Simulationsprogramm [5$ inside]

38 Beiträge
9 Benutzer
0 Reactions
2,549 Ansichten

meins ist definitiv falsch merke ich. Habe gerade das Skript gelesen und so wie es aussieht nimmt man einfach die Binominalformel knallt da die aktuellen Werte rein und erhält dann die Wahrscheinlichkeit u. Mit der wird dann geprüft. X(u>p)=-1 und X(u<p)=1. MIt Matlab wird es dann definitv schneller gehen es zu programmieren (minimal ).


Hallo Bergi,

erstmal danke für deine Mühen! Leider kann ich das Programm nicht so gut verwenden :( Ich möchte ja den stoch. Prozess m mal modellieren, um den EV des selbigen zu errechnen! Ich probiere gleich nochmal den Matlab Code aus und melde mich dann wieder...

Vielleicht hab ich mich auch unverständlich ausgedrückt, deswegen nochmal die Idee:

es muss zunächst der stoch. Bernoulliprozess konstruiert werden. Dieser sieht wie folgt aus: Eine Lotterie wird n mal wiederholt. Die Lotterie selbst ist eine Bernoullilotterie. Mit p für Erfolg x1 Auszahlung bei Erfolg und 1-p Misserfolg und x2 Auszahlung bei Misserfolg. Ausserdem braucht man ein bestimmtes Budget. Wenn dieses aufgebraucht ist, dann ist man broke und kann das Spiel nicht mehr weiterspielen. Zum Beispiel könnte man ein Spiel nehmen welches mit 0.6 eine Auszahlung von 10 gibt und 0.4 einen Verlust von -10. Bei einem Budget von 10 Euro kann es dann vorkommen, dass man schnell broke geht und in den Folgeperioden nicht diese Lotterie spielen kann. Es entgeht einem somit positiver EV. Wenn man nun die gleiche Lotterie spielt mit Auszahlung von 5 bei Erfolg und -5 bei Misserfolg, dann geht man wahrscheinlichkeitstheoretisch nicht so schnell broke und kann die Lotterie im Schnitt länger spielen. Allerdings hat die Lotterie an sich nen geringeren EV.

Ok was nun simuliert werden soll ist folgendes: Wenn man Lotterie 1 einmal spielt, dann kommt zB heraus, dass man 0 bekommt, zB weil man nach dem 1. Versuch broke geht. Dann soll das Spiel wieder simuliert werden und man gewinnt zB 50. Dann wieder und wieder. Es ergibt sich eine Folge von Gewinnen für jeden einzelnen stoch.Prozess, zB dann {0,50,0,100,80}. Die Wiederholung der stoch. Prozesse sei m. In diesem Fall wäre m=5. Nun will ich m gegen unendlich laufen lassen und den Mittelwert der Gewinne errechnet haben. Dieser Mittelwert soll als Schätzer des Erwartungswertes des stoch. Prozesses dienen. In unserem Fall wäre der Schätzer für den Erwartungswert=(0+50+0+100+80)/5 = 46. Am Besten wäre es auch noch, wenn man die Wahrscheinlichkeit broke zu gehen simulieren würde. In diesem Fall wäre das als Schätzer P(broke)=2/5=0,4 (Zwei von 5 Malen ist man broke gegangen). Diese Schätzer sind nicht sehr gut. Also muss m gegen unendlich laufen und man würde gemäß dem Gesetz der großen Zahlen ungefähr die "wahren" Werte bekommen. Im Prinzip ists nichts anderes als das was der Equilator von PS simuliert, nur mit anderen Vorraussetzungen.

Ich hoffe jetzt ists etwas klarer geworden!

So ich habe nun Matlab... Habe den Code von sarc (Danke schonmal dafür) eingegeben. Allerdings erhalte ich folgende Fehlermeldung:

??? function res = sim_lotto(0.6,100,1000,10,10,-10) | Error: Function definitions are not permitted in this context.

Keine Ahnung was ich falsch mache, ist halt auch das erste Mal das ich mit Matlab arbeite!


TaZz
Beigetreten: 27.01.2006

Original von MrMatze111
So ich habe nun Matlab... Habe den Code von sarc (Danke schonmal dafür) eingegeben. Allerdings erhalte ich folgende Fehlermeldung:

??? function res = sim_lotto(0.6,100,1000,10,10,-10) | Error: Function definitions are not permitted in this context.

Keine Ahnung was ich falsch mache, ist halt auch das erste Mal das ich mit Matlab arbeite!

du rufst es falsch auf...
mach ein neues file, kopier den code darein und speicher es unter den namen "sim_lotto.m" in einem ordner. jetzt musst du noch den current folder von MATLAB auf den ordner setzen, in dem du den code abgespeichert hat, ansonsten kennt er die funktio nicht.
danach einfach unten im command window die funktion aufrufen mit "sim_lotto(0.6,100,1000,10,10,-10)".


Original von sarc
Wenn du ne beliebige Programmiersprache beherrscht hast das in ungefähr 10 Minuten selber geschrieben. Wenn nicht kommt noch n Tag dazu, um die Grundzüge einer Scriptsprache zu erlernen... ;)

naja 1 Tag ist schon knapp. bin jetzt seit ein paar Tagen am Hamster programmieren und mach noch son videokurs für java programming. Gleichzeitig bin ich noch mit dem matlabklon Octave am werkeln. Und ziehe mir momentan so ziemlich alles von dem typen hier rein.
http://www.youtube.com/joernloviscach#p/c/B7E22BB1E87E8203/2/q37LZgTuGGs
Also so aus nem stegreif könnt ich es glaub ich trotzdem nicht programmieren.

aber kann nur jedem noob mal empfehlen selber ins Programmieren reinzuschnüffeln. Ich finds irgendwie nur genial und macht ultraspaß und die absoluten Grundlagen sind wirklich nicht so schwer.

edit:

Original von TaZz
jetzt musst du noch den current folder von MATLAB auf den ordner setzen, in dem du den code abgespeichert hat, ansonsten kennt er die funktio nicht.

!!!###
Tja hab n paar h gebraucht bis ich das herausgefunden habe :f_biggrin:


du rufst es falsch auf... mach ein neues file, kopier den code darein und speicher es unter den namen "sim_lotto.m" in einem ordner. jetzt musst du noch den current folder von MATLAB auf den ordner setzen, in dem du den code abgespeichert hat, ansonsten kennt er die funktio nicht. danach einfach unten im command window die funktion aufrufen mit "sim_lotto(0.6,100,1000,10,10,-10)".

auch wenn ich es so mache gibts nen Fehler... Er meckert :

??? Undefined function or method 'sim_lotto' for input arguments of type 'double'.


TaZz
Beigetreten: 27.01.2006

Original von MrMatze111

du rufst es falsch auf... mach ein neues file, kopier den code darein und speicher es unter den namen "sim_lotto.m" in einem ordner. jetzt musst du noch den current folder von MATLAB auf den ordner setzen, in dem du den code abgespeichert hat, ansonsten kennt er die funktio nicht. danach einfach unten im command window die funktion aufrufen mit "sim_lotto(0.6,100,1000,10,10,-10)".

auch wenn ich es so mache gibts nen Fehler... Er meckert :

??? Undefined function or method 'sim_lotto' for input arguments of type 'double'.

ja, jetzt hast du wie gesagt das problem, dass er die funktion nicht kennt. du scheinst nicht im richtigen ordner zu sein...
alternativ kannst du auch den ordner hinzufügen, so dass er ihn defaultmäßig auch durchsucht. http://www.mathworks.com/help/techdoc/ref/addpath.html


Ok jetzt klappts...

Allerdings scheint irgendwas noch nicht ganz zu passen. Wenn ich probeweise das Spiel n=1, p=0.6, m=10000, B=10, win=10, loss=-10 eingebe, dann sollte sich einfach nur das Einperiodenspiel ergeben. Über ein großes m sollte dann auch der Erwartungswert approximiert werden können... Aber das klappt nicht. Der Erwartungswert des Spieles ist E(X)=2, die Simulation gibt mir aber als geschätzten Wert E(X)=12. Liegt das daran, dass der Erwartungswert von 2 automatisch auf das Anfangsbudget von 10 draufgerechnet wird? Wahrscheinlich ist das der Fall oder? Hätte es gerne unabhängig vom Budget :O

Ansonsten bräucht ich noch die Approximation der Wahrscheinlöichkeit broke zu gehen :f_cool:

sarc schick mir schonmal deinen Username bei Stars, dann kriegste schonmal die $$$. Danke an alle anderen für die Hilfe!


TaZz
Beigetreten: 27.01.2006

Original von MrMatze111
Ok jetzt klappts...

Allerdings scheint irgendwas noch nicht ganz zu passen. Wenn ich probeweise das Spiel n=1, p=0.6, m=10000, B=10, win=10, loss=-10 eingebe, dann sollte sich einfach nur das Einperiodenspiel ergeben. Über ein großes m sollte dann auch der Erwartungswert approximiert werden können... Aber das klappt nicht. Der Erwartungswert des Spieles ist E(X)=2, die Simulation gibt mir aber als geschätzten Wert E(X)=12. Liegt das daran, dass der Erwartungswert von 2 automatisch auf das Anfangsbudget von 10 draufgerechnet wird? Wahrscheinlich ist das der Fall oder? Hätte es gerne unabhängig vom Budget :O

Ansonsten bräucht ich noch die Approximation der Wahrscheinlöichkeit broke zu gehen :f_cool:

sarc schick mir schonmal deinen Username bei Stars, dann kriegste schonmal die $$$. Danke an alle anderen für die Hilfe!

hab den code von sarc nur schnell um die sachen erweitert/verbessert, die du genannt hast. hab den thread nur oberflächlich verfolgt (die ganzen langen posts nicht gelesen... ;)), daher keine gewähr, dass es auch das ist, was du willst... aber glaub schon... kannst ja testen, ob es hinkommt...

function res = sim_lotto(p,n,m,B,win,loss)

res.EV = 0;
brokeCounter = 0;
for im = 1:m
    B_akt = B;
    for in = 1:n
        if rand <= p
            B_akt = B_akt + win;
        else
            B_akt = B_akt + loss;
        end
        if B_akt <= 0
            B_akt = 0; 
            brokeCounter = brokeCounter + 1;
            break
        end
        %if B_akt < abs(loss), break, end
    end
    res.EV = res.EV + B_akt - B;
end
res.EV = res.EV / m;
res.p_Broke = brokeCounter / m;

end

sarc
Beigetreten: 06.06.2008

Danke für die Ergänzung. Richtig, meine Variante rechnet das ursprüngliche Budget noch mit drauf.

Btw, du musst nicht immer ins current Folder wechseln, wenn du den Pfad zum Matlab PATH hinzufügst (geht unter File->Set Path oder so ähnlich.

TaZz hatte btw gefühlt mehr Aufwand mit dem Support als ich mit dem Programmieren - meine 10 Minuten Schätzung war da sogar sehr zurückhaltend... ;)

Darum würd ich sagen, ship einfach ihm und mir jeweils $5, is denk ich fairer. Wenn er nix haben will nehm ichs natürlich auch komplett... ;) Starsnick: "Dahl Lambert", ohne " aber mit Leerzeichen.


Ja das is fair, jeder $5! Wenn ich heute Abend nach Hause komme dann shippe ich es! Danke für eure Hilfe... Schau mir den neuen Code mal an!

Klasse! Das ist genau das was ich brauche!!! Tausend Dank!

@ Tazz: Bitte schick mir mal deinen Nick bitte!


TaZz
Beigetreten: 27.01.2006

ach, von mir aus kann die kohle an bergi gehen... ich glaube, der hatte den meisten aufwand...
wenn der sich nicht mehr meldet, schreib ich dir ne pn... ;)


sarc
Beigetreten: 06.06.2008

Wir können das auch verflippen... Dann haben wenigstens alle für n paar Sekunden Spaß...


Also mir ists wayne! Einigt euch wer die zweiten 5$ haben will... Dahl lambert sollte gleich sein Geld empfangen haben!

Ach ja, ich wollte das ganze als Aufhänger für einen möglichen Ansatz für eien Masterarbeit... Der Prof fands aber scheiße :) Habt ihr vllt eine Idee, wie man das vllt theoretischer fundieren kann?


snyda54
Beigetreten: 15.12.2010

Original von MrMatze111
Wow hier ist viel passiert, werde mir gleich mal eure Tools ansehen! Melde mich dann wieder...

broke ist, wenn B<=0 ist!

Eigentlich ist man broke wenn B<Mindesbuyin ist, sonst könnte man ja leicht negativ werden.

Nur so als Tipp.


sarc
Beigetreten: 06.06.2008

Will dann nur mal eben den Empfang von $5 bestätigen, besten Dank, jederzeit wieder und so... ;)

Was dein Problem angeht: Masterarbeit? Sorry, aber du suchst da ein Thema, mit dem du dich vernünftig wissenschaftlich über ungefähr n halbes Jahr beschäftigen kannst. Ich weiß nicht, was du dir da vorgestellt hast, aber so viel gibt da dein Thema wirklich nicht her... Hast du schon mal mit dem Prof gesprochen, in welcher Richtung er sich Arbeiten vorstellen könnte?


nun wenn sich keiner meldet, dann gibts nochmal nen 5er für sarc :f_cool: Btw kennt sich einer von euch Heinis zufällig auch mit simulieren in Excel aus? Beispiel: Ich simuliere derzeit eine Zufallszahl und schreibe sie dann manuel nieder, drücke dann F9 (zur neuen Berechnung) und schreibe den nächsten Wert nieder. Total stumpf Ich würde gerne einen Befehl haben, der sagt: "Drücke F9 nehme den Wert aus Zelle X (also die Zelle in der die Zufallszahl niedergeschrieben wird) und schreibe ihn in ein neues Tabellenblat in A1. Und das soll dann Y mal gemacht werden". Is wahrscheinlich total billig, aber der Vollnoob kriegts nicht hin :)


sarc
Beigetreten: 06.06.2008

Dass du dir einfach n Haufen Zufallszahlen erzeugen kannst, indem du das Feld rechts unten anklickst und nach unten ziehst weißt du vermutlich, oder? Wahrscheinlich kannst den Rest dann auch so anpassen, dass er einfach diese Zahlen nimmt.

Ansonsten geht das einfach über n Makro. Selbst ohne Ahnung davon hab ich das spontan hingekriegt: Du wählst einfach "Makro aufzeichnen aus", machst deine Arbeitsschritte, Aufzeichnung beenden und fertig. Dann kannst per selbst gewählter Tastenkombination diese Aufgabe durchführen. Nur musst dann noch Y mal die Tastenkombination drücken, oder du findest raus, wie man um das Makro noch ne Schleife baut.


Hey sarc!

Danke für deine fixe Antwort schonmal! Hab das Problem vereinfachend dargestellt Also es ist so, dass ich circa 10 ZZ habe. Aus denen errechnet sich automatisch gemäß einer bestimmten Formel ein bestimmter Wert. Dieser Wert liegt auf einer bestimmten Zelle. Wenn ich nun F9 drücke ändert sich dieser Wert automatisch. Wenn ich nun die Zelle dupliziere, dann hab ich einfach den Wert 2 mal stehen, was witzlos ist!

Dass du dir einfach n Haufen Zufallszahlen erzeugen kannst, indem du das Feld rechts unten anklickst und nach unten ziehst weißt du vermutlich, oder? Wahrscheinlich kannst den Rest dann auch so anpassen, dass er einfach diese Zahlen nimmt.

Jo das weiß ich

Ansonsten geht das einfach über n Makro. Selbst ohne Ahnung davon hab ich das spontan hingekriegt: Du wählst einfach "Makro aufzeichnen aus", machst deine Arbeitsschritte, Aufzeichnung beenden und fertig

Das hört sich gut an, werds gleich mal testen!