Учебники

AI с Python — эвристический поиск

Эвристический поиск играет ключевую роль в искусственном интеллекте. В этой главе вы узнаете подробно об этом.

Концепция эвристического поиска в AI

Эвристика — это эмпирическое правило, которое приводит нас к вероятному решению. Большинство проблем в искусственном интеллекте имеют экспоненциальный характер и имеют много возможных решений. Вы не знаете точно, какие решения являются правильными, и проверка всех решений будет очень дорогой.

Таким образом, использование эвристики сужает поиск решения и устраняет неправильные варианты. Метод использования эвристики для поиска в пространстве поиска называется эвристическим поиском. Эвристические методы очень полезны, потому что поиск может быть усилен при их использовании.

Разница между неинформированным и информированным поиском

Существует два типа стратегий управления или методов поиска: неосведомленные и информированные. Они подробно объяснены как дано здесь —

Неинформированный поиск

Это также называется слепой поиск или стратегия слепого контроля. Он назван так, потому что есть информация только об определении проблемы, и никакой другой дополнительной информации о состояниях нет. Этот вид методов поиска будет искать во всем пространстве состояний для получения решения. Поиск по ширине (BFS) и Поиск по глубине (DFS) являются примерами неинформированного поиска.

Информированный поиск

Это также называется эвристическим поиском или эвристической стратегией управления. Он назван так, потому что есть некоторая дополнительная информация о штатах. Эта дополнительная информация полезна для вычисления предпочтения дочерних узлов для изучения и расширения. Там будет эвристическая функция, связанная с каждым узлом. Best First Search (BFS), A *, Mean и Analysis являются примерами информированного поиска.

Проблемы удовлетворения ограничений (ПСУ)

Ограничение означает ограничение или ограничение. В ИИ проблемы удовлетворения ограничений — это проблемы, которые должны решаться при некоторых ограничениях. Необходимо сосредоточиться на том, чтобы не нарушать ограничения при решении таких проблем. Наконец, когда мы достигаем окончательного решения, CSP должен соблюдать ограничение.

Проблема реального мира, решаемая удовлетворением ограничений

Предыдущие разделы были посвящены созданию проблем удовлетворения ограничений. Теперь давайте применим это и к реальным проблемам. Ниже приведены некоторые примеры реальных проблем, решаемых путем удовлетворения ограничений:

Решение алгебраических отношений

С помощью задачи удовлетворения ограничений мы можем решить алгебраические отношения. В этом примере мы попытаемся решить простое алгебраическое соотношение a * 2 = b . Он вернет значение a и b в пределах диапазона, который мы определили.

После завершения этой программы Python вы сможете понять основы решения проблем с удовлетворением ограничений.

Обратите внимание, что перед написанием программы нам нужно установить пакет Python с именем python-constraint. Вы можете установить его с помощью следующей команды —

pip install python-constraint

Следующие шаги показывают вам программу на Python для решения алгебраических отношений, используя удовлетворение ограничений —

Импортируйте пакет ограничений с помощью следующей команды —

from constraint import *

Теперь создайте объект модуля с именем problem (), как показано ниже —

problem = Problem()

Теперь определим переменные. Обратите внимание, что здесь у нас есть две переменные a и b, и мы определяем 10 как их диапазон, что означает, что мы получили решение в первых 10 числах.

problem.addVariable('a', range(10))
problem.addVariable('b', range(10))

Затем определите конкретное ограничение, которое мы хотим применить к этой проблеме. Заметьте, что здесь мы используем ограничение a * 2 = b .

problem.addConstraint(lambda a, b: a * 2 == b)

Теперь создайте объект модуля getSolution () с помощью следующей команды —

solutions = problem.getSolutions()

Наконец, напечатайте вывод, используя следующую команду —

print (solutions)

Вы можете наблюдать результат вышеупомянутой программы следующим образом —

[{'a': 4, 'b': 8}, {'a': 3, 'b': 6}, {'a': 2, 'b': 4}, {'a': 1, 'b': 2}, {'a': 0, 'b': 0}]

Магический Квадрат

Магический квадрат — это расположение различных чисел, обычно целых чисел, в квадратной сетке, где числа в каждом ряду и в каждом столбце, а также числа в диагонали, все складываются в одно и то же число, называемое «магическая постоянная» ,

Ниже приведено пошаговое выполнение простого кода Python для генерации магических квадратов.

Определите функцию с именем magic_square , как показано ниже —

def magic_square(matrix_ms):
   iSize = len(matrix_ms[0])
   sum_list = []

Следующий код показывает код для вертикали квадратов —

for col in range(iSize):
   sum_list.append(sum(row[col] for row in matrix_ms))

Следующий код показывает код для горизонтали квадратов —

sum_list.extend([sum (lines) for lines in matrix_ms])

Следующий код показывает код для горизонтальных квадратов —

dlResult = 0
for i in range(0,iSize):
   dlResult +=matrix_ms[i][i]
sum_list.append(dlResult)
drResult = 0
for i in range(iSize-1,-1,-1):
   drResult +=matrix_ms[i][i]
sum_list.append(drResult)

if len(set(sum_list))>1:
   return False
return True

Теперь дайте значение матрицы и проверьте вывод —

print(magic_square([[1,2,3], [4,5,6], [7,8,9]]))

Вы можете заметить, что вывод будет False, поскольку сумма не совпадает с тем же числом.

print(magic_square([[3,9,2], [3,5,7], [9,1,6]]))

Вы можете заметить, что вывод будет True, так как сумма — это то же самое число, которое здесь 15 .