pg15

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

概要:

迷路探索のプログラム作成(課題1)

・コンピュータと人工知能に関するよもやま話

・機械学習を応用したサービスの紹介と体験

AIとプログラミングに関するレポート(課題2)

・プログラミング入門の第1回~第15回の課題と、成績評価について

前振り:

無限の猿定理: https://ja.wikipedia.org/wiki/%E7%84%A1%E9%99%90%E3%81%AE%E7%8C%BF%E5%AE%9A%E7%90%86

scratch版のデモ:https://twitter.com/_kobashi/status/1213771139064840193

・迷路探索のプログラム作成

AIの古典的な問題である迷路の探索に取り組む。

使用言語 Prolog

参照 初めてのProlog(プロログ) 人工知能

用語:

「宣言的プログラミング」:

多くのプログラム言語では、コンピュータに処理の手順を示すことでコードを作成する。

宣言型のプログラム言語では、処理に必要なルール(条件)をコードで示し、

ルールの適用(処理に必要な手順の発見)は言語システム(コンピュータ)が行う。

授業で扱った言語では

宣言型プログラミング

Viscuit

Prolog

手続き型プログラミング

上記以外の言語

の2つのタイプがある。

第15回の演習課題

https://ideone.com/

↑こちらのサイトにアクセスして、 使用するプログラム言語を Prolog(swi) に切り替える。

※ Prolog(swi)の位置が入れ替わっている

※ 以下の画像で 〇で囲われていない方の Prolog を選択する。

※ InternetExplorer ではうまく動かない場合があります。 Google Chrome を利用して下さい。

※ Prolog(swi)の位置が入れ替わっている

※ 以下の画像で 〇で囲われていない方の Prolog を選択する。

ideoneの Prolog(swi)にコピペする迷路探索プログラム:

:- 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を図にすると以下の迷路になる。

このプログラムは、

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

の部分で迷路の記号を指定すると、目的地にたどり着くまでの記号を順に表示する。

例えば、

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

に修正して、

run または ideone it! で実行

edit で編集

を各自で試せ。

解説: 経路探索のしくみ

練習:

通路の定義を書き換える。

link を増やす。

地点の記号はアルファベット a から z の他、英単語で書いてもよい。

地点用の文字は小文字のアルファベットを使用すること。

修正した迷路を、プログラムで解く。

コード作成上の注意点:

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

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

応用例)

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

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

提出:

実行結果のスクリーンショットをWebClassの第15回課題にアップロード

コード全体を撮影するように、 FullScreen にしてからスクリーンショットを撮影してください。

撮影は、windowsの snipping tool を利用すると良いでしょう。

例)

コンピュータと人工知能に関するよもやま話

参照先 https://sites.google.com/site/kobashijiangyiyong/puroguramingu-ru-men/pg15/neta-cang-ku

課題2を考えるうえでヒントになるかもしれません。

・機械学習を応用したサービスの紹介と体験

課題2を考えるうえでヒントになるかもしれません。

機械学習ML Machine Learning) による 状況判断・分類と識別・補完と合成 の例を紹介する。

・障害物の検知と回避(2Dシミュレーション) http://janhuenermann.com/projects/learning-to-drive

※ 自動車の制御方法:

(出力)加速・減速・ハンドル(左右) を

(入力) 各センサーによる地形との距離(車体から伸びる線) + 車の状態(速度など) を元にNN(ニューラルネットワーク)で学習。

地形の変更にも対応可能。窪みのある凹型の地形は苦手(V字の隘路など)

Google、プログラミング不要で“機械学習”を試せるサイト公開 画像や音声、ポーズの認識をするデモのサイト

プログラミングでの条件判定の扱いとこのサイトのAIによる条件判定の差を考えるとよい。

プログラミング入門で学んだ条件判定:

マウスのクリックや座標のチェック、キー入力のチェック、文字列の一致のチェック、数値範囲のチェック、キャラクターなどの衝突判定など

デモのサイトの条件判定:

判定基準を機械学習により自動設定する。プログラムによる条件判定のコードを書く必要はない。

・機械学習のデモを試せる Google AI Experiments 紹介記事

AI Experiments デモのサイト

Teachable Machine

F201のPCで学習(Training)を進めるための工夫 Webcamから画像を作成する際に、CROPで撮影範囲を狭め(半分以下)にする。

データも少なめ(10件以内)にする。データは多いほうが良い。少なすぎると認識制度が下がる。

Google Chromeから利用してください。

iPadでは動かせません。

Quick.Draw!

お題が出る → 落書き → AIが何を描いたか推定 → お題が描けたか判定

お題は6問。何個正解できるか試す。

( 現在は日本語に対応済み。英語版の頃のキズナAI動画 https://youtu.be/YO7n_qaQJUA

・写真に写った顔から、人工知能が年齢推定 http://how-old.net 試してみた。twitterから1 twitterから2

女子高校生AIりんな 会話エージェント キズナアイ×AI対話ソリューション「AmiAgent」 AOI

・iOSアプリ Mug Life 顔の形状の置き換え Face Dance 表情認識

・pix2pix-tensorflow 機械学習による画像の補完と生成 https://affinelayer.com/pixsrv/ processボタンから処理開始。完了まで数分間

解説: Using Artificial Intelligence to Augment Human Intelligence

・Unity の 機械学習のデモの利用

実験の手順や参考サイトについて 授業では、学習状況(十分1・十分2・不十分3)によるボールコントロールの様子をデモする(2019年度は省略)。

レポート課題2

コンピューターの技術と性能の発達により、AIを応用した様々な実用化がすすめられています。

以下について、受講生の考えを述べてください。

・AIのプログラミングへの応用としてどのようなものがあるか、

・プログラミングはAIによりどのように変わるか。

解答する上での観点の例)

プログラミング入門の講義全体で様々なプログラムやアプリを紹介してきました。

例えば、そのような言語やアプリは現段階では授業で紹介したようなコーディングや操作が必要ですが、

今後はどの様になるだろうか。

プログラム作成の上で、条件・状況に応じて対応を変化させるコードを書かなければならない場面が多くありましたが、

今後はどの様になるだろうか。

多くのプログラムでは 英単語 や 記号 や ブロック を組み合わせてコードを制作しましたが、

今後はどの様になるだろうか。

など。

回答に際しては、書籍やネットを調べてなるべく最新の情報を元にして記述してください。

WebClassの 第15回 問2 から回答してください。

・プログラミング入門の第1回~第15回の課題と、成績評価について

全課題の締切りは 1月17日(金) 試験期間中

課題の再提出などがあれば、お早めに。

課題が出来ない人は相談に来てください。

課題の採点は、ある程度プログラムで情報を整理して評価する。

※ 特に 他人の課題ファイル を コピー して提出していると 自動的に検出され 評価は 0点 となる場合があります。

追加のペナルティーの可能性があります。

課題をコピーして提出する行為は、 試験のカンニング と同じ 不正行為 です。

ペナルティーの内容は会議で決まります。

最悪の場合、 後期履修 の 全科目 がペナルティーとして 不可 になります。