Discussions au sujet de NI LabVIEW

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

Chess Engine - 100% LabVIEW

zut ... tu m'fais rire comme un fou.   Smiley heureux

 

 

0 Compliments
Message 121 sur 145
1 987 Visites

@MathieuSteiner

 

Bientôt, une version avec des variants partout  ?

 

Je viens seulement de "voir". (serait-ce un complot organisé ? ... on essaye de me pousser au burn-out ?)

 

Une version exclusivement avec des Variants ...  Smiley heureux

 

Le "sujet" est "chaud" ... donc .... Joker !

 

Smiley clignant de l'œil

0 Compliments
Message 122 sur 145
1 982 Visites

Plutôt qu’une version avec variant, une version en OOP avec class aurait plus … de classe ! Smiley heureux

Mais l’homme n’est jamais satisfait. Après ta refonte du jeu d’échec, j’ai écrit « jouer contre l’ordinateur », avec la version contre l’ordinateur « en OOP », après le OOP, en Actor Framework…. Quelques défis pour le reste de la journée…

au travail

banniere Luc Livre NXG Champion.png

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

0 Compliments
Message 123 sur 145
1 968 Visites

Je doute qu'une approche OOP soit compatible avec la contrainte "de temps".

 

Actor Framework ... encore moins.

 

Peut-être quand nous aurons des PCs à processeurs neuronaux ?

 

(je n'en suis pas certains ... mais intuitivement je pense cela)

 

ceci dit ...

 

on changerait "la façon de" et non le "fond" ... j'entends pas là, les algorithmes par eux-mêmes.

 

et perso, mon "truc", ce sont les algorithmes (d'où ma difficulté quand on parle IHM)

 

 

0 Compliments
Message 124 sur 145
1 958 Visites

@mknix :

 

as-tu testé les roques ?

0 Compliments
Message 125 sur 145
1 951 Visites

hello,

 

Merci pout ta réponse sur les roques, et désolé de t'avoir fait froler l'attaque cardiaque de bon matin.

pas eu le temps hier, mais je viens de tester ce matin.

 

Evidement, ça fonctionne impec.

 

J'avais juste omis un régle en tentant de roquer la premiére fois => les cases par lesquelles transite le roi lors du roque ne doivent pas être contrôlées par une pièce adverse.Smiley gêné

 

la honte, désolé !

 

 

 

 

 

 

Message 126 sur 145
1 942 Visites

désolé de t'avoir fait froler l'attaque cardiaque de bon matin  Smiley très heureux  Smiley clignant de l'œil

 

oui ...

les 3 cases utilisées par le Roi (départ + passage + arrivée) ne doivent pas être ciblées par une pièce adverse.

et aussi ... La Tour et le Roi concerné ne doivent pas avoir bougé "avant".

 

petite parlotte :

 

si tu bouges (par exemple) la Tour, et que tu reviens ensuite, avec cette même Tour, à sa position initiale ... tu ne peux plus roquer.

En fait, j'utilise un U16 pour coder les pièces. Pour coder la pièce en elle-même je n'utilise que les 4 premiers bits (de 0 à 15 en décimal).

Le bit n°0 pour la couleur (0=blanc - 1=noir), et les bits n° 1,2 et 3 pour la pièce.

Ce qui donne pour les Blancs : 2 pion, 4 cavalier, 6 fou, 8 tour, 10 dame, 12 roi.

et pour les Noirs : 3 pion, 5 cavalier, 7 fou, 9 tour, 11 dame, 13 roi.

Les autres bits sont disponibles. Dès qu'une pièce bouge, elle reçoit le flag "à bougé".

Et dans le code qui détermine les mouvements possibles du Roi ... je regarde si ce flag est présent ou non.

Il y a d'autres flags ...  j'ai également les flags "à roqué" et "s'est engagé".

Le flag "s'est engagé" me permet de "pousser" (de favoriser) les pièces qui n'ont pas encore bougé ... à bouger et donc à s'engager.

 

La pièce qui est la plus difficile à "mettre en mouvement" est  la Tour.

Pour mettre en mouvement une Tour, il faut que cette Tour puisse "voir" qu'elle peut apporter un avantage.

Pour ce faire, il faut qu"une "ligne" s'ouvre devant elle ... et ça ... c'est difficile à cause des pions.

 

difficile ???

 

oui ... car pour ouvrir "l'horizon" à une Tour, il faut donc, soit a) bouger le pion, soit b) contourner le pion.

Bouger un pion, ou contourner un pion, n'est pas dans l'absolu une chose difficile ... cela demande simplement "un certain nombres de coups".

Et c'est là que le soucis arrive ... il faut "des coups" ... et des coups, c'est aussi et surtout de la "profondeur d'analyse".

 

Engager un Fou, ou une Dame .... est très très facile. Il suffit de bouger un seul pion d'une seule case ... et on ouvre une diagonale

Pour engager une Tour depuis sa position de départ, il faut un minimum de 3 coups.

 

Avec "3 coups" (pour une Tour) ... on est encore nul part.

nul part ? oui, car cela veut dire que la Tour est arrivée en "position de s'engager" ... mais n'a pas encore "vu" l'utilité de le faire.

A ce moment, pour elle, va commencer l'analyse en profondeur. Elle est en situation de "faire quelque chose" ... mais faire quoi ?

Il lui faudra donc au minimum 1 coup de plus pour apporter la moindre contribution à la situation (par exemple ... prendre directement un pièce adverse)

 

Conclusion:

 

Depuis sa position de départ, il faut au minimum 4 coups (dans le meilleur des cas) pour engager dans la bataille (de façon active) une Tour.

Et 4 coups_noirs ... c'est une profondeur d'analyse de (4x2)-1=8-1= 7 .... et le moteur s-e base sur une profondeur "de base" de 4 !!

 

Voila pourquoi les Tours ont si difficile à s'engager et restent "sans bouger" ... longtemps.

 

Si je pouvais débuter le jeu avec une profondeur de 7 ou 8, le comportement des Tours serait complètement transformé.

(et le niveau du jeu exploserait)

 

Message 127 sur 145
1 934 Visites

Super, merci pour les explications sur la methode de codage des piéces, ainsi que  pour les considerations sur le besoin de profondeur vs le type de piéce. C'est trés interressant.

 

0 Compliments
Message 128 sur 145
1 924 Visites

ah ouiiii ...

aucune stratégie n'est codée en dur dans le code.

Si tu cherches dans le code la trace d'un "comportement" ... tu vas tourner en rond.

Le moteur "anticipe" les coups possibles ... et choisi celui qui lui donne "le plus de chance" de prendre l'avantage par la suite.

Dis toi bien que le moindre coup joué par l'IA est souvent le résultat de l'analyse de  .... disons ... entre 20.000 et 5.000.000 ... de "situations".

Ce, sur base d'un système d'évaluation.

 

évaluation ? pourquoi doit-on évaluer ?

 

Si le moteur pouvait "envisager" la totalité des coups possibles

(au total environ 10E+120 ... plus de 300 milliards pour l'enchainement des 4 premiers coups d'une partie)

Il n'aurait pas besoin "d'évaluer" ... la partie serait alors gagnée ou perdue dès le premier coup.

Ce type de résolution jusqu'à la finalité est possible pour des jeux simples ... le morpion par exemple ... mais pas pour les échecs.

Le nombre de coups possibles dans une partie d'échecs est de loin supérieur au nombre d'atomes dans l'Univers.

 

Donc ... il "regarde" jusqu'à une certaine "profondeur" (enchainements alternés des coups)

Et à un certain moment, il stoppe (la profondeur d'analyse) ... et là ... il évalue ... cette voie est-elle bonne pour moi ?

 

Cette évalutaion est très délicate et détermine à 90% (99%?) la qualité du moteur.

et c'est là ... au niveau de cette fonction d'évaluation ... qu'il y a (très certainement) moyen de faire "beaucoup mieux".

 

L'algo récursif en lui-même n'est qu'une structure, un support.

Il est juste là pour déterminer "les coups possibles" ... ceci dit, il faut qu'il fonctionne parfaitement, il ne faut pas qu'il "oublie" un coup.

Mais sinon ... le coeur ... je vais presque dire "l'âme" du moteur .... c'est la fonction d'évaluation.

 

a+

 

EDIT :

"plus de 300 milliards pour l'enchainement des 4 premiers coups d'une partie)"

Non ... ça, c'est faux. Voici les vrais chiffres.   Perft results

On tourne autour de 85E+9 pour les 4 premiers échanges (8 demi-coups) ... c'est déjà pas mal  Smiley heureux

Résoudre l'ensemble de ces "Perft results" est le b-a-ba pour un moteur d'échecs.

Il doit "passer" ce premier test, c'est indispensable. Le moteur que je propose solutionne sans aucune erreur tous  les tests de "Perft".

0 Compliments
Message 129 sur 145
1 918 Visites

Pour ceux que cela intéresse

 

mise en évidence des résultats   PERFT

 

1) placer le vi ci-joint (PERFT.vi) dans le répertoire principale, soit :  ...\ Chess_Ouadji_Game (au même niveau que "Chess_Ouadji.vi" )

 

2) petite modif dans Dark_IA \ ChessCore.vi ... comme ceci .... déconnecter un fil et placer une constante "false"

 

ceci pour désactiver l'élagage alpha-beta ... et donc obtenir toutes les combinaisons.

 

comme ceci :

 

 SR4.png

 

 

 Lancer PERFT.vi , depth = 4

 

RUN .... attendre quelque secondes .... Résultat  " 197.281 "

 

Le moteur vient de comptabiliser tous les enchainements de coups possibles

 

(essayez avec "depth 5" ... vous aurez un résultat de 4.865.609)

 

 

SR3.png

 

 

C'est juste un tout petit exemple, pour une position de l'échiquier "de départ", et pour une pronfondeur de 4.

On peut faire un test Perft au départ d'une position quelconque (il y a beaucoup de "situations" sur le net, avec le résultat que l'on doit obtenir)

on peut mesurer "toutes les combinaisons" (comme ici, dans l'exemple proposé)

ou ... cibler ... le nombre de "captures", le nombre de "prise en passant" ... de roques, d'échecs ... etc ...

 

(je peux faire des mesures ciblées aussi avec mon moteur, tout est possible)

 

Ici, je vous ai juste demandé de déconnecter " l'élagage " ... c'est le minimum indispensable.

mais on peut aussi deconnecter tout le système " d'évaluation " ... totalement inutile pour une " analyse Perft ".

Dans ce cas les tests " perft " sont 30x fois plus rapide.

Mais là ... pour déconnecter toute " l'évaluation " ... impossible d'expliquer ça avec une image et 4 mots.

 

 

voila, c'était juste pour ne pas "parler de certaines choses" .... et laisser tout le monde dans le "vague", sans rien "concrétiser".

 

 

 

Message 130 sur 145
1 898 Visites