Discussions au sujet de NI LabVIEW

annuler
Affichage des résultats de 
Rechercher plutôt 
Vouliez-vous dire : 
Répondre

Chess Engine - 100% LabVIEW

Highlighted

Chess Engine - 100% LabVIEW

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 heureux

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 clignant de l'œil

 

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

 

SR1.png

Message 1 sur 145
6 020 Visites

Re : Jouer aux Echecs (100% LV)

Sacré boulot!

Je teste ça à l'occasion...

Francis M | Voir mon profil
Certified LabVIEW Developer
Message 2 sur 145
5 986 Visites

Re : Jouer aux Echecs (100% LV)

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 clignant de l'œil

 

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

Message 3 sur 145
5 970 Visites

Re : Jouer aux Echecs (100% LV)

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 | Voir mon profil
Certified LabVIEW Developer
Message 4 sur 145
5 964 Visites

Re : Jouer aux Echecs (100% LV)

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

 

Message 5 sur 145
5 960 Visites

Re : Jouer aux Echecs (100% LV)

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

Mais bravo au programmeur!

Francis M | Voir mon profil
Certified LabVIEW Developer
Message 6 sur 145
5 955 Visites

Re : Jouer aux Echecs (100% LV)

Smiley très heureux

 

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

Message 7 sur 145
5 954 Visites

Re: Jouer aux Echecs (100% LV)

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 heureux

Fonctionnalité :18/20 (un mode deux joueurs en réseau?)

Forme : 12/20 parce que je suis un salaud

 

Eric M. - Systems Engineer (Embedded & HIL)
Certified LabVIEW Architect
Certified LabVIEW Embedded Developer
Certified LabWindows™/CVI Developer

Message 8 sur 145
5 935 Visites

Re: Jouer aux Echecs (100% LV)

Bonjour Eric ,

 

mais non, tu n'es pas un salaudSmiley heureux

 

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

 

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 clignant de l'œil

 

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 heureux ....

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 clignant de l'œil

 

Message 9 sur 145
5 920 Visites

Re: Jouer aux Echecs (100% LV)

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+

banniere Luc Livre.png

Luc Desruelle | Mon profil | Mon blog LabVIEW
Co-auteur livre LabVIEW : Programmation et applications
Certified LabVIEW Architect (CLA) & Certified TestStand Developper (CTD)
LabVIEW Champion

0 Compliments
Message 10 sur 145
5 913 Visites