-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathNeural.java
123 lines (111 loc) · 3.29 KB
/
Neural.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
/**
* Write a description of class Neural here.
*
* @author (your name)
* @version (a version number or a date)
*/
import java.util.ArrayList;
public class Neural
{
FileReadWrite frw;
int board[][];
ArrayList<Integer> choices; //parallel
ArrayList<String> lines; //arrays
public Neural()
{
frw = new FileReadWrite("History.txt", true);
board = new int[3][3];
choices = new ArrayList<Integer>();
lines = new ArrayList<String>();
}
public int getMove(int board[][])
{
for(int i = 0; i < 3; i++)
for(int j = 0; j < 3; j++)
this.board[i][j] = board[i][j];
String gameBoard = toStr(board);
String search = search(gameBoard);
int choice = 0;
if(!search.equals(""))
{
choice = getChoice(search, board);
lines.add(search);
choices.add(choice);
return choice;
} else {
search = closest(gameBoard);
addLine(gameBoard, search.split(" ")[1]);
choice = getChoice(search, board);
lines.add(search);
choices.add(choice);
return choice;
}
}
public void addLine(String gameBoard, String regex)
{
frw.write(gameBoard + " " + regex);
}
public String search(String search)
{
return frw.findLine(search);
}
public String closest(String line)
{
return frw.findClosest(line);
}
public int getChoice(String line, int board[][])
{
int choice = 0;
ArrayList<Integer> choices = new ArrayList<Integer>();
String weights = line.split(" ")[1];
String nodes[] = weights.split("[)]");
int index = 0;
while(board[index / 3][index % 3] != 0)
index++;
int largest = Integer.parseInt(nodes[index].split("[(]")[1]);
choices.add(index);
for(int i = index; i < 9; i++)
{
int weight = Integer.parseInt(nodes[i].split("[(]")[1]);
if(weight == largest)
{
if(board[i / 3][i % 3] == 0)
choices.add(i);
} else if(weight > largest) {
if(board[i / 3][i % 3] == 0)
{
choices.clear();
choices.add(i);
largest = weight;
}
}
}
choice = choices.get((int) Math.floor(Math.random() * choices.size()));
return choice;
}
public void eval(boolean tie, int modifier)
{
for(int i = 0; i < lines.size(); i++)
{
try{
frw.replace(lines.get(i), choices.get(i), i*modifier, tie);
} catch (IndexOutOfBoundsException e) {
System.out.println("Error");
}
}
choices.clear();
lines.clear();
}
public String toStr(int board[][])
{
String ret = "";
for(int i = 0; i < 3; i++)
for(int j = 0; j < 3; j++)
{
if(board[i][j] == 10)
ret += 2;
else ret += board[i][j];
}
return ret;
}
}