Forums Casio - Discussions

Index du Forum | Discussions | Comment j'ai gagné à Galactik ; explications de ma méthode
Zezombye
Hors ligne
Membre
Niveau: Confirmé
Points: 740
Défis: 9
Message
Posté le 07/11/2017 16:52

Comment j'ai gagné à Galactik ; explications de ma méthode :

Certains étaient intéressés de savoir comment j'ai fait, donc voici en détail mon processus. Ce sera un peu long vu que le concours a duré un mois et demi
Ce serait mieux sur un blog, mais comme j'ai pas de blog, je le mets ici.

---
Le 17 septembre, je découvre la surprise dont parlaient les admins : le concours de rentrée.
J'ouvre le g1m, puis je me mets à décortiquer l'algorithme pour savoir comment est calculé le score.
On se rend compte rapidement que le calcul du score se fait dans cette boucle :
While K!=48 And K!=47 And K!=44
    If Abs Frac List 8[P] :Then
        
        Int List 8[P]->List 8[P]
        7->K
    Else
        
        GetKey->K
    IfEnd
    List 8[P]->Z
    If K=28 And ImP Z<Ymax-T Or K=27 And ReP Z<Xmax Or K=38 And ReP Z>Xmin Or K=37 And ImP Z>Ymin Or K=7 :Then
        
        Z+(K=27)-(K=38)+i((K=28)-(K=37))->List 8[P]
        For 1->I To P-1+(K!=7)(M-P+1)
            If I!=P :Then
                
                S+Mat G[I,P](1/(1+Abs ((Mat G[I,P]>0 And I>1)F-Abs (List 8[I]-List 8[P])))-(K!=7)/(1+Abs ((Mat G[I,P]>0 And I>1)F-Abs (List 8[I]-Z))))->S
            IfEnd
        Next
    IfEnd
    PlotOff ReP Z,ImP Z
    If K=78 Or K=77 Or K=7 :Then
        
        If K=77 :Then
            
            M-MOD(M-P+1,M-1)->P
        Else
            
            2+MOD(P-1,M-1)->P
        IfEnd
        PlotOff ReP List 8[P],ImP List 8[P]
        PlotOn ReP Z,ImP Z
    IfEnd
    PlotChg ReP List 8[P],ImP List 8[P]
    Text 1,1,S
WhileEnd


Plusieurs variables sont importantes ici :
- K pour Key, avec K=7 lors de l'initialisation
- S pour Score
- I pour Itérateur
- P pour Etoile (2 à 7, l'étoile 1 étant le centre de l'écran)
- F pour Distance (20, ne change pas).

On remarque que le code exécuté pour le recalcul du score est inutile ici, car on veut juste comprendre l'algo. Ainsi, on assume que K = 7 est toujours vrai.
En étudiant un peu plus l'algorithme, on remarque que la boucle While fonctionne ici comme un For qui itère sur P de 2 à 7. En pseudo-langage, ça donne :
for (int P = 2; P <= 7; P++) {

    for (int I = 1; I <= P-1; I++) {
                                                1        
        S+Mat G[I,P]*(--------------------------------------------------
                      1+|20(Mat G[I,P]>0 And I>1)-|List 8[I]-List 8[P]||
        
                             K != 7
        - -------------------------------------------) -> S
          1+|20*(Mat G[I,P]>0 And I>1)-|List 8[I]-Z||
    }              
}


Mais comme K = 7, alors K != 7 est faux, donc on peut directement enlever cette portion du code :
for (int P = 2; P <= 7; P++) {

    for (int I = 1; I <= P-1; I++) {
                                               1                
        S+Mat G[I,P]*(--------------------------------------------------)->S
                      1+|20(Mat G[I,P]>0 And I>1)-|List 8[I]-List 8[P]||
    }        
    
}


Tout de suite, c'est plus simple.
La matrice G vaut :

     1       2        3       4       5        6       7

1      0  485402   366483  895650   398681   246960  1062990
2            0    2603497  -18533 -3484358   386459  -768468
3                     0    -646585 -3156512  1487979 -2522960
4                             0     2602703   632508 -2423677
5                                        0    -1746276  1331355
6                                                 0    -2905103
7                                                        0

À noter que G[X,Y] = G[Y,X] (avec l'instruction Mat G+Trn Mat G->Mat G).

Pour avoir le meilleur score, il faut donc influer sur le dénominateur de la fraction : 1+|20(Mat G[I,P]>0 And I>1)-|List 8[I]-List 8[P]||.
Ici, |List 8[I]-List 8[P]| est la distance entre I et P. Deux cas sont possibles :
- Si Mat G[I,P] > 0 : dans ce cas il faut que le dénominateur soit le plus proche de 1. En étudiant bien le dénominateur, il faut que |20(Mat G[I,P]>0 And I>1)-|List 8[I]-List 8[P]|| = 0, ce qui signifie que la distance entre I et P doit être la plus proche de 20.
- Si Mat G[I,P] <= 0 ou que I = 1 (on calcule le score par rapport au centre), alors plus I sera proche de P, plus la fraction sera proche de 1. Cela veut dire que si Mat G[I,P] <= 0 alors il faut que I soit le plus éloigné possible de P, et si I = 1 alors il faut que I soit aux mêmes coordonnées que P.

Toutefois, mon cerveau a décidé pour une quelconque raison de lire la condition (Mat G[I,P]>0 And I>1) en tant que (Mat G[I,P]=0 And I>1), ce qui change tout. Cela veut dire que si Mat G[I,P] < 0, alors I doit être à une distance éloignée de 20 de P, donc I peut être aux mêmes coordonnées que P avec une perte de score minime ! (ce qui n'est pas le cas, mais c'est ce que je croyais au début).

J'ai donc tracé le graphe des liaisons entre les étoiles :


Puis, je me suis rendu compte qu'il n'y avait qu'une seule configuration possible pour qu'il n'y ait que des traits verts reliant les étoiles :


La seule modification ici était d'influer sur l'angle du triangle 6-2-3 (par rapport à l'horizontale), ce qui avait un impact car G[2,4] = -18533 alors que G[3,4] = -646585. Après un bruteforce, je trouve mon score de 9 843 347,30939981. Bizarrement, mon algorithme trouve un score de 9.6 millions (mais qui me donne 9.8M lorsque je transpose la liste sur la calculatrice), mais j'ai attribué ça à un changement de moteur de calcul.
Convaincu que le seul moyen de battre mon score n'était que de quelques millièmes en changeant un peu l'angle du triangle 6-2-3, je cherche sur TI et HP, mais n'arrive qu'à faire 46M et 123M, loin des premiers.

---
Un mois plus tard, le 28 octobre, Nemhardy me donne un coup de pied au cul en sortant un score de 9 966 747. Cela implique une toute nouvelle configuration, ce que je trouve bizarre : il n'y a pas de moyen évident d'arranger les étoiles autre que ma configuration.
En cherchant un peu, je trouve qu'en rompant la liaison 4-6 et en plaçant le 4 sur le 6, cela pourrait faire augmenter mon score :
- Rompre la liaison 4-6 me fait perdre 632k
- Placer le 4 sur le centre (avec le 7) me fait gagner 895k
- La pénalité de 4 et 7 est divisée par 21, ça me fait perdre 2423/21 ~= 120k.
Tout cela s'additionne pour me donner une amélioration d'environ 120k, ce qui correspond à peu près au delta de 123k entre mon score et celui de Nemhardy.

Je teste, et je trouve un score de... 7 millions ?! Bizarre. Je refais mes calculs : seuls les 3 paramètres cités varient. Je retélécharge Galactik au cas où j'aurais modifié le calcul du score dans un de mes tests : même chose. Je teste sur Graph 90+E (en devant en plus démarrer ma VM, car j'avais épuisé la période d'essai de l'émulateur) : même chose.
Aurais-je fait une erreur dans le recopiage de l'algorithme ? Je regarde, et je ne vois pas. Je remarque que le score de 7 millions était comme si la pénalité de la liaison 7-4 était appliquée sans être divisée par 20... il doit y avoir une erreur, car G[7,4] != 0 et I > 1 donc la condition devrait être vraie.
Je teste : P = 4, I = 7, Mat G[I,P] = -2M, alors pourquoi (Mat G[I,P] = 0 And I>1) retourne 0...
...
...Ah, c'est Mat G[I,P] > 0.

(oui, il m'a fallu jusqu'au dernier moment pour que mon cerveau corrige l'erreur)

Maintenant que je connais le vrai fonctionnement de l'algorithme, une nouvelle configuration semble logique : en effet, cela veut dire que pour des étoiles à 20 de distance, les liaisons négatives sont divisées par 21.
La liaison 4-2 n'imposant qu'une pénalité de -18k, je peux les superposer, ce qui me donne une amélioration de -1063k + 896k + 485k = 318k, et la configuration suivante :


L'amélioration n'est que de 147k en raison du rapprochement des liaisons 5-3, 3-4 et 5-6, qui font sentir leurs millions de pénalités.
Un autre bruteforce pour trouver l'angle du triangle 2-3-6 (et cette fois mon algo en java trouve le même score qu'affiché sur la calculatrice), et je trouve un score de 9 991 310, qui est d'ailleurs toujours premier de la catégorie casio.

---
Avec ces connaissances en plus, j'ai re-regardé mes configurations TI et HP, que je triturais pendant un mois (mais avec un algo faux). Je me suis aidé des images des matrices :


Sur HP, je n'ai pas réussi à bien améliorer mon score : 125M contre 123M... et de toute façon la catégorie était saturée, avec 3 participants différents étant tombés sur ce qui est visiblement le score maximal.

Sur TI, après un peu d'expérimentation, je suis tombé sur cette configuration :

Ce qui me donnait 48M... pas assez, mais suffisant pour être 2ème.
Pour modifier la configuration, il faut noter que le polygone 2-11-6-10-7 est inaltérable (car composé uniquement de triangles verts) ; impossible de déplacer n'importe laquelle de ces 5 étoiles sans baisser mon score.

J'ai essayé de relier la liaison 8-5, mais c'est impossible, car il fallait alors superposer des étoiles avec une liaison négative, ou casser des liaisons positives, ce qui baissait mon score (la liaison 8-5 ne m'apportant que 1.22M).

Mais, en mettant le 7 sur le 3, il est possible de changer la structure tout en gardant l'intégralité des liaisons vertes :


On voit que, tout comme casio, on peut influer sur l'angle de l'étoile 8 par rapport à l'étoile 10. Un petit bruteforce plus tard, j'ai un score de 49 942 613, ce qui me classe premier. Mais le participant n°23 avait soumis un score de 49 946k avant de se rabattre vers HP - il y avait donc une amélioration à faire.

Y a-t-il quelque chose qui pourrait bouger dans notre configuration ? On élimine tous les triangles, il reste donc le losange 9-5-7-4 dont on peut modifier la distance 5-4 afin d'améliorer le score.
Un peu de trigonométrie pour déterminer les coordonnées de 9 par rapport à l'angle de 4 par rapport à 7, et avec un bruteforce, je trouve 49 946k.
Mais étant donné qu'il y a 2 angles à modifier : l'angle de 4 par rapport à 7, et l'angle de 8 par rapport à 10, il faut bruteforcer les 2 afin de trouver la meilleure configuration.

Un premier bruteforce et je trouve 49 946 730.080507. Un bon début, mais il me reste 133 millionièmes.
En raffinant, je me rapproche : 509, 543, puis un score de 639, que je soumets.
45 mn plus tard, je trouve un score de... 641 ! J'obtiens alors la première place au classement TI, et y reste.
Durant les prochains jours, je tente de trouver un 642, sans succès. Mon bruteforce atteint les limites, et la différence de moteur de calcul se fait sentir : des scores supposés être supérieurs à mon 641 se traduisent par un 640, 639, ou pire, .073543 (7 millièmes de moins).

J'essaie donc le BigDecimal pour garder un moteur de calcul décimal, mais... c'est lent. 1 heure pour 10^6 combinaisons, alors que je peux faire 10^9 combinaisons (voire plus, je ne me souviens plus) en flottant. Et bruteforcer sur la TI-83, n'en parlons pas.
L'interpréteur Lua de la NSpire semble une bonne option... sauf qu'il calcule en flottant lui aussi, et non pas en décimal. Il fait donc les mêmes erreurs que mon algorithme Java.

Je décide d'en rester là, en me disant que, si quelqu'un trouve un 642, je reviendrai sur Casio... mais visiblement mon 641 était le maximum possible.

Voilà, et encore merci à Nemh qui m'a permis de me rendre compte du vrai algo - sinon je m'en serais rendu compte 4 jours plus tard, et ces 4 jours auraient pu être fatals x)

Pour ceux que ça intéresse, j'ai mis les .ppt, programmes java, et matrices en pièce jointe.

Fichier joint

Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE



Nemhardy
Hors ligne
Grand maître des Traits d'Esprit
Niveau: Confirmé
Points: 1096
Défis: 54
Message
Citer : Posté le 07/11/2017 18:17 | #
Oh, chouette post !
C'est intéressant de voir l'approche des autres !

Personnellement, contrairement à toi (mais ta méthode a le mérite de te permettre réellement de t'approcher de la configuration optimale, en minimisant la «fenêtre de bruteforce», c'est assez joli, même si peut être assez peu viable sur plus d'étoiles… ), j'ai considéré le calcul du score comme une boîte noire d'une certaine manière, c'est à dire qu'une fois implémentée de mon côté pour me permettre de faire mes essais, je n'ai fait que m'en servir pour attribuer un score à des configurations, sans réflexions géométriques dessus.

L'idée que j'avais initialement était de laisser le système évoluer depuis un état quelconque, en essayant d'éviter les équilibres instables ; la nature est très forte pour minimiser de l'énergie d'un système semblable en suivant les mouvements imposées par les forces en jeu, et maximiser une énergie c'est globalement le même problème.

Mais étant un peu flemmard, j'ai d'abord commencé par une solution plus simple (et quand je dis simple, c'est vraiment le cas… x) ) : je pars d'une configuration aléatoire, puis choisis une étoile que je fais bouger d'un certain pas dans la direction maximisant l'augmentation du score ; si on ne trouve pas de direction qui augmente le score, on passe à une autre étoile, et une fois qu'on ne peut plus bouger aucune étoile, on diminue le pas (on le divisait par deux dans mon algo, mais c'est assez arbitraire) et on recommence jusqu'à ce qu'on soit passé sous un seuil arbitraire pour le pas, ou qu'on ait dépassé un nombre maximum d'itérations (arbitraire là encore).

Je savais qu'il n'y avait aucune raison que ça donne une configuration optimale, ni même une bonne configuration en fait, car on peut imaginer des cas ou il faut bouger plus d'une étoile pour pouvoir débloquer la situation même sans diminuer le pas. Cependant, ayant fait tourner mon algo environ 13 minutes, j'ai eu ladite configuration qui m'a plassé provisoirement premier, donc c'était déjà pas mal.
(J'avais tout de même fait tourner quatre threads pendant ces 13 minutes, chacun ayant des paramètres correspondants à la fenêtre dans laquelle naissaient les configurations aléatoires, et le pas initial de déplacement initial différents, histoire de voir si il y avait certains de ces paramètres plus intéressants que les autres, mais de manière totalement empirique (même si on pouvait se douter qu'une fenêtre pas trop grande, centrée avec un pas pas trop exagéré allait sûrement donner de meilleurs résultats qu'un truc un peu délirant ! )

J'en avais un peu en réserve en cas d'un petit dépassement par quelqu'un d'autre car j'ai fait un algo permettant d'améliorer une configuration pas trop mauvaise, en essayant de bouger cette fois ci plus d'une étoile par itération. Mais ça fait un truc un peu plus lourd à exécuter donc c'est viable sur des petits changement je pense mais pour les gros mouvements initiaux ça n'aurait pas été hyper intéressant, je crois ; donc je l'ai réservé à de l'amélioration de configuration, c'est à dire en travaillant directement sur du petit pas. Mais je n'ai pas vraiment eu à m'en servir, donc je n'ai pas vraiment vu jusqu'où on pouvait pousser la chose !

Et ensuite je n'ai plus vraiment eu le temps, mais j'ai trouvé le concours très sympa, et la dernière semaine (et sûrement avant, mais je m'y étais un peu moins plongé je dois dire…) a vu son lot de discussions intéressantes et de rebondissements, et ce sans trop de mauvais esprit du type «je balance mon super score une heure avant la fin», donc c'était cool !
----------------------------------
Mes programmes
Cliquer pour enrouler
Équilibrer des coefficients stœchiométriques en moins de 2500 octets sur ta Prizm : Ekisto
Ma version du moteur de calcul symbolique libre Eigenmath
Projets supportés !
Entres autres
ColorLib de Lancelot
Zelda de SmashMaster
FiXos de Kristaba
The Lingering Terror
Mes Projets futurs
(pour un futur plus ou moins proche ceci-dit…

Finir mon D.M. dans l'immédiat.
C'est hyper important
Oui
«Ceux qui exercent la profession d'herboriste-botaniste, lesquels sont de tous temps en possession de vendre des herbes ou plantes, seront soumis à la visite et inspection des gardes des apothicaires»
-- Arrêté du Conseil d'État, 30 oct. 1767

Tournois de pile ou face gratuit sur www.pilejegagnefacejegagne.com ; mon code de parrainage : aprèslundionnemhardy pour avoir 20 pièces moins chères que gratuites.

Wistaro
Hors ligne
Partenaire
Niveau: Confirmé
Points: 39
Défis: 0
Message
Citer : Posté le 07/11/2017 18:44 | #
Excellent !
Tu mérite bien ta première place, vu le travail de réflexion réalisé

Encore bravo!
----------------------------------
# Responsable modération du site tiplanet.org (communauté Texas Instruments)
# Étudiant ingénieur en électronique à l'ENSEEIHT
# Développeur TI-Basic, C, PHP, HTML, CSS, JAVA, Casio Basic (débutant !)
Lephenixnoir
En ligne
Administrateur
Niveau: Confirmé
Points: 10252
Défis: 130
Message
Citer : Posté le 07/11/2017 19:14 | #
Bravo Zezombye ! T'as bien su faire jouer la géométrie du problème, c'était mérité.

Je ne pense pas que j'aurais le temps de faire un post à moi alors à l'instar de Nemhardy, je décris ma propre méthode ici !

J'ai implémenté un pur algorithme génétique. Ce type d'algo consiste à prendre un population, ici un ensemble de solutions avec leurs scores. Il applique ensuite un cycle bien précis :

1. Évaluation : On calcule le score de chaque configuration
2. Sélection : On ne garde que les meilleures
3. Croisement : On croise les meilleures entre elles pour recréer de la population
4. Altération : On modifie aléatoirement quelques positions (pour éviter de stagner)
5. On recommence à l'étape 1.

Les deux premières étapes sont simples à s'imaginer. Pour la troisième, j'avais deux manières de croiser deux configurations. Dans chacune d'elles, je considérais pour chaque étoile, sa position dans la première configuration, puis dans la deuxième. La première méthode choisissait, pour placer cette étoile dans la configuration fille, une position au hasard sur le segment. La seconde aussi, mais elle se mettait au même endroit (au même rapport de distance, ie. le même barycentre) pour toutes les étoiles, ce qui donnait une sorte de rotation qui préservait bien le score.

Pour l'altération, je faisais vibrer toutes les étoiles sur une amplitude de λ autour de leur position. Tant que le score maximal de la population grandissait, λ restait fixe, mais s'il stagnait, λ devenait plus petit pour permettre de gagner de la précision. Si ça ne suffisant pas, λ devenait très grand pour tenter de débloquer la situation.

Je faisais tourner ça sur 65'000 à 4 millions de générations selon les cas (plus le score semblait prometteur et plus je faisais durer la simulation), en partant de configurations entièrement aléatoires. En le faisant tourner quelques minutes, je sortais plusieurs configurations à plus de 9 millions, mon meilleur score étant 9846814.67 sur Casio et 107711137.32 sur Numworks.

Comme ça ne suffisait pas pour rattraper les premiers, j'ai imaginé un autre système (que je n'ai malheureusement pas eu le temps d'implémenter). Ça consistait à traduire les relations entre les étoiles en forces et à appliquer de la mécanique sur le système. En gros, en combinant la somme de toutes les forces, le système aurait convergé naturellement vers un équilibre local. En plus de ça, j'aurais fait vibrer doucement toutes les planètes avec l'algorithme génétique pour éviter de stagner.

Encore bravo, Zezombye !
----------------------------------
Watch me, as I build my empire with my own hands.
Ne0tux
Hors ligne
Membre d'honneur
Niveau: Aucun
Points: 2851
Défis: 252
Message
Citer : Posté le 07/11/2017 20:12 | #
Félicitations Zezombye !

Je vois que nous avons eu exactement le même raisonnement ! La seule différence est que j'ai fait une rotation du triangle (6,2,3) autour de 6 de -90 à 90° seulement, par soucis de temps. Si j'avais poussé les bornes plus loin j'aurais trouvé une solution analogue à la tienne.

J'ai tout fait à la main quasiment. Avec un papier et en regardant G, si on veut une distance de 20 dès que G est positif, on a qu'une seule possibilité :

      17----------2
     / |          |\
    /  |          | \
   5   |          |  3
    \  |          | /
     \ |          |/
       4----------6


J'ai vite compris avec les coefficients de G négatifs que le duo 1 et 7 devait se trouver le plus loin possible du reste donc je suis directement tombé sur cette configuration :



(c'est fou, j'avais fait une image quasiment identique !)

Le seul algo que j'ai utilisé effectuait 2 rotations, dont celle du triangle en effet.

J'ai quand même eu de la chance dans le sens où je suis tombé sur le seul modèle de calculatrice où l'on pouvait espérer trouver juste avec ses méninges (j'ai cru comprendre qu'il y avait plus d'étoiles dans d'autres catégories, ça corse les choses) !

C'était rigolo en tout cas. J'ai envisagé le bruteforce 10 secondes avant de me rendre compte que les 2 heures passées à la main seraient bien plus fructueuses qu'un algo qui prendrait des siècles.
----------------------------------
Deviens le roi de la banquise avec Ice Slider !
Sauras-tu sortir entier des locaux infernaux de CloneLab ?!?
Prêt à risquer ta peau face à Smaug le vilain dragon en cherchant l'Arkenstone ?
Projets de la communauté que je soutiens
Rejoins l'aventure !
Timeless II d'Alex_1186
Calc Center : un système de succès sur Casio
Le futur Jeu d'aventure de Remiweb
Le très attendu Pokemon de Dodormeur
La suite du premier volet : Robscape 2 de Ray
Zelda de Smash'
L'audacieux Projet Evolution de TheProg
Le fameux Yu-Gi-Oh d'Intelligide
Sans oublier cette folie qu'est MMGOC
On en trépignerait : Jetpack Joyride, de Drakalex
Ti64CLi
Hors ligne
Membre
Niveau: Confirmé
Points: 615
Défis: 61
Message
Citer : Posté le 07/11/2017 20:23 | #
T es sur que tu la veux la Nspire
Bravo Zezombye
----------------------------------
Administrateur de Tout-82



graph100+ bleue
Neuronix9302
2nde GT
Ninestars
Hors ligne
Membre
Niveau: Confirmé
Points: 1814
Défis: 22
Message
Citer : Posté le 09/11/2017 16:37 | #
Bien joué Zezombye ! Un vrai travail de rétro ingénérie

@Lephé :
Le problème avec les deux algos que tu as (ou voulais) utiliser, c'est qu'ils convergent vers un extremum local, et non global.
Ton système peut avoir plusieurs états stables qui correspondent à plusieurs extremums. Avec ce genre d'algorithme, tu te coince très facilement dans un extremum, mais rien ne te dis que c'est le meilleur
C'est pour cela qu'on incorpore la mutation dans l'algo. Or ton étape 4 (l'altération) ne modifie pas assez ta configuration pour changer d'extremum. On parle de mutation dans le cas d'algo génétique, et la mutation c'est violent! Tu remplaces une valeur par une valeur aléatoire et pas "proche".

Un exemple : T'es à la montagne, ton objectif c'est l'altitude maximale, donc si tu avances bêtement à l'endroit le plus élevé autour de toi, tu vas finir en haut de ton immeuble, du Mont Blanc, mais t'as peu de chance de finir au sommet de l'Evrest
La mutation serait de te téléporter n'importe où sur Terre
----------------------------------
Lephenixnoir
En ligne
Administrateur
Niveau: Confirmé
Points: 10252
Défis: 130
Message
Citer : Posté le 09/11/2017 18:13 | #
En effet Ninestars, tu as bien saisi le problème de l'approche !

Le fait que je l'ai nommée « altération », c'est parce que sur le coup je ne me souvenais plus du terme exact (qui est bien « mutation »), ce qui montre bien que je n'ai pas encore assez l'habitude de ces algos.

Je n'avais pas pour souvenir qu'on prenait juste un truc aléatoire. Mais note que quand je dis « si ça ne suffisait pas, λ devenait très grand pour tenter de débloquer la situation », j'entends très grand. Sur la Numworks, j'ai pu constater qu'augmenter les facteurs aléatoires jusqu'à un rapport de 100 par rapport à la configuration initiale améliorait l'efficacité de l'algo. J'en étais alors à des déplacements sur des amplitudes de plus de 120 dans chaque direction, et ça couvre toute la hauteur de l'écran sur cette machine.
----------------------------------
Watch me, as I build my empire with my own hands.


Index du Forum | Discussions | Comment j'ai gagné à Galactik ; explications de ma méthode
Publicité et partenaires
Casio Education
Casio éducation

TI-Planet
Casiopeia
Casiopeia
CasioFan, la communauté ClassPad
CasioFan
CodeWalrus
CodeWalrus

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2017 | Il y a 50 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements
Rugby Manager | Jeu de basket | Jeu de handball | Jeu de tennis | Nova Raider | Réparation téléphone | Soccer Rush | Tasty Tale

Planète Casio est un site communautaire indépendant, géré bénévolement et n'est donc pas affilié à Casio | Toute reproduction de Planète Casio, même partielle, est interdite
Les fichiers, programmes et autres publications présents sur Planète Casio restent la propriété de leurs auteurs respectifs et peuvent être soumis à des licences ou des copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd