Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
1. 人工知能とはなにか
はじめに
❖本コースでは、『スマートフォンにおける人工知能』について学習する
➢ 世間で今注目されている人工知能技術は、本コースで学ぶ内容よりもさらに高度な学習・研
究が必要ですが、近年では、その研究結果を中身の詳細を知らずとも、しかも無料で利用可
能となっている
➢ 画像認識や音声認識などが該当する
➢ 今や当たり前となったこれらの技術は、ここ数年で急速に使われるようになった技術であり、
まだまだ研究され、進歩する余地がある
❖本コースを通じて、研究結果の利用方法や、それらの研究に携わっていくた
めの基本的な考え方、プログラミングの仕方などを学習する
人工知能といわれて何をイメージするか?
❖アンドロイド(ロボットのほう)
人工知能のイメージ
❖実際(今の)の人工知能
なんかロボットの画像たとえばアイロボット
(映画)
スマートフォンや自動車(アイロボット社ルンバ)
❖強いA.I.
➢ 精神の宿るA.I.
全ての認知機能を具備
❖弱いA.I.(本講座で教えるのはコチラ)
➢ 全ての認知機能は具備しておらず、 特定分野に特化したA.I.
➢ 画像解析、音声認識などに特化
※ A.I. : Aritifical Intelligent、人工知能を指す
強いA.I.と弱いA.I.
人工知能
ロボットと人工知能の果たす役割
パターン認識 推論
行動
学習
知覚
人工知能は、必ずしも人間と同じことができるわけではないでは、今までの技術と何が違うのか?人間の持つパターン認識・学習・推論と言った機能をもつ
掃除
部屋の形やゴミの溜まりやすい所を覚え、推測する
センサー情報
お掃除ロボットの場合
❖お掃除ロボットの場合、どのよう
な学習の機能を備えているか?
➢ はじめての部屋であっても掃除してく
れる
➢ すぐれた学習機能
パターン認識
推論
行動
学習
知覚
センサーや掃除機といった既存の製品にはない魅力的な製品に繋がる
❖人工知能は、既に私達の生活の中に浸透
❖2025年には、今の30倍の市場が予期
人工知能の作る未来
3兆円 23兆円 86兆円
人工知能の活躍と変遷
過去何回か人工知能にフォーカス
❖第一次人工知能ブーム(1950年)
➢ 理論
❖第二次人工知能ブーム(1980年台)
➢ 実践(ゲームなどが中心であり、実世界の役に立たず)
➢ エキスパートシステム、ゲームなど
❖第三次人工知能ブーム(2000年台)
➢ ビッグデータやクラウドコンピューティングなどの豊富なリソースにより
➢ 自然言語や画像解析等の分野で活用
第三次人工知能ブームの背景
人工知能ブームの背景
❖Androidの流布により、ユーザーが気軽にサービスを利用可能に
❖豊富なコンピューティングリソース
❖画期的なアルゴリズム『ディープラーニング(深層学習)』の発見
ディープラーニングにより
❖画像認識の精度向上:70%→95%
❖音声認識の誤認識率:23%→8%
機械学習のオープンソースライブラリ
機械学習のライブラリを以下に示す
ライブラリ名 アルゴリズム 開発元 利用可能な言語 特徴
TensorFlow ディープラーニング Google Inc. C++/python ディープラーニング汎用のライブラリ画像教育データの水増し機能なども内包Cloud MLでは、
Chainer ディープラーニング Preferred Network python ディープラーニング汎用のライブラリ日本初のライブラリ、コーディングのしやすさを重視
Caffe ディープラーニング Barkley Vision and
Learning Center
python / C++ /
MATLABディープラーニングを用いた画像認識に特化したライブラリWindoiwsでも動作
Theano ディープラーニング Montreal University python ディープラーニング汎用のライブラリTheanoをベースにしたライブラリが多数開発Windowsでも動作
Scikit-learn クラスタリング、SVM,TF-IDF
David Cournapeau python 様々なアルゴリズムを切り替えて利用可能
1章まとめ
❖人工知能の背景
➢ 弱いAIが既に製品化
■ ゲームなどの分野で大きな成功を収める
■ 自動掃除機と言ったプロダクトが市場にでる
➢ Androidを搭載したスマートフォンの流布により、サービスが利用しやすく
➢ 少子化の対策として期待が集まる
❖人工知能の特性
➢ 知能・知性については明確な定義がない
➢ 学習・認識・推論と言った機能を具備
2. Androidにおける人工知能
本章で学ぶ内容
❖Androidという組み込み向けのOSが出てきたことにより、
生活はより便利になった。
❖本章では、人工知能を利用するプラットホームとして
Androidと人工知能の関係を学びます。
なぜAndroidなのか?
❖なぜAndroidなのか
➢ クラウド・Webサービスの利用がしやすい。
➢ オープンソースであり、どのレベルでも改造が可能であり
➢ ウェアラブルや、テレビ、車載など幅広い分野での活用がなされている
❖Android の種類
➢ Android OS(スマートフォンやタブレット向け)
➢ Android TV(テレビ向け)
➢ Android Auto(自動車向け)
❖第一章で学習した内容を元にサービスの全体像としては以下の様になる
人工知能を利用したアプリの全体像
アプリの起動やデータの登録、もしくはユーザーに聞き返す
Android
インターネットの情報から推定する
マイクや画面から入力を受け付ける
Android
クラウド
センサー情報
学習
行動
パターン認識 推論
マシンアーキテクチャから見た詳細
❖アプリケーションの開発には、JavaやHTTP、JSONと言った知識が必要
Android クラウド
アプリ
マイク等の入力
HTTPサーバ
APLサーバ
データベース
フレームワーク
自分で記述(Java)
HTTP/APIライブラリ
機械学習
自分で記述(Java)
確認結果画面
HTTPサーバ
APLサーバ
HTTP
JSON
IP
事例紹介
1. Google Now
2. チャットボット
3. ゲームA.I.
事例1.Google Now
これまでのAndroid
❖これまで、Androidを利用するためには
なにをしようか?
ゲームで遊ぶ 予定表を登録する
アプリを選択する
新しいアプリをダウンロードするアプリを起動する
使いやすいように、並べ替えをしておく事前
使うとき
Androidの中で起こっていること
Androidにおける人工知能
❖人工知能を積んだAndroid(Google Now)を利用するためには
なにをしようか?
ゲームで遊ぶ予定表を登録する
アプリを選択する
新しいアプリをダウンロードする
アプリを起動する
Androidに話しかける
なんて言ったのか判定
実行内容があっているか考える
ユーザーに確認
結果を表示
Google Nowの動作イメージ
『Google Nowってなに?』とGoogle Nowに問いかけ場合
1.『Google Now』と発声した後の、質問認識画面
2.『Google Nowってなに?』と問いかけた直後
3.検索画面に遷移後
人工知能の活用によりユーザーの負担が数秒削減
Android TVでは、リモコンから入力
同等のフローで人工知能を利用可能
Android TVにおけるアーキテクチャ
アプリの起動やデータの登録、もしくはユーザーに聞き返す
Android
インターネットの情報から推定する
マイクから入力を受け付ける
リモコン
クラウド
センサー情報
学習
行動
パターン認識 推論
自作する場合
Google Nowは、Googleのプロダクトの為、内部は非公開だが
自身でプログラムを組む場合、Speech APIで同等の仕組みが作成可能
Android Google
自作アプリ
Google Speech API
マイクFLAC
Encoder
IP
HTTP
音声ファイル
テキスト
Google Nowまとめ
❖クラウド上のリソースを利用する
➢ クラウド上を理解するためには、HTTP通信やJSON、データベースと言った知識が必要になる。
➢特に音声解析では、オーディオ処理やCodecと言った理解も求められる。
❖人工知能は推定を行う。
➢推定のため、『精度』と言った問題が発生する。
➢ ユーザーに確認し直すという画面を設けることで、精度が低い場合にも対応
❖Androidを利用し、マイクの入力を受け取ることができる。
➢その際、Javaでの記述が必要になる
➢ Android TVでもリモコンを経由することで、同等の仕組みを利用可能
❖人工知能の活用により、ユーザーの時間を数秒効率化
事例2:チャットボット(人工無能)
Microsoft Bot Frameworkの場合
チャットボット・人工無能とは
❖チャットボット・人工無能とは
➢チャットにて自動応答するボット(ロボットの略称)から、自動的に会話するプログラムを指す
➢会話しか能がないため、無能と言われる
チャットボットの例
以下にチャットボットの例を示す
ボット名 開発元 説明
Siri Apple iOSや、macOS
から利用可能
りんな Microsoft LINEを通じて利用可能
Cortana Microsoft Windows 10から利用可能
Watson IBM 会話APIを通じて利用可能
チャットボットの仕組み
❖最新のチャットボットは、チ
ャットサービスを経由して
実現が可能。
➢ メッセージの受信をし、どの
ようなメッセージを返すのか、
決めることができる。
➢会話APIなどを通じて高度な
会話を行うことも可能。
Android チャットサービス&BotFramework
Bot
会話状態管理
会話状態遷移
会話API
アプリ
Bot
プログラムユーザ認証
復号
状態遷移
マシンアーキテクチャから見た詳細
❖C#やnodejsという開発言
語を利用
➢ HTTPSによる暗号化が必
要
➢ユーザー情報を漏洩させ
ないため、IDなどは匿名
のものが利用される
チャットサービス&BotFramework
Bot
会話状態管理
会話状態遷移
会話API
Bot
プログラムユーザ認証
node.js
Bot
Framework
プログラムHTTPS
JSON
IP
匿名ID
状態情報メッセージ
チューリングテスト
会話AI
人間
❖人工無能の精度の判定方法
➢相手の見えない状態で会話を行い、人間が会話AIか人物か判定できなければ
➢精度が良いものとする
壁やインターネット等
チャットボットまとめ
❖サーバー間でHTTPS通信を行う。
❖著名なサービスに対応したフレームワークも登場
➢ Facebook,Skype,Slack等に対応
➢ MicrosoftのLUIS(Language Understanding Intelligent Service)にも対応
❖ユーザー情報を扱う為、考慮することも多い
➢チャットという個人同士のやりとりをサーバーにも渡すため、暗号化必須
➢ユーザー情報は匿名のため、必要であればプログラムの中でユーザーに確認
➢スマートフォンは非常に身近な為、このような配慮が必要
事例3.ゲームA.I.
ゲームAIとは
最後に、70年台から利用されているゲームAIの概要について紹介
ゲームは、コンピューターゲームができるまではカードゲームやボードゲームと言った物
が主流
最近では、AlphaGoにて、囲碁の勝利がニュースになった
Android
ゲーム
オフラインゲームAI
❖対戦相手A.I.
➢ Androidの中に実装
➢オフライン(ネットワークにつながっていなくても)でも遊べる
ゲームサービス
タイトル
対戦画面
スコア
対戦相手A.I.
ランキング
販売管理
易しい
普通
難しい
マルチ対戦
Android
ゲーム
対戦AIの概要
対戦AIの中で、勝てる手を推論し、実行する
対戦画面 対戦A.I.
1.手を入力2.勝てる手を推論する
3.手を実行する
ソフトウェアの壁
あなたは人工知能を作れるか?
ゲームの対戦を通じて、人間と対話するプログラムをゲームAIと呼ぶ
あなた
ゲームAI
壁を隔てて対戦している図
ゲームA.I.まとめ
❖ゲームA.I.では、対戦相手を実装
❖ゲームというスコープで人間と対話を行う
➢人間らしく振る舞うと言った挙動は不要
❖オフラインでも遊べるように、スマートホンの少ないコンピューターの計算リソースだ
けでも、実行可能。
➢但し、ゲームのルール設定を誤ると膨大な計算量が必要な場合がある
2章まとめ
❖3つの人工知能を活用した仕組みについて紹介
➢人間らしい挙動に近い作りをしようとすると、膨大な計算やデータが必要になるため、クラウドとの連
携が必須になる。
❖本章以降では、人工知能活用の入り口として、1,3の詳細を実習を通して学習
3. Cloud Vision APIを使ってみよう
Cloud Visionとは
❖Cloud Visionは、Googleが提供する画像認識サービス
https://cloud.google.com/vision/
❖ブラウザやAPIを通じて、利用可能なサービス
➢APIは、自分の書いたプログラムからそのシステムを利用可能にする
インターフェース
本章で学ぶ内容
❖Google Cloud Visionに触れて、何ができるのか学ぼう
❖Cloud Vision APIを使って、作れるアプリを考えてみよう。
Cloud Visionを使ってできること
❖以下のような画像の判定が行なえる
➢ 色の占める割合
➢ 画像内容の推定
➢ 含まれている文字列の解析(OCR)
➢ ロゴ検知
➢ 有害コンテンツ判定
■ アダルト的
■ 詐欺的
■ 医療的
■ 暴力的
※ OCR: Optical Character Recognition(光学文字認識)
Cloud Visionと人工知能の関係
Cloud Visionによって分類された結果に意味づけし、
その学習データをもとに、
ユーザーの画像を解析する。
Cloud Vision
1.様々な画像を入力
2.分類された画像を意味づけ
3.ユーザーが画像を入力
4. 分類などを返す
Cloud ML
学習をする場所
学習済モデル
Cloud Visionの利用方法
Cloud Visionの使い方
❖Cloud Visionの使い方
1. URLを開く
■ https://cloud.google.com/vision/
Cloud Visionの使い方
2. 画像ファイルをドラッグ・アンド・ドロップし、チェックを入れる
Cloud Visionの使い方
3. 分析結果が表示される
Cloud Visionの実行結果例
❖Cloud Visionでは以下のような情報を得ることができます。
項目 返ってくる項目 備考
Properties 色情報と占める割合 常に
Label 写っている物の名前 常に
Safe Search 有害な(青年向け、暴力的)コンテンツが含まれているか
常に
Text 検出された文字と位置 文字が含まれているときのみ
Face 顔のパーツが検出された位置や感情推定、画像をとったアングル
顔が含まれていたときのみ
Logo ロゴの情報 ロゴが含まれていたときのみ
Landmark ランドマーク(有名な建物) ランドマークが含まれていたときのみ
Cloud Visonは人工知能
結果は推定結果の為、scoreと共に返却される。
[
{
"mid": "/m/0g6n3",
"description": "Sagrada Familia (¥"Expiatory Temple of the Holy Family¥")",
"score": 0.927383,
"boundingPoly": {
"vertices": [{"x": 60,"y": 39},{"x": 517,"y": 39},{"x": 517,"y": 255},{"x": 60,"y": 255}]
},
"locations": [{
"latLng": {"latitude": 41.403579,"longitude": 2.174242}
}]
}
]
Cloud Visionの応用例
❖単純に得られる情報だけでも以下の様な恩恵を得ることが可能です。
➢ チャットサービスでの有害な画像のブロック
➢ テレビ・映画などのコンテンツの流出の検知
➢ 来客の満足度の推定
3章まとめ
❖Cloud Visionは画像認識の人工知能
➢ 推定結果や推定に利用した領域を得ることができる
➢ 人工知能単体で得られるものは、そのままではサービスとして成立しないが、既存サービス
と組み合わせることで、これまでにない価値を生み出すことが可能
❖Cloud Visionがどのように凄いかの再確認のためには、画像ファイルやフォ
ーマットの理解が必要。
➢ 画像フォーマットについては、テキストを参照
4. 開発環境の構築
Android Studioとは
❖Android Studioとは
➢ Androidアプリケーションを開発するための、統合開発環境(IDE)
➢ JetBrains社が開発したIntelliJ IDEAをベースにAndroid開発に最適化されており、Windows、
Mac OS XおよびLinux用が存在する
➢ Android Developerサイトより入手できる
セットアップ手順
❖手順
1. Android Studioのダウンロード
2. Android Studioのインストール
3. Componentのダウンロード
ダウンロード
❖手順 1. Android Studioのダウンロード
➢ 次のURLにアクセスし、 [Download Andorid Studio] をクリックする
■ https://developer.android.com/studio/index.html
インストール
❖手順 2. Android Studioのインストール
1. ダウンロードしたdmgファイルを実行する
2. Android Studioアイコンを [Application]フォルダにドラッグする
❖初期設定
➢ ランチャーからAndroidStudioを起動する
➢ インストールロケーションの設定
■ 「I do not have a ...」を選択
インストール
❖AndroidStudioが起動します
インストール
❖手順 3. コンポーネントのインストール
➢ アプリケーション開発に必要な最低限のコンポーネントをインストールする
➢ デフォルトの設定のまま画面の指示に従って、次々と「Next」ボタンをクリックする
➢ 最後に「Finish」をクリックする
コンポーネントのインストール
❖コンポーネントのインストール(続き)
➢ コンポーネントがインストールされる
➢ 「Finish」ボタンをクリックして完了
コンポーネントのインストール
❖確認
➢ 次のような画面が表示されることを確認する
コンポーネントのインストール
4章まとめ
❖Androidアプリケーション開発に必要なツール
➢ JDK 8
➢ Android Studio
➢ Android SDK
➢ Androidエミュレータまたは、Androidデバイス
❖Android Studioのインストール
➢ Android StudioのインストーラはAndroid Developerサイトから入手可能
➢ Android Studioを使って、Android アプリケーション開発に必要なコンポーネントのインスト
ールができる
開発ツールの使い方
概要
❖HelloWorldアプリケーションの作成を通じて、開発ツールの操作方法を習得
する
➢ Android Studio
➢ エミュレータ、 Android Virtual Device (AVD)
➢ Android Device Monitor
Android Studio
❖Android Studioとは?
➢ Androidアプリケーションを開発する為のIDE(統合開発環境)
❖提供する機能
➢ Androidプロジェクトの作成
➢ プロジェクトのビルド
➢ Androidアプリケーションの実行・デバッグ
➢ リソースファイルの作成支援
■ リソースファイルについては本節で解説
Hello Worldの表示
❖初めにAndroidプロジェクトを作成し、下記のアプリケーションを作成する
➢ 完成イメージ
新規作成したプロジェクトは、図のようなHello world!と表示されるアプリケーションのプロジェクトとして作成される
❖Androidプロジェクトを作成する
1. [Start a new Android Studio project]を選択(初回起動時)
※プロジェクトウィンドウが表示されている場合はFile > NewからAndroid Application Project をクリック
プロジェクトの作成(1)
2. [New Project]画面の設定
■設定情報を入力し、Nextボタンをクリック
プロジェクトの作成(2)
項目 設定値
Application Name HelloWorld
Company Domain デフォルトの設定のまま
Project location デフォルトの設定値
※デフォルトの設定値
3. [New Project]画面の設定 2
■ Phone and Tablet にチェックをいれ、Minimum SDK の値を選択し、 [Next] ボタンをクリックする
プロジェクトの作成(3)
※講師の指示に従う
4. [Add an activity to Mobile]画面の設定
■Empty Activityを選択し、 [Next] ボタンをクリックする
プロジェクトの作成(4)
5. [Choose options for your new file]画面の設定
■Finishボタンをクリックする
プロジェクトの作成(5)
6. Android Projectが生成され、下図のように表示される。
■ [Tip of the day]のダイアログは閉じる
■ 初回起動時は、ビルドに必要なライブラリなどのダウンロードがあるため、ビルドに時間がかかる。
プロジェクトの作成(6)
※初回起動時はビルドに時間がかかる
プロジェクトの作成(7)
7. ビルドが終了すると、下図のように表示される。
1. ツールバーの[AVD Manager]ボタンをクリックするとエミュレータ一覧を表示される
エミュレータの作成(1)
エミュレータの作成(2)
2. 「Create Virtual Device」ボタンをクリックする
エミュレータの作成(3)
3. 「Nexus 5」を選択し、「Next」ボタンをクリックする
エミュレータの作成(4)
4. 「Lollipop」を選択し、「Next」ボタンをクリックする
エミュレータの作成(5)
5. デフォルトの設定のまま、「Finish」ボタンをクリックする
エミュレータの作成(6)
6. 「Run」ボタンをクリックする
エミュレータの作成(7)
3. エミュレータの起動を確認する
1. ツールバーの[Run]ボタンをクリックしてアプリケーションを実行する
アプリケーションの実行
アプリケーションの実行
2. デバイス選択画面が表示されるので、起動中のエミュレータを選択する
❖確認
➢ エミュレータにアプリケーションがインストールされ、アプリケーションが起動し、下記画
面が表示されることを確認する
実行画面の確認
❖ リソースファイルとは?
➢ ソースコード以外の全ての外部ファイル
➢ Androidプロジェクトでは/res以下に格納されているファイル
リソースファイル
# リソースファイル 内容
1 res/drawable(-hdpi, -xhdpiなど)/
画像ファイル( .png, .jpeg )
2 res/mipmap(-hdpi, -xhdpiなど)/
ランチャーアイコン
3 res/layout/*.xml 画面デザイン情報(ex. activity_main.xml)
4 res/values/colors.xml 色情報
5 res/values/dimens.xml サイズ情報(5px,10dip,20pt)
6 res/values/strings.xml 文字列情報
プロジェクトViewにすると見やすい
リソースエディタ
❖リソースファイルの作成支援機能がある
➢ リソースエディタの種類
■ レイアウトエディタ
● 画面デザインリソースファイルの作成サポート機能
■ リソースエディタ
● 画面デザインリソースファイル以外のリソースファイルの作成サポート機能
画面デザインを作成する
❖レイアウトエディタの機能を使用して、HelloWorldにボタン、チェックボックス、テキスト入力を含む画面を作成する
➢ ボタン、チェックボックスはレイアウトエディタのGUI機能を利用して追加する
➢ テキスト入力は、画面デザインリソースファイル(XMLファイル)を直接編集して追加する
◆各ビューの表示文字列
# ビュー 表示文字列
1 ボタン Button01
2 チェックボックス CB1
3 テキスト入力 EditText階層構造
<LinearLayout>
<TextVIew />
<Button />
<CheckBox />
<EditText />
</LinearLayout>
リソースエディタの起動
❖画面デザインリソースファイルを開く
1. Package Explorerからres/layout/activity_main.xmlをダブルクリックする
2. res/layout/activity_main.xmlのファイルがレイアウトエディタで開かれ、右図の画面が表示さ
れることを確認する
❖レイアウトエディタのDesignタブで、TextViewを画面中央に移動する
1. TextViewを選択し、中央にドラッグする
Viewを移動する
中央に移動
❖レイアウトエディタのDesignタブで、画面デザインにボタン、チェックボックスを追加する
1. [Palette]からButtonを選択し、TextViewの下に配置する
2. 同様に、 CheckBoxをButtonの下に配置する
Viewを追加する
TextViewの下に配置
3. Buttonをクリックし、Propertiesビューのtextプロパティの値を「Button01」に変更する
4. 同様にCheckBoxのtextプロパティCB1に変更する
Viewの表示テキストを変更する
実行確認
❖アプリケーションを実行し、次のことを確認する
➢ 画面にボタン、チェックボックスが表示されている
➢ ボタンの表示文字列が "Button01" になっていること
➢ チェックボックスの表示文字列が "CB1" になっていること
※エミュレータでは大文字で表示される
Viewの整列
❖Layoutを変更し、ボタンやテキストを整列する
➢ デフォルトは、RelativeLayoutになっている為、LinearLayoutに変更する
• LinearLayoutに変更する
1. [Design]タブから[Text]タブを選択し、XMLエディタを表示する
Viewの整列(1)
Viewの整列(2)
2. XMLのルート要素をRelativeLayoutからLinearLayoutに変更する
• 縦並びにするため"orientation"プロパティの値を"vertical"に設定する
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
...略...
android:orientation="vertical"
tools:context=".MainActivity">
...略...
</LinearLayout>
実行確認
❖アプリケーションを実行し、次のことを確認する
➢ 画面左上に垂直方向に整列している
EditTextの追加
• XMLエディタを使って、EditTextを追加する
1. テキスト入力ビューである、 EditTextタグをactivity_main.xmlに追加する
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android=http://schemas.android.com/apk/res/android
・・・>
<TextView
・・・/>
<Button
・・・ />
<CheckBox
・・・ />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="EditText"></EditText>
</LinearLayout>
2. [Design]タブに表示を切り替えて、EditTextが表示されている事を確認する
画面プレビューの確認
DesignタブでEditTextが表示されている
実行確認
❖アプリケーションを実行し、次のことを確認する
➢ EditTextが追加され、「EditText」と表示されている
デザイン以外のリソースを使用する
❖HelloWorldに追加したボタンの表示文字列を Hello Button に変更する
❖表示文字列は文字列リソースファイルに設定する
❖文字列リソースファイルは、アプリケーションで使用する文字列を定義した
リソースファイルである
(res/values/strings.xml)
文字列リソースの定義
■画面デザインリソースファイル(res/layout/activity_main.xml)上のTextView
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="@dimen/padding_medium"
android:text="@string/hello_world"
tools:context=".MainActivity" />
2.TextViewのTextプロパティから文字列リソースファイルの文字列を参照する
実行
■文字列リソースファイル(res/values/strings.xml)<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello_world">Hello world!</string>
・・・・・・・・・</resources>
1.画面上に表示する文字列を文字列リソースファイルに追加する
文字列を参照する
3.strings.xmlに設定されている文字列が表示されている
文字列リソースの追加(1)
❖文字列リソースファイルに文字列設定を追加する
➢ res/values/strings.xmlをダブルクリックする
➢ エディタが開かれ、下図の画面が表示されることを確認する
文字列リソースの追加(2)
3. <string>タグを追加し、次の内容を追加する
• <string name="button_label">Hello Button</string>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">HelloWorld</string>
<string name="button_label">Hello Button</string>
</resources>
項目名 設定値
Name button_label
Value Hello Button
4. レイアウトエディタが起動し、"Button01"をクリックする
5. Propertiesビューからtextプロパティの [...] ボタンをクリックする
文字列リソースの追加(3)
_
6. Resoucesウィンドウが表示されたら、button_label を選択し[OK]ボタンをクリックする
文字列リソースの追加(3)
_
❖アプリケーションを実行し、次のことを確認する
➢ ボタンの表示文字列が Hello Button になっている
文字列リソースの追加(4)
マニフェストファイルとは
❖マニフェストファイルとは?
➢ AndroidManifest.xml(アプリケーションに1つ存在)
➢ アプリケーションに関する以下の情報等を定義する
■ アプリケーションのアイコン、タイトルの設定
■ 使用するコンポーネント(Activity、Service等)の定義
■ コンポーネントの振る舞いに関する定義
■ アプリケーションのアクセス制限設定
マニフェストファイルを変更する
❖マニフェストエディタ
➢ app/manifestsフォルダをダブルクリックすると、エディタ起動する
➢ マニフェストファイルはxmlの書式で記述されている
➢ 変更するには内容を直接編集する
デバッグツールの使用方法
❖Android Device Monitor
➢ 主なデバッグ機能
■ モニタリング
■ エミュレータ操作
■ エミュレータ・ハードウェア内の情報取得
■ メモリ使用量
Android Device Monitorの使用方法
❖Android Device Monitorを起動する
➢ Android Studioのツールバーから[Android Device Monitor] を選択する
Android Device Monitorのデバッグ機能
❖Android Device Monitorのデバッグ機能
➢ モニタリング
■ アプリケーションが出力するログの参照
■ リソース使用状況の参照
➢ エミュレータへのデータ送信
■ 電話発信
■ SMS送信
■ 位置情報送信
➢ スクリーンショット取得
➢ プロセス管理
■ ガベージコレクション実行
■ プロセス停止
➢ ファイル操作
アプリケーションログの参照
❖アプリケーションログの参照
➢ ログを出力するには、android.util.Logクラスのログ出力メソッドを使用する
■サンプルコードimport android.util.Log;
Log.e(“HelloWorld”, “Error Message”); // エラーを出力するログLog.w(“HelloWorld”, “Warning Message”); // ワーニングを出力するログLog.i(“HelloWorld”, “Infomation Message”); // アプリケーション動作の情報を出力するログLog.d(“HelloWorld”, “Debug Message”); // デバッグ情報を出力するログLog.v(“HelloWorld”, “Verbose Message”); // 詳細情報を出力するログ
ログ出力
Hello Worldからログを出力する(1)
❖HelloWorldの起動時にアプリケーションログを出力
➢ AndroidViewからMainActivity.javaをダブルクリックする
➢ MainActivity.javaのソースコードが開かれ、下図の画面が表示されることを確認する
Hello Worldからログを出力する(2)
➢ MainActivity#onCreateにログ出力を行う5つのコードを追加する
package com.example.mycompany.helloworld;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log; ← コード補完で自動的に追加されるimport android.view.Menu;
import android.view.MenuItem;
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.e("HelloWorld", "Error Message");
Log.w("HelloWorld", "Warning Message");
Log.i("HelloWorld", "Information Message");
Log.d("HelloWorld", "Debug Message");
Log.v("HelloWorld", "Verbose Message");
}
追加する
Hello Worldからログを出力する(3)
➢ アプリケーションを実行し、画面が表示されることを確認する
Hello Worldからログを出力する(4)
5. Android Device Monitorの画面を表示する
6. LogCatビューに5つのログが出力されていることを確認する
5章まとめ
❖Android Studio
➢ Androidアプリケーションを開発するための統合開発環境(IDE)
➢ Android Studioには便利な支援機能がある
■ Androidプロジェクトの作成
■ Androidアプリケーションの実行・デバッグ
■ GUIを使った画面デザイン
■ コードの入力支援
❖Android Device Monitor
➢ Android Studioのデバッグツール
➢ モニタリング、エミュレータ操作などの機能がある
マルバツゲーム概要
概要と設計
概要
❖ 本書で作成するゲーム
❖開発の進め方
❖マルバツゲーム設計
本書で作成するゲーム
本書で作成するゲーム
❖本書ではマルバツゲームの作成を行う
➢マルバツゲームの作成を通してゲームAIの理解を深めることを目的とする
❖画面をタッチして、盤面に◯または☓を配置するおなじみのゲーム
➢本書では盤面に◯☓を配置することを、「マークを記入する」と表記する
❖三目並べとも呼ばれる
実習マルバツゲームで遊ぶ
❖実際にマルバツゲームで遊んでみる
➢ 1人遊びできるマルバツゲームを使ってゲームを行う
Goolgeの検索ワードに「tictactoe」と入力するとマルバツゲームができる
実習マルバツゲームで遊ぶ
❖実習の進め方
➢ ドメインモデルを作成する
■ゲームをしながら、どんなオブジェクトがあるのか、どんな振る舞いが用意されているのかを考
察する
■ひととおりの考察が終わったら、プログラムで使われていそうなクラス、メソッドなどを書き出す
■余裕があればクラス図を作成する
※ドメインモデル● システムに関わるさまざまな実体とそれらの関係を説明するシステムの概念モデルのことをドメインモデルという
解答マルバツゲームで遊ぶ
この実習の解答はありません
隣の人のドメインモデルと比較し、意見してみましょう
開発の進め方
ステップアップ手順
❖5つのステップでアプリケーションを完成させる
➢設計
■開発の準備と設計
➢製造
■ Step 1. 基盤作成と2P対戦機能
■ Step 2. ランダム AI
■ Step 3. ルールベースAI
■ Step 4. CPU vs CPU
■ Step 5. プレイアウトAI
完成図
モード選択 ゲーム開始 ゲーム中 ゲーム終了
画面構成
❖タイトル画面
モードボタンゲームの難易度別のCPU対戦、2P
対戦、CPU同士の対戦が用意されている
モードボタンをクリックするとゲーム画面に遷移する
画面構成
❖ゲーム画面
➢開始前
ゲーム開始ボタンボタンをクリックするとゲームが始まる。
○ボタンをクリックした場合は先手となり、
×ボタンをクリックした場合は後手となる。
先手後手選択メッセージ
❖ゲーム画面ゲーム中
画面構成
プレイヤーの表示● 先手、後手のプレイヤーの名称が表示される
● CPU対戦:○ 「あなた」「コンピュータ」
● 2P対戦○ 「Player 1」「Player2」
● CPU同士の対戦○ 「コンピュータ1」「コンピュータ
2」
マルバツゲームのマス現在のマルバツの対戦状態が表示される。ユーザはこのエリアをタップしてマークを記入する
❖ゲーム画面
➢ゲーム終了
画面構成
勝敗メッセージダイアログゲームの勝敗結果が表示されます
スケルトンプロジェクト
❖各Stepに対応したスケルトンプロジェクトを用意
➢解答ドキュメントから取得するStep 5. プレイアウトAI
プロジェクト名 実装済の処理
TicTacToe01_1 Step 1-1. 基盤作成と2P対戦機能(画面遷移)
TicTacToe01_2 Step 1-2. 基盤作成と2P対戦機能( 2P対戦)
TicTacToe02 Step 2. ランダム AI
TicTacToe03 Step 3. ルールベースAI
TicTacToe04 Step 4. CPU vs CPU
TicTacToe05 Step 5. プレイアウトAI
開発の準備と設計
アプリケーションの説明
❖ 概要
➢マルバツゲームアプリケーション
➢ タイトル画面とゲーム画面の2画面構成
➢ タイトルでは、ゲームモード(難易度、2P対戦など)を選択する
➢ゲーム画面では、先手、後手を選択する
アプリケーションの構成
❖アプリケーションを構成する主なクラス
クラス 説明
TitleActivity タイトル画面
MainActivity ゲーム画面
Constants 定数定義クラス
Cell ◯☓マークオブジェクト
Player プレイヤー抽象クラス
TicTacToe ゲームロジッククラス
GameController Playerの操作とゲームの監視をする
TitleActivity
❖TitleActivity
➢ タイトル画面
➢ゲームモードを選択すると、ゲーム画面に遷移する
➢ゲームモード
■ Easy
■ Nomal
■ Hard
■ 2P Play
■ CPU vs CPU
❖MainActivity
➢ゲーム画面
➢先手、後手を選択してゲーム開始
➢ゲーム終了後にダイアログ表示
MainActivity
◯ ☓どちらかをクリックする
Constants
❖Constantsクラス
➢定数定義クラス
➢主にゲームロジッククラスで扱う数値、文字データの集まり
Cell
❖Cellクラス
➢盤面の1マス分の情報を持ったオブジェクト
➢ ○マーク、☓マーク記入なしなどの状態を管理する
➢ マークに合わせた画像リソースを提供する
TicTacToe
❖TicTacToeクラス
➢ゲームのロジッククラス
➢盤面の状態を管理する
➢内部にCellクラスの配列を持っている
➢ゲーム初期化や終了判定などのアルゴリズムが実装されている
Player
❖Playerクラス
➢プレイヤー抽象クラス
➢ プレイヤーとしての属性と振る舞いが定義されている
Player
User AI
Player
❖Playerクラス
➢プレイヤー抽象クラス
➢ プレイヤーとしての属性と振る舞いが定義されている
Player
User AI
User
❖Userクラス
➢ Playerの派生クラス
➢ プレイヤーが人だったときに使用する
Player
User AI
AI
❖AIクラス
➢ Player派生クラス
➢ CPU対戦のときのゲームAIとしての振る舞いを実装
➢難易度に合わせて、AIクラスの派生クラスが複数いる
■ RandomAI
■ RuleAI
■ PlayoutAI
Player
User AI
GameController
❖GameControllerクラス
➢ゲーム操作クラス
➢ゲームの状態を管理する
➢内部にTicTacToeクラスとPlayerクラスを持ち、実際のゲームの操作、監視を行う
クラス図
❖ゲームロジック関連のクラス図
Cell
<<interface>>
GameController.Listener
Player
User AI
<<interface>>
Player.Listener
GameController TicTacToe
シーケンス図
❖ゲーム開始シーケンス
シーケンス図
❖ゲーム中のシーケンス
実習の進め方
❖次のステップでアプリケーションを完成させる
➢ Step 1. 2P対戦
➢ Step 2. ランダムAIの作成
➢ Step 3. CPU 対 CPU モードの作成
➢ Step 4. ルールベースAIの作成
➢ Step 5. プレイアウトAIの作成
完成図
モード選択 ゲーム開始 ゲーム中 ゲーム終了
6章まとめ
❖マルバツゲームのアルゴリズムの理解
❖ドメインモデルの作成
❖アプリケーションを構成する主なクラス
❖クラス図による、各クラスの関係
❖シーケンス図
➢アプリケーション起動の流れの理解
➢ゲーム中の流れの理解
クラス 説明
TitleActivity タイトル画面
MainActivity ゲーム画面
Constants 定数定義クラス
Cell ◯☓マークオブジェクト
Player プレイヤー抽象クラス
TicTacToe ゲームロジッククラス
GameController Playerの操作とゲームの監視をする
7. マルバツゲームの作成1
Step 1. 基盤作成と2P対戦機能
Step 1. 2P対戦の概要
❖概要
➢ 2P対戦 モードで遊べるようにする
➢ マルバツゲームに2P対戦の機能を実装する
➢ 1台のAndroidを2人で交互に使う
開発の流れ
❖2P対戦機能を完成させるまでの流れ
1. 画面作成
■画面デザインの作成
■ タイトル画面からゲーム画面を呼び出す
2. 2P対戦の実装
■ゲームロジックの作成
■画面ロジック
● Activityとゲームロジッククラスの連携処理
完成図
モード選択 ゲーム開始 ゲーム中 ゲーム終了
実習1.画面作成
❖画面作成概要
➢ タイトル画面とゲーム画面を作成する
➢ タイトル画面でゲームモードボタンをクリックすると、ゲーム画面に遷移する
実習1. 画面作成の準備
❖プロジェクトを作成する
➢ Application name: TicTacToe
➢次の画面以降はデフォルトの値を使用する
デフォルトの値を使う
デフォルトの値を使う
実習1. 画面作成の準備
❖リソースファイルを準備する
➢ プロジェクトが作成されたら、付属のDVDよりリソースファイルを以下のように配置する
実習1. 画面作成の手順
❖画面の作成 手順
➢ 1. タイトル画面の作成
➢ 2. ゲーム画面のの作成
➢ 3. 画面遷移処理の実装
➢ 4. AndroidManifestファイルの修正
※各手順の詳細についてはテキストを参照する
実習1. 画面作成動作確認
❖アプリケーションを実行し、以下のことを確認する
➢ タイトル画面からゲーム画面に遷移する
➢ゲーム画面で、押されたボタンのIDがログに出力されていること
実習1. 画面作成解答
❖解答ドキュメントを確認する
実習2. 2P対戦の実装
❖2P対戦の実装概要
➢ゲーム画面で、先手後手ボタンをクリックするとゲームが開始される
➢ゲーム終了後にダイアログが表示され、勝敗結果が表示される
実習シーケンス図
❖ユーザが画面をタップして、マークを記入するまでの流れ
実習2. 2P対戦の実装の手順
❖手順
➢ 1. ゲームロジックの作成
➢ 2. 画面とゲームロジックの連携処理
※各手順の詳細についてはテキストを参照する
実習2. 2P対戦の実装動作確認
❖アプリケーションを起動して次のことを確認する
➢ タイトル画面が正しく表示されている
➢ゲーム画面が正しく表示されている
➢ 2P対戦が正常に動作する
モード選択 ゲーム開始 ゲーム中 ゲーム終了
実習2. 2P対戦の実装解答
❖解答ドキュメントを確認する
7章まとめ
❖基盤作成と2P対戦機能の概要
➢ タイトル画面からゲーム画面の画面遷移機能を実装
➢ゲームの基盤部分となるゲームロジックを実装
❖2P対戦機能の実装
➢ Playerクラスを継承したUserクラスを作成
➢マークを記入するなどの、実際の振る舞いはAndroidを操作している人が行う
思考ルーチン
コンピュータゲームにおける人工知能
❖人工知能とは
➢ 人間の知的営みをコンピュータに行わせるための技術のこと
➢ 人間の知的営みを行うことができるコンピュータプログラムのこと
❖人工知能の技術をコンピュータゲームに応用する
➢ ゲーム内のノンプレイヤーキャラクター(以降、NPCと略称)
に知能あるいは知性を持っているような
錯覚を生み出すことができる
ゲームAI
❖ゲームAI
➢ コンピューターゲームにおいて利用されるAI(人工知能)を指す
➢ ノンプレイヤーキャラクター (NPC) の振る舞いに知能があるかのような錯覚を生み出す技法
■ 将棋や麻雀などのボードゲームのCPU対戦
■ 戦略シミュレーションゲームの他国
■ RPGの敵キャラクター
■ 対戦型格闘ゲームやシューティングゲームなどの敵の行動パターン
❖思考ルーチン
➢ コンピュータゲームのプログラムの一部
➢ プレイヤーと対戦する側の行動を決定するプログラム
➢ ソリティアのような1人遊び専用のゲーム以外には、何かしらの思考ルーチンが含まれている
➢ 一般的には、一手ずつ考えて行動するターン制のゲームに対して主に用いる用語である
一人遊びゲーム 対戦ゲーム
思考ルーチンとは何か
思考ルーチンがプレイヤーの対戦相手
❖思考ルーチンがプレイヤーの対戦相手を操作している
➢ 思考ルーチンはゲームの中でプレイヤーの対戦相手 として登場する
■ チェスや将棋などのボードゲームの対戦相手、戦略シミュレーションゲームの他国など
➢ プレイヤーと対戦する側の行動を決定するプログラムとしての思考ルーチンが組み込まれている
どんな思考ルーチンがあるか
❖ゲームや難易度に合わせて思考ルーチンを使い分ける
➢ 乱数に従うもの
■ オセロゲームなどでランダムに手をうつ
➢ 同じ動作の繰り返し
■ 同じ行動を繰り返す敵キャラクター
➢ ルールベース
■ 五目並べなどで最後の一手を阻害する
思考ルーチンはゲームを面白くする重要な要素
コンピュータの思考
❖コンピュータの思考
➢ 受け取った情報を、あらかじめ与えられた条件に従って結論を出す
➢ 判断条件を変更しない
■ 決められた判断の基準を最適化することができない
■ 試行錯誤をしない
➢ 決まっている状況では、人間より素早く判断を行うことができる
➢ 新しい状況では 正しく判断することができない
人間の思考
❖人間の思考
➢ 受け取った情報を、自ら決めた条件に従って判断を行う
➢ 判断条件を自ら変更できる
■ 判断基準の最適化をしていくことができる
➢ 新しい状況のもとでも、判断を行うことができる
ディスカッション
強い思考ルーチン
❖強い思考ルーチンとはどんなものかを考える
➢
➢
➢
➢
おもしろい思考ルーチン
❖おもしろい思考ルーチンとはどんなものかを考える
➢
➢
➢
➢
➢
8章まとめ
❖コンピュータゲームにおける人工知能について
➢ 人工知能の技術をコンピュータゲームに応用し、NPCに知能あるいは知性を持っているよう
にみせる
❖ゲームAIとはコンピューターゲームにおいて利用されるAI(人工知能)のこと
❖思考ルーチンは、コンピュータゲームのプログラムの一部
講師用資料(受講生閲覧禁止)
強い思考ルーチン
❖回答例:
➢ 有利な手を選択する
■ オセロゲームで角を取る
➢ 先読みする
■ 数手先まで探索する
➢ 最善手選択
■ 独自の評価アルゴリズムで点数化する
■ オセロゲームなどでなるべく多くのコマをひっくり返す
おもしろい思考ルーチン
❖回答例:
➢ プレイヤーが勝てる
■ 理不尽なくらい強いAIはつまらない
➢ ルールを守る
■ プレイヤーと対等でなければいけない
● プレイヤーの情報を盗み見ない
● 変数とか覗かない
➢ 弱すぎない
■ チェスゲームでチェックメイトなのにキングを守らない
➢ 人間らしい
マルバツゲームの作成2
Step 2. ランダムAI
Step 2. ランダムAIの概要
❖概要
➢ Easy モードで遊べるようにする
➢ マルバツゲームにAI対戦機能を追加する
➢ ランダムな手を選択するAIを作成する
マルバツゲームのAI
❖マルバツゲームで作成するゲームAI
➢ 縦一列の継承関係
■ Playerクラスを継承した AI クラス
■ AIクラスを継承した、RandomAI クラス
■ RandamAIクラスを継承したRoulebaseAI クラス
■ RoluAIを継承したPlayoutAI
Player
AI
RolubaseAI
PlayoutAI
RandomAI
User
ランダムAIの思考ルーチン
❖思考ルーチン
➢ どこに打つかをランダムに選択する
➢ 盤面の状態に関係なく常にランダムな一手を選択する
実習ランダムAIの作成
❖マルバツゲームにEasyモードのCPU対戦機能を追加する
➢ タイトル画面で Easyモードを選択した時に、ランダムAIと対戦する
モード選択 ゲーム開始 ゲーム中 ゲーム終了
実習シーケンス図
❖ランダムAIがマークを記入するまでの流れ
実習ランダムAIの作成(手順)
❖手順
➢ AIクラスの作成
➢ AIクラスを継承したRandomAIクラスの作成
➢ 思考ルーチンの実装
➢ GameControllerの修正
Player
AI
RandomAI
User
実習確認
❖アプリケーションを実行して次のことを確認する
➢ CPU対戦ができる
■ 自動的に◯ or ☓が入力される
➢ プレイヤーラベルが「あなた」と「コンピュータ」になっている
実習解答
❖解答ドキュメントを確認する
9章まとめ
❖ランダムAIの機能を実装
➢ ランダムAIは、次の手をどこに打つかをランダムに選択する
➢ Playerクラスを継承したAIクラスの作成
➢ AIクラスを継承した、RandomAIクラスの作成
➢ RandomAIクラスにAIの思考ルーチンを実装している
❖Easyモード対応
➢ タイトル画面でEasyモードを選択した時に、ランダムAIと対戦する機能を追加
10. マルバツゲームの作成3
Step 3. ルールベースAI
Step 3. ルールベースAIの概要
❖概要
➢ Normal モードで遊べるようにする
➢ マルバツゲームのAI対戦にルールベースAI機能を追加する
➢ ルールベースに基づいてゲームをするAIを追加する
ルールベースAIの思考ルーチン
❖ 思考ルーチン
➢ 次の一手で3つ並べることができる場合はそこを選択する
➢ 相手が次の一手で勝てる場合は阻止する
➢ どちらでもないときはランダムに選択する
◯ ◯ ◯
☓
☓
◯ ◯ ☓
☓
◯
ここに置くと勝てる
相手の勝ちを阻止する
実習ルールベースAIの作成
❖マルバツゲームNormalモードのCPU対戦機能を追加する
➢ タイトル画面で Normal モードを選択した時に、ルールベースAIと対戦する
実習シーケンス図
❖ルールベースAIがマークを記入するまでの流れ
実習ルールベースAIの作成(手順)
❖手順
➢ RandomAIクラスを継承したRulebaseAIクラスの作成
➢ 思考ルーチンの実装
➢ GameControllerの修正
Player
AI
RolubaseAI
RandomAI
User
実習確認
❖アプリケーションを実行して次のことを確認する
➢ 3つ並べることができる場所があったときにそこに打つ
➢ 相手の勝ちを阻止する
➢ いずれでもないときは、ランダムな一手を選択する
実習解答
❖解答ドキュメントを確認する
10章まとめ
❖ルールベースAIの機能を実装
➢ ルールベースAIは、次の手をどこに打つかをゲームルールに基づいて選択
➢ 勝敗が決まるようなときに最善手を選択するような機能をもつ
➢ 次の一手で勝敗が決まらないようなケースでは、ランダムな一手を選択する
➢ RandomAIクラスを継承した、RulebaseAIクラスの作成
❖Normalモード対応
➢ タイトル画面でNormalモードを選択した時に、ランダムAIと対戦する機能を追加
11. マルバツゲームの作成4
Step 4. CPU vs CPU
Step 4. CPU vs CPU概要
❖マルバツゲームにCPU同士対戦機能を追加する
➢ CPU vs CPU モード機能の追加
➢ 対戦で使用するCPUはランダムAIを搭載したものとする
➢ CPU同士の対戦は “プレイアウトモード”で必要な機能となる
実習CPU vs CPU の作成
❖マルバツゲーム CPU vs CPU モードの機能を追加する
➢ タイトル画面で CPU vs CPU モードを選択した時に、ルールベースAIと対戦する
実習シーケンス図
❖CPU vs CPU の処理フロー
実習CPU vs CPU の作成(手順)
❖手順
➢ MainActivityの修正
➢ GameControllerの修正
実習確認
❖アプリケーションを実行して次のことを確認する
➢ CPU同士対戦ができる
■ CPU対戦開始ボタンをクリックするとゲームが開始する
■ 自動的に◯と ☓が入力される
➢ プレイヤーラベルが「コンピュータ1」と「コンピュータ2」になっている
実習解答
❖解答ドキュメントを確認する
11章まとめ
❖CPU同士の対戦機能を実装
➢ MainActvitiyにThreadを用意して、対戦を自動化
❖CPU vs CPU モード対応
➢ タイトル画面でCPU vs CPUモードを選択した時に、ランダムAIと対戦する機能を追加
12. マルバツゲームの作成5
Step 5. プレイアウトAI
Step 5. プレイアウトAI概要
❖マルバツゲームのAI対戦にプレイアウトAI機能を追加する
➢ Hard モード機能の追加
➢ プレイアウト結果に基づいてゲームをするAIを追加する
❖AIの機能
➢ ルールベースAIの機能を使い、次の1手が勝利または敗北にならないようにする
➢ それ以外ではプレイアウトを使って次の1手を決めるため、30回のシミュレートを行う
プレイアウト
❖プレイアウトとは
➢ ある局面を想定して、コンピュータが乱数に従い、二人の仮想プレイヤーを演じて、終局ま
で打つこと
➢ 乱数を使って多数の終局図を作り、勝敗を記録する
➢ コンピュータ囲碁プログラミングでよく使われている
➢ モンテカルロ探索を取り入れることで、精度が向上する
http://commutative.world.coocan.jp/blog/2008/07/post_798.html
乱数を使ってマルバツをする
❖乱数を使って多数の終局図(例では100戦)を作り、勝敗を記録する
◯ ☓ ◯
☓ ◯
☓
◯ ◯ ☓
☓ ◯ ◯
◯ ☓ ☓
◯ ☓
◯ ☓
◯ ☓ ◯
◯
◯
☓ ◯
☓ ◯ ◯
☓
☓ ☓ ◯
☓ ◯
◯ ◯
100戦53勝
100戦48勝
48勝 28勝 46勝
24勝 53勝 27勝
40勝 34勝 44勝
記録ある局面での次の1手目を順番に実行
結果
乱数を使ってマルバツをする
❖勝敗記録から最も勝率の高い場所を次の1手とする
48勝 28勝 46勝
24勝 53勝 27勝
40勝 34勝 44勝
次の1手
プレイアウトAIの思考ルーチン
❖思考ルーチン
➢ ルールベースAIの思考ルーチンを引き継ぐ
➢ 次の一手で勝敗が決まらないときにプレイアウトで1手を選択する
◯ ◯ ◯
☓
☓
◯ ◯ ☓
☓
◯
ここに置くと勝てる
相手の勝ちを阻止する
◯ ☓
◯ ☓ ◯
プレイアウトで選択
実習プレイアウトAIの作成
❖マルバツゲームHardモードのCPU対戦機能を追加する
➢ タイトル画面で Hard モードを選択した時に、ルールベースAIと対戦する
実習シーケンス図
❖プレイアウトAIがマークを記入するまでの流れ
実習プレイアウトAIの作成(手順)
❖手順
➢ PlayoutGameControllerの作成
➢ PlayoutAIの作成
➢ 思考ルーチンの実装
➢ GameControllerの修正
Player
AI
RolubaseAI
PlayoutAI
RandomAI
User
実習確認
❖アプリケーションを実行して次のことを確認する
➢ 3つ並べることができる場所があったときにそこに打つ
➢ 相手の勝ちを阻止する
➢ ログを確認し、上記以外の場合で最も勝ちの多い手を選択していること
実習解答
❖解答ドキュメントを確認する
12章まとめ
❖プレイアウトとは
➢ ある局面を想定して、終局まで打つことをプレイアウトという
➢ 使うのには乱数を使って次の手を決定する
❖プレイアウトAIの機能を実装
➢ プレイアウトAIは、プレイアウトを使って最善手を決定する
➢ プレイアウトの仮想プレイヤーにはランダムAIを用いる
➢ RulebaseAIクラスを継承したPlayoutAIクラスの作成
❖Hardモード対応
➢ タイトル画面でEasyモードを選択した時に、ランダムAIと対戦する機能を追加
13. まとめ
まとめ
章 タイトル
1章 人工知能とはなにか
2章 Android に学ぶ人工知能
3章 Cloud Vision を使ってみよう
4章 開発環境の構築
5章 開発ツールの使い方
6章 マルバツゲーム概要
まとめ
章 タイトル
7章 人工知能とはなにか
8章 マルバツゲームの作成 2. ランダムAI
9章 マルバツゲームの作成 3 ルールベースAI
10章 マルバツゲームの作成 4 CPU vs CPU
11章 開発ツールの使い方
12章 マルバツゲームの作成 5 プレイアウトAI
13章 まとめ
1章人工知能とはなにか
❖1章では次のことについて学びました。
➢人工知能の背景
■人工知能は既に製品化されており、ゲームや自動掃除機と言ったプロダクトが市場に出ている
■ Android搭載のスマートフォンの流布により、様々なサービスがしやすくなり、大量のデータが
ユーザーからアップロードされるようになってきた
■ これらのデータを活用して、人工知能のさらなる研究が進んでいる
➢人工知能の特性
■学習・認識・推論と言った機能を備える。(機械学習についてはスコープ外)
■ 知能や知性には明確な定義がない為、明確な説明は難しい
2章 Android に学ぶ人工知能
❖2章では次のことについて学びました。
➢ Android から利用可能な人工知能の例
■ユーザーの目的をかなえてくれるものから、ユーザーが普段何気なく行っている行動を助けてくれるものがある
■ユーザーを楽しませてくれる物と様々なものが存在している
➢ Androidの登場により、受けた恩恵
■音声キャプチャーと言ったアプリが簡単にかける様になった。
■身近なチャットアプリが頻繁に利用される様になった。
●チャットアプリから利用可能な会話ボット(人工無脳)を作るための仕組みが登場
➢チューリングテスト
■人工無能の人間らしさの判定基準
■あくまで統計的な手法に基づいたものであり、明確な判定基準としては弱い
3章 Cloud Vision を使ってみよう
❖3章では次のことについて学びました。
➢ Cloud Vision
■ Cloud Visionは、Google が提供している、画像解析エンジン
■ ブラウザや、自作のアプリケーションからAPIを通じて画像解析が可能
➢ Cloud Vision では、以下の様な解析を得ることができる
■ Properties: 色がどの程度含まれているか
■ Label: どのようなものが含まれているか
■ Safe Search: 青年的、詐欺的、暴力的、医療的かどうか
■ Text: OCRの結果
■ Face: 顔情報がどの位置に含まれているか
■ Logo: どの企業のロゴがどの位置に含まれているか
3章 Cloud Vision を使ってみよう
❖3章では次のことについて学びました。
➢ Cloud Vision
■ Cloud Visionは、Google が提供している、画像解析エンジン
■ ブラウザや、自作のアプリケーションからAPIを通じて画像解析が可能
➢ Cloud Vision では、以下の様な解析を得ることができる
■ Properties: 色がどの程度含まれているか
■ Label: どのようなものが含まれているか
■ Safe Search: 青年的、詐欺的、暴力的、医療的かどうか
➢画像フォーマット
■ ビットマップ、JPEG、PNMなどのフォーマットがある
4章開発環境の構築
❖4章では次のことについて学びました。
➢ Androidアプリケーション開発に必要なツール
■ JDK 8
■ Android Studio
■ Android SDK
■ Androidエミュレータまたは、Androidデバイス
➢ Android Studioのインストール
■ Android StudioのインストーラはAndroid Developerサイトから入手可能
■ Android Studioを使って、Android アプリケーション開発に必要なコンポーネントのインストール
ができる
5章開発ツールの使い方
❖5章では次のことについて学びました。
➢ Android Studio
■ Androidアプリケーションを開発するための統合開発環境(IDE)
■ Android Studioには便利な支援機能がある
● Androidプロジェクトの作成
● Androidアプリケーションの実行・デバッグ
● GUIを使った画面デザイン
● コードの入力支援
➢ Android Device Monitor
■ Android Studioのデバッグツール
■ モニタリング、エミュレータ操作などの機能がある
6章マルバツゲーム概要
❖6章では次のことについて学びました。
➢マルバツゲームのアルゴリズムの理解
➢ ドメインモデルの作成
➢ アプリケーションを構成する主なクラス
➢ クラス図による、各クラスの関係
➢シーケンス図
■ アプリケーション起動の流れの理解
■ゲーム中の流れの理解
クラス 説明
TitleActivity タイトル画面
MainActivity ゲーム画面
Constants 定数定義クラス
Cell ◯☓マークオブジェクト
Player プレイヤー抽象クラス
TicTacToe ゲームロジッククラス
GameController Playerの操作とゲームの監視をする
7章マルバツゲームの作成 1
❖7章では次のことについて学びました。
➢基盤作成と2P対戦機能の概要
■ タイトル画面からゲーム画面の画面遷移機能を実装
■ゲームの基盤部分となるゲームロジックを実装
➢ 2P対戦機能の実装
■ Playerクラスを継承したUserクラスを作成
■マークを記入するなどの、実際の振る舞いはAndroidを操作している人が行う
8章思考ルーチン
❖8章では次のことについて学びました。
➢ コンピュータゲームにおける人工知能について
■人工知能の技術をコンピュータゲームに応用し、NPCに知能あるいは知性を持っているように
みせる
➢ ゲームAIとはコンピューターゲームにおいて利用されるAI(人工知能)のこと
➢ 思考ルーチンは、コンピュータゲームのプログラムの一部
9章マルバツゲームの作成2
❖9章では次のことについて学びました。
➢ ランダムAIの機能を実装
■ ランダムAIは、次の手をどこに打つかをランダムに選択する
■ Playerクラスを継承したAIクラスの作成
■ AIクラスを継承した、RandomAIクラスの作成
■ RandomAIクラスにAIの思考ルーチンを実装している
➢ Easyモード対応
■ タイトル画面でEasyモードを選択した時に、ランダムAIと対戦する機能を追加
10章マルバツゲームの作成3
❖10章では次のことについて学びました。
➢ ルールベースAIの機能を実装
■ルールベースAIは、次の手をどこに打つかをゲームルールに基づいて選択
■勝敗が決まるようなときに最善手を選択するような機能をもつ
■次の一手で勝敗が決まらないようなケースでは、ランダムな一手を選択する
■ RandomAIクラスを継承した、RulebaseAIクラスの作成
➢ Normalモード対応
■ タイトル画面でNormalモードを選択した時に、ランダムAIと対戦する機能を追加
11章マルバツゲームの作成4
❖11章では次のことについて学びました。
➢ CPU同士の対戦機能を実装
■ MainActvitiyにThreadを用意して、対戦を自動化
➢ CPU vs CPU モード対応
■ タイトル画面でCPU vs CPUモードを選択した時に、ランダムAIと対戦する機能を追加
12章マルバツゲームの作成5
❖12章では次のことについて学びました。
➢ プレイアウトとは
■ある局面を想定して、終局まで打つことをプレイアウトという
■使うのには乱数を使って次の手を決定する
➢ プレイアウトAIの機能を実装
■プレイアウトAIは、プレイアウトを使って最善手を決定する
■ プレイアウトの仮想プレイヤーにはランダムAIを用いる
■ RulebaseAIクラスを継承したPlayoutAIクラスの作成
➢ Hardモード対応
■ タイトル画面でEasyモードを選択した時に、ランダムAIと対戦する機能を追加