Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Chat IA #2

Open
raynalm opened this issue May 6, 2017 · 50 comments
Open

Chat IA #2

raynalm opened this issue May 6, 2017 · 50 comments

Comments

@raynalm
Copy link
Collaborator

raynalm commented May 6, 2017

J'ai lu le commit de ce week end :
Je suis en train de bosser sur la LoopingC :
J'ai pull ton commit et merge avec le mien pour rajouter One hive.
Dans les deplacements de la queen -> j'ai juste changé le clone du tableau en system.arraycopy qui est un chouilla mieux pour copier des tableaux d'int (pas d'exeptions touçatouça)
La fonction getNeighbors -> j'ai mis les voisins dans l'ordre
-> renommée getNeighborsInArray
-> et remis l'ancienne qui s'appelle getNeighborsInArrayList
-> La dif entre les 2 : inArray renvoie tous les voisins, même les null, dans un array et dans l'ordre ; InArrayList ne renvoie que les voisins non null, dans une arraylist, sans ordre particulier. Du coup pour les déplacements la première est mieux, pour le onehive c'est la deuxième
Et j'ai fait un peu d'ajout de commentaires, saut de lignes, le fichier commence à être long donc j'ai fait la secrétaire et j'ai rendu le tout un chouille plus lisible.
Et dans la journée je pense que je vais bosser sur d'autres déplacements, à priori je vais attaquer avec l'araignée et la fourmi.

@Fr1nchy
Copy link
Collaborator

Fr1nchy commented May 11, 2017

Bug trouvé : RespectsOneHive() => renvoie False tout le temps ! En tout cas j'ai pas trouvé de cas où ça passe. Je me mets dessus, je te tiens au jus quand c'est réglé.

@Fr1nchy
Copy link
Collaborator

Fr1nchy commented May 11, 2017

Le test à un seul voisin passe, donc ça vient du parcours mais je vois pas où est le problème...

@Fr1nchy
Copy link
Collaborator

Fr1nchy commented May 11, 2017

J'ai trouvé une incohérence :
dans le constructeur du GameConfig, pour initialiser la board, on ajoute tout ce qui a un Z égal à 0 mais on ne teste pas le isOnBoard. -> Je suis pas sûr de ce que tu veux dedans donc j'ai laissé tel quel.
Du coup :

  • soit je ne touche à rien, et mon test one hive passe mais le test gate pète : c'est toujours le dernier élément de la board qui fait merder le test if (!boardXY.isVisited)
  • soit j'ajoute un test sur null et sur isOnBoard dans la boucle après le parcours de graphe dans RespectsOneHive() :
    if ((boardXY != null) && (boardXY.isOnBoard) && (!boardXY.isVisited))
    et là mon test de gate passe mais le test one hive pète...

Dis-moi si jamais tu arrives à comprendre le pourquoi du comment !

@raynalm
Copy link
Collaborator Author

raynalm commented May 11, 2017

Bien vu la grosse coquille dans le constructeur de gameconfig, effectivement il faut tester le isOnBoard pour le mettre dedans -> du coup j'ai modif ça et j'ai push la ptite modif, je pense qu on va passer une bonnne partie de la journée de demain à corriger des bugs à la con dans ce genre
J'en ai profité pour rajouter des méthodes pour get les premiers et 2e coup
C est marrant j ai le net dans le bus :)

@raynalm
Copy link
Collaborator Author

raynalm commented May 11, 2017

Mais ca continue à me péter à la gueule quand je lance le jeu, et c'est pas super confort dans le bus, les enculés ont pas pensé à m'installer un bon plan de travail histoire que je puisse taffer toute la nuit :)
Du coup je vais encore try un peu, mais je devrais pas tarder à dormir, par contre demain dès que mes rendeez vous de merde sont finis je me trouve une bibliothèque et je m'y remet!
Ciao !

@Fr1nchy
Copy link
Collaborator

Fr1nchy commented May 12, 2017

C'est le getNode(Coord) qui foire. L'objet node du RespectsOneHive est différent de l'objet retourné aux même coordonnées par getNeighborsInArrayList, qui appelle getNode... J'arrive pas à comprendre pk c'est pas le même objet.

@raynalm
Copy link
Collaborator Author

raynalm commented May 12, 2017

coucou, je viens de me connecter, je jette un coup d'oeil

@Fr1nchy
Copy link
Collaborator

Fr1nchy commented May 12, 2017

Je me demande si il ne faudrait pas implémenter un getNeighbors direct dans PieceNode...

@raynalm
Copy link
Collaborator Author

raynalm commented May 12, 2017

damn, je viens de pull, je peux plus exec

@raynalm
Copy link
Collaborator Author

raynalm commented May 12, 2017

ca fais pareil chez toi ?

@Fr1nchy
Copy link
Collaborator

Fr1nchy commented May 12, 2017

C'est Antoine x) Tkt il va repush

@Fr1nchy
Copy link
Collaborator

Fr1nchy commented May 12, 2017

Réessaye là

@Fr1nchy
Copy link
Collaborator

Fr1nchy commented May 12, 2017

Pour moi ça macrche

@raynalm
Copy link
Collaborator Author

raynalm commented May 12, 2017

kk

@raynalm
Copy link
Collaborator Author

raynalm commented May 12, 2017

yes cool, je viens de finir avec mes annonces d'apart du coup je m'y met pour de vrai

@Fr1nchy
Copy link
Collaborator

Fr1nchy commented May 12, 2017

Ok ok, ça a été ?

@Fr1nchy
Copy link
Collaborator

Fr1nchy commented May 12, 2017

Je viens de push le fichier de tests, comme ça tu peux voir concrètement les adresses mémoires (j'ai commenté la toString du coup)

@raynalm
Copy link
Collaborator Author

raynalm commented May 12, 2017

je viens de trouver une coquille dans le core qui empechait l ia de jouer, tu peux demander a antoine si je peux push un ptit truc dans le core maintenant ?

@raynalm
Copy link
Collaborator Author

raynalm commented May 12, 2017

et du coup elle arrive à jouer le ppremier coup, ça envoie un outofbound après

@Fr1nchy
Copy link
Collaborator

Fr1nchy commented May 12, 2017

Ouais vas-y

@raynalm
Copy link
Collaborator Author

raynalm commented May 12, 2017

ok

@Fr1nchy
Copy link
Collaborator

Fr1nchy commented May 12, 2017

Il faudrait que tu repush, apparemment il manque une getCore dans IAMove

@raynalm
Copy link
Collaborator Author

raynalm commented May 12, 2017

ouais c'est fait
Et j'en remet une ptite couche dans deux minute, je crois que c'est bon, on va enfin voir ce que l'ia fait n'importe commment

@raynalm
Copy link
Collaborator Author

raynalm commented May 12, 2017

tiens je repush, ce coup ci il y a pas mal d'output, ça permet d'étudier un peu ce qui se passe

@raynalm
Copy link
Collaborator Author

raynalm commented May 12, 2017

maintenant elle arrive à jouer un coup ! ouais !!

@raynalm
Copy link
Collaborator Author

raynalm commented May 12, 2017

ca y est petit à petit on avance, j'ai trouvé un autre bug débile dans la méthode qui trouvait les nouvelles positions possibles, corrigé

@raynalm
Copy link
Collaborator Author

raynalm commented May 12, 2017

ok y a un autre bug qui vient de random.nextInt, il essaye de choper un coup possible mais il choisit au pif entre 0 et nb de coups possibles, il trouve -1

@Fr1nchy
Copy link
Collaborator

Fr1nchy commented May 12, 2017

Ok là ça pue !!!
System.out.println("NODE : "+node);
System.out.println("SAME NODE : "+this.getNode(this.getCoord(node)));

NODE : main.java.ia.PieceNode@7dc5e7b4
SAME NODE : main.java.ia.PieceNode@1ee0005

@raynalm
Copy link
Collaborator Author

raynalm commented May 12, 2017

ok y a un autre bug qui vient de random.nextInt, il essaye de choper un coup possible mais il choisit au pif entre 0 et nb de coups possibles, il trouve -1
-> corrigé
Maintenant j'ai un autre souci, il a du mal à trouver les pieces dans l'inventaire du joueur

@raynalm
Copy link
Collaborator Author

raynalm commented May 12, 2017

Je me prends une pause, j'essaierai de m'y remettre tout à l'heure mais c'est pas gagné, j'ai eu une nuit de merde et une journée éreintante.

@Fr1nchy
Copy link
Collaborator

Fr1nchy commented May 12, 2017

Ok

@Fr1nchy
Copy link
Collaborator

Fr1nchy commented May 12, 2017

Tu peux regarder ce bug de node dans RespectsOneHive ? J'arrive pas à le corriger du coup je suis bloqué là

@raynalm
Copy link
Collaborator Author

raynalm commented May 12, 2017

Pour le one hive je comprends pas, l'ia se met à pouvoir jouer plusieurs coups sans bugger et du coup elle respecte le one hive à chaque fois, tu sais ce qui merde ?
J'ai vu un autre problème, je pense que je le résoudrais ce week end, en fait les piecesId ne prennent pas en compte la couleur, c'est à dire que la queen blanche et la queen noir ont toutes les deux l'id 0 alors que les pieces noires devraient avoir un id different de celui des pieces blanches, j'essaie de corriger ça mais franchement c'est plutot la merde donc je verrais si c'est pas plus simple de faire ça nous même

@Plinz
Copy link
Owner

Plinz commented May 12, 2017

je suis en train de bosser sur la notation officiel si tu veux donc chaque piece à un string associé en notation officiel

@Fr1nchy
Copy link
Collaborator

Fr1nchy commented May 12, 2017

Le truc des couleurs peut aussi venir de la même chose que le one hive : quand on récupère la pièce de la gameconfig avec getNode, getNode retourne un node aux propriétés identiques à celui qu'on veut, mais l'objet est différent. Du coup la mise à jour de la board ne se fait pas vu qu'on modifie pas le bon objet. J'ai passé la journée dessus, je vois le problème mais je sais pas comment le résoudre.
Et en passant, le getNode prend en compte les coords x et y mais pas le z (ça renvoie la pièce au niveau 0), je pense qu'il vaudrait mieux renvoie celle du dessus.

@Fr1nchy
Copy link
Collaborator

Fr1nchy commented May 12, 2017

Ok j'ai trouvé. Je sais absolument pas pk ça fait ça mais j'ai trouvé la parade. Je push tout de suite. Retest ton IA pour voir si ça va mieux.

@Cieldara
Copy link
Collaborator

Salut, j'ai maté un peu le code de l'IA et en modifiant 2-3 trucs elle réussi à jouer un petit peu, en ne respectant pas toutes les règles certes mais elle joue.
-Pour ça, dans RandomAI faut faire un Math.abs pour le choix de l'action à effectuer :
int randomMove = Math.abs(random.nextInt() % possibleGameConfigs.size());
Le modulo peut choper des valeurs négatives.

-Dans le constructeur de PieceNode il faut ajouter:
this.PossibleCubeDestinations = new ArrayList<>();
Sinon le vecteur est jamais alloué et ça fait péter un nullPointer

-Dans GameConfig, pour la méthode getHighestNode il faut la remplacer par:
public PieceNode getHighestNode(Coord coord) {
PieceNode node = board[coord.getX()][coord.getY()];
if(node == null){
return null;
}
while (node.pieceAbove != null) {
node = node.pieceAbove;
}
return node;
}
Sinon ça pète si le Beetle a un voisin libre

@Cieldara
Copy link
Collaborator

public boolean isFreeCoord(Coord coord) {
if(coord.getX() >=0 && coord.getY()>=0 && coord.getX()<board.length&& coord.getY()<board[coord.getX()].length)
return this.board[coord.getX()][coord.getY()] == null;
return false;
}

Il faut vérifier que la case est dans le tableau aussi

@Cieldara
Copy link
Collaborator

En faisant ça j'ai pu voir quelques bugs :
-La fourmi ne se déplace jamais j'ai l'impression
-La spider peut se déplacer de 1 case
-Au premier tour de l'IA, parfois elle ne joue pas, je ne sais pas pourquoi
-Elle m'a placé une araignée dans une position impossible mais j'arrive pas à reproduire le bug

@Cieldara
Copy link
Collaborator

En fait l'IA essaie de bouger une pièce au tour 1

@Cieldara
Copy link
Collaborator

Bref je modifie rien de ce que vous avez fait, je connais pas suffisamment le code pour ça :p

@Fr1nchy
Copy link
Collaborator

Fr1nchy commented May 13, 2017

Ok je vais jeter un oeil.

@Cieldara
Copy link
Collaborator

Si vous voulez, vous pouvez tester avec la fenêtre de jeu principale, comme ca vous pouvez déplacer le plateau/annuler le coup de l'IA/Relancer une partie PVIA facilement

@Cieldara
Copy link
Collaborator

Pour ca dans nouvellepartie il faut cliquer sur le bouton pvia et choisir en bas le mode IA facile

@Cieldara
Copy link
Collaborator

En fait je crois que l'IA essaie de bouger ma reine quand je la place en premier

@raynalm
Copy link
Collaborator Author

raynalm commented May 13, 2017

Ouais, j'ai repéré le bug, il vient du fait que les id des pieces dans le state ne contiennent pas la couleur, tandis que dans l'ia oui (en gros elle a l'impression de déjà avoir placé sa reine),, je suis en train de réfléchir à fixer le bug de la bonne manière sans avoir à faire des petites modifs de ci de là (peut etre au niveau du constructeur de la pièce).
Mais je viens de finir ma première game avec l'ia qui bugge pas, donc ça avance, je pense qu'en arrivant lundi j'aurai fini de nettoyer tout ça et qu'on pourra se lancer sur l'ia à proprement parler.

@Cieldara
Copy link
Collaborator

Pour le bug du beetle qui baise toute la partie, dans le fichier Minimax.java il faut remplacer la triple boucle par ça :

for (Column column : core.getBoard().getBoard()) {
for (Box box : column) {
if(box.size() != 0){
Tile tile = box.get(box.size()-1);
if (tile != null && tile.getPiece() != null && tile.getPiece().getTeam() == core.getCurrentPlayer()) {
System.out.println(tile.getPiece().getName() + tile.getPiece().getTeam());
List<CoordGene> PossibleDestinations = core.getPossibleMovement(tile.getCoord());
if (!PossibleDestinations.isEmpty()) {
for (CoordGene destination : PossibleDestinations) {
possibleMovements.add(Notation.getMoveNotation(core.getBoard(), tile.getPiece(), destination));
possibleUnplay.add(Notation.getInverseMoveNotation(core.getBoard(), tile.getPiece()));
}
}
}
}
}
}

@Cieldara
Copy link
Collaborator

C'est après le gros commentaire : " /*ancienne version avec des streams -> pas compatible avec les apppels de methode "

@Cieldara
Copy link
Collaborator

En gros faut regarder les possibilités de déplacement que pour la pièce au dessus, celle en dessous osef en soit :p

@Cieldara
Copy link
Collaborator

https://pastebin.com/yxJFxKkY

Un pastebin pour y voir plus clair

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants