pg14

テーマ 人工知能とプログラム

経路探索プログラム(課題1/2)

人工知能(AI:Artificial Intelligence)の古典的な課題としてパズルや迷路を解くプログラムが研究されてきた。

今回はプログラミング言語 Prolog でスタート地点からゴール地点までの経路を探索するコードを作成する。Prologは宣言型プログラム言語である。多くのプログラム言語は手続き型プログラム言語であり問題を解く手順をプログラマが考えてコードで記述する。宣言型プログラム言語では問題が解ける条件をプログラマはコードで記述するだけである。問題を解くために必要となるループ処理や変数の値の変更や条件チェックは言語システムが自動的に行うのでプログラム不要である。

これまで扱ってきたプログラム言語の中では「VISCUIT」が宣言型プログラム言語である。

ステップ1

https://ideone.com/

サイトをGoogle Chrome で開いてプログラム言語を Prolog(swi 7.6.4) に切り替える。

ステップ2

始めから入力されているサンプルコードをすべて削除する。

ステップ3

以下の経路探索のコードをコピペする。

:- set_prolog_flag(verbose,silent).

:- prompt(_, '').

:- use_module(library(readutil)).

% 通路の定義の例

link(a,b).

link(a,c).

link(b,d).

link(c,e).

link(d,f).

link(f,g).

link(f,h).

link(h,g).


path(X,Y) :- link(X,Y)|link(Y,X). % 通路を双方向とする。削除すると一方通行。

pathFind(Pos,Pos,_,[Pos]) :- !. % 目的地に到着したら探索を中断

pathFind(Pos,Goal,Check,[Pos|Tail]) :-

not(member(Pos,Check)), % 通過記録CheckにPosが含まれない

path(Pos,Z), % Posの先のZに進む

pathFind(Z,Goal,[Pos|Check],Tail). % ZからGoalを目指す。PosをCheckに加える

% 全ての経路を探索

pathFindAll(Start,Goal) :- pathFind(Start,Goal,[],Path),print(Path),nl,fail.

pathFindAll(_,_).


% 探索の指示の例

:- pathFindAll( a , g ).

:- halt.

上記のコードの link(a,b)からlink(h,g) のlinkを図に描くと以下の通路になる。

ステップ4

「ideone it!」のボタンを押して実行する。

解説:経路探索のしくみ

ステップ5

メニューの edit からコードを編集する。

pathFindAll( スタート地点 , 目的地 ).

の部分で通路記号 a や gをスタート地点や目的地に設定するとその経路を通路記号で表示できる。

例えば、

pathFindAll(a,g) や pathFindAll(a,e) や pathFindAll(f,e)

に修正して run または ideone it! のボタンから実行して結果を確認する。

ステップ6

通路の定義を書き換える。link を増やす。地点の記号はアルファベット a から z以外に単語で書いてもよい。通路記号の文字は小文字のアルファベットだけを使用すること。

修正した通路でコードを実行して解く。

コード作成上の注意点:

Prolog はコードの文末に ドット(ピリオド) . をつけます。

link(a , b). 括弧の間の記号は カンマ で区切ります。

応用例)

田んぼの 田の字の様な通路で何通りの経路があるか調べる。 結果の例

参考動画: 経路探索 と 計算量 と アルゴリズム について「 フカシギの数え方


課題1/2の提出

実行結果のスクリーンショットをWebClassの第14回課題の問1に提出する。

コード全体をメニューで fullScreen 表示にしてスクリーンショットしてください。

例)

機械学習によるプログラム(課題2/2)

機械学習(ML Machine Learning)

例1 障害物検知と回避シミュレーション

http://janhuenermann.com/projects/learning-to-drive

例2 画像の分類識別を利用したゲーム

https://storage.googleapis.com/tfjs-examples/webcam-transfer-learning/dist/index.html

WebカメラによるPACMANの操作のデモ↓を様々な画像で試したが、F201のパソコンではうまく学習できない。iPadやC108のiMacや個人所有のWindowsパソコンで試したが学習できなかった。

高性能なAndroidスマフォやゲーミングPCでは学習に成功した。

左の画像群はF201のパソコンでどのような画像なら学習が進むか確かめた際のもの。どれもうまくいかない。



ジェスチャーで操作している様子

https://www.youtube.com/watch?v=-PBiogl-6tQ

マーカーで操作している様子

https://www.youtube.com/watch?v=NZjlIJoNmqE

Googleが提供している機械学習システム Teachable Machine で画像分類器を作成して

プログラミング言語 p5.js から利用する。p5.jsはクリエィティブコーディング言語ProcessingのWeb版。


ステップ1

Teachable Machine

を開いて「使ってみる」に進む。

ステップ2

「画像プロジェクト」に進む。

クラスを追加して3種類以上の画像を認識できるようにする。

各クラスに学習用画像を20~30枚程度ウェブカメラで撮影する。

各クラスの識別名を鉛筆アイコンから編集する。

ステップ3

トレーニングさせる。

プレビューでウェブカメラにモノやジェスチャを映して認識状況を確認する。

ステップ4

モデルをエクスポートする。

モデルをアップロードする。

※学習に使用した画像はアップロードされない。学習データだけがアップロードされる。

ステップ5

共有可能なリンク をコピーしておく。

p5.jsのコードスニペットに切り替える。

p5.js Web Editor のリンクをクリックしてエディタを開く。

下の画像の①~③参照。

ステップ6

下の画像①を参考にして学習モデルのリンク(ステップ5でコピーしたもの)を張り付ける。

元の記述は削除して、Ctrl+Vキーで張り付ける。

ステップ7

上の画像②でp5.jsのコードを実行してWebカメラにいろいろ映して分類識別状況を確認する。

課題2/2の提出

p5.jsのコードと実行画面をスクショする。Webカメラに写したものを識別できている様子を撮影する。

第1回~第13回の提出物の確認

Webclassの成績メニューからマイレポートを表示してこれまでの課題の提出状況を把握する。

今後の日程

第15回はオンデマンド授業にする。プログラミングの演習ではなくWebclassからレポート課題に回答する。

試験日程: 期末試験は行わない。各回の課題を合計して60点以上で合格とする。

課題の〆切:1月22日(金)

追試験の内容:第1回~第15回の課題で未提出のものを提出して提出済みと合計して合格点に達すること。