Traduction d'une équation en factoriel

Réponses à toutes vos questions après le Bac (Fac, Prépa, etc.)
La source
Membre Naturel
Messages: 21
Enregistré le: 16 Avr 2008, 12:58

Traduction d'une équation en factoriel

par La source » 14 Aoû 2009, 21:45

Bonsoir,

Il y a déjà pas mal de temps je suis venu sur votre forum afin de demander de l'aide quand à un système de combat.

Alors, j'ai garder bien au chaud la formule que vous m'aviez donner à l'attendant de m'en servir... mais maintenant que c'est le cas je me rend compte que je ne sais utiliser que les factoriel dans mon langage de programmation.

J'ai fait ce que j'ai pu mais je ne suis pas arriver à traduire l'équation moi même...

Voici la partie qui vous intéresse:

Soit X_i la v.a.r qui compte le nombre de fois qu'une boule i est tirée.
Comme les proba detre tirées sont les mêmes pour chaque boule, au jieme tirage, la proba de tirer la boule i, c'est p=1/m.
X_i suit une loi binomiale B(n,p).

On a donc :
C'est la proba qu'une cible ait été touchée k fois, sur les n attaques.


Merci d'avance pour votre aide.
Cordialement, La source.



Avatar de l’utilisateur
Ericovitchi
Habitué(e)
Messages: 7853
Enregistré le: 18 Avr 2009, 14:24

par Ericovitchi » 14 Aoû 2009, 23:24

Oui, c'est quoi ta question exactement ? je ne comprends pas bien.

La source
Membre Naturel
Messages: 21
Enregistré le: 16 Avr 2008, 12:58

par La source » 15 Aoû 2009, 12:08

Moi je n'ai qu'une fonction disponible qui est la factoriel, le problème est que je ne sais pas comment utiliser la formule que j'ai... j'ai une variable inconue (1-p=> a quoi correspond p ?) On parle de X_i mais je ne vois pas ce que sa représente...

enfin bref... moi j'aimerai une formule que je sache utiliser :p du genre fact(k)/(fact(n)-fact(k))*(1-n)

Merci d'avance.
Cordialement, La source.

La source
Membre Naturel
Messages: 21
Enregistré le: 16 Avr 2008, 12:58

par La source » 16 Aoû 2009, 13:00

Personne ne sais ?? :cry:

Avatar de l’utilisateur
Ericovitchi
Habitué(e)
Messages: 7853
Enregistré le: 18 Avr 2009, 14:24

par Ericovitchi » 16 Aoû 2009, 13:18

Excuses moi, mais c'est parce qu'on ne comprend pas bien ta question.
La formule
C'est la probabilité pour qu'un évènement de probabilité p se produise k fois au cours de n épreuves.
Tu veux une formule pour calculer les ?


mais je ne sais pas si ça répond à ta question ?

La source
Membre Naturel
Messages: 21
Enregistré le: 16 Avr 2008, 12:58

par La source » 16 Aoû 2009, 14:44

Voila c'est quasiment ce que je demande :p ce qu'il me manque a présent c'est
et .

Cordialement, La source

Avatar de l’utilisateur
Ericovitchi
Habitué(e)
Messages: 7853
Enregistré le: 18 Avr 2009, 14:24

par Ericovitchi » 16 Aoû 2009, 15:32

A nouveau je ne comprend pas. Ça veut dire quoi "il me manque " ? il n'y a rien de mystérieux là dedans. p c'est la probabilité et k le nombre d'épreuves, et c'est p élevé à la puissance k :party:

Par exemple : tu jettes 3 dés , probabilité pour que sorte une paire de 6 ?
C'est la probabilité qu'un événement de probabilité 1/6 se produise exactement 2 fois au cours de 3 épreuves :

La source
Membre Naturel
Messages: 21
Enregistré le: 16 Avr 2008, 12:58

par La source » 16 Aoû 2009, 16:52

Bon... j'ai pris du temps a comprendre ton exemple (bien qu'en soie il est simple, c'est la transformation vers mon besoin qui m'a été difficile).

Bref... d'après ce que j'ai pu comprendre (si j'ai bien compris) la formule n'est pas bonne dans mon cas.

Voici les différentes données que je connais:
* Nombre de tirs
* Nombre d'unités reçevant les coups
* Nombre de coup reçu par X unités

Donc au final moi ce que je veux obtenir c'est le nombre de vaisseaux ayant été touché 1 fois, 2 fois, 3 fois, ...

Hors ici avec cette formule on dois déterminer "la probabilité pour que sorte une paire de 6" autrement dis émettre l'hypotèse que 2 vaisseaux se fasse toucher 6 fois.

Bref... personnellement je n'ai aucunes idées de comment arriver a résoudre mon problème, si je me suis encore mal exprimer je suis désoler, n'hésiter pas à le dire... j'expliquerai mon problème à l'aide d'un screen d'exel ainsi cela aidera certainement à le visualiser :p.

Cordialement, La source.

Avatar de l’utilisateur
Ericovitchi
Habitué(e)
Messages: 7853
Enregistré le: 18 Avr 2009, 14:24

par Ericovitchi » 16 Aoû 2009, 18:30

Poses bien ton problème. Une fois qu'il sera bien posé il sera facile à résoudre.
Je comprend que tu as X unités qui reçoivent des coups. Disons n tirs.
La probabilité qu'un coup fasse mouche est-elle constante ? et égale à p ? Disons que oui.

Commençons par 1 unité (donc X=1 pour le moment)
Elle reçoit n tirs qui ont chacun une probabilité de p de faire mouche.
Dans ce cas la loi binomiale s'applique.
La probabilité pour que cette unité soit touchée k fois au cours des n tirs est bien

Après si tu as X unités et plus 1, ça se complique. Il faut des données en plus. Par exemple, la façon dont sont choisis les unités qui essuient les tirs parmi les X. Au hasard ?

La source
Membre Naturel
Messages: 21
Enregistré le: 16 Avr 2008, 12:58

par La source » 16 Aoû 2009, 19:08

Chaques tirs va au but.
Chaque unités à la même probabilité de se faire touché, cette probabilité se calcul en fonction du nombre de tir et du nombre d'unité touchées.

Donc pour être clair, je connais le nombre de tirs (qui vont tous touchés une cible) et je connais le nombre de cible. Je cherche a déterminer combien d'unité ont reçu combien de coup.

La source
Membre Naturel
Messages: 21
Enregistré le: 16 Avr 2008, 12:58

par La source » 17 Aoû 2009, 14:29

Aurai-je oublier d'être clair ???

La source
Membre Naturel
Messages: 21
Enregistré le: 16 Avr 2008, 12:58

par La source » 18 Aoû 2009, 19:02

Quelqu'un peut-il m'aider ou me dire ce que je dois développer/expliquer ?

Cordialement, La source.

Avatar de l’utilisateur
Ericovitchi
Habitué(e)
Messages: 7853
Enregistré le: 18 Avr 2009, 14:24

par Ericovitchi » 19 Aoû 2009, 11:32

Tu la tiens maintenant ton équation. Par exemple s'il y a X vaisseaux te N coups d'attaques. Ils seront en moyenne attaqués n=X/N chacun et touché concrètement fois.
(c'est approché en fait car les vaisseaux ne sont pas attaqués de manière régulière et il faudrait à nouveau utiliser une loi binomiale pour connaître combien de fois chaque vaisseau est attaqué).

Cela dit il est assez rare que dans les langages de programmation, on fasse des calculs de probabilité car il y a en fait une autre méthode beaucoup plus simple à programmer (très utilisé par exemple sur les sites de poker pour calculer les probabilités d'abattage).
ça s'appelle la méthode de Monte Carlo. Il s'agit tout simplement de générer aléatoirement les évènements et de les compter.

Dans le cas présent, prenons donc X vaisseaux qui reçoivent N coups. Comment faire ?
Je te l'écris en langage Visual Basic par exemple :
for I= 1 To N ; je simule les N coups
K= INT(RND(0)*(X+1)) ; l'indice pris au hasard du vaisseau attaqué par l'attaque I
If RND(0) < p THEN impact (K) = impact(K) +1
; je tire un nombre au hasard entre 0 et 1 et s'il est plus petit que p le coup a atteint son but. Impact (K) est un vecteur qui compte le nombre de coups reçu par le vaisseau K
Next I
; on simule le tir des N coups par cette boucle

; Pour calculer le nombre de vaisseaux qui ont reçu k coups, il suffit de compter. Si nb (k) est le nombre de vaisseaux ayant reçu k impacts :
for I = 1 to X
nb ( impact (I)) = nb ( impact (I)) +1
next I

Essayes de le simuler dans Excel par exemple, tu vas t'apercevoir que le vecteur nb(k) contient la répartition binomiale dont on a parlé au début.

La source
Membre Naturel
Messages: 21
Enregistré le: 16 Avr 2008, 12:58

par La source » 20 Aoû 2009, 20:15

Merci beaucoup pour toutes tes explications, cependant je crains que la méthode que tu propose ne soie envisageable... pourquoi ? tous simplement parceque nous parlons d'un nombre de vaisseaux et de tir valant des milliards et certainement plus... autrement dis faire une boucle avec sa mes trop de temps à l'exécution donc c'est pour cette raison que je me suis tourné vers le probabilité, en espérant faire que quelques calculs par vague j'en réduirai ainsi le temps d'exécution.

Image exel

Bref... j'espère que ce que je cherche a faire est possible ^^

Merci d'avance.
Cordialement, La source.

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 20 Aoû 2009, 21:02

re,

ben non seulement ca met du temps, mais ca prend aussi pas mal de place. Rien que des milliards fois 4 octets (un simple integer), ca te fait deja 4Go, sauf erreur.

Donc, vu qu'il faut problement restreindre ton échantillon, autant le faire maintenant et regarder si la méthode de monte carlo reste applicable
la vie est une fête :)

La source
Membre Naturel
Messages: 21
Enregistré le: 16 Avr 2008, 12:58

par La source » 20 Aoû 2009, 21:42

Eu... non xD

En fait je veux développer ici un moteur de combat, les joueurs eux peuvent avoir des millions/milliards d'unités. Ce jeu est un jeux de stratégie que l'on peut trouver sur le net sans rien avoir à télécharger (si vous voyez ce que je veux dire).

Bref au final il n'y a que des chiffres, mais il faut bien simuler le combat... donc à la place de faire un tableau contenant chaque unité et choisir une unité au hasard et lui appliquer le coup je veux connaitre en suivant des lois de probabilité les vaisseaux touché x fois afin de savoir si il ont été détruit ou non.

Ainsi au lieu de devoir simuler le combat unité par unité je fait par type d'unité (car chaque type d'unité à certain avantages et inconvénients par rapport à d'autre type).

J'espère avoir pu vous aidez quant à la compréhension du problème ^^

Cordialement, La source.

Avatar de l’utilisateur
Ericovitchi
Habitué(e)
Messages: 7853
Enregistré le: 18 Avr 2009, 14:24

par Ericovitchi » 20 Aoû 2009, 22:06

Réfléchis y à 2 fois. Des calculs de probabilité avec des milliards d'unités sur le net, c'est assez irréaliste quelque soit la façon de s'y prendre. Tu devrais concevoir (du moins au début) des modèles plus simples qui ne comporte que quelques milliers d'unités. C'est déjà pas mal. Et s'il y en a plus, morcelles ton problème en sous problèmes qui sont calculables indépendamment (les batailles, ça se découpes en sous-batailles).
Regardes les MMORG qu'il y a sur le net, ils ont tous procédé comme ça.
Sinon essayes de définir correctement ton problème. A chaque post on découvre d'autres aspects. Tu nous a jamais donné de dimensions concrètes ni défini un cahier des charges compréhensible. Si tu ne sais pas poser correctement le problème, il n'y a aucune chance que tu arrives à le résoudre.

Mais bonne chance et bonne continuation.

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 20 Aoû 2009, 22:13

je viens de penser a qq idées comme ca :

deja, pour le gameplay, ca me parait surepenant que yait des milliards de tirs comme ca XD.
Donc une premiere approche serait de grouper les tirs et les unités. Une fois un groupe impacté par un gros tir (1000 au lieu dun milliard par exemple), on peut alors distribuer les dommages des tirs aux unités du groupe d'unités impacté.

J'espère avoir pu vous aidez quant à la compréhension du problème ^^

Au risque detre lourd, est-ce que pourrais expliquer clairement :
les termes : tirs, unités, vaisseaux, coups recus.
Ce que j'ai compris : on a N tirs. Chaque tir touche a coups sur une unité et une seule. Chaque fois qu'une unité est touchée, on considère quelle a recu un coup.
Je ne comprends pas ou interviennent les vaisseaux.
la vie est une fête :)

Avatar de l’utilisateur
Ericovitchi
Habitué(e)
Messages: 7853
Enregistré le: 18 Avr 2009, 14:24

par Ericovitchi » 21 Aoû 2009, 11:26

Et puis il y a une autre façon qui est très utilisée dans tous les jeux MMORG sur Internet.
Ils fabriquent tout simplement des formules de résolution de combat. Les troupes peuvent être en nombre quelconque et avoir des caractéristiques différentes en attaque, défense, portée, etc... Ces caractéristiques sont introduite dans une formule qui donne le résultat (nombre de morts, etc...).
Parfois la résolution peut-être compliquée et en plusieurs étapes. Par exemple en cas d'une attaque d'un château par des catapultes / archées et chevaliers il peut y avoir une première résolution avec les catapultes pour voir si elles sont arrivées à diminuer le potentiel défensif du château voire à supprimer quelques défenseurs à distance puis une seconde résolution concernant le tir des archés contre les archés en défense puis enfin un essai de prise du château avec une troisième formule.
Souvent dans ces formules, il y a des éléments aléatoires pour donner un peu d'incertain dans les résultats.
C'est assez facile d'élaborer ce genre de formule et c'est indépendant du nombre d'intervenant et de troupes. Et les ordinateurs n'ont aucun mal à calculer vite les résultats.

La source
Membre Naturel
Messages: 21
Enregistré le: 16 Avr 2008, 12:58

par La source » 21 Aoû 2009, 12:22

Je vais taché de donné toutes les informations ici afin de vous aidez au mieux car il est vrai que j'ai été confus jusqu'à présent.

Le but de mon algorithme ici est de simuler un combat spatial, nous avons donc un attaquant avec des vaisseaux et un défenseur avec des vaisseaux et défense au sol (pouvant atteindre les vaisseaux attaquant).

Le combat se déroule en 6 tours maximum, car si une des partie adverse est détruite avant la fin de ses 6 tour c'est que l'autre est déclarée gagnante.

A chaque tour les unités attaquantes et défenseuses tirs en même temps, donc le nombre de tir correspond au nombre de vaisseaux tirant à l'instant t.

Mon but est de déterminer qui est vainqueur est les pertes occasionnée à chacune des parties adverse.

Il existe différents type de vaisseaux et défense, ses types ce différencie par leur caractéristique d'attaque, de vie et de bouclier.

Il existe déjà un modèle fonctionnel de ce système de combat qui en fait mémorise chacune des unités et vérifie sont état de vie, ce qui est réalisable lorsque le nombre d'unités n'est limité qu'a quelques milliers.

Hors ici le concept en soie c'est que le jeu est capable d'aller à X fois plus rapide que la "normal" ce qui amène finalement les joueurs a avoir des milliards d'unités.

Je me suis donc dis que au lieu de traiter les vaisseaux un à un traitons les par type d'unités car il y a une 50 aine de type d'unités/défenses donc tout aux pire on se retrouve dans un système de boucle de 6*50*50 (6 tours *50 types * 50 types), ce qui reste résonable.

C'est donc pour cette raison que je me suis tourné vers la probabilité, car j'espérai qu'un calcul "simple" pouvais déterminer le nombre d'unité touché n fois et par conséquent déterminer qui était détruit et qui ne l'était pas.

Je reste attaché au fait de résoudre mon combat de cette façon car c'est ce qu'il y a de plus "réaliste" bien que je soie conscient qu'il y a moyen de faire beaucoup plus réaliste il faut bien s'arrêter quelques par.

Je pense avoir fourni toutes les informations utile cette fois-ci :we: si je n'ai pas été clair ou que je n'ai pas assez développer un point n'hésitez pas à me le dire j'essaierai de précisé/développer au mieux.

Merci d'avance.
Cordialement, La source.

 

Retourner vers ✯✎ Supérieur

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 39 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite