Искусственный интеллект. Основные понятия - стр. 31
while queue:
current, path = queue.popleft()
if current == end:
return path
if current not in visited:
visited.add(current)
for neighbor in graph[current]:
if neighbor not in visited:
queue.append((neighbor, path + [neighbor]))
return None
# Пример графа дорожной сети (представлен в виде словаря смежности)
road_network = {
'A': ['B', 'C'],
'B': ['A', 'D', 'E'],
'C': ['A', 'F'],
'D': ['B'],
'E': ['B', 'F'],
'F': ['C', 'E', 'G'],
'G': ['F']
}
start = 'A'
end = 'G'
# Поиск кратчайшего пути в графе дорожной сети
shortest_path = bfs(road_network, start, end)
print("Кратчайший путь от", start, "к", end, ":", shortest_path)
# Создание графа и добавление вершин
G = nx.Graph()
for node in road_network:
G.add_node(node)
# Добавление ребер между вершинами
for node, neighbors in road_network.items():
for neighbor in neighbors:
G.add_edge(node, neighbor)
# Отображение графа
pos = nx.spring_layout(G) # Положение вершин на графе
nx.draw(G, pos, with_labels=True, node_color='lightblue', node_size=1000)
# Выделение кратчайшего пути
shortest_path_edges = [(shortest_path[i], shortest_path[i + 1]) for i in range(len(shortest_path) – 1)]
nx.draw_networkx_edges(G, pos, edgelist=shortest_path_edges, width=2, edge_color='red')
plt.title('Граф дорожной сети с кратчайшим путем от {} к {}'.format(start, end))
plt.show()
```
Этот код создает граф дорожной сети на основе словаря смежности, а затем использует алгоритм BFS для поиска кратчайшего пути от начальной до конечной точки. Результат отображается с помощью библиотеки `matplotlib`. Визуализируется весь граф, а кратчайший путь отображается красным цветом.
Эти примеры демонстрируют, как каждый из методов поиска может быть использован для решения различных задач. DFS подходит для задач, где важно найти любой возможный путь, в то время как BFS используется, когда необходимо найти кратчайший путь или оптимальное решение.
Оба этих метода имеют свои преимущества и недостатки, и выбор конкретного метода зависит от характеристик задачи и требуемых критериев оптимальности. Кроме того, существуют и другие методы поиска, такие как алгоритмы A* и Dijkstra, которые также находят широкое применение в различных областях искусственного интеллекта и информатики.
Оптимизация
Оптимизационные методы в искусственном интеллекте играют ключевую роль в нахождении наилучших решений для сложных задач с определенными ограничениями или целями. Эти методы могут быть применены как к задачам однокритериальной оптимизации, где требуется найти оптимальное решение для одного критерия, так и к многокритериальной оптимизации, где необходимо учитывать несколько конфликтующих целей или ограничений одновременно.
Генетические алгоритмы (ГА) представляют собой мощный класс оптимизационных методов, вдохновленных принципами естественного отбора и генетики. Они являются итеративными алгоритмами, которые эмулируют эволюцию популяции, где каждый кандидат представляет потенциальное решение задачи. На каждой итерации алгоритма создается новое поколение кандидатов путем применения операторов мутации, скрещивания и отбора к родительской популяции.
В начале работы ГА создает случайную популяцию кандидатов, которая представляет собой начальные решения задачи. Затем происходит итеративный процесс, на каждом этапе которого осуществляется оценка приспособленности каждого кандидата в соответствии с целевой функцией. Кандидаты, которые лучше соответствуют поставленным критериям, имеют больший шанс выживания и передачи своих генетических характеристик следующему поколению.