CommandBlock /Nouvelle Entité?/Intelligence artificielle?

A la base, l'algorithme est conçu pour un ordinateur (perso, je tente en ce moment de l'adapter sur calculatrice CASIO 35+E). Il faudra donc l'adapter à minecraft (par ex. , la matrice I pourrait être un rectangle constitué de blocs verts, rouges ou bleus)
J'ai tenté d'être le plus simple posible, mais si tu as une question, n'hésite pas à la poser !

Pour rendre l'explication plus facile, on considérera l'algorithme comme une personne se déplaçant sur le graphe.
Un noeud est un endroit où l'algorithme peut aller. Comme on est dans Minecraft, je parlerai de "case".
Un graphe est un ensemble de noeuds.
Le noeud que l'algorithme vient de quitter est le parent du noeud où se trouve l'algorithme actuellement.
Une matrice est un tableau en 2 dimensions.
Le coût d'un noeud est sa distance au départ, calculée comme ceci(avec C le coût, [X;Y] les coordonnées du noeud et [D;E] les coordonnées du départ :
X>D⇒X-D→C
D>X⇒D-X→C
Y>E⇒C+(Y-E)→C
E>Y⇒C+(E-Y)→C
Plus le coût est petit, plus le chemin sera court.

L'algorithme A* stocke les infos de 3 façons différentes :

-la liste ouverte, à savoir les noeuds qui pourraient être la suite du chemin. Les informations contenues sont les coordonées X et Y du noeud et son coût. Ces infos sont fusionnées en une seule valeur égale à 1 00 00 C + 1 00 X + Y (note : si X est supérieur à 99 99 ou si Y est supérieur à 99, il y aura corruption pour éviter ça, il faudrait fusionner les valeurs avec plus d'espace, par exemple 1 000 000 C+1 000 X + Y.)

-la matrice I, contenant le statut des cases :
0 : inconnu ou "stand by"(liste ouverte)
1 : dejà choisi comme chemin
2 : obstacle
3 : arrivée

La matrice II contient les coordonnées X et Y des parents sous la forme (X×100+Y)


Pour commençer, mettre la case de départ dans la Liste ouverte (c'est le seul chemin possible)
Commencer la boucle :
Ici, c'est le moment le plus important : on va choisir la suite du chemin. On sélectionne donc la case avec le meilleur C(=le plus petit C) qu'on supprime de la liste ouverte et qu'on marque comme "choisi" dans la matrice 1(ça évite d'essayer deux fois le même chemin !). Ce noeud est constituée comme "actuelle" (dans mon image, l'algorithme est situé dessus et regarde les 4 cases autour).
Les autres cases dans la liste ouverte sont gardées pour plus tard, au cas où le chemin actuel est un cul de sac (c'est pour ça qu'on a la matrice I, sinon l'algorithme recommencerait à se diriger vers le cul-de-sac : il ne faut jamais marcher deux fois sur la même case !).

Pour chacun des 4 cases à côté de la case actuelle, on regarde la valeur dans la matrice I :

Si 2(obstacle) ou 1(vu et choisi) : ne rien faire car on ne peut pas marcher sur les obstacles et que on ne doit pas prendre deux fois le même chemin.

Si 0(inconnu ou liste ouverte) : mettre la variable CASE ACTUELLE comme parent(donc dans la matrice II). Calculer son coût C et le mettre dans la liste ouverte en compagnie de ses coordonnées.

Si 3(arrivée) : on retrouve le chemin grâce aux parents, l'algorithme est fini !

Puis on recommence la boucle.

P.S. : si tu veux, je peux également te passer le brouillon du programme sur Casio 35+ E.


EDIT : A* ne trouve pas toujours le meilleur chemin, mais il trouve toujours un chemin, et cela rapidement et simplement (comparé à l'algorithme de Dijkstra qui attends d'avoir testé toutes les possibilités pour donner une réponse, ce qui serait lent dans Minecraft).
 
Dernière édition:
  • J'aime
Reactions: Oromis
L'idée est plus que bonne ! :)
Après, c'est si l'on part sur un espace 2D et non 3D... :/
Mais l'idée est pas mal et on peut s'en inspiré pour le système ! :p
 
Après, c'est si l'on part sur un espace 2D et non 3D
Je pense que c'est adaptable en 3D, mais ça le ralentirait beaucoup, et il faudra des tableaux à trois dimensions(du coup, ce ne sont plus des matrices) et il faudra que l'algorithme teste 2 cases adjacentes en plus (celles de -Y et de +Y) sans oublier l'incorporation de la gravité (si la case en-dessous est vide)... ce sera un bon défi !
 
  • J'aime
Reactions: Oromis
Excuse d'être un noob x)
Mais là,c'est plutôt poussé,même trop pour moi...s'cuse!
Si tu veux créer une I.A., il faut connaître la base : réseau neuronal, critères de reconnaissance, biais cognitifs... ce n'est pas un domaine simple.
Aussi, ça dépends de ta définition de "I.A.". La plupart de la communauté considère A* comme une I.A. alors que ce n'en est pas une.
Plus de renseignement sur ce qu'est véritablement une I.A. ici.
Vu ton début de projet, je pense que tu veux créer un algorithme simulant l'intelligence (comme celui qui commande les mouvements du creeper) ; c'est pourquoi je t'ai communiqué un logiciel de pathfinfing.
 
Oui,c'est ce que je voulais faire,mais t'est partit un peut trop en live x)
C'est sympas de d'interresser...
et en gros,oui,c'est sa