300

ben pour le minimax c'est pas tres compliké si ca t'interresse je pe te filer des conseils
surtout que comprendre comment ca marche mem si tu n'arrive pas à l'implementer te servira enormement
Parce qu'on s'en sert pour la plupart des jeux de reflexions
meme si c vrai ke pour la premiere fois il est preferable d'étudier le morpion en exemple
ps tu l'as pe etre recu en mini message mais j'en étais pas sur alors le voila ou le revoila.

301

302

bah pour faire une ia d'un jeu de refleexion il faut tout d'abord faire une fonction d'evaluation qui va evaluer chacune des cases ou l'on peut jouer celle ci va dependre de la nature du jeu
pour le puissance 4 ce qui est interressant c'est aligner 4 pions ou bien s'en approcher dans le cas echeant
or la liste des 69 elements va te permmetre de donner une note + ou - pertinente a pour chak coups
ceci est la premiere etape.
Y a t'il deja keleke chose qui te gene dans cette etape?

303

non, en fait je vois bien déja comment je peux faire, en y réfléchissant ya pas 50 moyens smile

304

yugos a écrit :
[...]
2)En c je n'ai jamais u l'occasion de le verifier parce qu'il ne me serait jamais venu l'idee de gerer une partie de puissance 4 en quitant chaque tour le programme principale.
Oui je dis bien gerer une partie de puissance 4 car il me faut + que la colonne joué par l'adversaire ou meme le tablo actuelle.
Il me faut les stat des 2 joueurs, le nb de coup joué depuis le debut autant de parametre me diras tu ethaniel qui peuvent etre calculé à partir du dernier coup joué.
Mais bon il est aussi question d'efficacité entre une incrmentation de 1 pour le nb de coup joué et recompter a chak fois toutes les piece....
Bref je vais pas m'emmerder a rajouté des fonctions pour recalculer, convertir, enregistrer,lire des variables pour satisfaire MONSIEUR qui veut absolument faire son arbitre.
Donc t'as solution est trop contraignante surtout quand il existe des solutions + simple donc on oublie cettte histoire d'arbitre on a pas besoin d'un programme pour savoir qui est la meilleur ia.
[...]
Ps:la discussion est clause ethaniel ton idee n'est pas genial et meme si elle l'est il y a plus simple.
faire le tournoi manuellement ou avec link duera tres certainement - longtemps ke cette polymik de 10 pages sur l'arbitre. [...]
Puisqu'il faut une argumentation par a+b, allons-y gaiement ...

Hypothèses de départ :
(A) je ne programme qu'en TI-Basic, pas en C ou en Asm
(B) il était prévu de faire tourner les 2 (deux) IA sur 1 (une) seule calculatrice
(C) on ne peut pas faire tourner simultanément 2 programmes sur une TI
(D) toutes les IA sont sur un pied d'égalité
Je précise que la proposition (B) a été énoncée explicitement il y a maintenant 2 ans (et 11 jours), dans ce post, et que tout le monde était d'accord avec ça jusqu'à aujourd'hui ...

(A) => mon IA sera en TI-Basic
=> il existera pour le concours au moins une IA en TI-Basic
=> (A') le protocole de jugement des IA doit accepter les IA en TI-Basic

(B) ET (C) => (E) il faut qu'une IA appelle l'autre IA en tant que sous-routine OU (E') il faut qu'un programme tiers appelle les deux IA à tour de rôle

Or (E) est incompatible avec (D), donc (B) ET (C) ET (D) => (E')
On a (E') => (F) le programme tiers appelle les deux IA en tant que sous-programmes OU (F') le programme tiers appelle les deux IA en tant que librairies

Or (F') <=> (F'') les IA sont des librairies écrites en C ou en Asm
Donc (F') est incompatible avec (A'), donc (A) ET (B) ET (C) ET (D) => (F)
Et (F) => (G) les deux IA sont des programmes qui démarrent, jouent leur demi-coup, puis s'arrêtent

Mon idée d'arbitre (apparue en page 4 seulement, d'ailleurs) est donc un IMPERATIF dû aux 4 hypothèses de départ.
Pour faire autre chose, il faut donc obligatoirement invalider une de ces 4 hypothèses.

Il est totalement impossible d'invalider (A), point barre.
J'ai déjà un nombre incommensurable de projets en attente (dont certains datent de 5 ans maintenant) donc apprendre le C ou l'Asm sur TI devra attendre que quelques-uns de ces projets soient achevés pour libérer de la place, c'est-à-dire pas avant quelques années.

Il est totalement impossible d'invalider (C), c'est un impératif technologique.

Invalider (D) revient à définir certaines IA comme Master, lesquelles lanceront les autres IA définies comme Slave, lesquelles doivent de toute façon s'arrêter complètement une fois leur demi-coup joué, donc ça ne résoud rien.
Et comment faire s'affronter 2 Masters ou 2 Slaves ?
Donc (D) ne peux pas être invalidé.

Il ne reste donc que (B) qui puisse être invalidé, ce qui donne :
NON(B) on utilise 2 calculatrices, une par IA
Et NON(B) => ceux qui n'ont qu'une seule calculatrice à disposition sont dans la mouise ...
Et personellement, je n'ai qu'une calculatrice à disposition ...

D'ailleurs, par câble, on ne peut transmettre que des variables TI de base, donc ton programme en C devra de toute façon gérer au moins une variable TI de base (qui, au hasard, s'appelera colonne hehe !) ... enfin à vrai dire, je ne sais pas comment sont gérés SendCalc et GetCalc en C et Asm.
La seule différence, c'est que là, au moins, ton IA n'aura pas à s'arrêter à chaque demi-coup, pour la simple raison qu'elle monopolisera en permanence une calculatrice à elle toute seule grin !
Pour moi, ça ne changera pas grand-chose, puisqu'il me suffira de dire à mon arbitre que l'adversaire d'EthanIA est un autre programme qui, au lieu d'être une vraie IA, ne servira qu'à faire le lien entre l'arbitre et le câble (10 lignes de TI-Basic à tout casser).
Il faudra juste que l'on me prête une calculatrice pour lancer l'adversaire d'EthanIA.

Je propose donc de reprendre le protocole détaillé au post 196, et d'offrir deux possibilités :
* soit le programme met à jour colonne dans son dossier et s'arrête (cas de mon IA)
* soit le programme envoie colonne par SendCalc, puis se met en attente par GetCalc
Attention cependant : lorsqu'il faut transmettre à la fois colonne et nom par câble, l'ordre est important, et colonne sera reçue/envoyée avant nom (puisque c'est la valeur de colonne qui détermine s'il faut gérer nom en même temps).
Grâce à ça, toutes les IA se comprendront facilement, et les IA ne sont pas obligées de s'arrêter à chaque demi-coup.

Note : EthanIA première du nom n'est pas un réseau de neurones formels, c'est un algorithme textuel tout bête.
Par contre, EthanIA Jr (je n'ai pas encore cherché de nom) sera bien en RNF + AG.

@++
avatar
Je ne suis pas développeur Java : je suis artiste Java.
Ce que l’on conçoit bien s’énonce clairement, / Et le code pour l’écrire arrive aisément.
Hâtez-vous lentement ; toujours, avec méthode, / Vingt fois dans l’IDE travaillez votre code.
La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer.
You don't use science to show that you're right, you use science to become right.

305

Ethaniel
:
yugos a écrit :
[...]
2)En c je n'ai jamais u l'occasion de le verifier parce qu'il ne me serait jamais venu l'idee de gerer une partie de puissance 4 en quitant chaque tour le programme principale.
Oui je dis bien gerer une partie de puissance 4 car il me faut + que la colonne joué par l'adversaire ou meme le tablo actuelle.
Il me faut les stat des 2 joueurs, le nb de coup joué depuis le debut autant de parametre me diras tu ethaniel qui peuvent etre calculé à partir du dernier coup joué.
Mais bon il est aussi question d'efficacité entre une incrmentation de 1 pour le nb de coup joué et recompter a chak fois toutes les piece....
Bref je vais pas m'emmerder a rajouté des fonctions pour recalculer, convertir, enregistrer,lire des variables pour satisfaire MONSIEUR qui veut absolument faire son arbitre.
Donc t'as solution est trop contraignante surtout quand il existe des solutions + simple donc on oublie cettte histoire d'arbitre on a pas besoin d'un programme pour savoir qui est la meilleur ia.
[...]
Ps:la discussion est clause ethaniel ton idee n'est pas genial et meme si elle l'est il y a plus simple.
faire le tournoi manuellement ou avec link duera tres certainement - longtemps ke cette polymik de 10 pages sur l'arbitre. [...]
Puisqu'il faut une argumentation par a+b, allons-y gaiement ...

Hypothèses de départ :
(A) je ne programme qu'en TI-Basic, pas en C ou en Asm
(B) il était prévu de faire tourner les 2 (deux) IA sur 1 (une) seule calculatrice
(C) on ne peut pas faire tourner simultanément 2 programmes sur une TI
(D) toutes les IA sont sur un pied d'égalité
Je précise que la proposition (B) a été énoncée explicitement il y a maintenant 2 ans (et 11 jours), dans ce post, et que tout le monde était d'accord avec ça jusqu'à aujourd'hui ...

(A) => mon IA sera en TI-Basic
=> il existera pour le concours au moins une IA en TI-Basic
=> (A') le protocole de jugement des IA doit accepter les IA en TI-Basic

(B) ET (C) => (E) il faut qu'une IA appelle l'autre IA en tant que sous-routine OU (E') il faut qu'un programme tiers appelle les deux IA à tour de rôle

Or (E) est incompatible avec (D), donc (B) ET (C) ET (D) => (E')
On a (E') => (F) le programme tiers appelle les deux IA en tant que sous-programmes OU (F') le programme tiers appelle les deux IA en tant que librairies

Or (F') <=> (F'') les IA sont des librairies écrites en C ou en Asm
Donc (F') est incompatible avec (A'), donc (A) ET (B) ET (C) ET (D) => (F)
Et (F) => (G) les deux IA sont des programmes qui démarrent, jouent leur demi-coup, puis s'arrêtent

Mon idée d'arbitre (apparue en page 4 seulement, d'ailleurs) est donc un IMPERATIF dû aux 4 hypothèses de départ.
Pour faire autre chose, il faut donc obligatoirement invalider une de ces 4 hypothèses.

Il est totalement impossible d'invalider (A), point barre.
J'ai déjà un nombre incommensurable de projets en attente (dont certains datent de 5 ans maintenant) donc apprendre le C ou l'Asm sur TI devra attendre que quelques-uns de ces projets soient achevés pour libérer de la place, c'est-à-dire pas avant quelques années.

Il est totalement impossible d'invalider (C), c'est un impératif technologique.

Invalider (D) revient à définir certaines IA comme Master, lesquelles lanceront les autres IA définies comme Slave, lesquelles doivent de toute façon s'arrêter complètement une fois leur demi-coup joué, donc ça ne résoud rien.
Et comment faire s'affronter 2 Masters ou 2 Slaves ?
Donc (D) ne peux pas être invalidé.

Il ne reste donc que (B) qui puisse être invalidé, ce qui donne :
NON(B) on utilise 2 calculatrices, une par IA
Et NON(B) => ceux qui n'ont qu'une seule calculatrice à disposition sont dans la mouise ...
Et personellement, je n'ai qu'une calculatrice à disposition ...

D'ailleurs, par câble, on ne peut transmettre que des variables TI de base, donc ton programme en C devra de toute façon gérer au moins une variable TI de base (qui, au hasard, s'appelera colonne hehe !) ... enfin à vrai dire, je ne sais pas comment sont gérés SendCalc et GetCalc en C et Asm.
La seule différence, c'est que là, au moins, ton IA n'aura pas à s'arrêter à chaque demi-coup, pour la simple raison qu'elle monopolisera en permanence une calculatrice à elle toute seule grin !
Pour moi, ça ne changera pas grand-chose, puisqu'il me suffira de dire à mon arbitre que l'adversaire d'EthanIA est un autre programme qui, au lieu d'être une vraie IA, ne servira qu'à faire le lien entre l'arbitre et le câble (10 lignes de TI-Basic à tout casser).
Il faudra juste que l'on me prête une calculatrice pour lancer l'adversaire d'EthanIA.

Je propose donc de reprendre le protocole détaillé au post 196, et d'offrir deux possibilités :
* soit le programme met à jour colonne dans son dossier et s'arrête (cas de mon IA)
* soit le programme envoie colonne par SendCalc, puis se met en attente par GetCalc
Attention cependant : lorsqu'il faut transmettre à la fois colonne et nom par câble, l'ordre est important, et colonne sera reçue/envoyée avant nom (puisque c'est la valeur de colonne qui détermine s'il faut gérer nom en même temps).
Grâce à ça, toutes les IA se comprendront facilement, et les IA ne sont pas obligées de s'arrêter à chaque demi-coup.

Note : EthanIA première du nom n'est pas un réseau de neurones formels, c'est un algorithme textuel tout bête.
Par contre, EthanIA Jr (je n'ai pas encore cherché de nom) sera bien en RNF + AG.

@++

306

Pas besoin de faire des trucs compliqués si tu regardes 3s, des IA qui jouent contre un humain suffisent. Il suffit de se dire par IRC ou MSN quels sont les coups que l'IA a choisi, pour que l'adversaire les reproduise.

Avantages
-une caltos par personne
-pas besoin de link ni de Task Switcher (Kevin en fait un au passage)
-pas de protocole plus ou moins floo et répondant moins que plus à tout ce que tout le monde veut , pas de pointeurs, etc...
-plus convivial, les autres peuvent suivre la partie

307

Par MSN ou IRC, EthanIA sera aussi intelligente que moi (oui, je sais, ce n'est pas une référence), d'autant plus que ma 92+ reste chez moi, loin d'Internet ...
Et pour EthanIA Jr, je préfèrerai qu'elle apprenne sans que je sois obligé d'être là pour reporter tous les coups joués.
Enfin, si une IA en C qui tourne sans interruption du début à la fin d'une partie (puisque c'est ce que tout le monde ici souhaitais) est capable d'afficher un nombre entre 1 et 7, je pense qu'elle doit pouvoir l'envoyer par câble, non ?

Maintenant que mon rapport est rendu, je vais pouvoir terminer la refonte de mon arbitre (enfin ... ça dépendra de ma vitesse de progression à Deus Ex).

@++
avatar
Je ne suis pas développeur Java : je suis artiste Java.
Ce que l’on conçoit bien s’énonce clairement, / Et le code pour l’écrire arrive aisément.
Hâtez-vous lentement ; toujours, avec méthode, / Vingt fois dans l’IDE travaillez votre code.
La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer.
You don't use science to show that you're right, you use science to become right.

308

ethaniel Ce que tu es compliqué
ton hypotese (A) est tout a fait louable et moi non plus je n'ai pas beaucoup de temps pour coder et je n'ai pas envie de me prendre la tete avec ton arbitre
l'hypothese (B) n'est pas une fin mais un moyen
J'aimerai mettre les choses au claire:
TON SYSTEME D'ARBITRE N'EST PAS COMPATIBLE AVEC UN PROGRAMME EN C
LE PROBLEME CE N'EST PAS D ECRIRE DES VARIABLE TI MAIS C EST DE GARDER LES DONNEES PERSISTENTES EN PARTICULIER LES POINTEURS ENTRE CHAQUE DEMARRAGE.
Question: combien connais-tu de programme en c qui fonctionne par intermittence?
C'EST TOUT SIMPLEMENT COMPLIKE TON AFFAIRE EN C
EN REVANCHE La methode link permet à chacun de faire son ia comme il l'entends du moment qu'il integre une interface grafik,
et un mode humain vs ia doté des commandes send, get en ti-basic ou cmd_send,cmd_get en c (a verifier)
Et POUR MONSIEUR de mauvaise de foi le logiciel vti disponible gratuitement sur internet fera l'affaire
il suffira de l'executer 2 fois et d'activer le virtual link qui reliera les 2 emulateurs
Maintenant je te prierai de ne pas voir le mal partout de faire des critik constructives et non puerils
avant de critiker ton idee j'y ai reflechis , mais pour des raisons que j'ai citer + haut l'idee de l'arbitre n'est pas ideal en c
Maintenant faisons avancer l'organistation du tournoi efficacement!
a quand la date butoire,la date du tournoi? qui participes?

Note : EthanIA première du nom n'est pas un réseau de neurones formels, c'est un algorithme textuel tout bête.
Par contre, EthanIA Jr (je n'ai pas encore cherché de nom) sera bien en RNF + AG.

ps:j'espere bien que celle que tu presenteras sera en reseaux de neurones formelles parce que ca a allerent vraiment puissant comme principe pour qu'il utilise en cybernetique...
Dommage que les RNF ne sont pas au programme de prepas d'ailleur à ce propos moi non plus j'ai pas beaucoup de temps pour programmer.
Et comme j'ai deja fais mon ia pendant les vacances d'été je comprendrai tres bien ceux qui veulent + de delai c'est pour ca que la date du concours doit etre une decision collective merci de poster une date qui vous arrangerais le mieux:
en ce qui me concerne
vacance de noel me parait bien ( vu l'ancienneté du concours)?

L'idee de squalyl² est pas mal non plus (j'aime bien ce coté convivial ^^)

309

putain mais pourquoi on s'emmmerde, on peut pas faire des AI de base sur PC ou autre et les faire s'affronter SIMPLEMENT?

Est ce que l'important est la communication d'un nombre de 1 à 7 dans les deux sens ou le programme lui même?

310

yugos a écrit :
[...]
J'aimerai mettre les choses au claire:
TON SYSTEME D'ARBITRE N'EST PAS COMPATIBLE AVEC UN PROGRAMME EN C
LE PROBLEME CE N'EST PAS D ECRIRE DES VARIABLE TI MAIS C EST DE GARDER LES DONNEES PERSISTENTES EN PARTICULIER LES POINTEURS ENTRE CHAQUE DEMARRAGE.
Question: combien connais-tu de programme en c qui fonctionne par intermittence?
C'EST TOUT SIMPLEMENT COMPLIKE TON AFFAIRE EN C
EN REVANCHE La methode link permet à chacun de faire son ia comme il l'entends du moment qu'il integre une interface grafik,
et un mode humain vs ia doté des commandes send, get en ti-basic ou cmd_send,cmd_get en c (a verifier)
[...]
avant de critiker ton idee j'y ai reflechis , mais pour des raisons que j'ai citer + haut l'idee de l'arbitre n'est pas ideal en c [...]
Apparemment, tu as mal lu la fin de mon dernier pavé.
Pour la non-compatibilité de mon arbitre avec une IA en C, je n'en savais absolument rien avant ces quelques pages de discussion, donc je ne risquais pas de savoir combien il existe de programmes en C fonctionnant par intermittence.
C'est pourquoi j'ai finalement proposé d'abandonner la proposition (B) énoncée il y a 2 ans, et de faire s'affronter les IA par câble, avec une IA par calculatrice : je peux facilement rendre mon arbitre compatible avec cette hypothèse, et c'est bien ce que tu demandes à corps et à cris depuis le début, non ?
Comme ça, tout le monde est content happy !

Mais plutôt que d'avoir des IA qui se balancent à la figure des nombres entre 1 et 7 dès le début, un petit handshake (appelez ça un SYN-ACK si ça vous chante) ne ferait pas de mal, ni une petite salutation à la fin, cf. post 196.
Et si votre IA entre directement dans le vif du sujet en envoyant directement son premier coup si vous lui dites qu'elle est le joueur 1, ou en attendant une réception par câble si vous lui dites qu'elle est le joueur 2, il n'y a que quelques SendCalc et GetCalc à ajouter, je vous donnerai l'algorithme si vous n'avez pas envie d'y réfléchir ...
Comme ça, vous non plus vous n'aurez pas grand-chose à changer.

@++
avatar
Je ne suis pas développeur Java : je suis artiste Java.
Ce que l’on conçoit bien s’énonce clairement, / Et le code pour l’écrire arrive aisément.
Hâtez-vous lentement ; toujours, avec méthode, / Vingt fois dans l’IDE travaillez votre code.
La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer.
You don't use science to show that you're right, you use science to become right.

311

desolé,quand j'ai ecrit le message il n'y avait pas encore ton post je l'ai posté que bien + tard
^^super tout est resolu mise a part la date du concours et qui participe?
voila merci de poster un avis sur la question.
en ce quime concerne
-je participe
-vacance de noel me parait une bonne date

je commence à m'interesser aux RNF je te souhaite bonne chance pour tes articles.
J'ai surtout hate de voir l'effcacité de cette théorie car l'efficacité de cette théorie n'a jamais été demontrer on a juste remarquer que ca marche.
Parce que le minimax on est sur de trouver la meilleur solution moyennant un fonction d'évaluation correct.
Pour les systeme neuronique on n'est pas sur que l'evolution et la selection soit suffisant pour trouver la meilleure des solutions.


Ps : pour resoudre le probleme de 2 caltos , le virtual link de vti peut faire l'affaire
j'ai tester avec bomberdude il fonctionne tres bien.
Bref sans vouloir fair une autre disucussion j'espere me tromper en voyant les performance d'une ia de puissance 4 implementer en rnf
ceci dit @+

312

1/ Je participe
2/ Les vacances de Noël me paraissent également être une bonne date butoir (du moins la première de toutes les dates butoirs qu'il y a sûrement hehe !)
J'avais d'ailleurs donné cette échéance pour mon arbitre définitif, arbitre que j'ai en fait reprogrammé ce matin en 2h au saut du lit (certes, il y avait beaucoup de copier/coller), il n'y a plus que quelques détails à implémenter (détails qui, comme d'habitude, vont en fait prendre beaucoup de temps roll).
Il est donc possible qu'EthanIA soit achevée pour les vacances ... bien que l'implémentation ne soit pas encore terminée, et que la feuille où est noté le détail de l'algorithme a beaucoup de chances d'avoir été perdue depuis un an que je ne l'ai pas touchée ...

Pour l'article sur les RNF, je pense d'abord bien avancer celui que j'ai commencé il y a 2 mois sur Wikipédia.
J'ai déjà réfléchi à la structure du réseau de FourMel (nouveau nom non définitif d'EthanIA Jr, jeu de mot entre formel rapport au RNF et l'anglais four/4 rapport au Puissance 4 hehe), et ce sera bien évidemment un classique perceptron avec 42 points d'entrée, 7 neurones (linéaires ou sigmoïdes) de sorties afin que chaque colonne reçoive une note plus ou moins haute (et pour choisir la colonne de poids le plus haut, soit je regarde le maximum ... soit je fais le barbare et construit un RNF codeur 7 vers 3 pour coder le numéro de colonne en binaire grin (je l'ai déjà fait, c'est trivial, même si le réseau est un peu maousse ...)), et au bas mot 5 couches intermédiaires (les 2 premières, déjà construites, servant à transformer une information ternaire en 2 informations binaires).
Les 3 (ou plus) couches codantes sont encore floues, mais j'ai déjà une idée de la taille et du précâblage (génération 0) de la première et de la dernière couche, grâce à la même astuce d'optimisation utilisée par EthanIA.

Mais d'abord, je dois finir EthanIA #ganbatte# !

@++
avatar
Je ne suis pas développeur Java : je suis artiste Java.
Ce que l’on conçoit bien s’énonce clairement, / Et le code pour l’écrire arrive aisément.
Hâtez-vous lentement ; toujours, avec méthode, / Vingt fois dans l’IDE travaillez votre code.
La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer.
You don't use science to show that you're right, you use science to become right.

313

ben c parfait (merci à ethaniel pour la rapidité de la reponse)
j'attends avec impatience l'avis de Pollux et squalyl sur la question?
Ceci dit il n'est pas trop tard pour que d'autres programmeur participe!
Ceux qui sont motivés par la programation d'une ia (et qui le peuvent parce que sinon un mois ca risque d'etre juste)
se veront certainement accordé un delai supplementaire.
voila voila
rappel des modalité: grille 6 lignes par 7 colonnes, interface graphique(ce ne sera tres certainement pas noté alors pas la peine de sortir le grand jeu), Un mode humain vs ia muni d'une interface link.
pour l'ia:-un temps de reflexion raisonable(<10 sec)
-une reconnaisance de la victoire biensure
-possibilité de choisir qui commence
date butoire provisoire:vacance de noel
voila voila
@++

314

moi c'est bon si on me file le code de gestion du link avec le protocole qui-va-bien tongue

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

315

316

ok
a l'unanimité je declare le tournoi d'ia de puissance 4 fixé aux vacances de noel
l'interface link je travailerais dessus courant cette semaine.
une version du code en ti-basic et en c sera fourni à tous les participant en l'occurrence:
-ethaniel
-pollux
-squalil²
-et moi meme

une fois que le version du code link sera fourni on fixera une date precise
voila voila je vous tiens au courant pour le link à priori il ne devrait pas avoir de difficulté à le faire.
Bon ben bonne chance à tous les participants.
ps : il n'est pas trop tard pour qu'un autre patricipant se joigne à nous.

317

Pourquoi presser les choses? Le topic a pas encore 2 ans et demi ...
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

318

Allez hop, je me joins à vous. Juste pour vous prévenir: ça sera un truc baclé juste fait pour avoir le plaisir d'observer une humiliation.

319

mouarf t'inkiet ce sera pareil pour moi ^^

320

yugos a écrit :
ok
a l'unanimité je declare le tournoi d'ia de puissance 4 fixé aux vacances de noel
l'interface link je travailerais dessus courant cette semaine.
une version du code en ti-basic et en c sera fourni à tous les participant en l'occurrence:
-ethaniel
-pollux
-squalil²
-et moi meme

une fois que le version du code link sera fourni on fixera une date precise
voila voila je vous tiens au courant pour le link à priori il ne devrait pas avoir de difficulté à le faire.
Bon ben bonne chance à tous les participants. ps : il n'est pas trop tard pour qu'un autre patricipant se joigne à nous.
J'ai écrit hier l'interface link pour les programmes en TI-Basic qui, comme les programmes en C, tournent en continu tout le long de la partie en monopolisant la calculatrice.
A part pour les fonctions SendCalc et GetCalc dont l'implémentation en C existe peut-être déjà, la réécriture de mon code en C est absolument triviale.
Je posterai le code cet après-midi, là je dois vraiment filer ...

Au passage, même si l'intéressé ne s'en est pas encore plaint, je pense que squalyl^2 apprécierait d'avoir un y au lieu d'un i hehe.
De même, je ne sais pas ce qu'en pense Pollux, mais personnellement, j'aimerais bien retrouver ma majuscule si ça ne te dérange pas embarrassed, merci ...

@++
avatar
Je ne suis pas développeur Java : je suis artiste Java.
Ce que l’on conçoit bien s’énonce clairement, / Et le code pour l’écrire arrive aisément.
Hâtez-vous lentement ; toujours, avec méthode, / Vingt fois dans l’IDE travaillez votre code.
La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer.
You don't use science to show that you're right, you use science to become right.

321

pencil

et question: est ce plus malin de recoder sendcalc et getcalc en C? cela existe-t-il déjà de manière facilement utilisable? ou est ce plus rapide de faire des chtits progs en C qui prennent des args basic pour envoyer un buffer d'octet?

je pense à ça à cause du protocole rajouté par TI aux fonctions send/get calc, et à leur manque de flexibilité.

c'est assez con de récupérer des nombres venant d'une liste basic en C, d'en faire un char[] et de le passer à la fonction d'envoi brut.

les fonctions link en C sont les suivantes:
OSCheckSilentLink
Checks the link state.
OSLinkClose
Closes a low-level link communication.
OSLinkCmd
Process the command received through the link port.
OSLinkOpen
Opens low-level link communication.
OSLinkReset
Resets the link interface.
OSLinkTxQueueActive
Determines whether the transmit queue is active.
OSLinkTxQueueInquire
Determines the number of free bytes in the transmit buffer.
OSReadLinkBlock
Reads bytes from the link receive buffer.
OSWriteLinkBlock
Inserts bytes into the link transmit buffer.
sendcalc Sends a variable (or program) through the link interface.


Autrement dit, rien n'est prévu pour recevoir une variable basic, ie l'IA d'Ethaniel pourra recevoir les infos sur les coups mais pas envoyer. Donc faut passer en protocole bas niveau. Je vais essayer pondre un prog C utilisable en zicba pour envoyer et recevoir des buffers d'octets sans protocole, puisque c'est ce que font de base les fonctions OSReadLinkBlock et OSWriteLinkBlock.

je sais gérer ça, je pense que ce sera ma seule contribution parce que je n'aurai pas le temps de coder une IA.

edit:
-les piles de ma ti sont mortes
-le link est foutu, je sais pas où j'ai mis mon bricolage de réparation
-j'ai pas de rom 92+ pour vti
-je sais pas où elles sont sur le site de TI
... gni

journée de merde pawaa

re-edit:

vala les fonctions de tigcc qui gèrent la com.
unsigned short LIO_RecvData (void *dest, unsigned long size, unsigned long WaitDelay);
unsigned short LIO_SendData (const void *src, unsigned long size);

ça n'envoie pas une var, juste un buffer.
si on veut utiliser les fonctions équivalentes en basic, faut se taper le handshaking.

autant recoder un utilitaire basic qui refait ces fonctions sans protocole, c'est plus simple, plus flexible (on peut faire le protocole qu'on veut) et plus rapide.

322

Bon voila j'ai tenté ça, je le passe pas en source tant que je ne suis pas sûr.

// C Source File
// Created 26/11/2004; 13:42:07
// programme freeware créé par squalyl^2 pour envoyer une liste d'octets sur le link sans protocole
// contact: squalyl^2 sur le forum www.yAronet.com

#define COMMENT_STRING         "Utilitaire d'envoi de données low level en basic"
#define COMMENT_PROGRAM_NAME   "bSendCalc"
#define COMMENT_VERSION_STRING "0.1.0.0 test"
#define COMMENT_VERSION_NUMBER 0,1,0,0 /* major, minor, revision, subrevision */

#include <tigcclib.h>

//on sait jamais...
#ifndef FALSE
#define FALSE 0
#endif

#ifndef TRUE
#define TRUE ~FALSE
#endif

#define ARG_COUNT_ERROR -1
#define ARG_TYPE_ERROR -2
#define LINK_ERROR -3

//renvoie un nombre à tios en sortie de fonction
void return_tios(int i, char quit) {
	push_quantum(END_TAG);
	push_long_to_integer(i);
	if(quit) exit(0);
	return;
}

// Main Function
void _main(void)
{
	ESI ap;
	unsigned char *data;
	int count,i,realcount;
	
	if(ArgCount()!=1) {
		//si on ne donne pas UN arg (liste_données) on sort
		return_tios(ARG_COUNT_ERROR,TRUE);
	};
	//ici c'est bon on a un arg reste à savoir si c'est une liste
	InitArgPtr(ap);
	if(GetArgType(ap)!=LIST_TAG) {
		//si on donne pas une liste on sort
		return_tios(ARG_TYPE_ERROR,TRUE);
	}
	//ici c'est bon on a une liste
	//on regarde la liste
	ap--;
	//comptage des octets dans la liste
	count=RemainingArgCnt(ap);
	//allocation	
	data=malloc(count*sizeof(char));
	realcount=0;
	for(i=0;i<count;i++) {
		//pour chaque élément de la liste, regarde son type et ignore l'élément si ce n'est pas un entier positif
		if(GetArgType(ap)==POSINT_TAG) {
			realcount++;
			data[i]=GetIntArg(ap)%256; //modulo 256 on veut des octets %)
		}
		//on pourrait traiter éventuellement les chaines de caractères mais faudrait prévoir la taille dans un premier scan
	}
	//ici on a scanné tous les éléms de la liste et on les a stocké dans le buffer si possible
	
	//init du link
	OSLinkOpen();
	
	//envoi avec test de réussite
	if(!LIO_SendData((void*)data,realcount)) {
		//retour zéro, succès, renvoie le nb d'octets réellement envoyés.
		return_tios(realcount,FALSE);
	}
	else return_tios(LINK_ERROR,FALSE);
	//libération
	OSLinkClose();
	free(data);
	return;
}


MIN_AMS = 2 et valeur de retour active dans les options de programme

ca compile chez moi en 627 bytes, mais j'ai pas pu tester.

la réception est encore plus simple, je la ferai plus tard.

323

squalyl^2
: Autrement dit, rien n'est prévu pour recevoir une variable basic

Et ça: http://tigcc.ticalc.org/doc/link.html#getcalc, c'est quoi? roll

Les équivalents en C de getcalc et sendcalc sont... (roulement de tambours...) getcalc et sendcalc!
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

324

oups grin

• squalyl^2 pas connaitre l'ordre alphabétique triroll


enfin bon la vraie raison c'est que recevoir une var basic depuis un prog en C et réouvrir la variable ensuite c'est pas vraiement glop smile

325

Voici le code de l'interface link pour les programmes en TI-Basic (commenté, en plus eekpartie est finie ! ©©© on efface éventuellement les variables qui ne servent plus EndPrgm
, alors profitez-en !), avec quelques sections à compléter par vos soins (marquées par ©©©) :IA()
Prgm

©©© on demande à l'utilisateur si l'IA est le joueur 1 ou 2 (variable num_play)
© il faut lancer le joueur 1 avant le joueur 2 pour la synchronisation

If num_play=1 Then
 GetCalc colonne © on attend que le joueur 2 soit prêt
 ©©© on teste éventuellement si colonne vaut bien 0 (facultatif)
 init() © sous-programme d'initialisation qui prépare tout ce qu'il faut pour commencer une partie
        © (grille vide, matrices de pré-traitement, etc.)
 calcul() © calcul du premier demi-coup de la partie
Else
 init() © initialisation
 0->colonne © pour prévenir le joueur 1 que l'on est prêt
EndIf

While colonne<8
 SendCalc colonne © on envoie à l'adversaire le coup que l'on a décidé de jouer
 GetCalc colonne © on attend la réponse de l'adversaire
 check() © on vérifie le demi-coup adverse
EndWhile

© la 
check()
Prgm

If colonne>7 Then © l'adversaire dit que la partie est finie (colonne vaut 8, 9 ou 10)
 18-colonne->colonne © si un joueur gagne, l'autre perd, et réciproquement ...
 SendCalc colonne © on annonce à l'adversaire son résultat pour accuser réception
 Return © on a toujours colonne>7, donc on sortira bien de la boucle While
EndIf

©©© si on voit que l'adversaire vient de gagner
 8->colonne © l'adversaire gagne, la partie est finie
 SendCalc colonne © on le lui dit
 GetCalc colonne © on attend l'accusé de réception de fin de partie
 Return © l'accusé de réception se fait avec colonne=10, donc on sortira bien de la boucle While

©©© si on voit que l'adversaire vient de remplir la 42e case
  © (sans gagner, forcément, sinon on serait dans le cas précédent)
 9->colonne © match nul, la partie est finie
 SendCalc colonne © on le lui dit
 GetCalc colonne © on attend l'accusé de réception de fin de partie
 Return © l'accusé de réception se fait avec colonne=9, donc on sortira bien de la boucle While

©©© si on voit que l'adversaire vient de jouer un coup invalide (colonne déjà pleine, etc.)
 10->colonne © l'adversaire perd, la partie est finie
 SendCalc colonne © on le lui dit
 GetCalc colonne © on attend l'accusé de réception de fin de partie
 Return © l'accusé de réception se fait avec colonne=8, donc on sortira bien de la boucle While

calcul() © la partie n'est pas finie, on peut donc déterminer le prochain demi-coup à jouer

EndPrgm
Les fonctions init() et calcul() correspondent au coeur de votre IA, je vous laisse donc vous débrouiller avec hehe !
L'IA se lance avec IA() (sans blague roll !).
Je pense que la conversion en C ne vous posera pas vraiment de problème, et si quelqu'un la fait et la poste ici, je pense que tout le monde sera content grin !

@++
avatar
Je ne suis pas développeur Java : je suis artiste Java.
Ce que l’on conçoit bien s’énonce clairement, / Et le code pour l’écrire arrive aisément.
Hâtez-vous lentement ; toujours, avec méthode, / Vingt fois dans l’IDE travaillez votre code.
La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer.
You don't use science to show that you're right, you use science to become right.

326

SendCalc colonne © on le lui dit 
 GetCalc colonne © on attend l'accusé de réception de fin de partie 


Ca c'est bien beau mais grâce au temps de réaction pourrave (dsl) du basic le temps que le sendcalc soit reçu, que le programme s'exécute et réponde, t'as 4 chances sur 5 d'avoir "timeout" entre les deux.

327

Où ça, un timeout ?
Il envoie la variable colonne, puis attend tout de suite après la réponse, c'est pour ça qu'il ne faut rien mettre entre SendCalc et GetCalc pour éviter un tel problème.
Ca marchait très bien il y a 7 ans pour mon jeu de poker (dont j'ai perdu depuis longtemps le source embarrassed), donc je ne vois pas pourquoi ça ne marcherait plus aujourd'hui.

Déjà, tant que le SendCalc n'est pas achevé, l'adversaire ne sait pas ce que tu as joué, donc il ne risque pas de répondre.
Ensuite, si l'adversaire réfléchit tellement vite qu'il décide de son demi-coup avant même que le GetCalc en face soit prêt à réceptionner la réponse (ce dont je doute quand même un peu ...), il suffit de mettre un petit temps d'attente juste avant le SendCalc, si ceci n'est pas déjà inclus par défaut dans le SendCalc du C ...

@++
avatar
Je ne suis pas développeur Java : je suis artiste Java.
Ce que l’on conçoit bien s’énonce clairement, / Et le code pour l’écrire arrive aisément.
Hâtez-vous lentement ; toujours, avec méthode, / Vingt fois dans l’IDE travaillez votre code.
La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer.
You don't use science to show that you're right, you use science to become right.

328

pas de message depuis 26 novembre ca du bosser dure!
bon ben voila voici le code du link sur c
il sera compatible au c comme au basic (g verifié mais bon vaut mieut 2 verif qu'une)

fonction qui permettra d'envoyer la vraiable colonne à l'autre :

void envoie(int x){
//x doit etre compris entre 0 et 2^8-1
FILE *file;
file = fopen("colonne","wb");
fputc(x,file);
fputc(1,file);
fputc(POSINT_TAG,file);
fclose(file);
sendcalc (SYMSTR ("colonne"), FALSE, 0x98, NULL);
}


fonction qui receptionne la variable colonne

int recevoir(void){
getcalc (SYMSTR ("colonne"));
int * col;
FILE *f = fopen("colonne", "rb");
col = malloc(sizeof(int) * 1);
fread (col, sizeof(int), 1, f);
fclose(f);
return *col;
}

effacer la variable colonne
SymDel (SYMSTR("colonne"));

Merci à tous les particicpant de bien vouloir a present debattre du deroulement du tournoi
proposition

Mach en 11 points (à debattre il fo kil soit impaire)
lors d'un match on fait 11 partie
chak parti gagné rapporte un point
une partie perdu ne rapporte pas de point
l'ia possedant le + de point remporte le match
le score de chak joeur pour le match est parties gagnées - parties perdues
A et B sont 2 IA
A a 8 points
B a 3 points
A a gagné et son score egale 5
B a perdu score de B egale -5

le tournoi se deroule en manche
pendant cette manche tous les ia s'affrontent
a la fin de la manche l'ia qui à remporté le moins de match est éliminée
en cas d'egalité la note des ia concerné tranchera
cette note est egale à la somme des scores joué lors de cette manche

voila voila
à la fin il n'en restera plus qu'un

a tous les participants et non participant
si vous voulez participer mailez moi pour "valider votre canditature"
a1_2c4@msn.com
c'est juste ke c un pe le foulli dans le forum alors merci de me mailer.
jfg Allez hop, je me joins à vous. Juste pour vous prévenir: ça sera un truc baclé juste fait pour avoir le plaisir d'observer une humiliation.



--------------------------------------------------------------------------------
squalyl²
mouarf t'inkiet ce sera pareil pour moi ^^

à en croire squalyl² jfg
vous avez toutes vos chance
alors venez pour le fun y a pas de recompense particuliere sinon la renomé (oué pe etre pas jusk la!)
smile



329

330

yugos a écrit :pas de message depuis 26 novembre ca du bosser dure!
Euh ... joker tongue !
bon ben voila voici le code du link sur cil sera compatible au c comme au basic (g verifié mais bon vaut mieut 2 verif qu'une)
Merci (même si je ne m'en servirai pas hehe).
fonction qui permettra d'envoyer la vraiable colonne à l'autre :

void envoie(int x){
//x doit etre compris entre 0 et 2^8-1
FILE *file;
file = fopen("colonne","wb");
fputc(a,file);
fputc(1,file);
fputc(POSINT_TAG,file);
fclose(file);
sendcalc (SYMSTR ("colonne"), FALSE, 0x98, NULL);}
Si j'ai bien compris, cette fonction sert à remplacer le SendCalc x de la version TI-Basic par envoie(x) ; ... c'est bien ça ?
Par contre, j'ai l'impression que la variable x s'est subitement renommée en a hehe ...
fonction qui receptionne la variable colonne

int recevoir(void){
getcalc (SYMSTR ("colonne"));
int * col;
FILE *f = fopen("colonne", "rb");
col = malloc(sizeof(int) * 1);
fread (col, sizeof(int), 1, f);
fclose(f);
return *col;}
Ici, on remplace le GetCalc col de la version TI-Basic par *col = recevoir(void) ; (je ne suis pas sûr pour le *col) ... c'est bien ça ?
effacer la variable colonneSymDel (SYMSTR("colonne"));
No comment tongue !
Merci à tous les particicpant de bien vouloir a present debattre du deroulement du tournoi
proposition

Mach en 11 points (à debattre il fo kil soit impaire)
lors d'un match on fait 11 partie
chak parti gagné rapporte un point
une partie perdu ne rapporte pas de point
l'ia possedant le + de point remporte le match
le score de chak joeur pour le match est parties gagnées - parties perdues
A et B sont 2 IA
A a 8 points
B a 3 points
A a gagné et son score egale 5
B a perdu score de B egale -5

le tournoi se deroule en manche
pendant cette manche tous les ia s'affrontent
a la fin de la manche l'ia qui à remporté le moins de match est éliminée
en cas d'egalité la note des ia concerné tranchera
cette note est egale à la somme des scores joué lors de cette manche

voila voilaà la fin il n'en restera plus qu'un
Il faudrait déjà au moins réussir à faire s'affronter 2 IA, ce sera déjà pas mal embarrassed ...
Et comment compter les points en cas de match nul (grille totalement remplie, colonne=9) ?
a tous les participants et non participant
si vous voulez participer mailez moi pour "valider votre canditature"
a1_2c4@msn.comc'est juste ke c un pe le foulli dans le forum alors merci de me mailer.
[set_mode name="Hypnotisme"]
Ce que tu es en train de lire est un mail pour t'avertir de ma participation happy !
[unset_mode]

Quelques petites nouvelles d'EthanIA : elle lit d'ores et déjà la partie à 3 demi-coups d'avance, et bientôt 4, normalement, les modifications par rapport à 3 étant minimes.

Une recherche classique à 4 demi-coups avec exploration d'un arbre se fait normalement par une boucle avec col1 de 1 à 7, puis pour une valeur donnée de col1, une boucle avec col2 de 1 à 7, et ainsi de suite avec col3 et col4, soit 7^4 configurations avec 4 pions fantômes pour lesquelles on teste les alignements éventuels.
La grande subtilité d'EthanIA, c'est qu'elle n'explore pas d'arbre : pas de pions fantômes, donc pas de tests d'alignements, et une seule boucle avec col de 1 à 7 sans sous-boucles, tout se fait grâce à une représentation particulière de la partie (ainsi, je n'ai pas de matrice 6x7 ou équivalent représentant l'état de la grille).
Par contre, pour 5 et 6 demi-coups, je crois que je vais devoir étendre la représentation, mais si je fais ça avec des données bien réfléchies, ça devrait être faisable ...

Le problème qui va bientôt se poser concerne l'arbitre et l'interface link, indispensables pour faire communiquer EthanIA avec une autre calculatrice, et qui ne sont plus compatibles avec le dernier protocole en date (celui du ./325).

@++
avatar
Je ne suis pas développeur Java : je suis artiste Java.
Ce que l’on conçoit bien s’énonce clairement, / Et le code pour l’écrire arrive aisément.
Hâtez-vous lentement ; toujours, avec méthode, / Vingt fois dans l’IDE travaillez votre code.
La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer.
You don't use science to show that you're right, you use science to become right.