le
06-02-2014
07:11 PM
- dernière modification le
09-04-2014
05:38 PM
par
jordankalynn
Enfin !
vu le travail que cela m'a demandé ... je crée un nouveau sujet.
après une centaine de prototypes et versions alpha, voici la 1ere version bêta.
J'utilise un algorithme d'intelligence artificielle "MinMax" conforme aux références en la matière ... avec élagage "alpha-beta".
au niveau des feuilles ... une fonction d'évaluation.
Labview ne me permet pas (vitesse) d'évaluer énormément de choses.
Je joue donc sur un compromis entre la profondeur d'analyse et cette fonction d'évaluation. (profondeur de 4)
Que dire sur le code ...
rien ... ou alors il faut écrire un livre ... notamment ChessCore.vi ... qui est une belle méchanceté de récursivité.
Mais je réponds à toutes les question.
Ce programme possède des "points forts" ... et des "faiblesses" (fonction d'évaluation simple et donc imparfaite)
Cette fonction d'évaluation possède des "coefficients" (MoveFromToX / eval1.vi)
En fait, j'ai 3 fonctions d'évaluation ... une pré-évaluation, une évaluaton et une évaluation dédiée au "Mat".
Etant donné le nombre élevé de positions analysées, associé à la récursivité, il est fort difficile d'établir de façon "absolue" les "coefficients parfaits".
Je les ai donc placé de façon empirique. En modifiant ces coefficients, on peut complètement modifier le comportement du moteur.
Je suis toujours à la recherche des "meilleurs coéfficients".
points faibles :
Difficultés de mettre ses Pions en oeuvre.
L'effet "d'horizon" provoque parfois une oscillation entre deux positions.
J'ai prévu un système de "débloquage" ... mais encore imparfait.
Difficultés de résoudre les "fin de partie" comportant peu de pièces. (exemple Roi-Fou-Fou contre Roi)
C'est un problème rencontré par tous les moteurs d'échecs !
Pour résoudre les fins de partie, il existe des tables (tables de Nalimov par exemple) Mais ... je n'utilise pas ce type de tables.
Ceci dit ... il faut y arriver à une situation de fin de partie avec "peu de pièces"
Je veux dire par là ... que vous serez peut-être Mat bien avant
Ne faites pas d'erreurs ... car il ne vous pardonnera rien.
ci-joint l'ensemble en version 2011.
Dézipper ... lancer Chess_Ouadji.vi ... et bon amusement.
ah oui ... faites attention à sa Dame ... elle est redoutable.
Vous avez les Blancs ... Labview a les Noirs.
le 06-03-2014 07:03 AM
Sacré boulot!
Je teste ça à l'occasion...
le 06-03-2014 09:04 AM
oui, oui ... s'il vous plaît (pour tous) ... il faut "tester".
Faites une petite partie d'échecs "vite fait" ... il ne faut pas des heures ...
et surtout ... dites moi si vous vous êtes pris un Mat.
@Cisco : oui, sacré boulot, de recherche, de mise au point ... une belle aventure !
le 06-03-2014 09:16 AM
J'en suis à 3!
Je suis juste un peu perturbé par le bouton "in check".
Je m'attendais à ce qu'il soit allumé lorsque j'étais en position d'échec (je n'ai pas réussit moi-même à mettre ton soft en échec), mais il ne s'allume que furtivement lorsque je tente un déplacement qui me mettrait en position d'échec. C'est peut-être voulu, mais moi ça m'a perturbé... j'ai probablement perdu à cause de ça 😉
En tous cas tout ça m'a l'air de bien marcher, je vais encore jouer un peu pour essayer de voir autre chose.
06-03-2014 09:24 AM - modifié 06-03-2014 09:29 AM
in check
c'est un Indicateur (une led)
Elle flashe une fois (200ms) quand il y a "échec" ....
soit que tu mets le Roi adverse en échec,
soit que l'adversaire te met en échec,
soit que, quand c'est ton tour de jouer, tu essayes de déplacer ton Roi vers une position où il est en échec (mouvement non autorisé)
Tu n'as pas réussi à mettre "labview" en échec ... ok
et toi ... tu t'es fait mettre Mat ?
edit
pour .... "échec et mat"
quand il y a "échec et mat" ... le vi se termine ... la Led 'End Game" s'allume
et dans une des fenêtres (ça dépend "qui" est Mat ) .. s'inscrit " CheckMate ! "
le 06-03-2014 09:27 AM
3 parties, 3 mat, en 3 minutes à chaque fois... 😞
Mais bravo au programmeur!
le 06-03-2014 09:31 AM
oui ... il faut être diablement attentif pour "garder l'avantage" ... je me suis fait mettre Mat pas mal de fois également.
3 Mat, chaque fois en 3 min ... jnark, jnark ... je suis dans la bonne direction alors ! Yessss !!!
le 06-04-2014 02:36 AM
20 minutes de jeu et un mat ! Contre moi 😕
L'AI est d'un bon niveau pour le joueur occasionnel, Big bravo pour l'implémentation ça a dû être très formateur !
Par contre on peut causer code LabVIEW 2 secondes ? Qu'est-ce que c'est que ce répertoire avec des VIs partout, pas de projet et pas de main identifiable (si on n'a pas lu ton post) ?
Je propose donc une Beta 2 avec :
- la même algorithmique
- un user guide
- une documentation du code, une convention de noms pour les terminaux, des icones d'API
- une hiérarchie sous forme de lvlib ou llb (bien que pas fan de cette dernière solution)
- une interface utilisateur sexy ! Le plateau de jeu est bien fait et fonctionne parfaitement (un petit plus aurait été une surbrillance du dernier mouvement) mais pour ce qu'il y a autour... https://decibel.ni.com/content/groups/ui
Je critique je critique, mais encore une fois, sur le fond c'est brillant. 🙂
Fonctionnalité :18/20 (un mode deux joueurs en réseau?)
Forme : 12/20 parce que je suis un salaud
Eric M. - Senior Software Engineer
Certified LabVIEW Architect - Certified LabVIEW Embedded Systems Developer - Certified LabWindows™/CVI Developer
Neosoft Technologies inc.
le 06-04-2014 08:00 AM
Bonjour Eric ,
mais non, tu n'es pas un salaud.
Donc tu t'es pris un Mat après 20 min ... ... yesssss ! (je cache ma joie
)
L'AI est d'un bon niveau pour le joueur occasionnel
merci.
et pourtant ... la fonction d'évaluation est toute simple.
Grrrr ... si je pouvais évaluer beaucoup "plus" .... sans devoir attendre 3hrs pour avoir une réponse ...
Ceci dit, le code serait capable d'un niveau bien supérieur.
Je veux dire par là que "tout" est en place pour implémenter un niveau "expert".
Seule la vitesse (LV n'est pas le langage le mieux adapté pour ça) impose une limite via cette fonction d'évaluation.
Pour la petite histoire ... j'avais commencé une fonction d'évaluation en assembleur (via une DLL)
et bien ... je n'allais pas beaucoup^plus vite que LV (10 à 15% plus vite maximum)
Big bravo pour l'implémentation ça a dû être très formateur !
côté "récursivité" ... oui, 3x oui ... celui qui comprend toutes les subtilités de "ChessCore.vi" ... a son brevet niveau 2 en matière de récursivité sous LV.
J'ai passé des nuits blanches avec ce vi ... j'en ai rêvé, si, si !
Pour "le reste" ... formateur ?
en matière de "chess engine", oui ! mais en matière de "labview" ... bof ... c'est de l'algorithmique, rien de plus.
Par contre on peut causer code LabVIEW 2 secondes ? oui, on peut !
ce répertoire avec des VIs partout, pas de projet et pas de main identifiable.
tu as raison !
bon ... intégrer "ça" dans un vrai Projet, avec une "logique" (un rien plus évidente) dans les répertoires ... ok !
un user guide .... il n'y a pas grands choses à dire ... mais bon, ok !
une documentation du code ... ça, c'est ma bête noire !
une convention de noms pour les terminaux ... ?? ... que veus tu dire par là ?
des icones d'API ... ?? ... idem, que veux tu dire par là ?
Tiens ? ... comment se fait-il ? ...
J'ai un ou deux noeuds de propriété pour lesquels je ne gère pas l'erreur ... pas de remarque ?
une interface utilisateur sexy !
Le plateau de jeu est bien fait et fonctionne parfaitement (un petit plus aurait été une surbrillance du dernier mouvement)
une interface plus "sexy" ... ....
une surbrillance pour le dernier mouvement de l'adversaire ... oui, ce serait éventuellement un petit plus.
Le dernier mouvement est noté dans la fenêtre ... mais bon, ok.
un mode deux joueurs en réseau? ... je n'ai aucune connaissance pour implémenter ce genre de chose.
De plus, ce n'était pas le but de la "manip" ... mais bien ... un moteur d'échecs.
Pour la petite histoire ... c'est une "première" ... cela n'a jamais été implémenté auparavant sous Labview.
Il y a bien eu un "jeu passif" (cela a d'ailleurs été mon point de départ) ... mais un vrai moteur d'échec, c'est la première fois !
Merci Eric pour ton post.
Eric ... ?
encore une petite partie ? .... une dernière tentative ?
le 06-04-2014 08:55 AM
salut je vas tester ton code, avec beaucoup d'envie. Pas mainteant je bosse (!!=) mais ce soir.
Par contre je me doute que "ce répertoire avec des VIs partout, pas de projet et pas de main identifiable."
je suis en phase avec Eric, et sans regarder le code, les projets sur les forums n'ont pas assez de projet 'lvprj", structure de dossiers Windows, lvclass...
Je suis (encore) en phase avec eric et les autres, pour être sûr que le reste est super. J'ai hâte de "jouer" avec ton travail, depuis le temps...
A+
Luc Desruelle | Mon profil | Mon blog LabVIEW | Auteur livre LabVIEW : Programmation et applications - G Web
Certified LabVIEW Architect (CLA) & Certified TestStand Developper (CTD) | LabVIEW Champion
MESULOG - LinkedIn site | NERYS - NERYS Group
| directeur CEO MESULOG
| CODIR - NERYS group