Discussions au sujet de NI LabVIEW

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

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
12 977 Visites

Sacré boulot!

Je teste ça à l'occasion...

Francis M
Message 2 sur 145
12 943 Visites

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
12 927 Visites

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 sur 145
12 921 Visites

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
12 917 Visites

3 parties, 3 mat, en 3 minutes à chaque fois... 😞

Mais bravo au programmeur!

Francis M
Message 6 sur 145
12 909 Visites

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
12 908 Visites

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.

Message 8 sur 145
12 889 Visites

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
12 874 Visites

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 Compliments
Message 10 sur 145
12 867 Visites