Discussions au sujet de NI LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

Chess Engine - 100% LabVIEW

Highlighted

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   Smiley Happy

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.  Smiley Wink

 

Vous avez les Blancs ... Labview a les Noirs.

 

SR1.png

Message 1 of 145
(9,196 Views)

Sacré boulot!

Je teste ça à l'occasion...

Francis M
Message 2 of 145
(9,162 Views)

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.  Smiley Wink

 

@Cisco : oui, sacré boulot, de recherche, de mise au point ... une belle aventure !

Message 3 of 145
(9,146 Views)

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.

Francis M
Message 4 of 145
(9,140 Views)

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  Smiley Happy ) .. s'inscrit " CheckMate ! "

 

Message 5 of 145
(9,136 Views)

3 parties, 3 mat, en 3 minutes à chaque fois... :-(

Mais bravo au programmeur!

Francis M
Message 6 of 145
(9,128 Views)

Smiley Very Happy

 

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     Smiley Happy ... je suis dans la bonne direction alors !  Yessss !!!  

Message 7 of 145
(9,127 Views)

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. Smiley Happy

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.

Message 8 of 145
(9,108 Views)

Bonjour Eric ,

 

mais non, tu n'es pas un salaudSmiley Happy

 

Donc tu t'es pris un Mat après 20 min ... Smiley Surprised ... yesssss ! (je cache ma joie  Smiley Happy  )

 

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 ? Smiley Wink

 

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" ... Smiley Happy ....

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 ?  Smiley Wink

 

Message 9 of 145
(9,093 Views)

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+

0 Kudos
Message 10 of 145
(9,086 Views)