Un avis / conseil : probabilités en masse

Je rectifie le nombre de combinaisons pour 18 que j'avais donné (une erreur d'addition) : 262125.

Mais je crois que je ne suis pas en mesure de trouver une bonne notation pour lancer la machine ce soir...

A demain...

C'est pas méga pressant, j'ai un mois et demi en gros. Si pas viable je devrais réaménager tout mon temps de travail et mon équipe pour m'en charger.

j'ai commencé à faire des tests pour les recherches de résultats, Index et Match sont pas mal mais après je suis pas un cador en VBA maybe il y a un autre moyen

Bonjour,

Le problème principal sera toujours la croissance du nombre global de combinaisons lorsque le nombre d'éléments (restes) fusionnables augmente :

  • pour 10, on a : 502 combinaisons
  • pour 15 : 16373
  • pour 20 : 524268

- et si on va jusqu'à 25 : 16 777 191

On peut conjecturer que le temps de traitement augmentera rapidement, et on sera toujours en train de se demander à quel moment la mémoire sera saturée et déclarera forfait...

On peut penser que si dès que l'on a trouvé une combinaison répondant à la condition de recherche, on élimine les éléments utilisés dans cette combi de la recherche ultérieure on allègera...

Mais on ignore dans quelle mesure d'une part, et d'autre part on risque de ne pas définir des combinaisons qui auraient pu être préférées.

Je crois avoir pensé une méthode cette nuit pour coder les combinaisons calculées... Reste à voir si elle fonctionne. Il me faut préalablement construire autrement la fonction de calcul de la combi fusionnée.

Pour le moment je me décrasse sur un autre sujet pour me réveiller.

A+

MFerrand a écrit :

Bonjour,

Le problème principal sera toujours la croissance du nombre global de combinaisons lorsque le nombre d'éléments (restes) fusionnables augmente :

  • pour 10, on a : 502 combinaisons
  • pour 15 : 16373
  • pour 20 : 524268

- et si on va jusqu'à 25 : 16 777 191

On peut conjecturer que le temps de traitement augmentera rapidement, et on sera toujours en train de se demander à quel moment la mémoire sera saturée et déclarera forfait...

On peut penser que si dès que l'on a trouvé une combinaison répondant à la condition de recherche, on élimine les éléments utilisés dans cette combi de la recherche ultérieure on allègera...

Mais on ignore dans quelle mesure d'une part, et d'autre part on risque de ne pas définir des combinaisons qui auraient pu être préférées.

Je crois avoir pensé une méthode cette nuit pour coder les combinaisons calculées... Reste à voir si elle fonctionne. Il me faut préalablement construire autrement la fonction de calcul de la combi fusionnée.

Pour le moment je me décrasse sur un autre sujet pour me réveiller.

A+

On reste sur 15 du coup, quitte a faire tourner la macro plusieures fois.

Si ça dure moins de 2h le calcul ça me va ^^

Si vous voulez des exemples de fusions que j'ai réalisé ces dernieres semaines pour vérifier le tout dites le moi

(je dis 15 parce que j'ai deja fais des macro traitant environ 200k données avec des temps d'execution pas trop lents)

Bonsoir,

J'ai écrit la procédure hier (enfin c'était plutôt dans la nuit !) et refait les fonctions annexes, mais pas eu le loisir de tester aujourd'hui (travaux d'élagage...)

Hormis les tests (important, je te l'accorde ! mais pour le moment on peut faire comme si ça allait fonctionner ! ), il me reste la finalisation, c'est à dire comment tu souhaite voir présenter les résultats...

En fin de procédure (en principe) je disposerais d'un côté des valeurs des items fusionnables sous forme de chaînes, de la forme par exemple : #051709 (et on peut toujours les reprendre à la source....)

et de l'autre des résultats permettant d'atteindre la cible sous forme de suite de nombre(s).

Par exemple : 336 dont je pourrais tirer que la fusions des items 2, 4, 7 et 9 permet d'atteindre la cible (au cas particulier, c'est pas le cas dans ton fichier exemple, mais j'ai pris un nombre au hasard).

Cordialement.

O_o je m'attendais pas à un résultat aussi rapide (si on considère qu'on a validé la phase de tests ^^)

J'avais fait un fichier de traitement de données et mis les résultats sous forme de liste sur excel sur une nouvelle feuille nommée "Résultat" (faut donc écraser ladite feuille avant de la générer en gros)

Voici joint le fichier avec un exemple de ce que je voulais représenter, mais vu que je ne vois pas comment ça apparait pour toi au final je ne sais pas si mon idée de base convient

Cdt

Bonsoir,

Cela fait deux jours que je suis ce sujet, qui m'a l'air très intéressant.

Puis-je me joindre à votre discussion et vos recherches ?

Ce que je découvre surtout dans ton fichier, c'est l'existence de 3 catégories...

S'il faut en tenir compte, j'ai quelques adaptations à faire : il n'y a plus 3 tableaux de conversion à distinguer, mais 3 séries de 3 tableaux.

En outre, je les ai transformé en tableaux à 2 colonnes, plus aisés à utiliser en VBA, tes tableaux étant plutôt conçus pour une utilisation formule avec INDEX... (je n'ai pas encore supprimé les macros que j'avais fait pour transformer... ! )

Je me rends compte aussi, intrigué par ta façon de procéder manuellement que :

(F symbolisant l'opération de fusion)

(item8 F item15) F item3 = 6 17 11

(item15 F item3) F item8 = 5 16 12

((item8 F item15) F item3) F ((item5 F item10) F item12) = 8 11 13

((((item8 F item15) F item3) F item5) F item10) F item12 = 7 14 13

Ce qui signifie que l'opération n'est pas associative, et que les évaluations de combinaisons que j'ai effectuées (petite erreur dans les chiffres que j'avais donné d'ailleurs pour 10, 15 et 25 items, ils correspondent à 9, 14 et 24 et le nombre de combin. à augmenter d'une unité, désolé ! décalage de ligne...) ne constituent qu'une petite partie de ce qui serait à évaluer ! Je ne me sens d'ailleurs pas en mesure de calculer au pied levé le nombre d'évaluations qu'il faudrait alors faire pour un nombre donné d'items de départ...

Pour 5 items, le nombre de combinaisons à évaluer était de 26 on passerait à 150 compositions (le terme de combinaison n'est plus vraiment adéquat) (sous réserve de recalcul !)

Ce qui remet tout en question et me paraît sérieusement compliquer le problème !

MFerrand a écrit :

Ce que je découvre surtout dans ton fichier, c'est l'existence de 3 catégories...

S'il faut en tenir compte, j'ai quelques adaptations à faire : il n'y a plus 3 tableaux de conversion à distinguer, mais 3 séries de 3 tableaux.

En outre, je les ai transformé en tableaux à 2 colonnes, plus aisés à utiliser en VBA, tes tableaux étant plutôt conçus pour une utilisation formule avec INDEX... (je n'ai pas encore supprimé les macros que j'avais fait pour transformer... ! )

Je me rends compte aussi, intrigué par ta façon de procéder manuellement que :

(F symbolisant l'opération de fusion)

(item8 F item15) F item3 = 6 17 11

(item15 F item3) F item8 = 5 16 12

((item8 F item15) F item3) F ((item5 F item10) F item12) = 8 11 13

((((item8 F item15) F item3) F item5) F item10) F item12 = 7 14 13

Ce qui signifie que l'opération n'est pas associative, et que les évaluations de combinaisons que j'ai effectuées (petite erreur dans les chiffres que j'avais donné d'ailleurs pour 10, 15 et 25 items, ils correspondent à 9, 14 et 24 et le nombre de combin. à augmenter d'une unité, désolé ! décalage de ligne...) ne constituent qu'une petite partie de ce qui serait à évaluer ! Je ne me sens d'ailleurs pas en mesure de calculer au pied levé le nombre d'évaluations qu'il faudrait alors faire pour un nombre donné d'items de départ...

Pour 5 items, le nombre de combinaisons à évaluer était de 26 on passerait à 150 compositions (le terme de combinaison n'est plus vraiment adéquat) (sous réserve de recalcul !)

Ce qui remet tout en question et me paraît sérieusement compliquer le problème !

Mince je pensais que tu avais vu ce dernier fichier, que j'ai link plusieures fois depuis le début du topic.

Puis-je jeter un oeil a ton travail histoire de voir la construction et peut etre avoir des idées?

Après les tableaux et associations sont les mêmes pour les 3 catégories c'est le nombre de rank (richesse si tu veux) qui diffère.

Après ma manière étrange de faire manuellement c'est juste l'habitude de faire comme ça je n'avais pas été formé à ça, j'ai fait au feeling. En gros j'essaye d'équilibrer les items en leur faisant up leur level général du fait de la fusion. Une somme a 26 va passer à 27 ou 28, mais avec le 3° élément anciennement pauvre qu va monter pour faciliter les ups suivants

Je n'ai par ailleurs pas compris ce que tu veux dire par :

Ce qui signifie que l'opération n'est pas associative, et que les évaluations de combinaisons que j'ai effectuée ne constituent qu'une petite partie de ce qui serait à évaluer !

Cdt


Je post un second message pour que tu vois ma précision au cas ou tu soit déjà en train de répondre :

Le système ne change pas malgré les 3 catégories, juste si c'est catégorie 2 au lieu d'utiliser la feuille avec les 3 tableaux en 1, on utilise la feuille 2 avec les 3 tableaux en 2. Juste une If en début d'exécution et Goto

Mon postulat implicite reposait sur le fait que combinant les items a b c d tu obtenais toujours le résultat de la fusion abcd

Or si tu fusionnes adbc (introduction dans un ordre différent, tu obtiens un autre résultat.

Si tu fusionnes ab d'un côté et cd de l'autre, la fusion des deux groupes donnera aussi un autre résultat.

Je ne sais ce qu'on fusionne, mais le résultat apparaît dépendant de l'ordre dans lequel ils interviennent dans la fusion (au-delà de 2) et des fusions intermédiaires que l'on est susceptible d'opérer.

Si j'ai prévu dans ton exemple de tester les fusions de 1-2 1-3 1-4 ... 17-18, je reprends ensuite chaque couple pour tester 12-3 12-4 etc. jusqu'à 1617-18 mais je n'ai pas prévu de tester 13-2 ou 1618-17 ou 1-23 ou 16-1718... Et cela se multiplie lorsqu'on passe de 3 à 4 puis de 4 à 5...

Les catégories ne posent pas de problème particulier, c'est juste un paramètre supplémentaire à prendre en compte dans les calculs (pour identifier les tableaux de conversion à utiliser).

Une opération est associative si : (a # b) # c = a # (b # c)

L'addition est associative : (1 + 2) + 3 = 1 + (2 + 3) = 6

La soustraction n'est pas associative : (1 - 2) - 3 [= -4] et 1 - (2 - 3) [= 2]

Ok je vois.

Possible de voir ton travail jusqu'à maintenant avant ce détail foireux, je pourrais l'étudier dans le train demain et voir ce qui peut être fait maybe

Si tu y tiens... ! Mais je ne vois pas ce que cela pourrait t'apporter... (en la circonstance).

Function Efus(f1 As String, f2 As String) As String
    Dim nt(1 To 3), i%, a%, b%, z$
    For i = 2 To 6 Step 2
        a = CInt(Mid(f1, i, 2)): b = CInt(Mid(f2, i, 2))
        nt(i / 2) = IIf(a > b, b * 100 + a, a * 100 + b)
    Next i
    For i = 1 To 3
        nt(i) = Range("tblo" & i).Find(nt(i), , xlValues, xlWhole).Offset(, 1)
    Next i
    z = "#"
    For i = 1 To 3
        z = z & Format(nt(i), "00")
    Next i
    Efus = z
End Function

Function EvalP(plP As Range) As String
    Dim z$, i%
    z = "#"
    With plP
        For i = 1 To 3
            z = z & Format(.Cells(i), "00")
        Next i
    End With
    EvalP = z
End Function

Sub EvalFusions(plIt As Range, Cbl As String)
    Dim df() As Object, TF, k, g, h, p$, f%, i%, n%
    'Nombre d'items
    n = plIt.Rows.Count
    'Création tableau de dictionnaires (autant que d'items)
    ReDim df(1 To n)
    For f = 1 To n
        Set df(f) = CreateObject("Scripting.Dictionary")
    Next f
    'Constitution dico1 : valeur élémentaire de chaque item
    ' (clés : succession des puissances de 2 [1, 2, 4, 8...])
    For i = 1 To n
        k = 2 ^ (i - 1)
        p = EvalP(plIt.Rows(i))
        df(1)(k) = p
    Next i
    'Dicos 2 à n (l'indice du dico indique le nombre d'items fusionnés)
    ' On recueille les clés dont la valeur correspond à la cible
    For f = 2 To n
        For Each h In df(f - 1).keys
            For Each g In d(1).keys
                If CLng(h) < CLng(g) Then
                    k = CLng(h) + CLng(g)
                    p = Efus(df(f - 1)(h), df(1)(g))
                    df(f)(k) = p
                    If p = Cbl Then TF = TF & ";" & k
                End If
            Next g
        Next h
        If f > 2 Then df(f - 1).RemoveAll
    Next f

End Sub

Sub LancerEvalFusions()
    Dim plItems As Range, plCible As Range, cible$
    On Error GoTo fin
    Set plItems = Application.InputBox("Sélectionner la plage d'items fusionnables à tester" _
     & " (3 colonnes).", "Recherche de fusions", Type:=8)
    Set plCible = Application.InputBox("Sélectionner la plage indiquant la cible à atteindre" _
     & " par fusion.", "Cible à rechercher", Type:=8)
    cible = EvalP(plCible)
    EvalFusions plItems, cible
fin:
End Sub

Comme je l'ai dit, la procédure principale est incomplète (et pas testée du reste, je comptais l'aménager spécialement pour des tests de vérification...) Normalement, à la fin, la variable TF devait contenir une suite de nombres (séparés par des identifiant les combinaisons donnant le résultat cherché. Mais on sait maintenant que l'on n'aura alors examiné que le 10e ou peut-être moins des compositions possibles selon la méthode que tu illustres...

Bonjour,

je me trompe peut-être mais je pense que l'ordre de grandeur du nombre de façons de combiner les éléments est de minimum 18!.

sur cette base, avec un temps de calcul de 0,0001 seconde par combinaison on compte en milliers d'années. A moins de trouver la bonne optimisation.

Si on va par la je combine que des éléments qui ont moins de 6 écart de richesse entre eux

Si je fais la somme des Ilevel de chaque items je ne fusionnerai jamais un 26 avec un 19, pas rentable, parce que je veux toujours aller au plus riche donc profiter du bonus ou de la neutralité

X + (X-1) = X+1 (bonus)

X + (X-2) = X (neutre)

X + (X-3) = X (neutre)

X + (X-4) = X-1 (malus 1)

X + (X-5)= X-1

X + (X-6) = X-2 (malus 2)

je Fusionne des items pauvres entre eux pour équilibrer les propriétés 2 et 3, donc par exemple sur le premier fichier donné :

28+ 22= 29

29 obtenu +31=34

etc.

Rechercher des sujets similaires à "avis conseil probabilites masse"