-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathInitialisation.py
More file actions
32 lines (25 loc) · 1.4 KB
/
Initialisation.py
File metadata and controls
32 lines (25 loc) · 1.4 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
import numpy as np
from Exceptions import PopulationSizeException, TravellingSalesMatrixException
from Individual import Individual
from Population import Population
class Initialisation():
_population_size: int = -1
_number_of_cities: int = -1
def __init__(self, population_size: int, distanceMatrix: np.ndarray) -> None:
shape = distanceMatrix.shape
if len(shape) != 2 or shape[0] != shape[1] : raise TravellingSalesMatrixException(f"The matrix is invalid is invalid, input shape: {shape}")
self._number_of_cities = distanceMatrix.shape[0]
if population_size <= 0 : raise PopulationSizeException(f"The population size is invalid, input:{population_size}")
self._population_size = population_size
#TODO: use random greedy connect
# for now = random
def get_initial_population(self, distanceMatrix: np.ndarray) -> Population:
population = Population(self._population_size)
for _ in range(self._population_size):
candidate_solution = np.empty(self._number_of_cities, dtype=np.int16)
candidate_solution[0] = 0
candidate_solution[1:] = np.random.permutation(np.arange(1,self._number_of_cities, dtype= np.uint16))
individual = Individual(self._number_of_cities)
individual.use_path_notation(candidate_solution)
population.add_individual(individual)
return population