SlideShare a Scribd company logo
1 of 47
10. 総当たりによる探索
(人工知能)
URL: https://www.kkaneko.jp/cc/mi/index.html
1
金子邦彦
アウトライン
• 総当たりにより、正解を探索する。
• 総当たりは「正解を確実に探索できる方法」とも考
えることができる。
• 状態空間表現でのルールをもとに,変数値を変化さ
せてゴールに至ることを探索。
2
人工知能の種類
3
知的な IT システム
ルールや知識を人間が書いた
人工知能
機械学習
学習による上達の能力を
持つ人工知能
人工知能
10-1 総当たり
4
総当たりとは
• 総当たりでは,正解に至る経路(パス)
を探索するために,すべての経路(パ
ス)を試す
5
探索の例
6
スタート
宝
宝
• スタートから出発
• 迷路をたどり,宝に
至る経路(パス)を
探す
探索の例
7
スタート
宝
宝
知的な作業である.
※ 同じ経路(パス)を
2回試さないことは当
たり前
• スタートから出発
• 迷路をたどり,宝に
至る経路(パス)を
探す
総当たり
8
スタート
宝
宝
総当たりは,
可能なすべての経路
(パス)を試す
10-2 総当たりのパス
9
総当たりについて,知っていおいて
欲しいこと
• 総当たりは,すべての経路(パス)を試す
• 同じ経路(パス)を2回試すことはない
※ 気を付けて欲しいことがある
同じ「場所」にたどり着くことはありえる
10
探索の例 パス長1
11
スタート スタート
探索の例 パス長2
12
スタート スタート
探索の例 パス長3
13
スタート スタート
10-3 状態空間表現での総当たり
14
状態空間表現での総当たり
• 総当たりでは,すべての経路(パス)を試す
• 状態空間表現(世界の状態が変数で表されて
いる)で,総当たりを行うときの技術を学ぶ
15
探索の例
16
スタート
状態空間表現の例
17
スタート
0 1
状態空間表現では,世
界の状態を変数で表現
変数 x, y
変数 x
0
1
2
変数 y
状態空間表現でのルールの例
18
スタート
0 1
1. (x, y| x < 1) → x + 1, y
2. (x, y| x > 0) → x – 1, y
3. (x, y| y < 2) → x, y + 1
4. (x, y| y > 0) → x, y - 1
変数 x
0
1
2
変数 y
ルール番号
パスは,ルール番号の並び
探索の例 パス長1
19
スタート
2つのパス
・ルールの並び: 1
・ルールの並び: 3
探索の例 パス長2
20
スタート
5つのパス
・ルールの並び: 1, 2
・ルールの並び: 1, 3
・ルールの並び: 3, 1
・ルールの並び: 3, 3
・ルールの並び: 3, 4
探索の例 パス長3
21
12 のパス
・ルールの並び: 1, 2, 1
・ルールの並び: 1, 2, 3
・ルールの並び: 1, 3, 2
・ルールの並び: 1, 3, 3
・ルールの並び: 1, 3, 4
・ルールの並び: 3, 1, 2
・ルールの並び: 3, 1, 3
・ルールの並び: 3, 1, 4
・ルールの並び: 3, 3, 1
・ルールの並び: 3, 3, 4
・ルールの並び: 3, 4, 1
・ルールの並び: 3, 4, 3
スタート
状態空間表現での総当たり
22
• 総当たりでは,すべての経路(パス)を試す
• 状態空間表現(世界の状態が変数で表されて
いる)で,総当たりを行うとき,
パスは,ルール番号の並び
だと考える
10-4 状態空間表現での
総当たりを
コンピュータで動かす
23
はじめに
• コンピュータに,総当たりを行わせる
24
状態空間表現でのルールの例
25
スタート
0 1
1. (x, y| x < 1) → x + 1, y
2. (x, y| x > 0) → x – 1, y
3. (x, y| y < 2) → x, y + 1
4. (x, y| y > 0) → x, y - 1
変数 x
0
1
2
変数 y
26
1. (x, y | x < 1) → x + 1, y
条件 x, y の値を
どう変化
させるか
if (r == 1) and (x < 1):
x = x + 1
ルールのうち1つ
プログラムの
ソースコード
選んだルール番号を r とする
選んだルールが 1 のときは,
x < 1 を調べ,
x を x + 1 に変化
※ y は変化しないので,
y についてのプログラムは不要
GDB Online でのプログラム実行
URL: https://www.onlinegdb.com/
※ 「Language」を「Python 3」に設定して使用
27
ソースコードの
編集画面
実行結果
ソースコード
28
ルール
最初 x, y の 0, 0
総当たり,条件に合致しない
ルールは総当たりの対象にし
ない
表示など
総当たりで探索するパスの
パス長は 3 に設定
実行結果
29
ソースコードの
編集画面
実行画面
GDB online を使用
https://www.onlinegdb.com/
※ プログラム実行開始は
「Run」,停止は「Stop」
まとめ
ゲームのルールを,コンピュータのプログラムとして
書き,コンピュータで動く
30
ルール プログラム化し実行
1. (x, y| x < 1) → x + 1, y
2. (x, y| x > 0) → x – 1, y
3. (x, y| y < 2) → x, y + 1
4. (x, y| y > 0) → x, y - 1
10-5 パスと木
31
パスの例
• 総当たりでは,すべての経路(パス)を
試す
32
5つのパス
・ルールの並び: 1, 2
・ルールの並び: 1, 3
・ルールの並び: 3, 1
・ルールの並び: 3, 3
・ルールの並び: 3, 4
スタート
総当たりでのパスの図示
• 総当たりでは,すべての経路(パス)を試す
33
5つのパス
・ルールの並び: 1, 2
・ルールの並び: 1, 3
・ルールの並び: 3, 1
・ルールの並び: 3, 3
・ルールの並び: 3, 4
スタート
x = 0
y = 0
x = 1
y = 0
1
x = 0
y = 1
3
x = 0
y = 0
x = 1
y = 1
x = 1
y = 1
x = 0
y = 2
x = 0
y = 0
2
3
1
3
4
パス長2の経路(パス)をすべて試す
パスの図示
木とは
• 木とはスタートが同じであるようなパス
の集まり.
※ 木では,パスが合流するようなことは
ない
34
10-6 2つの水差しを
総当たりで扱う
35
はじめに
• 2つの大きさの違う「水差し」
大きさ4,大きさ3
• 「水の量を2にできるか」をコンピュータに
解かせるとき,総当たりを行う
36
2つの水差し
• 水差し① 大きさ4
• 水差し② 大きさ3
37
水差し① 水差し②
状態空間表現
状態変数表現とは,ゲームなどの世界の状態を,複
数の変数で表すこと
水差し 2つ
• 水差し① 大きさ4 ・・・ 水の量: 変数 x
• 水差し② 大きさ3 ・・・ 水の量: 変数 y
38
水差し① 水差し②
ルール
水差し①
1. 水差し①を満杯にする
2. 水差し①を空にする
3. 水差し①を使って,水差し②を満杯にする
4. 水差し①の水をすべて,水差し②に入れる
水差し②
5. 水差し②を満杯にする
6. 水差し②を空にする
7. 水差し②を使って,水差し①を満杯にする
8. 水差し②の水をすべて,水差し①に入れる
39
ルール
水差し①
1. (x, y | x < 4) → (4, y)
2. (x, y | x > 0) → (0, y)
3. (x, y | x + y >= 3 and y < 3) → (x + y - 3, 3)
4. (x, y | x + y <= 3 and x > 0) → (0, x + y)
水差し②
5. (x, y | y < 3) → (x, 3)
6. (x, y | y > 0) → (x, 0)
7. (x, y | x + y >= 4 and x < 4) → (4, x + y - 4)
8. (x, y | x + y <= 4 and y > 0) → (x + y, 0)
40
ソースコード
41
ルール
最初 x, y の 0, 0
総当たり,条件に合致しない
ルールは総当たりの対象にしない
表示など
総当たりで探索するパスの
パス長は 2 に設定
実行結果
42
実行画面
GDB online を使用
https://www.onlinegdb.com/
※ プログラム実行開始は
「Run」,停止は「Stop」
パス長 2 の総当たりは,6通り
【表示の見方】
(1, 2) 0 0
ルール 1, ルール 2 の順で行うと
x = 0, y = 0 になる
43
3 に書き換えて再実行
44
実行結果
パス長 3 の総当たりは,19通り
45
5 に書き換えて再実行
46
実行結果
(表示が長いので省略)
量「2」の水が欲しいときは,
ルール 5, 8, 5, 7, 6 の順でもできる
ことが
総当たりにより発見
まとめ
• 総当たりでは,すべての経路(パス)を
試す
• 正解(例えば,「量2の水が欲しい」)
を発見する手段になる
• 総当たりで正解が見つからなければ,正
解は存在しない
47

More Related Content

More from kunihikokaneko1

cs-7. 乱数,シミュレーション
cs-7. 乱数,シミュレーション  cs-7. 乱数,シミュレーション
cs-7. 乱数,シミュレーション kunihikokaneko1
 
cs-6. データベースとデータサイエンス
cs-6. データベースとデータサイエンスcs-6. データベースとデータサイエンス
cs-6. データベースとデータサイエンスkunihikokaneko1
 
cs-5. 人工知能の概要
cs-5. 人工知能の概要 cs-5. 人工知能の概要
cs-5. 人工知能の概要 kunihikokaneko1
 
cs-4. プログラミング入門
cs-4. プログラミング入門cs-4. プログラミング入門
cs-4. プログラミング入門kunihikokaneko1
 
cs-3. パノラマ画像,ストリートビュー,3次元コンピュータグラフィックス
cs-3. パノラマ画像,ストリートビュー,3次元コンピュータグラフィックスcs-3. パノラマ画像,ストリートビュー,3次元コンピュータグラフィックス
cs-3. パノラマ画像,ストリートビュー,3次元コンピュータグラフィックスkunihikokaneko1
 
cs-2. コンピュータによる画像制作,人工知能でできること,情報のコード化,デジタル画像,画素
cs-2. コンピュータによる画像制作,人工知能でできること,情報のコード化,デジタル画像,画素 cs-2. コンピュータによる画像制作,人工知能でできること,情報のコード化,デジタル画像,画素
cs-2. コンピュータによる画像制作,人工知能でできること,情報のコード化,デジタル画像,画素 kunihikokaneko1
 
cs-1. 無料ソフトウエア,無料データ,エコシステム,Scratch プログラミング,Scratch のキャラクタ
cs-1. 無料ソフトウエア,無料データ,エコシステム,Scratch プログラミング,Scratch のキャラクタcs-1. 無料ソフトウエア,無料データ,エコシステム,Scratch プログラミング,Scratch のキャラクタ
cs-1. 無料ソフトウエア,無料データ,エコシステム,Scratch プログラミング,Scratch のキャラクタkunihikokaneko1
 
mi-8. 人工知能とコンピュータビジョン
mi-8. 人工知能とコンピュータビジョンmi-8. 人工知能とコンピュータビジョン
mi-8. 人工知能とコンピュータビジョンkunihikokaneko1
 
mi-7. 学習と検証, 学習不足, 過学習, 学習曲線
mi-7. 学習と検証, 学習不足, 過学習, 学習曲線mi-7. 学習と検証, 学習不足, 過学習, 学習曲線
mi-7. 学習と検証, 学習不足, 過学習, 学習曲線kunihikokaneko1
 
mi-6. 画像分類システム
mi-6. 画像分類システムmi-6. 画像分類システム
mi-6. 画像分類システムkunihikokaneko1
 
mi-5. ディープラーニング
mi-5. ディープラーニングmi-5. ディープラーニング
mi-5. ディープラーニングkunihikokaneko1
 
mi-3. データサイエンス・AIの演習
mi-3. データサイエンス・AIの演習mi-3. データサイエンス・AIの演習
mi-3. データサイエンス・AIの演習kunihikokaneko1
 
mi-2. データサイエンス・AIの事例
mi-2. データサイエンス・AIの事例mi-2. データサイエンス・AIの事例
mi-2. データサイエンス・AIの事例kunihikokaneko1
 
mi-1. 人工知能の概要
mi-1. 人工知能の概要mi-1. 人工知能の概要
mi-1. 人工知能の概要kunihikokaneko1
 
Coding Standards of C++ について
 Coding Standards of C++ について  Coding Standards of C++ について
Coding Standards of C++ について kunihikokaneko1
 
co-3. サブクラス、継承
co-3. サブクラス、継承co-3. サブクラス、継承
co-3. サブクラス、継承kunihikokaneko1
 
co-2. メソッド定義と呼び出し
co-2. メソッド定義と呼び出しco-2. メソッド定義と呼び出し
co-2. メソッド定義と呼び出しkunihikokaneko1
 
co-1. クラスとメソッド
 co-1. クラスとメソッド co-1. クラスとメソッド
co-1. クラスとメソッドkunihikokaneko1
 

More from kunihikokaneko1 (20)

cs-7. 乱数,シミュレーション
cs-7. 乱数,シミュレーション  cs-7. 乱数,シミュレーション
cs-7. 乱数,シミュレーション
 
cs-6. データベースとデータサイエンス
cs-6. データベースとデータサイエンスcs-6. データベースとデータサイエンス
cs-6. データベースとデータサイエンス
 
cs-5. 人工知能の概要
cs-5. 人工知能の概要 cs-5. 人工知能の概要
cs-5. 人工知能の概要
 
cs-4. プログラミング入門
cs-4. プログラミング入門cs-4. プログラミング入門
cs-4. プログラミング入門
 
cs-3. パノラマ画像,ストリートビュー,3次元コンピュータグラフィックス
cs-3. パノラマ画像,ストリートビュー,3次元コンピュータグラフィックスcs-3. パノラマ画像,ストリートビュー,3次元コンピュータグラフィックス
cs-3. パノラマ画像,ストリートビュー,3次元コンピュータグラフィックス
 
cs-2. コンピュータによる画像制作,人工知能でできること,情報のコード化,デジタル画像,画素
cs-2. コンピュータによる画像制作,人工知能でできること,情報のコード化,デジタル画像,画素 cs-2. コンピュータによる画像制作,人工知能でできること,情報のコード化,デジタル画像,画素
cs-2. コンピュータによる画像制作,人工知能でできること,情報のコード化,デジタル画像,画素
 
cs-1. 無料ソフトウエア,無料データ,エコシステム,Scratch プログラミング,Scratch のキャラクタ
cs-1. 無料ソフトウエア,無料データ,エコシステム,Scratch プログラミング,Scratch のキャラクタcs-1. 無料ソフトウエア,無料データ,エコシステム,Scratch プログラミング,Scratch のキャラクタ
cs-1. 無料ソフトウエア,無料データ,エコシステム,Scratch プログラミング,Scratch のキャラクタ
 
mi-8. 人工知能とコンピュータビジョン
mi-8. 人工知能とコンピュータビジョンmi-8. 人工知能とコンピュータビジョン
mi-8. 人工知能とコンピュータビジョン
 
mi-7. 学習と検証, 学習不足, 過学習, 学習曲線
mi-7. 学習と検証, 学習不足, 過学習, 学習曲線mi-7. 学習と検証, 学習不足, 過学習, 学習曲線
mi-7. 学習と検証, 学習不足, 過学習, 学習曲線
 
mi-6. 画像分類システム
mi-6. 画像分類システムmi-6. 画像分類システム
mi-6. 画像分類システム
 
mi-5. ディープラーニング
mi-5. ディープラーニングmi-5. ディープラーニング
mi-5. ディープラーニング
 
mi-4. 機械学習
mi-4. 機械学習mi-4. 機械学習
mi-4. 機械学習
 
mi-3. データサイエンス・AIの演習
mi-3. データサイエンス・AIの演習mi-3. データサイエンス・AIの演習
mi-3. データサイエンス・AIの演習
 
mi-2. データサイエンス・AIの事例
mi-2. データサイエンス・AIの事例mi-2. データサイエンス・AIの事例
mi-2. データサイエンス・AIの事例
 
mi-1. 人工知能の概要
mi-1. 人工知能の概要mi-1. 人工知能の概要
mi-1. 人工知能の概要
 
kaneko202304.pptx
kaneko202304.pptxkaneko202304.pptx
kaneko202304.pptx
 
Coding Standards of C++ について
 Coding Standards of C++ について  Coding Standards of C++ について
Coding Standards of C++ について
 
co-3. サブクラス、継承
co-3. サブクラス、継承co-3. サブクラス、継承
co-3. サブクラス、継承
 
co-2. メソッド定義と呼び出し
co-2. メソッド定義と呼び出しco-2. メソッド定義と呼び出し
co-2. メソッド定義と呼び出し
 
co-1. クラスとメソッド
 co-1. クラスとメソッド co-1. クラスとメソッド
co-1. クラスとメソッド
 

mi-10. 総当りによる探索