dimanche 2 février 2020

La théorie des langages.

A force de bricoler et d'essayer d'améliorer des partie de logicielle que j'ai faites, je suis tombé sur Flex et Bison puis sur des référence à la théorie des langages formel. 
J'ai acheté le boucain (introduction to formal languages Révéz) mais j'ai des difficultés:
-- j'imagine des choses qui ne sont pas ce qui est présenté dans le live et donc je ne comprends pas ce que je lis.
-- je fais des digressions constamment dans différent domaines y compris en réalisant un générateur de langage utilisant une grammaire générative. 

Donc je n'avance pas et ce n'est pas seulement un problème de travail assidu. 

Des managers  qui m'ont observé depuis le  début de ma carrière on constaté un certain manque d'ambition mais on pourrait parfois émettre l'hypothèse d'une ambition démesurée qui peut aisément être prise pour de l'inconséquence, ou de la folie voir de la bêtise.

Vous avez déjà été prévenue sur les risques que je prends dans ce Blog. Ils sont démesurés par rapport à mes connaissances des sujets abordés.

Donc la théorie des langages est importante car pour moi elle chapeaute les autres théories.
Pour bien comprendre la manière de penser d'un étranger il est préférable de bien connaître sa langue, pas seulement savoir parler couramment mais connaître sa structure. Au début on est incapable de reproduire les sons aussi par ce qu'on est incapable de les reconnaître, enfin....la raison est probablement plus complexe.

Il est donc possible que les obstacles rencontrés dans la recherche fondamentale en physique soit du à l'absence d'un langage adapté. L'univers étant lui même un langage que nous essayons de traduire dans un langage compréhensible par nous. Mais quel langage chercher? La théorie des langages et les problèmes connus de traduction pourraient-ils  nous aider en essayant de s'orienter vers de nouvelle structures? Ces langages seront ils encore manipulés directement par des cerveaux humains ou prises en charge presque totalement à l'aide des ordinateurs?  On pourrait même se demander si les nouveaux langages qui vont être utilisés avec les ordinateur quantiques ne vont pas donner naissance à de nouvelles théories mathématiques. 
J'ajoute au risque de me répéter partiellement des questions sur la modélisation et les langages.
-- Quel est le support pour un langage? Pour être le moins spécifique possible on pourrait dire que c'est une masse d'information quelconque. Mais déjà mettre cette information sur un support informatique pour pouvoir l'analyser constitue une traduction et donc une perte d'information. 
-- Comment modéliser, c.a.d trouver une structure (en établissant des relations reliant des informations). Une machine de Turing génère cette  masse d'information à partir de règle. Mais c'est seulement théorique car on a du simplifier les règles pour pour pouvoir générer de manière pratique le langage à cause du temps démesuré  que demande dans certains cas cette machine. Même pour générer un langage finis. Il faut donc trouver les moyen d'améliorer la machine de Turing. On pourrait essayer de les utiliser pour générer une masse d'information pour les comparer aux informations collectées. Là encore on se trouvera toujours confronté à des problèmes de traduction. Dans certains cas les problèmes abordés recoupent des problèmes de cryptologie et même de compression de donnée . Une machine de Turing permet d'exprimer par exemple un langage infinis en quelques règles. 

Donc on a une masse d'information qui parait chaotique et dont on ne sait rien. Rechercher un modèle  ressemble à du décryptage qui peut être partiel. Pour cette masse d'information on pourrait essayer de définir des caractéristiques générales  compatibles avec certain type de modèles. Générer une masse de donné à partir du modèle (même partielle) et la comparer à la masse d'information dont ont cherche à percer le sens.

Il faudrait donc faire des concours demandant de trouver le modèle le plus concis possible permettant de générer une masse quelconque de donnée. En commençant humblement avec des petits volumes de données.

continuons l'exploration:
dois-je considérer tout cryptage  d'une masse de donnée comme étant en fait le même langage? Le cryptage étant censé inclure tout procédé réversible de  transformation d'une masse de donné sans en changer sa taille. On devrait donc aussi inclure la compression /expansion sans perte de donnée et peut-être les permutations  réversibles. Mais alors si toutes les permutations sont réversibles il n'y a qu'un seul langage fondamental. Et  tous les langages  sont dérivés de ce  langage fondamental. Un langage peut-il être infinis? A-t-il une taille? Est-il compressible? Existe-t-il une forme de compression ultime? LA compression du langage permet-elle de trouver plus facilement son modèle, sa structure? Le modèle parfait canonique du langage est-il la forme la plus compressée du langage?

Mais si il existe une forme de base du langage que l'on peut obtenir à partir de la compression ou de la permutation ou même du cryptage simple alors la manière de compresser ou de permuter ou de crypter  doit être inclus dans ce qui définit le  langage c'est à dire dans la masse de donnée que l'on analyse pour que ce langage soit vraiment définit par elle. 

Je trouve aussi intéressant de voir les ponts possibles entre compression ,permutation et cryptage.
Puis je obtenir tous les cryptages  possibles en permutant et vie versa? Puis-je obtenir une meilleur compression en cryptant ou en permutant?

Anjelica? C'est encore toi? 

Mais je suis obligé d'arrêter, il faut quitter le mode recherche pour revenir en mode apprentissage: limiter les rêveries, fixer des horaires, quantifier le nombre de pages lues.

Pour moi la recherche nécessite une part d'incompétence:  vous êtes obligé à un moment donné d'utiliser  des domaines de connaissance qui vous sont étrangers . C'est pour cette raison qu'il faut des équipes pluridisciplinaires. 

Je  suis une grosse équipe de gens très incompétents à moi tout seul.... plus  Google.

Ici une tentative de développement d'un  générateur de langage (tout type  Chomsky 0-3)
Cela n'est pas complètement testé donc à vos risques et périls!

A python pgm: langage generator from grammar rules

The test suite for this programm

It works with  grammars that generates  words with infinit length.
It just cut the derivation when the length is higher than a chosen limit.
But it is not always possible to predict the length of the finnl word when rules would shrink a word like aPb-->ac .
That kind of rules gives normally a warning messages and we might not see all words having a length below the chosen limit in the final result.

Before publishing it I received comments that  the pgm wasn't working. They can say it officially now!

This pgm might be usefull to generate special kind of permutation like in the exemple given at the end of the source: generating L={P|Na(P)=Nb(P}  Vn={S,A,B} Vt={a,b}. I am still searching a way to make a test suit and generating an equivalent language with itertools.

A lot of interesting problems arise simply by trying to resolve practical problems like building a subset of the language and limiting the length of the words.

Some vague idees:
-- Structure of a language: we could compare language just by comparing the general form of the tree we explore during the derivation (abstraction of the alphabet itself).
-- how to add  shrinking rules  that will collapse parts of the language.
-- how to find a generative grammar from a preexisting language
-- how to optimize a generative grammar (by having less rules or more efficient rules during the derivation).
-- is it possible to have a canonical form for a generative grammar.

The general idee would  be to find new langages that could by their structure expand the possibilties of  existing langages.

After having tested some generative grammar with my program I had to make some modifications.
One of them was to let the program run even if I encounter situations where there are still non terminal characters but no rule can apply.
This is the case of this grammar
    F=[("S","a"),       ("S","CD"),       ("C","ACB"),       ("C","AB"),       ("AB","aBA"),      ("Aa","aA"),       ("Ba","aB"),       ("AD","Da"),       ("BD","Ea"),       ("BE","Ea"),       ("E","a")]
 generating L={ a^n² |n in 1,2,3,....}

This grammar generates (if I made no mistakes) a lot of non-derivable words. A lot more than the word in L: I had to wait hours before seeing the  first words appearing.

A way to recognize this kind of grammar would appear be more useful  to me than the Chomsky types. But I am a programmer not a linguist.
There is also perhaps a way to determine some rules that have no chance to reappear during derivation. Again a way to classify the grammar and the language.
How to transform this grammar to a more efficient one? When is it possible?
They are so many possibilities, but computers could help.

I just heard (hallucinations or electronic harassment): "He is half serious".

Making such assumptions about fondamental research is easy: I mean, every-body  should be aware of concepts limitation induced by languages.

Knowing quite nothing about quantum mechanic I can't  try to detect when a failure is due to langage limitation (wrong language) or wrong model  using the right language.

So along with  new observations   we might have to find new langages (not only based on numbers).  Of course we can't throw away number. But what else can we do with them? Do we need the  continuity given by real numbers? Is integral calculus still the only way?

So making fondamental research is some kind of reverse engineering toward a langage we don't even know. Would  people working on language and people making even simple models be useful?

After  hours of trying to study the book written by Gyorgy E.Revesez (introduction to formal langage), I haven't been able to fully understand any of the proof given for the theorems. If I say "fully" it is just because I don't want to be too hard with myself. Even understanding some theorem concepts is a problem. I don't know the reasons: perhaps I am to old or I stayed to much time without training my brain or I got unwillingly some pils that weaken intellectual abilities.

They decided that I am  a kind of  Jean Paul Farré but I don't have his talent. I just like to amuse people and myself. It is not easy with science. Science isn't an entertainment but music is.

To illustrate the kind of difficulties I have with the introduction to formal language, I'll give this example and later an attempt to resolve the problem in a way that allow somebody like me who doesn't have the training or the gifts. Some people  might find this as ridiculous as counting with your hand-fingers.


and the proof in a form of an algorithm: I'm a programmer.

if P=a^i b1 W1 b2 W2 .... bi Wi = a^iX
then X=b1 WA b2 W2 ....biWi and we have  i more b's  in X than a's.
Na(X) +i  = Nb(X)
the character at the beginning of X is X[0 ] =b1
if X1 = X[1,len(X)]   substring of X from pos 1 to the end
we have Na(X1) + i -1 = Nb(X1)
As far as we haven't encountered all the bi's they are more b's than a' in Xn

If Xn beginns with a 'a' we are sure to find a string Wi=Xn[n,n+k)] in Xn. (with n+k=<len(X))
Suppose we start with k=1
we have Wi="a" and Nb(Wi)-Na(Wi) = -1
when we reach n+k we will have    Nb(Wi)-Na(Wi) = i -1 >=0 (by incrementing or decrementing)
So we will find a k where Nb(Wi)-Na(Wi)  = 0
But Wi  must be followed by a 'b'
if Xn beggins with a 'b' we will consider this as a bi that counter balance the ai's at the beginning of P. When we have found all of them n the remaining string has surely Na=Nb

Now the pgm.
#!/bin/python
'''

'''
import re as RE
              
class TestA():
    '''
    Split a word P | Na(P)=Nb(P) and P=a^i b1 W1 b2 W2b .....bi Wi
    we want to get w1,W2....wi in a list
    and rebuild P from it to copare to the original P
    '''
    def __init__(self,P):
              
        if len(P) % 2 == 0 and len(P) != 0:
              self.P = P
        else:
            raise Exception("P must have even length and not empty")
        
        if not self.NaEqNb(P) :
            raise Exception("P must have Na = Nb ")
        
        if P[0] == "a":
            try:
                match = RE.match( "(a+)(b.*)$", P )
            except:
                raise Exception("P doesn't match '(a+)(b.*)$' -> %s" %(P,))
            self.A="a"
            self.B="b"
            
        elif P[0] == "b":
            try:
                match = RE.match( "(b+)(a.*)$", P )
            except:
                raise Exception("P doesn't match '(b+)(a.*)$' ->%s" %(P,))
            self.A="b"
            self.B="a"
            
        Alist,X=match.groups()
        ##print Alist,X
        self.wlist=[Alist]
        self.X=X
        self.i=len(Alist)
        self.extract(X)

    def NaEqNb(self,X):
            Na = X.count("a")
            Nb = X.count("b")
            if Na == Nb :
                return True
            else:
                return False
        
    def extract(self,X):
              
        n=0
        ii=0
        while n < len(X):

            if ii == self.i :
                # when we have consumed all bi's (from the ai's) 
                # the remaining string is either empty or Na =Nb
                subX=X[n:]
                if self.NaEqNb(subX) :
                    #print "last sub X,ii",subX,ii
                    self.wlist.append(subX)
                    return
                else:
                    raise Exception("Error:Na(X) != Nb(X)")
            # ii < i still have bi's to process
            if X[n] == self.A:                  
                for x in xrange(n+2,len(X)+1,2):
                    subX=X[n:x]
                         
                    if self.NaEqNb(subX) :
                         if  X[x] == self.B:  
                            self.wlist.append(subX)
                            n = x
                            break
            elif X[n] == self.B:
                n += 1
                ii += 1
                self.wlist.append(self.B)
                if n == len(X):
                    self.wlist.append("")
  
                            
              
if __name__ =="__main__":
    '''
    '''    

     sample = ["aabababbab"]
  
    ##print sample
    for P in sample:
        p="".join(P)
        t=TestA(p)
        pp="".join( t.wlist)
        if p != pp:
            raise Exception("P != PP: %s %s" %(p,pp))
        else :
            pass
            #print p,pp, t.wlist
    print "Test ik ok for all asmple"


Fuck!

By looking at  the program made from this algorithm and making several tests I could pretend that the program would never fail  for any P of L in finding this expression: P=a^ibW1bW2....bWi
But could an automatic analysis of the  program say it to me?
Could we have a special language that could be analysed  automatically?
Or could we have something like symbolic calculus for sets and tuples and lists?
It could be the first step in asking machines to take the risks for us,
and mathematicians loosing part of the control they want to keep.

vendredi 31 janvier 2020

Les Décorations en France.

On pourrait penser qu'il est bon que chacun puisse vérifier les décorations obtenues par une personne ainsi que ces diplômes. L'Etat Français soucieux de montrer sa modernité pourrait fournir à tout un chacun la possibilité de vérifier facilement ses informations. C'est à dire obtenir l'information sans avoir à fournir l'état civil complet de la personne décorée. A priori tout devrait être online. Les possibilités d'erreur sur la personne pouvant être éliminé par la suite si la état civil de la personne est fournie avec la preuve de décoration pour permettre une vérification.

Autrement dit je pense que c'est au service des décorations de fournir l'état civil complet, pas à moi car il est difficile de fournir l'état civil complet si on est pas de la famille.

Bien sûr j'ai peut-être tord: des raisons pourraient exister qui justifient de limiter l'accès.

En fin de compte heureusement que Google vient au secoure de l'état Français. J'arrive quand même à trouver le décret prouvant la décoration.

vendredi 15 novembre 2019

Etre autodidacte.

Après plusieurs années passées à collecter des guides et  livres pour apprendre sur internet je dois dire que c'est un exercice très risqué. Il  a beaucoup de mauvais livres et guides écris par des incompétents ou de fumistes. Avec les livres on ne le sait  qu'après les avoir acheté et commencé à les étudier. Avec les guides gratuit on perd un peux moins d'argent mais pas mal de temps aussi. 

Je suppose qu'à part le fait que on a le droit de publier un mauvais livre, y a aussi un problème de guerre économique. Le but étant de rendre plus difficile la formation de la population en les noyant sous une masse de données dans laquelle il est difficile de choisir.

De plus il peut être risqué de dénoncer les fumistes qui publient ces livres.
   

mardi 11 septembre 2018

48 heures avec l'enregistreur Zoom H1N

Acheté sur internet ( thomann.de ) et livré avec une licence pour télécharger cubase le et wavelab le. Je n'ai pas encore testé les logiciels mais ce sont des poids lourds de l'audio.

Il faut bien comprendre que même avec du matériel de qualité on ne peux s'improviser ingénieur du son (connaissance électronique , expérience pour placer un micro ......)

J'aimerais me construire un univers audio (enregistrement d'ambiance prélevé dans la vie de tous les jours) c'est aussi un moyen de stimuler me capacités auditives en déclin.

Je suis intéressé aussi par le côté électronique et mathématique de l'audio (j'ai pratiquement tout à apprendre dans ce domaine)

Je voulais aussi avoir la possibilité d'enregistrer à partir d'un poste de radio (sortie casque) ou d'une chaine hifi (sortie ligne).


J'ai bien aimé:

la simplicité d'utilisation et la sécurité avec une séparation de la configuration  accessible seulement par une mise sous tension spéciale de l'enregistreur.   (appuis sur deux boutons simultané).

Les options d'enregistrement les plus utiles son facilement accessibles:
-- choix qualité enregistrement,
-- filtre passe haut
-- limiter
-- niveau d'enregistrement automatique.
-- niveau d'enregistrement (gain)

La présence d'une entrée ligne qui marche bien.

la qualité sonore

la légèreté et la taille

la possibilité d'utiliser un pieds photo pour fixer l'appareil

la possibilité d'utiliser une alimentation externe usb 5v simultanément avec les piles ou accus nimh en interne et de pouvoir la débrancher sans causer de parasite dans l'enregistrement. Il existe des boitiers 4 piles AA avec sortie usb.

J'ai moins aimé:

-- l'absence en standard d'une bonnette pour protéger du vent (le simple déplacement à la main du Zoom H1N peux provoquer la saturation du micro.

-- les boutons volume casque sont légèrement branlant et peuvent causer du bruit.

-- l'impossibilité de brancher l'entré ligne sur une sortie casque. (enregistrer la radio)

-- l'apparition de souffle gênant -si on cherche la qualité d'enregistrement-  à partir du niveau 7 d'enregistrement, niveau dont on peux avoir besoin fréquemment . De telle qualité peuvent s'obtenir avec  du matériel pro pour un prix au moins dix fois supérieur.

-- le bruit supplémentaire causé par le limiteur. 

-- la difficulté pour trouver  des micro externes vraiment compatibles et performants.

- - la disposition des prises casques et micro.

-- l'absence d’adaptateur permettant de brancher des micro xlr symétriques. (j'ai décidé d'acheter un mixette pour pouvoir brancher du XLR symétrique) ou d’enregistrer à partir d' une sortie casque.

- - la disposition du bouton de niveau d'enregistrement près des micros augmentant le risque de bruit du à la manipulation  pendant l'enregistrement:  frottement avec bonnette ou  frottement du pouce sur le capot.

-- les temps de réponse pour la mise sous tension et de certaines options des menus pas vraiment prioritaire comme la suppression de fichier. Les bouton audio, lowcut, limter, autolevel reagissent rapidement. 

Pour pallier les problèmes de souffle et de saturation j'ai prévu d'essayer une mixette externe.
Pour la saturation, il devrait être aussi possible baisser le niveau d'enregistrement bien en dessous de -12db et de normaliser par la suite le niveau par logiciel avec cubase. Je parlerai du résultat lorsque j'aurai testé ces solutions . Je suppose qu'il existe des limiteurs logiciels (cubase) plus performant que ceux intégrés dans le H1N.

J'en profite pour signaler une confusion que j'ai faite à la première utilisation: confnondre des problèmes de saturation avec des bruits de vent ! Ils peuvent être causés par un simple déplacement de l'enregistreur. C'est pour cela que j'avais trouvé le limiteur inefficace! Il faudra choisir entre limiteur et niveau automatique et je suis trop inexpérimenté pour l'instant.

Pour diminuer les risque de bruit de manipulation en tenant  l'enregistreur à la main j'utilise une perche telescopique à selfie à 6€. Celle que j'ai n'est pas très rigide si complètement déployée et peut donc donc causer du bruit si manipulation brusque (faible risque).

Je pense que des sites dédiés -certains sous contrôle ou proposé par la marque zoom-  pourraient permettre d'aider les utilisateur et passionnés du H1N.

Je pense qu'un marché potentiel pour du matériels périphérique compatible avec le H1N existe. La compatibilité ( certification ) pouvant être un argument de vente.

Malgré ma très faible expérience je me permet quelques suggestions pour la prochaine version du H1:

-- inclure dans le H1 une "normalisation logicielle " du niveau d'enregistrement. Pour permettre l'audition à un niveau  normal d'un enregistrement qui a été fait à un niveau faible . Cela ne ne devrait  pas être très coûteux en terme de charge processeur. Soit pendant l'enregistrement soit après. Plus clairement choisir un décalage numérique constant du niveau d'enregistrement globalement pour tout l'enregistrement. Cela pourrait être fait à l'écoute seulement, comme un zoom d'appareil photo qui continu d'agrandir mais en mode numérique lorsque le niveau casque est augmenté. Un limiteur d'écoute pourrait être utilisé dans ce cas pour éviter de saturer le casque.

--  permettre l'enregistrement avec un niveau ligne élevé  en permettant une atténuation électronique. Ou pour ne pas compromettre la sécurité et la simplicité d'utilisation fournir en standard un adaptateur permettant l'atténuation de l'entrée ligne. C'est dans la logique de mobilité du H1 de permettre l'utilisation avec la sortie casque d'une radio mobile.
  
-- la taille (largeur) pourrait être légèrement augmentée pour pour ajouter des possibilité de connection.

- - ajout de prises mini XLR symetrique  à la même place que le h4  c.a.d à l'opposé des micros.

--  ajouter une prise TRS dedié ligne permettant la connection de sortie casque.

-- déplacer aussi la prise casque vers le bas près des mini XLR

cela fait 3 prises TRS (ligne ,micro , casque) plus 2 prises mini XLR qui devrait être orienté dans le sens de la longueur de l'enregistreur. Cables sortant tous dans le même sens vers les bas.
On pourrait au moins différentier la sortie ligne/micro et facilité l'ajout d'interface externe pour micro XLR .

-- déplacer aussi le niveau micro vers le bas loin des micros. En tenant  le H1 avec une main et en réglant  avec l'autre main j'aurais peut-être moins de risque de causer du bruits dans les micro internes.

 -- la hauteur et disposition des boutons pourrait être différentié pour permettre un reconnaissance tactile. Par exemple les boutons pause et stop pourrait être plus haut que les bouton avance et recul.
Les bouton audio, lowcut  pourrait être décalé (comme zigzag) au lieu d'être aligné et leur hauteur aussi différentiée.

-- un module d'extension compatibles et certifiés similaire à  des cartes d'extension sur un pc pourrait être aussi greffé soit en dessous soit à l'opposé des micros. Une solution ressemblant existe pour le H4 je crois (module interchangeable micros ou prise XLR).

-- La possibilité de mettre en veille le H1 pour permettre une mise en tension plus rapide.

Date 7/10/2018 :
In play mode with big files WAV 16bits 1.6Gbits 2 hours . Back 3 s at the end of the  file  needs 3 seconds to be executed. Not easy to advance or return moderately in the file with press and hold.  Some intermediate solution should be found between press and press and hold (perhaps press and immediately after press again and hold ).  

mardi 28 août 2018

You don't like women

At least I like their body.

But I concede this is not enough.

I don't like men either.

Hallucination during watching "Trop Jeune pour elle".

Vivre avec des démons.

Je voudrais parler de ce problème qui est très souvent traité par la littérature et le cinéma. Mais peut-être pas de la manière à laquelle je pense. Je trouve que le cinéma est particulièrement puissant à décrire la nature psychologique des relations humaines, c'est un des leviers principaux de l'acteur.  

Cela a été une expérience éprouvante  d'être au contact de personnes qui vous mentent sur pratiquement tous les plans:

-- Politique: en critiquant parfois grossièrement des leaders qu'ils ont servis fidèlement.
-- Communauté: en parlant avec mépris de certaines communautés (religieuse ou sexuelles ou .....) auxquels, en fait, ils appartiennent et qu'ils défendent.
-- Profession: en mentant sur la nature réelle de leur activité.
-- Pédagogie: en mentant sur la nature de vos capacité et de vos troubles.
-- Sentiment: en mentant sur la nature des sentiment qui les lit à leur relations.

Bien sur on peux pardonner les mensonges et trouver de nombreuses et très valables excuses.
Ces mensonges ne sont pas forcément liés à une volonté de faire le mal mais si vos relation avec eux se dégradent, alors il faut s'attendre au pire.

L'accumulation des ces mensonges peux causer de graves troubles auprès des personnes qui vivent à leur côté; particulièrement si  ces mensonges sont liés à la prise de produits psychotropes et dopants.

La tentation est grande pour ces démons de vous faire entrer de manière définitive dans leur communauté démoniaque en pensant pouvoir créer une protection mutuelle.

Je pense que c'est un phénomène de vampirisation et aussi d'aliénation.

lundi 20 août 2018

Probabilité

As you probably know, I try to maintain some brain activity (between to pinups) by studying maths and programmation.

I have stayed more than one year doing pratically nothing but, today I'll show you how to compute what amounts and their probability I am suppose to get or loose after playing  several times a money game I know the odds.

I am no expert so the calculus might be wrong : you will have to have it verified by somebody very accurate.

A simple problem with dice:
-- I win 200€ if I get the 6 (odds 1/6)
-- I  win 10€ if I get the 5 or the 4 (odds 2/6)
-- I win 0€ if I get 1 or 2 or 3  (odds 3/6).

The outcomes of the game could be memorized in a Python list:
 [ [ 1.0/6 ,  200 ] , [ 2.0/6, 10 ], [ 3.0/6 , 0 ] ]

Now If I play 100 times I would get  some money around this amount:

100 time the mean win = 100 * E(X) =  100  * µ = 100 (200*1//6+ 10*2/6+ 0 * 3/6) = 100 *36.6 =  aproximatively 3660€

But what are the probailities to get only 500€ or between only 400 and 500€  after  100  throws.:

This is the purpose of the progame I publish at this adresse

https://pastebin.com/6S6Yh36j

The source is a little sloopy but ,I hope still readable engough.

In the "main" part we try (not hard enough) to prepare a list of possible wins from the game exceptectation (the mean win) . We just want amount-classes  to build the  winning distribution.

The gen () and rec_gen() function are used tu build a list representing what append during the N experiments (throwing N times the dice).
Each position in the list give the number of occurences for each possible outcomes for exemple:

[50,20,35] says in correspodnance with the previous table  [[ 1.0/6 ,  200 ] , [ 2.0/6, 10 ], [ 3.0/6 , 0 ] ]
tha we won 50 times 200€ 20 times 10€ and 35 times 0€

The callback function gives control to the trial() function that will compute the amount won and its probability :

The amount won is easily calculated : gain = 50* 200 + 20 * 10 + 35 * 0

The probability of a trial corresponding to such a configuration [50,20,35] is a succession of independents experiments having this probability:
P(50,20,35) = 1/6 * 1/6 *..... *1/6 (50 times) * 2/6*2/6* ...2/6 (20 times ) * 3/6 *3/6 * ...*3/6 (35 times).

But they are many trials that correspond to [50,20,35].
I have used  by the basic law of counting :
number of possible arrangements of n elements   with k1, k2,.... elements being indistinguishabe.
in this case we compute  a= 100! / (50! * 20! * 35!)

And the final probability for all case corresponding to [50,20,35] is  P(50,20,35) * a

The last function storegain() just add the probability to the distribution-classe we have chosen using the python library bisect.

I hope it gives you a fast way to understand the pgm if you have a basic knowledge of python and probability.

As you see this methode (generating a list such as [50,20,35]) allow to evaluate very long trials without having to generate a lot of datas.
It  perhaps alllready exists in some library  but I didn't take the time to verify because what interests me is to invent and create.

It must be also possible to modify easily the function rec_gen() for compatibility with threads.


I just found  CLT (Central Limit Theorem) in a proposed list for searching my email.
It is probably a way to warn me that the program I just proposed is not necessary.
I have even been warned in the street about this: "he made a fool of him-self, it can be computed very easily with the help of the CLT".

The distribution I try to compute is effectively approximately Normal when throwing n times the dice (n sufficiently big).
So  you can find the parameters of the  ( Normal Distribution)  as an approximation with the help of  Var(Xn)  =  n * Var(X) and
E(Xn) = n * E(X) and
Xn= sum of the Xi


But depending on the precision you need you might prefer the program I propose. For illustration I will soon show you a graph of the distribution using moderately narrowed  gain-amount classes for N=100 throws.
With  the basic dice distribution  I have  used in the program, the result  is alike a positive sinusoidal signal modulated by a standard normal signal.
To demonstrate this I have a new version of the program  that depend on the matplotlib.pyplot python module (to be installed).

https://pastebin.com/qxdBTjf8

And a new graphic using "raw" datas (aproximately 5000 points)with https://pastebin.com/sAFJR65x and giving:
I need to study this one because it is kind of mysterious. Why so much perfect curves?
This is all the gain (x) and  probablity  (y) generated by the program and not grouped in class (amount range).
At least not very feminin!