Concours d'IA : 1ère édition
Posté le 07/02/2014 20:42
Bonjour à tous et à toutes, casiofans !
Pour la première fois sur Casio, j'ai le privilège de vous annoncer le commencement d'un nouveau style de concours : le combat d'intelligences artificielles !
pour la petite histoire
et oui !
Il y a 2 ans, je me lançais avec Ne0tux dans un concours d'IA, nous avions déjà bien avancé quand le bac puis de la prépa de ce dernier ne nous laissa pas le temps de le finir...
Suite à un crash de mon ordi, je perdit tous les squelette de jeux qu'on avait programmé, ce qui arrêta définitivement notre projet, mais aujourd'hui suite à une discussion avec Limachi et vu l'engouement que provoque Prologin, je pense qu'il est l'heure de remettre à jour ce projet.
(D'ailleurs Neo' a réussi à retrouver le squelette d'un programme et la belle image que vous avez quand vous lancez le programme.)
Tout d'abord qu'est ce qu'une IA (intelligence artificielle) ?
Wikipédia nous explique un peu ce que c'est mais je vais vous simplifier l'histoire.
Le but d'une IA est de faire réfléchir l'ordinateur, en l’occurrence la calculatrice, comme un humain l'aurait fait.
Pour ce faire, vous allez devoir apprendre à gérer l'algorithmie.
Je vois déjà quelques visages interrogateurs
"
Qu'est ce qu'il est en train de me raconter celui-là"
Et bien, en fait, c'est beaucoup plus simple que ça n'en a l'air.
Si vous avez le courage, vous verrez que dans 5 minutes, tout sera déjà beaucoup plus clair dans votre esprit et vous serez fin prêts pour débuter le concours.
Voici comment se déroule une étape du concours :
1) Je sors le "squelette" du programme, c'est moi qui gère tout l'aspect graphique du programme, les menus...
2) Je vous propose également un fichier vide, que vous devrez remplir avec votre IA.
3) Toutes vos IA se battent l'une contre l'autre et un certain nombre de points vous est attribué en fonction de vos résultats.
Parlons dès à présent du "comment" d'une intelligence artificielle. J'utiliserai dans cet exemple un jeu de morpion :
Une première approche d'une IA est de la coder en conditions préférentielles. Je m'explique, vous devez lui indiquer en fonction de la situation, ce qu'elle doit d'abord faire, puis ensuite cela, si elle ne peut pas faire la première action.
Exemple du morpion:
1) Regarder si vous pouvez gagner.
2) Vérifier que l'autre ne peut pas gagner.
3) Trouver quel est le meilleur coup à jouer.
Facile à dire hein
mais un peu moins à faire
Comment vérifier si vous pouvez gagner : c'est très simple, il suffit de regarder si deux de vos pions ne sont pas mis l'un a côté de l'autre et si la troisième case est vide (pareil pour vérifier si l'autre ne peut pas gagner).
Par après la partie (un peu) plus dure consiste à trouver quel est le coup le plus avantageux pour vous.
Mais je suis sur que vous allez vous en sortir
Avec un peu de réflexion, je suis sur que vous trouverez plein d'idées auxquelles je n'aurais même pas pensé.
Il vous suffit ensuite de ne retourner à la fin de votre programme que la valeur de deux variables, A et B qui seront les coordonnées de votre coup stocké dans une matrice ( mat B[ B , A ] ).
Parlons dès à présent du concours en lui-même :
- C'est un concours qui se déroule sur une année entière.
- Tous les deux mois, un nouveau squelette de programme vous est proposé.
- Vous avez deux semaines pour remettre votre intelligence artificielle.
- Vous n'êtes pas obligé de participer à tous les éditions pour gagner un prix à la fin de l'année.
- Chaque participation vous rapportera plus ou moins de points en fonction de vos résultats et un classement sera établi à partir de ces points.
- Le concours est exclusivement en Basic pour toucher plus de monde et pour vous obliger à réfléchir à quelle IA est la plus rapide et comment l'optimiser au lieu de faire une méthode bourrin en C.
- Quand vous êtes satisfait de votre IA, vous pouvez l'envoyez à
vous aveez le droit de me l'envoyer plusieurs fois, si vous vous rendez compte que vous vous êtes trompé, mais ne me spammez pas non plus.
Critères de notations :
1.5 point pour le niveau de programmation
1 point pour l’optimisation du code
1 point pour absence de bugs
2 points pour la rapidité
2 points pour l’efficacité contre une autre IA
2.5 points pour l’efficacité contre un joueur humain
Si, vous vous demandez pourquoi j'ai décidé de favoriser l'efficacité contre des joueurs humains, est que :
Imaginons que toutes les IA soient globalement mauvaises (on ne l'espère pas), la moins mauvaise gagnerait plus de points et auraient à la fin un plutôt bon score alors qu'elle ne le mérite pas vraiment au vu de ses performances contre des personnes réelles.
J'espère que vous êtes aussi motivés que je le suis et que vous allez nous pondre des IA de qualité.
Pour cette première édition :
Vous avez 2 semaines (donc jusqu'au 22/02/2014) pour écrire une Intelligence Artificielle du jeu du morpion (ou OXO) qui sera écrite dans le programme OXOIA et qui renverra A et B, comme les coordonnées du coup de votre IA.
Le fichier contenant le programme OXO, OXOIA, la picture 2 et 3 est dans le fichier joint.
Attention à ne pas changer la matrice B, pour le bon déroulement du jeu. Vous êtes libres d'utiliser tout ce qui est autres matrices, str, list, fn,variables... mais faites attention au fait que ces données peuvent être modifiées par les autres joueurs aussi.
Sauf les variables C, H, U, M, N, r !
Pour le menu du squelette, les cases vides à gauche et à droite, contiendront les IA quand elles auront été programmées.
participants :
-
Positon
-
Totoyo
-
BTL
-
Tenmatx
-
Limachi
-
Julien_1
-
Javierxd
-
Nemhardy
- Kirafi
- Pie3636
- Eltoredo
- Dark Storm
- Thomatos
- Maliafo
- Drac0300
...
N'hésitez pas à participer, il ne faut pas forcément être très bon en programmation, il faut juste savoir réfléchir et réussir à faire réfléchir votre calculatrice.
Je compte sur vous pour participer en masse et ainsi créer le plus gros combat d'IA jamais programmé sur CASIO !
Si vous avez des questions, n'hésitez pas à les poser, je répondrai volontiers (et je ne serai pas le seul).
BTL
Fichier joint
Citer : Posté le 09/02/2014 17:35 | #
Sinon, tu as réussi à régler le problème de savoir quelle joueur est ton IA?
Jouez à 6 sur une seule calto : Curve Fever
Un die and retry qui vous fera bieeeen rager Test Andropov
un très bon sokoban
le seul vrai jeu de foot en basic : FIFA 12
Ca c'est ce que j'appelle un jeu de reflexion jewel master
Qui vaincra l'intelligence artificielle de cet othello
Le célèbre pacman
Et tant d'autres BTL's games
Le jeu du mois de Novembre et award du jeu le plus dur de l'année 2013 MultiTask, testez-le
Citer : Posté le 09/02/2014 17:37 | #
premier bug trouvé:
++X
+X+
++O
mon IA n'arrive pas a placer le O en bas a gauche
Ajouté le 09/02/2014 à 17:41 :
Sinon, tu as réussi à régler le problème de savoir quelle joueur est ton IA?
Compter les tours (comme propose Totoyo) n'est pas faisable dans le cas ou l'IA joue pour la 2ème fois (ou +ième fois) et les quantité de pions sur le plateau sont identiques (on peut avoir un 1 et 2 et donc l'IA ne peut pas savoir qui elle est)
-en C:
-Un pong.
-Un projet en pause. Je compte le reprendre de temps en temps: Summer Cursed
-mon tuto sur les Str
Mes calto: G25+, G75
Mon minecraft en dévelopement
-Portal2D de JavierXD
-CalCraft de Wime
-GeekBros du groupe GeekBrothers (Eiyeron,Siapran,KevKevVTT,Adbook,LIMachi)
Citer : Posté le 09/02/2014 17:48 | #
Attendez, si j'ai bien compris, on n'a pas le droit de récupérer la valeur de la variable C, même si on ne modifie pas cette variable ?
Citer : Posté le 09/02/2014 17:49 | #
@Limachi :Si il y a autant de pions de chaque joueur et que c'est a l'ia de jouer, alors l'ia était le premier joueur
quand le premier joueur joue pour la première fois, il n'y a aucun pion sur le plateau, donc autant pour chaque joueur
Avec la semelle de nos chaussures, on en fait autant
Citer : Posté le 09/02/2014 17:51 | #
Tout à fait Maliafo, donc si il y a plus de 2 que de 1, c'est que tu es 1.
S'il y a autant de 1 que de 2, c'est que tu es les 2.
ps:le bug c'est de ta part ou de ma part?
@Positon, si tu as le droit d'utiliser C, du moment que tu ne le modifie pas.
Jouez à 6 sur une seule calto : Curve Fever
Un die and retry qui vous fera bieeeen rager Test Andropov
un très bon sokoban
le seul vrai jeu de foot en basic : FIFA 12
Ca c'est ce que j'appelle un jeu de reflexion jewel master
Qui vaincra l'intelligence artificielle de cet othello
Le célèbre pacman
Et tant d'autres BTL's games
Le jeu du mois de Novembre et award du jeu le plus dur de l'année 2013 MultiTask, testez-le
Citer : Posté le 09/02/2014 17:54 | #
je pense que c'est de ma part, une erreur dans la gestion des priorités de coups de mon IA (j'ai fait des test, c'est a chaque fois que l’ennemi de l'IA va finir un coup sur une diagonale que mon algo plante)
ok, je vais donc utiliser ce conseil de malifao (qui ne m'était pas venu a l'ésprit) pour rendre mon IA parfaitement autonome
-en C:
-Un pong.
-Un projet en pause. Je compte le reprendre de temps en temps: Summer Cursed
-mon tuto sur les Str
Mes calto: G25+, G75
Mon minecraft en dévelopement
-Portal2D de JavierXD
-CalCraft de Wime
-GeekBros du groupe GeekBrothers (Eiyeron,Siapran,KevKevVTT,Adbook,LIMachi)
Citer : Posté le 09/02/2014 19:23 | #
Alors, comme certains commencent déjà à finir leur IA, voila comment me faire parvenir la votre :
Vous devez envoyer un mail à cet adresse :
non je n'ai pas créé l'adresse pour l'occasion, c'est celle de ma chaine Youtube
Jouez à 6 sur une seule calto : Curve Fever
Un die and retry qui vous fera bieeeen rager Test Andropov
un très bon sokoban
le seul vrai jeu de foot en basic : FIFA 12
Ca c'est ce que j'appelle un jeu de reflexion jewel master
Qui vaincra l'intelligence artificielle de cet othello
Le célèbre pacman
Et tant d'autres BTL's games
Le jeu du mois de Novembre et award du jeu le plus dur de l'année 2013 MultiTask, testez-le
Citer : Posté le 09/02/2014 20:03 | #
Bon je laisse tomber...
Déjà par manque cruel de temps, et puis parce que mon idée géniale ne sert à rien en fait...
Mon projet (tout programmé en Caml), c'était de dresser l'arbre de toutes les possibilités de remplissage, avec pour chaque nœud, le triplet:
(grille partiellement remplie,
nombre de grilles "filles" faisant gagner X,
nombre de grilles "filles" faisant gagner O)
Et à chaque essai je descendais dans l'arbre, je regardais quel coup donnait le plus de chance de victoire, et je jouais celui là!
Seulement mon IA ne bloquait absolument pas mes coups et perdait en beauté...
Du coup à la place je lui ai dit de faire le coup qui minimisait les chances de victoire de l'adversaire!
Mais re-fail... je la bas comme je veux, sauf des fois où il y a par miracle égalité...
Même les matchs IA vs IA font pitié à voir...
Bon, bah bonne chance à vous les gars! Je me retire.
PS: Mon arbre a 9! = 362880 feuilles!
Timeless Remix
Super Run & Jump
Timeless
Les tests vidéo de Marmotti
Timeless Remix Airwolf
Citer : Posté le 09/02/2014 21:09 | #
Après, je pense qu'il y a quand même laaargement plus simple.
pour ceux qu'Alex aurait effrayé.
Jouez à 6 sur une seule calto : Curve Fever
Un die and retry qui vous fera bieeeen rager Test Andropov
un très bon sokoban
le seul vrai jeu de foot en basic : FIFA 12
Ca c'est ce que j'appelle un jeu de reflexion jewel master
Qui vaincra l'intelligence artificielle de cet othello
Le célèbre pacman
Et tant d'autres BTL's games
Le jeu du mois de Novembre et award du jeu le plus dur de l'année 2013 MultiTask, testez-le
Citer : Posté le 09/02/2014 21:11 | #
Je me retire aussi, j'ai tenté quelque chose mais ça donne rien et pas de code optimisé (qui s'attendait à un superbe code ? ) :/
Citer : Posté le 09/02/2014 21:21 | #
Tu sais Eltoredo, tu as encore 2 semaines, ça ne sert à rien de te précipiter.
Tu as encore beaucoup de temps pour réfléchir et comprendre pourquoi tel problème advient, etc.
N'hésite pas à poser des questions sur ce qui ne va pas et je suis qu'on te répondra. (Sauf si tu abuses)
Jouez à 6 sur une seule calto : Curve Fever
Un die and retry qui vous fera bieeeen rager Test Andropov
un très bon sokoban
le seul vrai jeu de foot en basic : FIFA 12
Ca c'est ce que j'appelle un jeu de reflexion jewel master
Qui vaincra l'intelligence artificielle de cet othello
Le célèbre pacman
Et tant d'autres BTL's games
Le jeu du mois de Novembre et award du jeu le plus dur de l'année 2013 MultiTask, testez-le
Citer : Posté le 09/02/2014 21:36 | #
Et mais vous réfléchissez pas assez pour savoir si l'IA est le J1 ou J2
Si le nombre de pion est paire (ou nul...), elle est le J1, si il est impaire, elle est le J2
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Citer : Posté le 09/02/2014 22:20 | #
Si il vous reste une petite place je veux bien participer
Citer : Posté le 09/02/2014 22:30 | #
Bon allez, je promet rien, mais je vais tenter de participer aussi
Avec la semelle de nos chaussures, on en fait autant
Citer : Posté le 09/02/2014 23:12 | #
Btl, un petit truc, tu aurais du prévenir que l'on ne devait pas toucher a r et theta (quand je les ai utilisé, mon IA c'est mise a jouer toute seule).
un autre détail, finir que quand la grille est plaine, c'est bien, mais... quand mon IA me bat, je suis obligé de faire un Ac/On.
Mon projet (tout programmé en Caml), c'était de dresser l'arbre de toutes les possibilités de remplissage, avec pour chaque nœud, le triplet:
petite astuce pour créer des IA, joue des parties en expliquant sur un papier ou sur un fichier texte chaque un de tes coups, et regarde si tu ne trouve pas une stratégie meilleure que l’arbre des possibilités (qui est une méthode bourrin et pas très efficace)
d'ailleurs, je donne aussi ce conseil a eltoredo, on ne peut (quasiment pas) écrire une IA a main levé, il faut préparer le fonctionnement de l'IA, tâtonner, et profiter des 2 semaines. ce n'est pas pars-que certains d'entre nous ont déjà finit que tu dois te laisser abattre.
et sinon, j'ai trouvé l'erreur dans mon IA et ai finalement choisit de la réécrire, j'ai trouvé une nouvelle astuce plus fiable pour calculer les coups, et plus optimisée que la précédente (et bravo totoyo, je vois vraiment pas comment faire tenir une IA de morpion en 400 octets )
-en C:
-Un pong.
-Un projet en pause. Je compte le reprendre de temps en temps: Summer Cursed
-mon tuto sur les Str
Mes calto: G25+, G75
Mon minecraft en dévelopement
-Portal2D de JavierXD
-CalCraft de Wime
-GeekBros du groupe GeekBrothers (Eiyeron,Siapran,KevKevVTT,Adbook,LIMachi)
Citer : Posté le 10/02/2014 15:24 | #
Bonjour,
j'aimerais bien participer aussi...
Coïncidence ? Je ne pense pas.
Citer : Posté le 10/02/2014 17:47 | #
Rien ne t'en empêche
Citer : Posté le 10/02/2014 18:54 | #
(qui est une méthode bourrin et pas très efficace)
Au contraire! O(1) !!! Temps constant d'accès à l'arbre et de décision!
(cette phrase était un troll...)
Oui mais mon but c'était à la base de ne pas réfléchir, en fait je vais vous avouer un truc:
je n'ai jamais rien compris au morpion...
En fait à chaque fois j'improvise, du coup pour programmer une IA je vais galérer à mort, je cherchais justement la méthode ultime, générale, qui marche à tous les coups!
En tout cas j'ai hâte de voir les prochaines manches quels jeux sortiront!
Btl D'ailleurs je suggère fortement un problème NP-complet! Genre Tetris!!!
Je m'explique: les problèmes NP-complets sont justement l'objet du problème "P=NP" qui est l'un des "problèmes du millénaires" en Mathématiques et Informatique théorique. Le but est de trouver un algorithme polynomial en O(n^k) à k fixé, qui résout l'un de ces problèmes. Pour l'heure, on ne connaît que des algorithmes exponentiels en O(k^n), ce qui est largement plus mauvais!
BREF: il n'existe pour le moment pas d'algorithme raisonnable pour optimiser les coups au Tetris avec un nombre connu à l'avance de pièces, suffisamment grand pour faire ramer les ordis! (on peut trouver des solutions approchées mais l'optimale est très longue à trouver...)
DU COUP: ça pourrait être trrrrrrèèèèèèèèèsss intéressant, ce serait du pur freestyle!
(désolé pour ceux que j'ai perdu, s'ils veulent plus d'infos, cf Wikipédia...)
Timeless Remix
Super Run & Jump
Timeless
Les tests vidéo de Marmotti
Timeless Remix Airwolf
Citer : Posté le 10/02/2014 20:27 | #
Julien_1, Maliafo, Drac0300, je vous ai rajouté.
Bonne chance à vous !
@Limachi, ah oui "r" pourrait faire buggé l'histoire, mais thêta je ne suis pas sur.
@Alex, je suis sur que passer d'un morpion à un algorithme polynomial en O(n^k) à k fixé va enchanter la communauté, à qui j'essaie de montrer que l'algorithmique n'est pas si dur et peut être très amusante.
Jouez à 6 sur une seule calto : Curve Fever
Un die and retry qui vous fera bieeeen rager Test Andropov
un très bon sokoban
le seul vrai jeu de foot en basic : FIFA 12
Ca c'est ce que j'appelle un jeu de reflexion jewel master
Qui vaincra l'intelligence artificielle de cet othello
Le célèbre pacman
Et tant d'autres BTL's games
Le jeu du mois de Novembre et award du jeu le plus dur de l'année 2013 MultiTask, testez-le
Citer : Posté le 11/02/2014 12:40 | #
A et B sont les coordonnées du coup, c'est à dire Mat B[A,B] ou Mat B[B,A] ?
Y a-t-il un moyen pour notre IA de savoir si on est le joueur 1 ou 2 ? Ça change tout.
Toutes les formules de Première S.
Toutes les formules de Terminale S.
Un programme de calculs.
Super Mario 3
warrior
Jump Ball
First Fly
►Jeu gagnant des 48h CPC n°12◄
Mon site de discussion pour ados : http://entre-ados.net/ (a brûlé dans l'incendie d'OVH)
Mon éditeur de cours en ligne et plateforme de partage : http://wordline.xyz (a succombé à la concurrence de Google Drive...)
Citer : Posté le 11/02/2014 14:33 | #
Dans les 5 pages de commentaires, il y a plusieurs exemples pour savoir quel joueur joue, dans sur cette même page. Donc oui, ton IA peut savoir si elle est le joueur 1 ou 2
Ajouté le 11/02/2014 à 14:35 :
Compter les tours (comme propose Totoyo) n'est pas faisable dans le cas ou l'IA joue pour la 2ème fois (ou +ième fois) et les quantité de pions sur le plateau sont identiques (on peut avoir un 1 et 2 et donc l'IA ne peut pas savoir qui elle est)
En supposant que le joueur 1 joue toujours en 1er, si le nombre de coups total est pair alors c'est au tour du joueur 1, s'il est impair, c'est au joueur 2.
Vitesse des fonctions en Basic Casio | 7 days CPC | Casio Universal Wiki | Tutoriel Basic Casio
>>> Give me a click Brother <<< >>> Teste mon générateur de mots nouveaux <<<
>>> Random Youtube Video <<<