-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRoutes.java
More file actions
104 lines (77 loc) · 2 KB
/
Routes.java
File metadata and controls
104 lines (77 loc) · 2 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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
package ga;
import java.util.ArrayList;
import java.util.Collections;
public class Routes
{
private ArrayList routes = new ArrayList<Node>();
private double fitness = 0;
private int distance = 0;
public Routes()
{
for (int i = 0; i < RoutesManager.numberOfNodes(); i++)
{
routes.add(null);
}
}
public Routes(ArrayList routes)
{
this.routes = routes;
}
public void generateIndividual()
{
for (int nodeIndex = 0; nodeIndex < RoutesManager.numberOfNodes(); nodeIndex++)
{
setNode(nodeIndex, RoutesManager.getNode(nodeIndex));
}
Collections.shuffle(routes);
}
public Node getNode(int routesPosition)
{
return (Node)routes.get(routesPosition);
}
public void setNode(int routesPosition, Node node)
{
routes.set(routesPosition, node);
fitness = 0;
distance = 0;
}
public double getFitness()
{
if (fitness == 0)
{
fitness = 1/(double)getDistance();
}
return fitness;
}
public int getDistance(){ if (distance == 0)
{
int routesDistance = 0;
for (int nodeIndex=0; nodeIndex < routesSize(); nodeIndex++)
{
Node fromNode = getNode(nodeIndex);
Node destinationNode;
if(nodeIndex+1 < routesSize())
{
destinationNode = getNode(nodeIndex+1);
}
else
{
destinationNode = getNode(0);
}
routesDistance += fromNode.distanceTo(destinationNode);
}
distance = routesDistance;
}
return distance;
}
public int routesSize() { return routes.size();
}
public boolean containsNode(Node node){ return routes.contains(node);
}
@Override
public String toString() { String geneString = "|";
for (int i = 0; i < routesSize(); i++) { geneString += getNode(i)+"|";
}
return geneString;
}
}