-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGeneticAlgorithm.java
More file actions
82 lines (70 loc) · 1.76 KB
/
GeneticAlgorithm.java
File metadata and controls
82 lines (70 loc) · 1.76 KB
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
public class GeneticAlgorithm
{
private Organism[] population;
private Blackjack game;
public static void main(String[] args)
{
GeneticAlgorithm g = new GeneticAlgorithm();
g.loop();
}
public GeneticAlgorithm()
{
population = new Organism[100];
for (int i = 0; i < population.length; i++)
population[i] = new Organism();
game = new Blackjack();
}
public void loop()
{
int number = 0;
while (true)
{
for (int i = 0; i < population.length; i++)
{
//second peramiter is number of games to play CHANGE THIS TO SLOW IT DOWN
population[i].play(game, 1000);
}
sortPopulationByWins(population);
number++;
//pick winners and go again
System.out.println("Generation: " + number + ": Wins " + population[99].getWins());
//selection CHANGE THE 100!!!!!!!!! based on num games
for (int i = 0; i < 10; i++)
{
population[i] = population[99 - i].copy();
}
if (population[99].getWins() >= 420)
{
population[99].printStrategy();
}
if (population[99].getWins() >= 500)
System.exit(0);
for (Organism org: population)
org.resetWins();
}
}
public void sortPopulationByWins(Organism[] a)
{
for (int i = 0; i < a.length; i++)
{
int min = indexOfMin(a, i);
Organism save = a[i];
a[i] = a[min];
a[min] = save;
}
}
public static int indexOfMin(Organism[] a, int startIndex)
{
int lowest = startIndex;
Organism y = a[lowest];
for (int i = startIndex; i < a.length; i++)
{
if (y.getWins() > a[i].getWins())
{
y = a[i];
lowest = i;
}
}
return lowest;
}
}