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 Benji, sur 12:27 PM
Enregistrer un commentaire
<< Accueil