Professional Documents
Culture Documents
ГуляевД М ТОИ№5
ГуляевД М ТОИ№5
ВЫСШЕГО ОБРАЗОВАНИЯ
ЛАБОРАТОРНАЯ РАБОТА № 5
Замечания: _________________________________________________________
____________________________________________________________________
____________________________________________________________________
2023
Цель работы.
return child
def mutate(route, probablity):
route = np.array(route) for
swaping_p in range(len(route)):
if random.random() < probablity:
swapedWith = np.random.randint(0, len(route))
temp1 =
route[swaping_p]
temp2 = route[swapedWith]
route[swapedWith] = temp1
route[swaping_p] = temp2 return
route
def rankRoutes(population,
cities):
fitnessResults = {
i: fitness(population[i], cities) for i in
range(len(population))
}
return sorted(fitnessResults.items(), key=operator.itemgetter(1),
reverse=False)
def next_gen(cities, cur_pop, mut,
el_count): population_rank =
rankRoutes(cur_pop, cities) result =
[i[0] for i in population_rank]
selection_result = [result[i] for i in range(el_count)]
mating_pool = [cur_pop[selection_result[i]]
for i in range(len(selection_result))
]
children = [crossover(mating_pool[i], mating_pool[i
+ 1]) for i in range(len(mating_pool) -
1)
]
new_gen = []
for i in children:
muated_child = mutate(i, mut)
new_gen.append(muated_child)
return new_gen
def genetic_algorithm(cities, size_p=1000, el_count=100,
mut=0.1, gen=1600):
pop = []
progress = []
Number_of_cities = len(cities)
pop = set(np.arange(Number_of_cities, dtype=int))
population = [list(random.sample(pop, Number_of_cities)) for _ in
range(size_p)]
progress.append(rankRoutes(population,
cities)[0][1]) print(f"Начальная дистанция:
{progress[0]}") print(f"Начальный путь:
{population[0]}") for _ in range(gen):
pop = next_gen(cities, population, mut,
el_count)
progress.append(rankRoutes(pop, cities)[0][1])
rank_ = rankRoutes(pop, cities)[0]
print(f"Лучшая дистанция: {rank_[1]}")
print(f"Лучший путь: {pop[rank_[0]]} ")
cityList = []
for _ in
range(20):
x = int(random.random() *
150) y =
int(random.random() * 150)
cityList.append((x, y))
genetic_algorithm(cities