Je sais qu'il existe au échecs une facon de compter les points en fonction: des positions des pièces, et des pièces restante en jeu.
A partir de là, c'est "facile", tu comptes pour toutes les possibilités de mouvement (en déplacant chaque pièce dans toutes les directions) la valeur finale de ce mouvement, puis, pour chacune d'elle, tu calcules la meilleure position adverse.
Tu gardes en mémoire la différence de point la plus élevée (en gros, cela veux dire que tu as une amélioration de ta situation). Tu mémorise donc ce premier enchaînement de coup (un pour toi, un pour lui), et tu continue avec cette position théorique, sur un, deux, ou trois coup.
Ca c'est le principe de base.
Ensuite, il peux être intéressant de mémoriser d'autres coups (les 3 meileurs par exemple, le moins bon également) au départ pour explorer d'autres solutions.
En algo, ca donne:
Score = calculDuScore() //Le score au début du tour
ScoreAdv = 0;
For Each pièces
For Each mouv = mouvement possible
ScoreTmp = calculDuScore()
Si ScoreTmp < Score //Régression du score
Next
For Each piècesAdverse
For Each MouvAdv = mouvement possible
ScoreTmp2 = calculDuScore()
Si ScoreTmp2 > ScoreAdv
ScoreAdv = ScoreTmp2
MouvMem = MouvAdv
FinSi
FinFor
FinFor
ScoreTmp = ScoreTmp - ScoreAdv
Si ScoreTmp > Score
MouvList = MouvList + (Mouv + MouvAdv + ScoreTmp)
FinSi
FinFor
BestMouv = MaxScore(MouvList)
Voilà pour calculer le Meilleur Mouvement. PLus qu'à faire une fonction Anticiper() qui calcule plusieurs coup d'affilée, et voilou :)
# Intelligence certes mais artificielle quand même....
Posté par okhin . En réponse au message ia d'échec.... Évalué à 1.
A partir de là, c'est "facile", tu comptes pour toutes les possibilités de mouvement (en déplacant chaque pièce dans toutes les directions) la valeur finale de ce mouvement, puis, pour chacune d'elle, tu calcules la meilleure position adverse.
Tu gardes en mémoire la différence de point la plus élevée (en gros, cela veux dire que tu as une amélioration de ta situation). Tu mémorise donc ce premier enchaînement de coup (un pour toi, un pour lui), et tu continue avec cette position théorique, sur un, deux, ou trois coup.
Ca c'est le principe de base.
Ensuite, il peux être intéressant de mémoriser d'autres coups (les 3 meileurs par exemple, le moins bon également) au départ pour explorer d'autres solutions.
En algo, ca donne:
Score = calculDuScore() //Le score au début du tour
ScoreAdv = 0;
For Each pièces
For Each mouv = mouvement possible
ScoreTmp = calculDuScore()
Si ScoreTmp < Score //Régression du score
Next
For Each piècesAdverse
For Each MouvAdv = mouvement possible
ScoreTmp2 = calculDuScore()
Si ScoreTmp2 > ScoreAdv
ScoreAdv = ScoreTmp2
MouvMem = MouvAdv
FinSi
FinFor
FinFor
ScoreTmp = ScoreTmp - ScoreAdv
Si ScoreTmp > Score
MouvList = MouvList + (Mouv + MouvAdv + ScoreTmp)
FinSi
FinFor
BestMouv = MaxScore(MouvList)
Voilà pour calculer le Meilleur Mouvement. PLus qu'à faire une fonction Anticiper() qui calcule plusieurs coup d'affilée, et voilou :)