for AI

Lecture 2 of Artificial Intelligence
Problem formulation
Produced by Qiangfu Zhao (Since 2008), All rights reserved ©
AI Lec02/1
Topics of this lecture
•
•
•
•
•
Review of tree structure
Review of graph structure
Graph representations
State space representation
Search tree and search graph
Produced by Qiangfu Zhao (Since 2008), All rights reserved ©
AI Lec02/2
木 (tree)
• 1次元データ構造:
– 連結リスト、スタック、
キュー
E
• 2次元データ構造:
A
–木
• 木の例:
–
–
–
–
家系図
スポーツのトーナメント
会社の組織図
UNIX階層ファイルシ
ステム
A
R
S
E
T
M
Produced by Qiangfu Zhao (Since 2008), All rights reserved ©
P
L
E
AI Lec02/3
木の用語(1)
E
• 木:ノードの集合とエッジ(edge)
A
R
の集合からなる.
A S
T
• エッジ:2つのノードを結ぶもの.
• ルート(root):最初のノード.
M P
• 親ノード(parent):ノードの一個上
にあるもの.
• 子ノード(child):一個下にあるもの.
• 中間ノード:子ノードを持つノード.
• 葉(leaf):子ノードを持たないノード.
• パス(path):エッジで結ばれているノードの集合.
Produced by Qiangfu Zhao (Since 2008), All rights reserved ©
E
L
E
AI Lec02/4
木の用語(2)
E
• 親ノード、子ノード、兄弟(sibling)
A
R
ノード.
A S
T
• 葉、終端ノード(terminal)、
M P
L
E
外部ノード (external node).
• 中間ノード、非終端ノード
(non-terminal)、内部ノード(internal node).
• レベル (level):ルートからノードに至るノード数のこと
(ルート自身を含めない).
• 高さ (height):ルートからもっとも遠いノードまでの距離.
Produced by Qiangfu Zhao (Since 2008), All rights reserved ©
E
AI Lec02/5
多分木と2分木
• 多分木 (multi-way tree or multi-branch tree):
– どの非終端ノードもn (>2)以下の子ノードを持つ順序木.
• 2分木 (binary tree):
– 子のない終端ノードと2つ以下の子(左の子と右の子)をもつ非終端
ノードの2種類のノードからなる順序木.
• 完全2分木 (complete binary tree):
– どのレベルにおいても非終端ノードが完全に詰まっている2分木
– 一番下のレベルに限って、左詰めが許される.
Produced by Qiangfu Zhao (Since 2008), All rights reserved ©
AI Lec02/6
木の走査 (traverse)
• 走査:ノードをすべて訪れる(訪問する)こと.
– 例:PrintTree, SearchTree
• 捜査の順序:
– 先行順 (pre-order)
– 中央順 (in-order)
– 後行順 (post-order)
– レベル順 (level-order)
Produced by Qiangfu Zhao (Since 2008), All rights reserved ©
AI Lec02/7
先行順
• ルートからスタートし、再帰的に次のことを実行する
• 現在のノード、そして左子、右子の順に訪れる
Traverse(struct node *t){
visit(t);
if(t->l != z) Traverse(t->l);
if(t->r != z) Traverse(t->r);
}
Produced by Qiangfu Zhao (Since 2008), All rights reserved ©
AI Lec02/8
中央順と後行順
• 中央順(対称順):ルートからスタートし、再帰
的に、左ノード、現在のノード、右ノードの順で
訪れる。
• 後行順:ルートからスタートし、再帰的に、左
ノード、右ノード、現在のノードの順で訪れる。
Produced by Qiangfu Zhao (Since 2008), All rights reserved ©
AI Lec02/9
レベル順
• キューによって実現される。
• 上から下へ、左から右へ、レベル毎にそのレベルにあるノー
ドを全部を訪れる。
traverse(struct node *t) {
enqueue(t);
while (!queueempty()) {
t = dequeue();
visit(t);
if (t->l != z) enqueue(t->l);
if (t->r != z) enqueue(t->r);
}}
Produced by Qiangfu Zhao (Since 2008), All rights reserved ©
AI Lec02/10
グラフ
• グラフは、木の拡張である。形式的には、グラフは
G=(V,E)
のように、2つ組(2-tuple, 或は double)で定義される。
ここで、
– Vは頂点(vertex, vertices)或はノード(node)の集合。
– Eはエッジ(edge)或は連結(connection)の集合である。
Produced by Qiangfu Zhao (Since 2008), All rights reserved ©
AI Lec02/11
木とグラフの関係
• 木はロープがないグラフである。
– 任意のノードはルートと唯一のパスで結ばれる。
– 2つ以上のパスはない。
– 結ばれていないノードはない。
Produced by Qiangfu Zhao (Since 2008), All rights reserved ©
AI Lec02/12
グラフの例
•
•
•
•
コンピュータネットワーク
日本航空の路線図
会津若松の上下水道図
電気回路
• グラフはこれらのシステムを表
すためのもの。
• グラフにおいて、ノードの位置
は、通常意味はない。
• ノード間の繋がりは重要である。
1
3
4
6
Produced by Qiangfu Zhao (Since 2008), All rights reserved ©
2
5
7
AI Lec02/13
グラフの用語
• Path(パス):ノードAとBの間に、連結で繋いでいるノード。
• Simple path(シンプルパス): ノードAとBを繋がるパスにおいて、同
じノードが2回以上出ない。
• Cycle(サイクル): Simple pathで、始点と終点が同じである。
• Connected graph(連結グラフ):すべてのノードの間にパスがある。
• Connected component(連結成分): 部分グラフで、それ自体は連
結グラフになっている。
• Directed graph(有向グラフ): 連結は方向性があるグラフ。
• Undirected graph(無向グラフ):連結に方法性はないグラフ。
• Weighted graph: 連結に重みが付いているグラフ。
• Expand node (ノード展開):ある節点の子節点の集合を求めること
はそのノードを展開するという。
• Spanning tree: グラフのすべてのノードを持つツリー(部分グラフ)。
Produced by Qiangfu Zhao (Since 2008), All rights reserved ©
AI Lec02/14
グラフの表現(1)
• グラフの隣接リスト表現(Adjacency-list representation):
– N=|V|:ノード数
– N個のリストAdj[0],Adj[1],…,Adj[N-1]を定義する。
– Adj[i]は、i番目のノードに対応するリストで、このノードに隣接するす
べてのノードを含む。
– 即ち、Adj[i]に含まれている任意のノードjに対して、(i,j)はEに属する
連結である。
Produced by Qiangfu Zhao (Since 2008), All rights reserved ©
AI Lec02/15
グラフの表現(2)
• グラフの隣接行列表現(Adjacency-matrix representation)
–
–
–
–
N=|V|:ノード数
ノードに番号を振る(任意)
NxNの行列Aを定義する。
Aのi行目、j列目の要素は以下のように定義される:
1 if (i, j ) ∈ E
aij = 
0 otherwise
Produced by Qiangfu Zhao (Since 2008), All rights reserved ©
AI Lec02/16
グラフ表現の例
Produced by Qiangfu Zhao (Since 2008), All rights reserved ©
AI Lec02/17
AI問題の状態空間表現:例1
(State space representation)
8-パズル問題
• 初期状態: (2,B,3,4,5,6,7,1,8)
• 目標状態: (1,2,3,4,5,6,7,8,B)
• ルール
–
–
–
–
ルール1:
ルール2:
ルール3:
ルール4:
Bを上に移動する
Bを下に移動する
Bを左に移動する
Bを右に移動する
• 現在状態により、ルール実行後の
結果が違う。
• また、現在状態により、実行できな
いルールがある。
Produced by Qiangfu Zhao (Since 2008), All rights reserved ©
初期状態
2
B
3
1
8
4
7
6
5
ゴール状態
1
2
3
8
B
4
7
6
5
AI Lec02/18
AI問題の状態空間表現:例2
(State space representation)
迷路問題
• 初期状態:(0,0)
• 目標状態:(2,2)
• ルール
–
–
–
–
ルール1:上へ移動する
ルール2:下へ移動する
ルール3:左へ移動する
ルール4:右へ移動する
y
2
1
0
• 現在状態により、ルール実行後の
結果は違う。
• また、現在状態により、実行でき
ないルールがある。
Produced by Qiangfu Zhao (Since 2008), All rights reserved ©
0
1
2
x
迷路問題
AI Lec02/19
状態空間の利点
• 問題を形式的に定義する。
• 任意の初期状態から任意の
目標状態への遷移は、形式
的に求められる。
• 求められた結果が「知識」と
して利用できる。
• 問題点:計算量は非常に大
きいかもしれない。
Produced by Qiangfu Zhao (Since 2008), All rights reserved ©
AI Lec02/20
迷路問題のグラフ表現
(Search graph)
(0,2)
U
D
(0,1)
U
(1,2)
D
(0,0)
U
R
L
D
(1,1)
U
(2,2)
D
(1,0)
U
R
D
(2,1)
L
R
L
(2,0)
• 解を求めることはこの探
索グラフ節点(0,0)から
節点(2,2)への経路を求
める問題に同値である。
• 経路は唯一ではないた
め、最短なものを求める
ことは重要である。
Produced by Qiangfu Zhao (Since 2008), All rights reserved ©
AI Lec02/21
パズル問題のグラフ表現
探索木 (Search tree)
• 探索グラフを作ってから問題の
解を探すことは非効率である。
• 8-パズル問題でさえ、状態の
数は9!/2(約18万)個ある。
• 初期状態からスタートし、ルー
ルを適用して木の形に展開して
いく。
• 展開の途中で解が見つかった
ら終了する。
• 最適解を求めることは、状態数
が多い場合、非常に難しい問
題である。
2 B 3
B 2 3
1 8 4
1 8 4
7 6 5
7 6 5
2 8 3
1 B 4
7 6 5
2 3 B
1 8 4
7 6 5
Produced by Qiangfu Zhao (Since 2008), All rights reserved ©
AI Lec02/22
今週の課題
• スケルトンをもとに以下のプログラムを完成させよ
– 幾つかの節点対を入力し、グラフを構成する
– 探索開始節点を入力する
– 探索開始節点から全節点を訪問し、訪問順に節点番号を出力する
• アルゴリズムとして以下の2つの方法を使用する
– 深さ優先探索
– 幅優先探索
• 深さ優先探索/幅優先探索についてわからなければ、授業資料やイン
ターネットで調べること
Produced by Qiangfu Zhao (Since 2008), All rights reserved ©
AI Lec02/23
今週のクイズ
•
迷路問題の初期状態と目標状態は何ですか?
•
グラフを構成する2つの集合は何ですか?
•
探索グラフ或いは探索木の解は何ですか?
•
右のグラフについて、以下の文がある。それらが正しい場
合には○、間違っている場合には×を括弧に書け:
– このグラフは連結グラフである。( )
– このグラフは無向グラフである。( )
– このグラフは重み付きグラフである。( )
このグラフのスパニングツリー(spanning tree)を一つ書け。
•
Produced by Qiangfu Zhao (Since 2008), All rights reserved ©
AI Lec02/24