Artificial-intelligence-with-python-heuristic-search

提供:Dev Guides
移動先:案内検索

Pythonを使用したAI –ヒューリスティック検索

ヒューリスティック検索は、人工知能において重要な役割を果たします。 この章では、それについて詳しく学びます。

AIのヒューリスティック検索の概念

ヒューリスティックは経験則であり、これが可能性のある解決策につながります。 人工知能の問題のほとんどは指数関数的な性質であり、多くの解決策があります。 どのソリューションが正しいか正確にはわからないため、すべてのソリューションをチェックするのは非常に費用がかかります。

したがって、ヒューリスティックを使用すると、ソリューションの検索が絞り込まれ、誤ったオプションが排除されます。 ヒューリスティックを使用して検索スペースで検索をリードする方法は、ヒューリスティック検索と呼ばれます。 ヒューリスティック手法は、使用すると検索が向上する可能性があるため、非常に便利です。

インフォームドサーチとインフォームドサーチの違い

制御戦略または検索手法には、情報なしと情報ありの2つのタイプがあります。 それらはここで与えられるように詳細に説明されます-

情報のない検索

ブラインドサーチまたはブラインドコントロール戦略とも呼ばれます。 問題の定義に関する情報のみがあり、状態に関するその他の追加情報は利用できないため、そのように命名されています。 この種の検索手法は、状態空間全体を検索してソリューションを取得します。 幅優先検索(BFS)および深さ優先検索(DFS)は、情報に基づいていない検索の例です。

インフォームドサーチ

ヒューリスティック検索またはヒューリスティック制御戦略とも呼ばれます。 州に関する追加情報があるため、そのように命名されています。 この追加情報は、探索および展開する子ノード間の優先順位を計算するのに役立ちます。 各ノードに関連付けられたヒューリスティック関数があります。 ベストファーストサーチ(BFS)、A *、平均、分析は、インフォームドサーチの例です。

制約充足問題(CSP)

制約とは、制限または制限を意味します。 AIでは、制約充足問題は、いくつかの制約の下で解決しなければならない問題です。 そのような問題を解決しながら、制約に違反しないように焦点を合わせる必要があります。 最後に、最終的なソリューションに到達すると、CSPは制限に従う必要があります。

制約充足によって解決される実世界の問題

前のセクションでは、制約充足問題の作成について説明しました。 さて、これを実世界の問題にも適用しましょう。 制約充足によって解決される実世界の問題のいくつかの例は次のとおりです-

代数関係を解く

制約充足問題の助けを借りて、代数関係を解くことができます。 この例では、単純な代数関係 a 2 = b を解こうとします。 定義する範囲内の *a および b の値を返します。

このPythonプログラムを完了すると、制約を満たしながら問題を解決するための基本を理解できるようになります。

プログラムを記述する前に、python-constraintというPythonパッケージをインストールする必要があることに注意してください。 あなたは、次のコマンドの助けを借りてそれをインストールすることができます-

pip install python-constraint

次の手順は、制約充足を使用して代数関係を解決するためのPythonプログラムを示しています-

次のコマンドを使用して constraint パッケージをインポートします-

from constraint import *

次に、以下に示すように* problem()*というモジュールのオブジェクトを作成します-

problem = Problem()

次に、変数を定義します。 ここでは2つの変数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([[You can observe that the output would be *False* as the sum is not up to the same number.

[source,result,notranslate]

print(magic_square([[合計が同じ数、ここでは 15 なので、出力が True になることがわかります。