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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

pip install python-constraint

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

Импортируйте constraint пакет, используя следующую команду -

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 Вот.