AIプログラミング体験(迷路探索)
体験講義
担当:総合情報学科 マッキン ケネスジェームス
目的
- ビジュアルプログラミング環境Scratchを用いて、AI(人工知能)プログラミングを体験する
- Scratchによる簡単な迷路脱出プログラムを作成する
講義内容
- Scratchで迷路を自動で脱出するAIプログラムを作成してみる。
- AIアルゴリズムは、ランダム探索を用いる。
- 壁にぶつかると、デタラメに跳ね返る。たったそれだけ。
- しかし、ランダム探索は、非常に強力な探索アルゴリズム。実際の掃除ロボットなどにも使われている。
- Scratchでプログラムしながら、ランダム探索の仕組みと動きを見てみよう。
- 講義スライド
Scratch 3 (Web版)の起動
- Webブラウザ(Internet Explorer)でScratchのページを開く (https://scratch.mit.edu/)
- 「作ってみよう」をクリックする
- Tutorialウィンドウを×で閉じる
迷路の読み込み
- 迷路のScratchファイルをPCにダウンロード
- メニューから「ファイル」をクリック
- 「コンピュータから読み込む」をクリック
- ダウンロードしたroombamaze_map.sb3を選択。「開く」をクリック
Sprite1を動かす
まずはSprite1をアニメーションさせてみよう。
- 「イベント」メニューから、「ハタがクリックされたとき」をワークスペースに置く。このイベントは、実行画面の上の緑の旗をクリックすると実行される。
- 「動き」メニューから、「(10)歩動かす」を「ハタがクリックされたとき」のブロックの下に繋げる。
これで、緑の旗をクリックすると、Sprite1が10歩動く。キーボードで(10)を(5)に変更すると5歩動く。
- 同じ処理を何度も繰り返したいので、繰り返しを使って楽をしよう。
「制御」メニューから、「< >まで繰り返す」ブロックを選び、「ハタがクリックされたとき」のブロックの下に繋げる。
「< >まで繰り返す」ブロックのコの字中に、「(5)歩動かす」が入るようにする。
緑の旗をクリックしてみよう。
- Sprite1をマウスで元に戻すのは面倒なので、Sprite1の最初の位置をブロックで指定する。
「動き」メニューから、「x座標を( )、y座標を( )にする」を「ハタがクリックされたとき」の下に繋げる。
「動き」メニューから、「( )度に向ける」を「x座標を( )、y座標を( )にする」の下に繋げる。
緑の旗をクリックしてみよう。
- 画面の端についたら、跳ね返るようにしてみよう。
「制御」メニューから、「もし< >なら」を選び、「(5)歩動かす」の下に繋げる。
「調べる」メニューから「▽に触れた」を選び、「もし< >なら」の< >の中に入れる。
「▽に触れた」の▽をクリックして、プルダウンメニューから[端]を選ぶ。
「動き」メニューから、「(10)歩動かす」を、「もし< >なら」ブロックのコの字の中に繋げる。
「(10)歩動かす」の(10)をキーボードで(-5)に変更する。
「動き」メニューから、「(15)度回す」を、「(-5)歩動かす」の下に繋げる。
「(15)度回す」の(15)をキーボードで(180)に変更する。
緑の旗をクリックしてみよう。
Sprite1をランダムに動かす
- 「演算」メニューから、「(1)から(10)までの乱数」を「(180)度回す」の( )の中に入れる。
「(1)から(10)までの乱数」の(10)をキーボードで(360)に変更する。
- 「ペン」メニューから「消す」と「ペンを下ろす」を「(90)度に向ける」の下に繋げる。
緑の旗をクリックしてみよう。
壁で跳ね返る処理を入れる
- 「演算」メニューから「< >または< >」を選ぶ。
「もし<[端]に触れた>なら」から<[端]に触れた>を移動して「< >または< >」の< >に入れる。

- 「調べる」メニューから「[ ]色に触れた」を選び、「< >または< >」のもう一方の< >に入れる。
「[ ]色に触れた」の色をクリックしてから、迷路の壁をクリックして色を設定する。
緑の旗をクリックして実行してみよう。

ゴール処理を追加
- ゴールにたどり着いた時の判定の追加。
「調べる」メニューから「▽に触れた」を選び、「< >まで繰り返す」の< >の中に入れる。
「▽に触れた」の▽をクリックして、プルダウンメニューから追加したスプライト名[Home Button]を選ぶ。
- ゴールまでたどり着いた時の処理を追加する。
「見た目」メニューから「(うーん...)と考える」を選び、「< >まで繰り返す」の後に繋げる。
「(うーん...)と考える」の(うーん...)をキーボードで(見つけた!)に変更する。
緑の旗をクリックして実行してみよう。
完成
- 右上の全画面表示ボタンを押して、全画面表示にしてみよう。
- 緑の旗クリックして実行してみよう。
プログラムの保存(ローカルディスクまたはUSBメモリ)
- Scratchの「ファイル」メニューから「コンピュータに保存する」を選択し、ローカルディスクまたはUSBメモリを指定すれば、作成したプログラムを保存することが出来る。
- ※USBメモリを取り外す前には、データを壊さないよう、USBデバイスの安全に取り外す手順を取るか、ログアウトすること。
迷路を修正する場合
- ステージをクリック。背景をクリック。
- 「四角形」を用いて、迷路の壁を黒色で描く。
プログラムの改良
もっと探索効率を高めるにはどうしたら良いだろう?
以下にいくつかのアイディアがある。試して探索効率を比較してみよう。
- 跳ね返りの角度の範囲を変えてみよう
- 毎回、一歩進む前に角度をランダムに変えてみよう。(ランダムウォーク)
- ランダムウォークの角度の範囲を変えてみよう。プログラム例
- 決められたタイミングで(例えば10歩に1回)、角度をランダムに変えてみよう。
- ランダムなタイミングで(例えば10%の確率で)、角度をランダムに変えてみよう。
おまけ課題(右手法)
- 壁に触れたときに、乱数ではなく、決まった角度(例えば90度)で跳ね返るようにしてみよう。ゴールまでうまくたどり着くかな?
- 迷路探索の右手法とは、右手で壁を触り続けて歩けば、壁が全て繋がっている平面の迷路ならば必ず出口にたどり着くという、迷路脱出方法です。
迷路を乱数探索ではなく、右手法で脱出するようにプログラムを変更してみよう。
解答例
まとめ
- ビジュアルプログラミング環境Scratchでのプログラミングを体験した。
- Scratchは自宅でも実行できる。保存したファイルを持ち帰れば、自宅からでも呼び出すことができる。
- Scratchの「ファイル」メニューから「コンピュータから読み込む」でローカルディスクまたはUSBメモリのファイルを読み込むことが出来る。
- 簡単なAIプログラミングを体験した。
- ランダム探索は、デタラメに探索するだけだが、非常に強力な探索手法。
- 実際の掃除ロボットや、将棋・囲碁のAIなど、様々なところで応用されている。
- AIは、探索の他にも、学習、分類や予測など、様々な研究が行われており、社会の色々なところで利用されています。
東京情報大学 総合情報学部 総合情報学科
AI・システムデザイン研究室
マッキン ケネスジェームス