WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Rulette Martingal Spiel - Hilfe

 

Philipp.K.

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.06.2017, 15:05     Titel: Rulette Martingal Spiel - Hilfe
  Antworten mit Zitat      
Hallo liebe Community,
Ich bin ein totaler Neuling was Matlab angeht und verzweifel gerade. Ich soll die Martingale Strategie Programmieren und dachte mir, dass ich die Funktion erst mal mit "einer" Roulette Umdrehung probiere. Bisher habe ich folgenden Code:

Code:

function Kapital = roulette1mal (Startkap)
%% Kapital soll den Endwert zum Schluss der roulette-Drehung anzeigen
 Kapital = Gewinn
 
 if rem(randi(37),2)==0 %% bei einem Verlust wird vom Startkapital 1€ abgezogen
   Gewinn = Startkap -1
   
 else     %% bei einem Gewinn wird zu 1€ dazu gerechnet
     Gewinn = Startkap + 1
 end
end
 


Matlab zeigt mir ständig die Fehlermeldung, dass die variable Gewinn undefiniert ist ("undefined") allerdings definiere ich doch den Gewinn im if-elde-Teil oder nicht?
bitte um Hilfe, bin echt am verzweifeln.
Danke an alle Hilfen und Antworten im voraus.


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.06.2017, 15:11     Titel:
  Antworten mit Zitat      
Hallo,

du versuchst aber, Gewinn zu verwenden, bevor es belegt wird.
Wenn du die Zeile Kapital = Gewinn unter den if-Teil verschiebst, würde es zumindest funktionieren. Ob das Ergebnis das gewünschte ist, musst du beurteilen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Philipp.K.

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.06.2017, 15:36     Titel:
  Antworten mit Zitat      
Ja das funktioniert Smile super. Habe das jetzt weiter gecoded mit einer Schleife, indem mir die Funktionion n-Spiele ausgibt. Wie sollte ich vorgehen, wenn ich jetzt allerdings keine n-Spiele angezeigt bekommen möchte, sondern n-Züge. Bedeutet zum Beispiel, wie Sieht mein Endwert/Gewinn nach 40 Zügen aus, in dem die Gewinne und Verluste aufgerechnet wurden? Bisher habe ich folgenden Code:

Code:

function Kapital = roulette1mal (Startkap,n)
 
for x=1:n
 if rem(randi(37),2)==0
     
   Gewinn = Startkap -1
   Kapital = Gewinn
   
 else
     Gewinn = Startkap + 1
 end
end
 
end
 
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.06.2017, 15:45     Titel:
  Antworten mit Zitat      
Hallo,

Code:
function Kapital = roulette1mal (Startkap,n)
 
Kapital = Startkapital;
for x=1:n
 if rem(randi(37),2)==0
     
   Kapital = Kapital - 1;
   
 else
     Kapital = Kapital + 1
 end
end
end
 


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Philipp.K.

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.06.2017, 22:40     Titel:
  Antworten mit Zitat      
Dank dir Harald, dass war sehr hilfreich Smile
Ich habe den Code jetzt ein wenig weiter geschrieben, indem ich eine zweite Schleife eingebaut habe, welche mich noch die Anzahl der Spiele bestimmen lässt und alle Zuege "eines" Spiels in Form eines Spaltenvektors ausgibt (beim Schluss mit disp(Gewinn)). Jetzt stoß ich aber an das Problem, dass der Spieler nach jedem verlorenen Spiel seinen Einsatz verdoppelt muss. Bisher sieht das ganze wie folgt aus:

Code:

function Kapital = roulette1mal (Startkap,n)
for y=1:1                  
Kapital = Startkap;    
Einsatz = 1;              
for x=1:n                  
   
    r=randi(37);          
    r = r - 1;                                                  
    %? NeuEinsatz = Einsatz;
   
 if rem(r,2)==0              
   Kapital = Kapital - Einsatz;
   %? NeuEinsatz = NeuEinsatz*2;
   
 else
     Kapital = Kapital + Einsatz;
     %? NeuEinsatz = Einsatz;

 end
   Gewinn = Kapital;
   disp(Gewinn)        

end
end
end

 


der Einsatz wird nun auf den Wert 2 verändert, allerdings weder bei verlieren vom Kapital abgezogen noch weiter verdoppelt, wenn der Spieler ein weiteres mal verliert :/ also der Spieler verliert immer nur einen 1€ anstatt 2€, 4€, 8€ usw. bei mehrfachem verlieren.
Schon mal großen Dank, bisher war jede Antwort wirklich sehr hilfreich Smile
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.06.2017, 08:44     Titel:
  Antworten mit Zitat      
Hallo,

du verwendest NeuEinsatz ja nirgends.

Am einfachsten ist
Code:
Einsatz = 2*Einsatz;

an die Stelle, wo verdoppelt werden soll.

Ggf. dann noch überprüfen, ob nicht irgendwann das Geld ausgeht - oder darf der Spieler sich auch "verschulden"?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Philipp.K.

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.06.2017, 10:19     Titel:
  Antworten mit Zitat      
Vielen vielen Dank! Ich dachte, dadurch dass ich in der 2ten "for"-Schleife "NeuEinsatz = Einsatz" definiere, hätte ich das gemacht, aber du hast recht, irgendwie wurde darauf kein Bezug genommen.
Der Spieler sollte sich nicht Verschulden dürfen, dass habe ich gar nicht bedacht. Habe das nun mit einem zweiten if-Befehl lösen können. Zumindest wird die Rechnung sobald das Kapital ins minus stürzt nun damit abgebrochen.
Dein Vorschlag (Einsatz = 2*Einsatz) habe ich natürlich sofort ausprobiert und nun verdoppelt er das Kapital, sobald er verliert. Funktioniert bisher alles Super Smile

Nun will ich zum Schluss den durchschnittlichen Gewinn von mehreren Spielen errechnen. Ich habe es wie folgt mit 3 Spielen, mit einem mean-Befehl in den letzten beiden end-Befehlen probiert:

Code:

function Kapital = roulette1mal (Startkap,n)

for y=1:3
    disp(['Spiel ' num2str(y) ' :'])
    Kapital = Startkap;    
    Einsatz = 1;            
for x=1:n              
   
    r=randi(37);        
    r = r - 1;          
   
 if rem(r,2)==0         t
     
   Kapital = Kapital - Einsatz;
   Einsatz = Einsatz*2;
   
 else
     Kapital = Kapital + Einsatz;
     Einsatz = 1;
 end
 
 if Kapital <= 0
     break
 end
   disp(['Tom´s Kapital im Zug ' num2str(x) ' lautet ' num2str(Kapital)])
 
end
Mittel = mean(Kapital)
end
MittelGesamt = mean(Mittel)
end
 


Problem, leider zeigt mir Matlab nicht den durchschnittlichen Gewinn aller Spiele im letzten Zug an, sondern zeigt mir lediglich den Durschnitt des davorigen Spiels :/ Irgendwie hängt es gerade ein wenig bei mir.
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.06.2017, 10:51     Titel:
  Antworten mit Zitat      
Hallo,

Kapital ist immer nur eine Zahl, die überschrieben wird. Mittelwertbildung bringt also nichts.

Besser wäre:
Code:
Endstand = zeros(1, 3); % außerhalb der Schleife vorbelegen


Code:
Endstand(y) = Kapital; % Endstand in der Schleife abspeichern


Dann kannst du nach der Schleife
Code:

bestimmen.
[/code]
Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Philipp.K.
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 06.06.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.06.2017, 11:20     Titel:
  Antworten mit Zitat      
Klasse das funktioniert Smile Vielen lieben Dank Smile
mal rein aus Interesse, ist es eigentlich auch moeglich, dass mir nur das erste Spiel, also der erste Durchgang mit dem disp-Befehl aus der Schleife angezeigt wird, aber trotzdem ein Mittelwert aus 10 Spielen berechnet wird?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.06.2017, 11:43     Titel:
  Antworten mit Zitat      
Hallo,

das kannst du über eine weitere if-Abfrage regeln.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.