Monsieur Excel
Pour tout savoir faire sur Excel !

31 mars 2016

Résolution de problème récursif (c)

Pour résoudre notre problème, trouver la solution avec le plus grand nombre possible de réponses vraies, il y a grosso modo deux approches via le VBA : soit faire une série de boucles avec toutes les réponses possibles pour toutes les questions, soit tirer les réponses au hasard et simuler cela assez de fois pour être quasiment sûr de trouver la meilleure réponse.

Il faut tout d’abord calculer le nombre de réponses possibles, ce que nous avons calculé en A19 avec la formule : ="Il y a "&texte(4^8;"# ##0")&" combinaisons possibles !". Nous avons donc 65.536 réponses possibles, ce qui signifie qu’avec 100.000 itérations nous avons de fortes chances de trouver la solution la meilleure. A ce jour, je l'ai toujours trouvée avant la fin des 100.000 itérations !


J’ai donc ajouté une colonne B pour tirer les réponses au hasard, avec la formule =H1+ent(4*alea()) en B1, reproduite ensuite vers le bas. En C1, la formule =index(val;equiv(B1;H1:K1;0)), elle aussi tirée vers le bas, calcule la réponse correspondante, Val étant le nom du bloc H9:K9.

Tout cela fonctionne très bien et l’on découvre la solution optimale, qui est de 7.

Dans mon prochain blog, je vous livrerai le code de la macro...

1 Commentaire(s):

  • On peut simuler votre tableau en C11:F18 comme cela :


    j'ai fait le tableau en A1, et il suffit de saisir en A2 le numéro de l'itération qu'on veut tester (entre 0 et 65535)
    =1 0
    =4 =CAR(ENT(MOD(B$1;$A2)/$A1)+65)
    =A2*$A$2 =CAR(ENT(MOD(B$1;$A3)/$A2)+65)
    =A3*$A$2 =CAR(ENT(MOD(B$1;$A4)/$A3)+65)
    =A4*$A$2 =CAR(ENT(MOD(B$1;$A5)/$A4)+65)
    =A5*$A$2 =CAR(ENT(MOD(B$1;$A6)/$A5)+65)
    =A6*$A$2 =CAR(ENT(MOD(B$1;$A7)/$A6)+65)
    =A7*$A$2 =CAR(ENT(MOD(B$1;$A8)/$A7)+65)
    =A8*$A$2 =CAR(ENT(MOD(B$1;$A9)/$A8)+65)

    Les formules en b2 et a3 peuvent être tirées vers le bas

    Exemple avec l'itération 0:

    1 0
    4 A
    16 A
    64 A
    256 A
    1024 A
    4096 A
    16384 A
    65536 A

    Exemple avec l'itération 65000:
    1 65000
    4 A
    16 C
    64 C
    256 D
    1024 B
    4096 D
    16384 D
    65536 D

    On testera que ce qui est necessaire et on sera sur de trouver la solution maxiamle :)

    By Blogger Benji, sur 12:27 PM  

Enregistrer un commentaire

<< Accueil