- I created a ComboPlayer.java agent. It sucks and doesn't really work, but I created it. Now I'm putting it down to work on other things.
This commit is contained in:
@@ -128,7 +128,8 @@ public class Referee implements Runnable {
|
|||||||
int tile = 0;
|
int tile = 0;
|
||||||
for (int r = 0; r < Board.NUM_ROWS; r++) {
|
for (int r = 0; r < Board.NUM_ROWS; r++) {
|
||||||
for (int c = 0; c < Board.NUM_COLS; c++) {
|
for (int c = 0; c < Board.NUM_COLS; c++) {
|
||||||
move[tile] = (mv.getCell().r == r && mv.getCell().c == c);
|
move[tile + 4] = (mv.getCell().r == r && mv.getCell().c == c);
|
||||||
|
tile++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -163,12 +164,13 @@ public class Referee implements Runnable {
|
|||||||
System.out
|
System.out
|
||||||
.println("Interrupted while waiting for human to move!");
|
.println("Interrupted while waiting for human to move!");
|
||||||
} else {
|
} else {
|
||||||
|
getPlayerModel().getOutputNodes(getBoardState(board));
|
||||||
|
|
||||||
Move mv = humanPlayer.getMove(board, playerModel);
|
Move mv = humanPlayer.getMove(board, playerModel);
|
||||||
if (board.getTile(mv.getCell().r, mv.getCell().c) == TileColor.NONE) {
|
if (board.getTile(mv.getCell().r, mv.getCell().c) == TileColor.NONE) {
|
||||||
playToken(humanPlayer.getMove(board, playerModel));
|
playToken(humanPlayer.getMove(board, playerModel));
|
||||||
|
|
||||||
getPlayerModel().train(getBoardState(board),
|
getPlayerModel().train(getMoveArray(mv));
|
||||||
getMoveArray(mv));
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
humanPlayer.denyMove();
|
humanPlayer.denyMove();
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import model.Board;
|
|||||||
import model.Move;
|
import model.Move;
|
||||||
import model.comPlayer.generator.AlphaBetaMoveGenerator;
|
import model.comPlayer.generator.AlphaBetaMoveGenerator;
|
||||||
import model.comPlayer.generator.MoveGenerator;
|
import model.comPlayer.generator.MoveGenerator;
|
||||||
|
import model.playerModel.GameGoal;
|
||||||
import model.playerModel.PlayerModel;
|
import model.playerModel.PlayerModel;
|
||||||
|
|
||||||
public class AlphaBetaComPlayer implements Player {
|
public class AlphaBetaComPlayer implements Player {
|
||||||
@@ -24,6 +25,12 @@ public class AlphaBetaComPlayer implements Player {
|
|||||||
return true; // always ready to play a random valid move
|
return true; // always ready to play a random valid move
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setGameGoal(GameGoal target) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "Alpha-Beta ComPlayer";
|
return "Alpha-Beta ComPlayer";
|
||||||
|
|||||||
44
src/model/comPlayer/ComboPlayer.java
Normal file
44
src/model/comPlayer/ComboPlayer.java
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
package model.comPlayer;
|
||||||
|
|
||||||
|
import model.Board;
|
||||||
|
import model.Move;
|
||||||
|
import model.comPlayer.generator.AlphaBetaMoveGenerator;
|
||||||
|
import model.comPlayer.generator.NeuralNetworkMoveGenerator;
|
||||||
|
import model.playerModel.GameGoal;
|
||||||
|
import model.playerModel.PlayerModel;
|
||||||
|
|
||||||
|
public class ComboPlayer implements Player {
|
||||||
|
|
||||||
|
private final AlphaBetaMoveGenerator abGen = new AlphaBetaMoveGenerator();
|
||||||
|
private NeuralNetworkMoveGenerator nnGen = null;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void denyMove() {
|
||||||
|
throw new UnsupportedOperationException("Not implemented");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Move getMove(Board board, PlayerModel player) {
|
||||||
|
if (player.getHighScores()[2] == -1) {
|
||||||
|
return abGen.genMove(board, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
else {
|
||||||
|
if (nnGen == null) {
|
||||||
|
nnGen = new NeuralNetworkMoveGenerator(player);
|
||||||
|
}
|
||||||
|
return nnGen.genMove(board, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isReady() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setGameGoal(GameGoal target) {
|
||||||
|
// Nothing yet.
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,6 +4,7 @@ import model.Board;
|
|||||||
import model.Board.TileColor;
|
import model.Board.TileColor;
|
||||||
import model.CellPointer;
|
import model.CellPointer;
|
||||||
import model.Move;
|
import model.Move;
|
||||||
|
import model.playerModel.GameGoal;
|
||||||
import model.playerModel.PlayerModel;
|
import model.playerModel.PlayerModel;
|
||||||
|
|
||||||
public class HumanPlayer implements Player {
|
public class HumanPlayer implements Player {
|
||||||
@@ -79,4 +80,9 @@ public class HumanPlayer implements Player {
|
|||||||
public void setColor(TileColor clr) {
|
public void setColor(TileColor clr) {
|
||||||
color = clr;
|
color = clr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setGameGoal(GameGoal target) {
|
||||||
|
// Do nothing.
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -4,6 +4,7 @@ import model.Board;
|
|||||||
import model.Move;
|
import model.Move;
|
||||||
import model.comPlayer.generator.MinimaxMoveGenerator;
|
import model.comPlayer.generator.MinimaxMoveGenerator;
|
||||||
import model.comPlayer.generator.MoveGenerator;
|
import model.comPlayer.generator.MoveGenerator;
|
||||||
|
import model.playerModel.GameGoal;
|
||||||
import model.playerModel.PlayerModel;
|
import model.playerModel.PlayerModel;
|
||||||
|
|
||||||
public class MinimaxComPlayer implements Player {
|
public class MinimaxComPlayer implements Player {
|
||||||
@@ -28,6 +29,12 @@ public class MinimaxComPlayer implements Player {
|
|||||||
return true; // always ready to play a random valid move
|
return true; // always ready to play a random valid move
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setGameGoal(GameGoal target) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "Minimax ComPlayer";
|
return "Minimax ComPlayer";
|
||||||
|
|||||||
@@ -4,26 +4,33 @@ import model.Board;
|
|||||||
import model.Move;
|
import model.Move;
|
||||||
import model.comPlayer.generator.MonteCarloMoveGenerator;
|
import model.comPlayer.generator.MonteCarloMoveGenerator;
|
||||||
import model.comPlayer.generator.MoveGenerator;
|
import model.comPlayer.generator.MoveGenerator;
|
||||||
|
import model.playerModel.GameGoal;
|
||||||
import model.playerModel.PlayerModel;
|
import model.playerModel.PlayerModel;
|
||||||
|
|
||||||
public class MonteCarloComPlayer implements Player {
|
public class MonteCarloComPlayer implements Player {
|
||||||
private MoveGenerator moveGenerator = new MonteCarloMoveGenerator();
|
private final MoveGenerator moveGenerator = new MonteCarloMoveGenerator();
|
||||||
|
|
||||||
@Override
|
|
||||||
public Move getMove(Board board, PlayerModel playerModel) {
|
|
||||||
return moveGenerator.genMove(board, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void denyMove() {
|
public void denyMove() {
|
||||||
throw new UnsupportedOperationException("Not implemented");
|
throw new UnsupportedOperationException("Not implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Move getMove(Board board, PlayerModel playerModel) {
|
||||||
|
return moveGenerator.genMove(board, false);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isReady() {
|
public boolean isReady() {
|
||||||
return true; // always ready to play a random valid move
|
return true; // always ready to play a random valid move
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setGameGoal(GameGoal target) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "Monte Carlo ComPlayer";
|
return "Monte Carlo ComPlayer";
|
||||||
|
|||||||
@@ -1,25 +1,14 @@
|
|||||||
package model.comPlayer;
|
package model.comPlayer;
|
||||||
|
|
||||||
import model.Board;
|
import model.Board;
|
||||||
import model.Board.TileColor;
|
|
||||||
import model.Move;
|
import model.Move;
|
||||||
import model.Referee;
|
import model.comPlayer.generator.NeuralNetworkMoveGenerator;
|
||||||
import model.playerModel.Node;
|
import model.playerModel.GameGoal;
|
||||||
import model.playerModel.PlayerModel;
|
import model.playerModel.PlayerModel;
|
||||||
|
|
||||||
public class NeuralNetworkPlayer implements Player {
|
public class NeuralNetworkPlayer implements Player {
|
||||||
|
|
||||||
public static int getSmallest(double[] list) {
|
private NeuralNetworkMoveGenerator nnGen = null;
|
||||||
int index = 0;
|
|
||||||
|
|
||||||
for (int i = 0; i < list.length; i++) {
|
|
||||||
if (list[index] < list[i]) {
|
|
||||||
index = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return index;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void denyMove() {
|
public void denyMove() {
|
||||||
@@ -28,55 +17,11 @@ public class NeuralNetworkPlayer implements Player {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Move getMove(Board board, PlayerModel player) {
|
public Move getMove(Board board, PlayerModel player) {
|
||||||
Move mv = null;
|
if (nnGen == null) {
|
||||||
|
nnGen = new NeuralNetworkMoveGenerator(player);
|
||||||
Node[] nodes = player.getOutputNodes(Referee.getBoardState(board));
|
|
||||||
|
|
||||||
TileColor color = TileColor.BLUE;
|
|
||||||
|
|
||||||
double[] colorStrengths = new double[4];
|
|
||||||
colorStrengths[0] = nodes[0].strength();
|
|
||||||
colorStrengths[1] = nodes[1].strength();
|
|
||||||
colorStrengths[2] = nodes[2].strength();
|
|
||||||
colorStrengths[3] = nodes[3].strength();
|
|
||||||
|
|
||||||
switch (getSmallest(colorStrengths)) {
|
|
||||||
case 1:
|
|
||||||
color = TileColor.GREEN;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
color = TileColor.RED;
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
color = TileColor.YELLOW;
|
|
||||||
break;
|
|
||||||
case 0:
|
|
||||||
default:
|
|
||||||
color = TileColor.BLUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int index = 4;
|
return nnGen.genMove(board, false);
|
||||||
for (int i = 4; i < nodes.length; i++) {
|
|
||||||
if (nodes[i].strength() > nodes[index].strength()) {
|
|
||||||
index = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int i = 4;
|
|
||||||
loop: for (int r = 0; r < Board.NUM_ROWS; r++) {
|
|
||||||
for (int c = 0; c < Board.NUM_COLS; c++) {
|
|
||||||
if (i == index) {
|
|
||||||
mv = new Move(color, r, c);
|
|
||||||
break loop;
|
|
||||||
}
|
|
||||||
|
|
||||||
else {
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return mv;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -84,6 +29,11 @@ public class NeuralNetworkPlayer implements Player {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setGameGoal(GameGoal target) {
|
||||||
|
// Do nothing.
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "Neural Network Player";
|
return "Neural Network Player";
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package model.comPlayer;
|
|||||||
|
|
||||||
import model.Board;
|
import model.Board;
|
||||||
import model.Move;
|
import model.Move;
|
||||||
|
import model.playerModel.GameGoal;
|
||||||
import model.playerModel.PlayerModel;
|
import model.playerModel.PlayerModel;
|
||||||
|
|
||||||
public interface Player {
|
public interface Player {
|
||||||
@@ -26,4 +27,6 @@ public interface Player {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public boolean isReady();
|
public boolean isReady();
|
||||||
|
|
||||||
|
public void setGameGoal(GameGoal target);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import model.Board;
|
|||||||
import model.Board.TileColor;
|
import model.Board.TileColor;
|
||||||
import model.CellPointer;
|
import model.CellPointer;
|
||||||
import model.Move;
|
import model.Move;
|
||||||
|
import model.playerModel.GameGoal;
|
||||||
import model.playerModel.PlayerModel;
|
import model.playerModel.PlayerModel;
|
||||||
|
|
||||||
public class RandomComPlayer implements Player {
|
public class RandomComPlayer implements Player {
|
||||||
@@ -51,6 +52,11 @@ public class RandomComPlayer implements Player {
|
|||||||
return true; // always ready to play a random valid move
|
return true; // always ready to play a random valid move
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setGameGoal(GameGoal target) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "Random ComPlayer";
|
return "Random ComPlayer";
|
||||||
|
|||||||
@@ -0,0 +1,98 @@
|
|||||||
|
package model.comPlayer.generator;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import model.Board;
|
||||||
|
import model.Board.TileColor;
|
||||||
|
import model.CellPointer;
|
||||||
|
import model.Move;
|
||||||
|
import model.Referee;
|
||||||
|
import model.playerModel.Node;
|
||||||
|
import model.playerModel.PlayerModel;
|
||||||
|
|
||||||
|
public class NeuralNetworkMoveGenerator implements MoveGenerator {
|
||||||
|
|
||||||
|
public static int getSmallest(double[] list) {
|
||||||
|
int index = 0;
|
||||||
|
|
||||||
|
for (int i = 0; i < list.length; i++) {
|
||||||
|
if (list[index] < list[i]) {
|
||||||
|
index = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return index;
|
||||||
|
}
|
||||||
|
|
||||||
|
PlayerModel player;
|
||||||
|
|
||||||
|
public NeuralNetworkMoveGenerator(PlayerModel pm) {
|
||||||
|
player = pm;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Move genMove(Board board, boolean asHuman) {
|
||||||
|
Move mv = null;
|
||||||
|
|
||||||
|
Node[] nodes = player.getOutputNodes(Referee.getBoardState(board));
|
||||||
|
|
||||||
|
TileColor color = TileColor.BLUE;
|
||||||
|
|
||||||
|
double[] colorStrengths = new double[4];
|
||||||
|
colorStrengths[0] = nodes[0].strength();
|
||||||
|
colorStrengths[1] = nodes[1].strength();
|
||||||
|
colorStrengths[2] = nodes[2].strength();
|
||||||
|
colorStrengths[3] = nodes[3].strength();
|
||||||
|
|
||||||
|
switch (getSmallest(colorStrengths)) {
|
||||||
|
case 1:
|
||||||
|
color = TileColor.GREEN;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
color = TileColor.RED;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
color = TileColor.YELLOW;
|
||||||
|
break;
|
||||||
|
case 0:
|
||||||
|
default:
|
||||||
|
color = TileColor.BLUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
int index = 4;
|
||||||
|
for (int i = 4; i < nodes.length; i++) {
|
||||||
|
if (nodes[i].strength() > nodes[index].strength()) {
|
||||||
|
index = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int i = 4;
|
||||||
|
loop: for (int r = 0; r < Board.NUM_ROWS; r++) {
|
||||||
|
for (int c = 0; c < Board.NUM_COLS; c++) {
|
||||||
|
if (i == index) {
|
||||||
|
mv = new Move(color, r, c);
|
||||||
|
break loop;
|
||||||
|
}
|
||||||
|
|
||||||
|
else {
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
while (!Board.isLegal(board, mv.getCell())) {
|
||||||
|
mv = new Move(mv.getColor(), new CellPointer(
|
||||||
|
PlayerModel.rand.nextInt(Board.NUM_ROWS),
|
||||||
|
PlayerModel.rand.nextInt(Board.NUM_COLS)));
|
||||||
|
}
|
||||||
|
|
||||||
|
return mv;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Move> genMoves(Board board, boolean asHuman, int nMoves) {
|
||||||
|
// Do nothing.
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -134,6 +134,10 @@ public class PlayerModel implements Serializable {
|
|||||||
|
|
||||||
public Node[] getOutputNodes(boolean[] input) {
|
public Node[] getOutputNodes(boolean[] input) {
|
||||||
if (input.length == inputNode.length) {
|
if (input.length == inputNode.length) {
|
||||||
|
for (int i = 0; i < input.length; i++) {
|
||||||
|
inputNode[i].setStimulation(input[i]);
|
||||||
|
}
|
||||||
|
|
||||||
return outputNode;
|
return outputNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -203,12 +207,13 @@ public class PlayerModel implements Serializable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void train(boolean[] boardState, boolean[] example) {
|
public void train(boolean[] example) {
|
||||||
getOutputNodes(boardState);
|
boolean[] hold = getOutputActivations();
|
||||||
|
|
||||||
|
System.out.println("TRAIN");
|
||||||
if (example.length == outputNode.length) {
|
if (example.length == outputNode.length) {
|
||||||
for (int i = 0; i < outputNode.length; i++) {
|
for (int i = 0; i < outputNode.length; i++) {
|
||||||
outputNode[i].learn(example[i]);
|
outputNode[i].learn(example[i] == hold[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -216,4 +221,14 @@ public class PlayerModel implements Serializable {
|
|||||||
private int getHighScore() {
|
private int getHighScore() {
|
||||||
return getHighScores()[0];
|
return getHighScores()[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean[] getOutputActivations() {
|
||||||
|
boolean[] acts = new boolean[outputNode.length];
|
||||||
|
|
||||||
|
for (int i = 0; i < acts.length; i++) {
|
||||||
|
acts[i] = outputNode[i].axon();
|
||||||
|
}
|
||||||
|
|
||||||
|
return acts;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ public class SigmoidNode implements Node {
|
|||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
// Training rate.
|
// Training rate.
|
||||||
private final double A = .15;
|
private final double A = .05;
|
||||||
|
|
||||||
private final Hashtable<Node, Double> dendrites = new Hashtable<Node, Double>();
|
private final Hashtable<Node, Double> dendrites = new Hashtable<Node, Double>();
|
||||||
|
|
||||||
@@ -36,6 +36,8 @@ public class SigmoidNode implements Node {
|
|||||||
n.learn(correct);
|
n.learn(correct);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
System.out.println(strength());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -1,17 +1,21 @@
|
|||||||
package view;
|
package view;
|
||||||
|
|
||||||
import model.comPlayer.AlphaBetaComPlayer;
|
import model.comPlayer.AlphaBetaComPlayer;
|
||||||
|
import model.comPlayer.ComboPlayer;
|
||||||
import model.comPlayer.MinimaxComPlayer;
|
import model.comPlayer.MinimaxComPlayer;
|
||||||
import model.comPlayer.MonteCarloComPlayer;
|
import model.comPlayer.MonteCarloComPlayer;
|
||||||
|
import model.comPlayer.NeuralNetworkPlayer;
|
||||||
import model.comPlayer.Player;
|
import model.comPlayer.Player;
|
||||||
import model.comPlayer.RandomComPlayer;
|
import model.comPlayer.RandomComPlayer;
|
||||||
|
|
||||||
public class ParsedArgs {
|
public class ParsedArgs {
|
||||||
public static final String COM_RANDOM = "RANDOM";
|
|
||||||
public static final String COM_MINIMAX = "MINIMAX";
|
|
||||||
public static final String COM_ALPHABETA = "ALPHABETA";
|
public static final String COM_ALPHABETA = "ALPHABETA";
|
||||||
public static final String COM_MONTECARLO = "MONTECARLO";
|
public static final String COM_ANN = "NEURALNET";
|
||||||
|
public static final String COM_COMBO = "COMBO";
|
||||||
public static final String COM_DEFAULT = COM_ALPHABETA;
|
public static final String COM_DEFAULT = COM_ALPHABETA;
|
||||||
|
public static final String COM_MINIMAX = "MINIMAX";
|
||||||
|
public static final String COM_MONTECARLO = "MONTECARLO";
|
||||||
|
public static final String COM_RANDOM = "RANDOM";
|
||||||
|
|
||||||
private String comPlayer = COM_DEFAULT;
|
private String comPlayer = COM_DEFAULT;
|
||||||
|
|
||||||
@@ -24,8 +28,13 @@ public class ParsedArgs {
|
|||||||
return new AlphaBetaComPlayer();
|
return new AlphaBetaComPlayer();
|
||||||
} else if (COM_MONTECARLO.equalsIgnoreCase(comPlayer)) {
|
} else if (COM_MONTECARLO.equalsIgnoreCase(comPlayer)) {
|
||||||
return new MonteCarloComPlayer();
|
return new MonteCarloComPlayer();
|
||||||
|
} else if (COM_ANN.equalsIgnoreCase(comPlayer)) {
|
||||||
|
return new NeuralNetworkPlayer();
|
||||||
|
} else if (COM_COMBO.equalsIgnoreCase(comPlayer)) {
|
||||||
|
return new ComboPlayer();
|
||||||
} else {
|
} else {
|
||||||
System.out.println("Unrecognized comPlayer '" + comPlayer +"', using default: " + COM_DEFAULT);
|
System.out.println("Unrecognized comPlayer '" + comPlayer
|
||||||
|
+ "', using default: " + COM_DEFAULT);
|
||||||
return new AlphaBetaComPlayer();
|
return new AlphaBetaComPlayer();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user