AI z Pythonem - wyszukiwanie heurystyczne

Wyszukiwanie heurystyczne odgrywa kluczową rolę w sztucznej inteligencji. W tym rozdziale dowiesz się o tym szczegółowo.

Koncepcja wyszukiwania heurystycznego w AI

Heurystyka to praktyczna zasada, która prowadzi nas do prawdopodobnego rozwiązania. Większość problemów związanych ze sztuczną inteligencją ma charakter wykładniczy i istnieje wiele możliwych rozwiązań. Nie wiesz dokładnie, które rozwiązania są poprawne, a sprawdzenie wszystkich rozwiązań byłoby bardzo kosztowne.

Zatem użycie heurystyki zawęża poszukiwanie rozwiązania i eliminuje złe opcje. Metoda wykorzystania heurystyki do kierowania przeszukiwaniem w przestrzeni przeszukiwania nosi nazwę Przeszukiwanie heurystyczne. Techniki heurystyczne są bardzo przydatne, ponieważ ich wyszukiwanie może zostać przyspieszone.

Różnica między wyszukiwaniem bez informacji a wyszukiwaniem świadomym

Istnieją dwa rodzaje strategii kontroli lub technik wyszukiwania: niedoinformowane i poinformowane. Są szczegółowo wyjaśnione, jak podano tutaj -

Niedoinformowane wyszukiwanie

Nazywa się to również strategią wyszukiwania na ślepo lub strategią kontroli ślepej. Został nazwany tak, ponieważ istnieje tylko informacja o definicji problemu, a żadne inne dodatkowe informacje o stanach nie są dostępne. Tego rodzaju techniki wyszukiwania przeszukałyby całą przestrzeń stanów w celu uzyskania rozwiązania. Breadth First Search (BFS) i Depth First Search (DFS) to przykłady przeszukiwania bez informacji.

Świadome wyszukiwanie

Nazywa się to również wyszukiwaniem heurystycznym lub strategią kontroli heurystycznej. Został nazwany tak, ponieważ istnieje kilka dodatkowych informacji o stanach. Te dodatkowe informacje są przydatne do obliczania preferencji między węzłami potomnymi do eksploracji i rozwijania. Z każdym węzłem byłaby powiązana funkcja heurystyczna. Najlepsze pierwsze wyszukiwanie (BFS), A *, Mean i Analysis to przykłady świadomego wyszukiwania.

Problemy satysfakcji z ograniczeń (CSP)

Ograniczenie oznacza ograniczenie lub ograniczenie. W sztucznej inteligencji problemy ze spełnieniem ograniczeń to problemy, które muszą zostać rozwiązane przy pewnych ograniczeniach. Należy skupić się na tym, aby nie naruszyć ograniczenia podczas rozwiązywania takich problemów. Wreszcie, kiedy dochodzimy do ostatecznego rozwiązania, CSP musi przestrzegać ograniczenia.

Prawdziwy problem rozwiązany przez satysfakcję z ograniczeń

Poprzednie sekcje dotyczyły tworzenia problemów związanych ze spełnieniem ograniczeń. Teraz zastosujmy to również do rzeczywistych problemów. Oto kilka przykładów rzeczywistych problemów rozwiązanych przez spełnienie ograniczeń:

Rozwiązywanie relacji algebraicznych

Za pomocą problemu spełniania ograniczeń możemy rozwiązać relacje algebraiczne. W tym przykładzie spróbujemy rozwiązać prostą relację algebraicznąa*2 = b. Zwróci wartośća i b w zakresie, który byśmy zdefiniowali.

Po ukończeniu tego programu w Pythonie byłbyś w stanie zrozumieć podstawy rozwiązywania problemów z spełnieniem ograniczeń.

Zauważ, że przed napisaniem programu musimy zainstalować pakiet Pythona o nazwie python-constraint. Możesz go zainstalować za pomocą następującego polecenia -

pip install python-constraint

Poniższe kroki przedstawiają program w Pythonie do rozwiązywania relacji algebraicznych przy użyciu spełnienia ograniczeń -

Zaimportuj constraint pakiet za pomocą następującego polecenia -

from constraint import *

Teraz utwórz obiekt o nazwie modułu problem() jak pokazano poniżej -

problem = Problem()

Teraz zdefiniuj zmienne. Zwróć uwagę, że mamy tutaj dwie zmienne a i b i definiujemy 10 jako ich zakres, co oznacza, że ​​otrzymaliśmy rozwiązanie w obrębie pierwszych 10 liczb.

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

Następnie zdefiniuj konkretne ograniczenie, które chcemy zastosować do tego problemu. Zauważ, że tutaj używamy ograniczeniaa*2 = b.

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

Teraz stwórz obiekt getSolution() moduł za pomocą następującego polecenia -

solutions = problem.getSolutions()

Na koniec wydrukuj dane wyjściowe za pomocą następującego polecenia -

print (solutions)

Możesz obserwować wyjście powyższego programu w następujący sposób -

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

Magic Square

Magiczny kwadrat to układ różnych liczb, zwykle liczb całkowitych, w kwadratowej siatce, gdzie liczby w każdym wierszu i każdej kolumnie oraz liczby na przekątnej sumują się do tej samej liczby zwanej „magiczną stałą” .

Poniżej przedstawiono krokowe wykonanie prostego kodu w Pythonie do generowania magicznych kwadratów -

Zdefiniuj funkcję o nazwie magic_square, jak pokazano poniżej -

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

Poniższy kod przedstawia kod pionu kwadratów -

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

Poniższy kod przedstawia kod dla poziomych kwadratów -

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

Poniższy kod przedstawia kod dla poziomych kwadratów -

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

Teraz podaj wartość macierzy i sprawdź wynik -

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

Możesz zauważyć, że wynik będzie False ponieważ suma nie jest równa tej samej liczbie.

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

Możesz zauważyć, że wynik będzie True ponieważ suma jest tą samą liczbą, to znaczy 15 tutaj.