Вы находитесь на странице: 1из 4

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ОБРАЗОВАНИЯ

МОСКОВСКИЙ ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ


ВЫСШАЯ ШКОЛА ПЕЧАТИ И МЕДИАИНДУСТРИИ

Институт Принтмедиа и информационных технологий


Кафедра Информатики и информационных технологий

направление подготовки
09.03.02 «Информационные системы и технологии»

ЛАБОРАТОРНАЯ РАБОТА № 3

Дисциплина: технологии обработки информации

Выполнил(а): студент(ка) группы 201-724

Гуляев Дмитрий Максимович


(Фамилия И.О.)

Дата, подпись
(Дата) (Подпись)

Проверил:
(Фамилия И.О., степень, звание) (Оценка)

Дата, подпись
(Дата) (Подпись)

Замечания:

2023
Цель работы.

Ознакомиться с муравьиным алгоритмом, осуществить его программную


реализацию

Теоретическое обоснование.

Идея муравьиного алгоритма возникла в результате наблюдения за


поведением реальных муравьёв. Отправной точкой положили исследования
аргентинских муравьёв в 1989-1990 годах. Затем, в начале 90-х годов, Марко
Дориго начал исследования для применения этой информации в практике. Он
первый смог применить их стратегию для задачи по нахождению кратчайших
маршрутов в графе.

Для того чтобы построить подходящий муравьиный алгоритм для решения


какой-либо задачи,нужно

· Представить задачу в виде набора компонент и переходов или набором


неориентированныхвзвешенных графов, на которых муравьи могут строить
решения

· Определить значение следа феромона

· Определить эвристику поведения муравья, когда строим решение

· Если возможно, то реализовать эффективный локальный поиск

· Выбрать специфический ACO алгоритм и применить для решения задачи


Настроитьпараметр ACO алгоритма
Листинг
import numpy as np
from numpy import inf
graph = np.array(
[[0, 13, 21, 44, 95],
[88, 0, 18, 42, 52],
[33, 22, 0, 45, 37],
[75, 76, 28, 0, 20],
[10, 69, 58, 48, 0]])
SizeOfResult = 5
iteration = 999
nAnts = 50
nCitys = 5
ferIsp = 1
ferImp = 3
dist = 2
visibility = 1/graph
visibility[visibility == inf] = 0
pheromone = .1*np.ones((nAnts, nCitys))
rute = np.ones((nAnts, nCitys+1))

for ite in range(iteration):


rute[:, 0] = 1

for i in range(nAnts):
tempVisibility = np.array(visibility)
for j in range(nCitys-1):
completedPaths = np.zeros(SizeOfResult)
nextPathProbability = np.zeros(SizeOfResult)
currentTown = int(rute[i, j]-1)
tempVisibility[:, currentTown] = 0
pFeature = np.power(pheromone[currentTown, :], dist)
vFeature = np.power(tempVisibility[currentTown, :], ferImp)
pFeature = pFeature[:, np.newaxis]
vFeature = vFeature[:, np.newaxis]
completedPaths = np.multiply(pFeature, vFeature)
total = np.sum(completedPaths)
probs = completedPaths/total
nextPathProbability = np.cumsum(probs)
r = np.random.random_sample()
city = np.nonzero(nextPathProbability > r)[0][0]+1
rute[i, j+1] = city
left = list(set([i for i in range(1, nCitys+1)])-set(rute[i, :-2]))[0]
rute[i, -2] = left
ruteOpt = np.array(rute) costRt
= np.zeros((nAnts, 1)) for i in
range(nAnts):
s = 0
for j in range(nCitys-1):
s = s + graph[int(ruteOpt[i, j])-1, int(ruteOpt[i, j+1])-1]
costRt[i] = s
distOptPerAnt = np.argmin(costRt)
distOpt = costRt[distOptPerAnt]
optRt = rute[distOptPerAnt, :]
pheromone = (1-ferIsp)*pheromone
for i in range(nAnts):
for j in range(nCitys-1):
dt = 1/costRt[i]
pheromone[int(ruteOpt[i, j])-1, int(ruteOpt[i, j+1]) - 1] =
pheromone[int(ruteOpt[i, j])-1, int(ruteOpt[i, j+1])-1] + dt
print('Лучший путь:', optRt, 'с длиной', int( distOpt[0]) +
graph[int(optRt[-2]) - 1, 0])

Результат работы программы:

Вам также может понравиться