Programmons un peu : la martingale de St-Petersbourg

Ici, on fait dans le petit, le LCD qui déchire sa race, on y cause même calculatrices quand on est en manque !

Modérateur : Politburo

Répondre
caloubugs
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 434
Enregistré le : 05 juin 2014 22:23
Localisation : Dans le Gâtinais avec les abeilles, près de Fontainebleau

Programmons un peu : la martingale de St-Petersbourg

Message par caloubugs »

Tombé là-dessus un peu par hasard, c'est la simulation de la mise en place d'une routine à la roulette anglaise au casino.

En plus, ça marche pas mal sur mes premières simulations (on peut gagner un peu de sous), si on sait s'arrêter.

Voilà le topo : on mise sur un élément du couple impair/pair, rouge/noir ou passe/manque, qui permet l'alternative

suivante à partir d'une mise M de départ :
- Si le choix sort, on gagne 2 fois la mise (on récupère en fait sa mise et on en gagne une autre).
- Sinon on pert sa mise.

La martingale est alors la suivante :
- si on a perdu avec une mise M, on mise alors avec une valeur 2 M.
- si on a gagné, on repart avec la mise minimale autorisée.

Du coup, si on gagne après une perte : on récupère 4M après avoir misé M (et perdu) puis 2M (et gagné). Résultat final, on a gagné M.
Si on perd à nouveau, on remet 4M en mise et ainsi de suite.

Et après n-1 pertes et un gain au coup n, on a misé (1+2+....+2^(n-1))M=((2^n)-1)M et gagné (2^n)M. On a donc toujours notre gain de M.

L'espérance mathématique est positive dans le cas d'un tirage équilibré en probabilité (et si on a beaucoup de fonds au départ car après 20 coups on en est à plus de 1 million de mise initiale) : ce qui n'est pas le cas au casino puisqu'il y a 37 cases sur la roulette (18 paires, 18 impaires et le 0 qui fait gagner la banque à tous les coups). La chance de gain à chaque coup est donc de 18/37. Autre point : il y a un plafond de mise autorisé, et si on l'atteint en ayant perdu, on perd sa mise et on repart de la mise minimale (ouille...).

Dans les simulations, systématiquement, on perd tout, mais en ayant eu quasi systématiquement un pic au-dessus de l'apport initial à un moment donné.

Le premier objectif ici est donc à partir d'une "fortune" de départ (l'apport disponible), d'un plafond autorisé, d'une mise minimale de simuler les différents coups et d'obtenir ensuite le nombre de coups pour tout perdre (ce qui arrivera normalement), la fortune maximale qui aura été atteinte.

Le second est pourquoi pas, de faire plusieurs simulations en chaine pour calculer moyennes et minima/maxima atteints sur le nombre de tours et fortunes possédées.

Proposition pour Casio Z-1GR:

Le sous programme de simulation du premier objectif :

Code : Tout sélectionner

210 IF fm<f THEN fm=f  //calcul de la fortune maximale
220 m=ms:f=f-m         //mise initiale (ms est saisie par l'utilisateur)
230 IF f<0 THEN 260    //sommes-nous ruiné ?
240 t=t+1:r=INT(RAN#*37):IF r MOD 2 THEN f=f+m*2:GOTO210  //Calcul du tirage et situation si on gagne
250 m=m*2:IF m>f or m>p THEN 220 ELSE f=f-m:GOTO240  //si on perd, on double la mise, sauf si on ne peut plus
260 PRINT "n:";i;TIMER/10;"t:";t;"f:";fm:RETURN //petit affichage du résultat (n° de la simulation, le temps écoulé, le nombre de coups et la fortune maxi atteinte).
Le programme principal

Code : Tout sélectionner

10 INPUT"Fortune";f1:INPUT"Plafond";p:INPUT"mise";ms:INPUT"tours:";n:TIMER=0:t1=0:t2=0:m2=0:c=0:mf=0:mg=0:g=0
//prise des paramètres et initialisation des variables
20 FOR i=1 TO n:t=0:f=f1:fm=0:GOSUB220:m2=m2+t:c=c+t*t:g=g+fm:IF t>t1 THEN t1=t
// on lance une simulation (il y en a n) et on cumule les résultats (m2 somme des coups, g somme des fortunes max)
21 IF t2=0 THEN t2=t ELSE IF t<t2 THEN t2=t
// t1 c'est le nombre max de coups, t2 le nombre min.
22 IF mf<fm THEN mf=fm //fortune max
23 IF mg=0 THEN mg=fm ELSE IF fm<mg THEN mg=fm //fortune min (c'est le minimum des fortunes max des différentes simul)
25 NEXT i
30 m1=m2/n:PRINT "Cps moy";INT(m1);"EcartT";INT(SQR(c/n-m1*m1)):PRINT"Cps>";t1;"Cps<";t2:
   PRINT TIMER/10;"s f>";mf;"f<";mg;"f";INT(g/n)
// affichage des résultats : Coups moyens pour perdre son apport et Ecart Type
//                           Nombre max de coups et nombre min
//                           Tps écoulé et Fortune max, min et moyenne.
40 END
Exemple :
Fortune 50 (on part petit), Plafond 40, mise 1 (j'ai un casino qui prend une mise mini de 1€), tours 50 (on va donc faire 50 simulations complètes) et zou, on regarde défiler les résultats de simulation (bon, ça va pas super vite, y'en a pour une bonne dizaine de minutes).

Petite approximation de l'espérance mathématique pendant que ça tourne : on a (19/37)^6 chances de perdre 63€ (perte moyenne donc de 1,16€) et 1-(19/37)^6 chances de gagner 1 € (donc un gain moyen de 0,98 €). D'où une perte globale de 0,18€ par tour. Ce qui normalement doit nous ramener les 50€ de mise initiale à 0 en environ 280 coups.

Résultats : Coups moyens joués : 360 (écart type de 503, il y a des valeurs extrêmes très éloignées)
Nombre max de coups 2990 (!) min de 33 (il y a une une simulation avec 2990 lancers de roulette !)
Temps écoulé : 877,2 s (près de 15 mn), fortune max atteinte 423 €, min 24 € (il y a eu des simultations avec des pertes immédiates), moyenne de 109 € (donc on peut bien gagner de l'argent...)

Bon amusement pour ceux qui veulent approfondir ces réalisations de simulation.

Par contre, je ne suis pas responsable de pertes réelles au casino !
RetroGeek, mais pas que...
HP : 15C, 41CV, 48GX, 71B, 75C Canon X-07 Sharp PC 1403H, PC1500A, PC1600, PC-G850V Texas : CC40, 66, 74, 95, 92 Casio : PB-700, PB-1000, Z-1GR Psion 5mx, mais pas que...
Avatar du membre
Marge
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6189
Enregistré le : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Re: Programmons un peu : la martingale de St-Petersbourg

Message par Marge »

J'avais publié un programme de ce genre pour la martingale pour HP-29c, mais avec le 0, je n'obtenais pas ces résultats - qui étaient pour moi négatifs. J'ai probablement dû rater une marche, ou ici, ou là-bas... :roll:
3 hommes, 3 demis, un 3a... Magnéto, Serge !

Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67
__: A L I E N .

« Boris », c'était juste Maurice enrhumé.
Avatar du membre
Marge
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6189
Enregistré le : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Re: Programmons un peu : la martingale de St-Petersbourg

Message par Marge »

C'était .
3 hommes, 3 demis, un 3a... Magnéto, Serge !

Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67
__: A L I E N .

« Boris », c'était juste Maurice enrhumé.
caloubugs
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 434
Enregistré le : 05 juin 2014 22:23
Localisation : Dans le Gâtinais avec les abeilles, près de Fontainebleau

Re: Programmons un peu : la martingale de St-Petersbourg

Message par caloubugs »

Marge a écrit :C'était .
Merci pour ton lien Marge !

J'ai fait un programme en Python et fait tourner sur des séries de 10 000 simulations avec cette fois-ci deux limites :
- un nombre max de tours de roulette (j'ai des situations de retour à 0 après plusieurs dizaines de milliers de tours, pas réaliste)
- une limite d'arrêt (comme dans ton programme) de gains.

Par exemple si on vient avec 50 euros et qu'on s'arrête à 70 ou après 100 tours (ça fait déjà du temps passé au casino), tout cela avec une mise de 1 euro (et un plafond à 40) : on arrive à 28% des cas où on perd de l'argent et 72% où on gagne. Le gain moyen in fine est de 3 euros. Donc résultat des courses : des soirées où on gagne bien peu.

C'est positif malgré tout, mais c'est du gagne très petit...
RetroGeek, mais pas que...
HP : 15C, 41CV, 48GX, 71B, 75C Canon X-07 Sharp PC 1403H, PC1500A, PC1600, PC-G850V Texas : CC40, 66, 74, 95, 92 Casio : PB-700, PB-1000, Z-1GR Psion 5mx, mais pas que...
Répondre

Retourner vers « Tous les Pockets »