JP6779941B2 - 格闘ゲームの学習装置および学習プログラム - Google Patents

格闘ゲームの学習装置および学習プログラム Download PDF

Info

Publication number
JP6779941B2
JP6779941B2 JP2018091401A JP2018091401A JP6779941B2 JP 6779941 B2 JP6779941 B2 JP 6779941B2 JP 2018091401 A JP2018091401 A JP 2018091401A JP 2018091401 A JP2018091401 A JP 2018091401A JP 6779941 B2 JP6779941 B2 JP 6779941B2
Authority
JP
Japan
Prior art keywords
character
learning
data
game
screen state
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2018091401A
Other languages
English (en)
Other versions
JP2019195512A (ja
Inventor
久信 泊
久信 泊
石澤 英敏
英敏 石澤
正規 辻
正規 辻
Original Assignee
株式会社Snk
株式会社Snk
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 株式会社Snk, 株式会社Snk filed Critical 株式会社Snk
Priority to JP2018091401A priority Critical patent/JP6779941B2/ja
Publication of JP2019195512A publication Critical patent/JP2019195512A/ja
Application granted granted Critical
Publication of JP6779941B2 publication Critical patent/JP6779941B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • User Interface Of Digital Computer (AREA)
  • Electrically Operated Instructional Devices (AREA)

Description

この発明は、格闘ゲームの学習装置および学習プログラムに関し、特に家庭用ゲーム機又はアーケードゲーム機若しくは通信ゲーム機のようなビデオゲーム機の格闘ゲームにおいて、プレイヤによって操作されるキャラクタの操作状態を含む履歴データを収集して画面状態データに基づいて学習する、格闘ゲームの学習装置および学習プログラムに関する。
2つのキャラクタが対戦する格闘ゲームが知られている。格闘ゲームでは、2つのキャラクタを別々のプレイヤが操作して対戦する2人プレイと、一方のキャラクタをプレイヤによる操作とし、他方のキャラクタをコンピュータによる操作とする、1人プレイ(コンピュータ対戦)の2種類の対戦の仕方(遊び方)がある。
従来の対戦格闘ゲームにおいて、プレイヤと対戦するためのキャラクタの動作をコンピュータで決定する際、その決定のための一連の条件を、プログラムによって明示的に記述していた。この方法を使って、プレイヤの位置と行動から、対戦相手として適切な行動を決定し、プレイヤがより心地よくゲームを継続できるような対戦相手を実現していた。また、ネットワークを介した他のプレイヤとの対戦は、双方のプレイヤが同時期にネットワークに接続する必要があった。
従来の格闘ゲームにおいて、プレイヤの操作に基づくキャラクタの攻撃動作に関する学習のための技術としては、特許文献1〜特許文献3が知られている。
特許文献1は、図17とその説明(段落番号[0143]〜[0156])及び段落番号[0017]に記載のように、事前にプログラムで認識するようにした操作の頻度を元にプレイデータを記録している。これを基に、図12に示すような基本思考パターンで行動種類を決定し、行動種類別の頻度に基づいて再現する行動を決定するものである。
特許文献2は、プレイヤがキャラクタを操作してゲーム中に取った行動の種類(プレイスタイル,キャラクタの行動,キャラクタの技等)ごとの頻度を計算して、図6に示すようなプレイヤパターン情報の構造に記録している(段落番号[0023]〜[0025][0028]及び[0078]を参照)。
特許文献3は、請求項3にあるように、HMM(Hidden Marcov Model;隠れマルコフモデル)の状態遷移確率を、各アクションについてのエージェント(キャラクタと同義)の状態遷移確率に拡張した拡張HMMをモデルに採用している。そして、学習部がBaum-Welchの再推定法に従い、各アクションについての状態遷移確率と観測確率とを推定することにより、拡張HMMの学習を行っている。
しかし、HMMを用いた学習は、一般的に、少ないデータから学習できる利点のある反面、長期的な時系列のデータがあっても、事前に決定した長さのデータから次の行動を決定するという欠点がある。具体的には、学習を開始する前に状態数を決定しておく必要があり、この状態数は図2のようにゲーム内容から推定できる場合以外に、どのような状態にすれば良いのかを判断することが難しい。
特開2011−156405号公報 特開2004−024360号公報 特開2013−055059号公報
従来のプログラム的に記述する技術は、対戦相手が人間の場合の行動と異なり、対戦相手の行動としては不自然な部分があった。このため、プレイヤも積極的にコンピュータの対戦相手と戦おうとすることが少なかった。また、プログラム開発のために、キャラクタの行動を決定するための条件を全て列挙する必要があり、開発に多大な時間がかかり、プログラムの誤り(バグ)も生じ易かった。
特許文献1の技術は、ゲームの局面や画面状況に応じて変化する人間の行動を再現することはできない問題点があった。
特許文献2の技術は、事前にプログラムで検出しているパターンしか記録できないことに加えて、どのようなゲーム状況の下で特定の操作を行ったかを記録することができない。そのため、ゲーム状況(又は画面状況)に関連する行動の種類に応じたゲーム画面を再現できない問題点があった。
また、特許文献3のHMMを用いた学習は、一般的に、少ないデータから学習できる利点のある反面、長期的な時系列のデータがあっても、事前に決定した長さのデータから次の行動を決定するという欠点がある。具体的には、学習を開始する前に状態数を決定しておく必要があり、この状態数は図2のようにゲーム内容から推定できる場合以外に、一般的な決定方法がないという問題点があった。
それゆえに、この発明の主たる目的は、事前に学習させた結果を使用することによって、より人間らしい行動をコンピュータ相手の対戦でも実現し得る、格闘ゲームの学習装置及び学習プログラムを提供することである。
この発明の他の目的は、プレイヤのキャラクタ操作の行動に基づいて学習することにより、キャラクタの動きを子細にプログラムで決めるためのプログラム開発に要する時間の短縮化を図れる、格闘ゲームの学習装置及び学習プログラムを提供することである。
第1の発明は、ゲームに関連する画像を表示するための表示部(液晶表示器12)に接続して使用され、第1のキャラクタと第2のキャラクタの2つのキャラクタによって対戦し、第1のキャラクタおよび第2のキャラクタの少なくとも一方がプレイヤによって操作されるキャラクタである格闘ゲームにおいて、プレイヤによって操作されるキャラクタの操作状態を学習する格闘ゲームの学習装置であって、入力操作部(20、実施例との対応を示せばコントローラ20A。以下括弧内の技術用語は同様)と、記憶部(メモリ30)と、ゲーム制御部(処理ユニット又はCPU13)と、学習制御部(CPU13)とを備える。記憶部は、複数のキャラクタの動きを制御するゲームプログラムを記憶するゲームプログラム記憶部(記憶領域31a)と、プレイヤによって操作されるキャラクタの動きの履歴を取得するために入力操作部の操作状態を深層学習し推論するための学習プログラムを記憶する学習プログラム記憶部(記憶領域32a)と、学習データを更新的に記憶する学習データ記憶部(記憶領域32b,32c)と、表示部に表示させるためのゲーム画像(又はゲーム映像)データを更新的に記憶する表示用記憶部(表示用メモリ33)とを含む。
力操作部は、プレイヤ(遊技者)によって操作され、格闘ゲームに登場する第1のキャラクタと第2のキャラクタの少なくとも一方のキャラクタの動きを指示する方向指示部(方向スイッチ22,ジョイスティック24)と当該キャラクタの動作を指示する動作指示部(押ボタン23a〜23d)を含む。
ゲーム制御部は、ゲームプログラム記憶部に記憶されているプログラムを実行して格闘ゲームに登場する複数のキャラクタの動きを制御する。学習制御部は、学習プログラム記憶部に記憶されている学習プログラムを実行する。
また、ゲーム制御部(CPU13)は、入力操作部の操作状態に応じて、少なくとも一方のキャラクタの動きを変化させて格闘ゲームに登場する複数のキャラクタの動画を生成するとともに、格闘ゲームに関連する画像(例えば、背景画像,パワー,技に関する表示,得点,ライフ等の情報)を生成して表示用記憶部に更新的に書き込み、当該表示用記憶部の画像を読出して表示部に表示させる。
学習制御部は、所定タイミング毎に入力操作部の操作に応じてキャラクタの繰り出す技に関連する操作データと画面表示に関連する画面状態データを収集して学習データ記憶部に書き込み、学習データ記憶部に記憶されている一定数のタイミングの各操作データと画面状態データを、複数層からなるリカレント・ニューラル・ネットワークを用いて深層学習の計算処理を行うことによって学習結果の重みを最適化する。
に、ゲーム制御部(CPU13)は、第1のキャラクタおよび第2のキャラクタによる後続する対戦ゲームに際して、最適化された学習結果の重みを反映させて、入力操作部による入力に基づくことなく他方のキャラクタの動きを制御する。
第1の発明によれば、事前に学習させた結果を使用することによって、より人間らしい行動をコンピュータ相手の対戦でも実現することができる、格闘ゲームの学習装置が得られる。
第2の発明は、第1の発明に係る格闘ゲームの学習装置であって、ゲーム制御部と学習制御部とが時分割的にそれぞれの処理を実行し、学習データ記憶部が所定タイミング毎に送られてくる操作データと画面状態データを先入れ先出し態様で記憶する画面状態履歴記憶部を含む。そして、学習制御部は、ゲーム制御部がゲーム処理の実行期間中でないときに、画面状態履歴記憶部に記憶されている一定数のタイミングの各操作データと画面状態データを、先行する各タイミングにおける操作データと画面状態データの単位で深層学習の計算処理を順次実行する。
第2の発明によれば、ゲーム制御部と学習制御部とが時分割的にそれぞれの処理を実行できる。
第3の発明は、第1の発明に係る格闘ゲームの学習装置おいて、格闘ゲームが第1のキャラクタおよび第2のキャラクタの何れか一方のキャラクタがプレイヤによって操作され、かつ他方のキャラクタがプレイヤによる入力操作部の操作とは独立して動作するものである。
そして、ゲーム制御部は、入力操作部によって入力された操作データを第1のキャラクタの繰り出す技に関するキーデータとして、学習制御部へ送る。学習制御部は、深層学習の計算処理によって学習結果の重みを反映したキーデータを求め、後続する対戦ゲームに際して学習結果の重みを反映したキーデータを前記ゲーム制御部へ送る。ゲーム制御部は、後続する対戦ゲームに際して学習結果の重みを反映したキーデータに基づいて、ゲームプログラムを実行して他方のキャラクタの動きを制御する。
この第3の発明によれば、学習結果をゲームに反映することができ、他方のキャラクタを制御するためのプログラム開発を簡略化でき、プログラム開発時間の短縮化とプログラマの労力の軽減を図ることができる。
第4の発明は、第1の発明に係る格闘ゲームの学習装置において、学習データ記憶部が画面状態データの履歴を一時的に記憶する画面状態履歴データ記憶部と、深層学習の処理として最適化した複数の層別の重みを記憶する層別の重み記憶部とを含む。
制御部は、収集した画面状態データを画面状態履歴データ記憶部に書き込むとともに、画面状態履歴データ記憶部に記憶されている各画面状態データと第1の層の入力として、複数の層においてそれぞれの入力と対応する重みを乗算して、層別の出力を計算し、次の層の入力とする処理を逐次的に行い、最終層の出力としてキーデータを算出し、画面状態履歴データ記憶部のキーデータとの差分を用いることにより層別の重みを最適化して層別の重み記憶部に記憶を更新させる学習制御部を含む。
この第4の発明によれば、層別の重みデータを算出することによって、より一層人間らしい行動をコンピュータ相手の対戦でも実現することができる。
第5の発明は、第4の発明に係る格闘ゲームの学習装置において、学習制御部は、現在の画面状態とその時点で最新の重みとを掛け合わせてプレイヤが押していたであろうキーを導き出すための推論処理部と、現在の画面状態とプレイヤが実際に押したキーを深層学習の重みに反映するための学習処理部を含む。
推論処理部は、収集した画面状態データを画面状態履歴データ記憶部に書き込むとともに、画面状態履歴データ記憶部に記憶されている各画面状態データを第1層の入力として、それぞれの層において重みと乗算して、層別の出力を算出する。この出力を次の層の入力として、それぞれの層の出力を逐次的に出力し、最終層の出力が全体の出力であるキーデータとなる。
学習処理部は、推論処理部によって算出された層別のキーデータと、現在の画面状態の時点に対応するキーデータに基づいて深層学習の重みを最適化する。
この第5の発明によれば、推論処理部と学習処理部によって、操作データ(又はキーデータ)に基づいて深層学習の重みを最適化し、人間が画面状態に応じて入力したキーデータの性質を反映したキーデータを計算することができる。
第6の発明は、第1の発明ないし第5の発明の何れかに係る格闘ゲームの学習装置において、学習制御部が深層学習の処理として、少なくとも1つの全対全結合層による計算処理と、複数のゲーテッド・リカレント・ユニット(GRU)層による計算処理を実行するものである。
全対全結合層による計算処理では、重み行列を入力のベクトルと乗算する処理を実行する。各ゲーテッド・リカレント・ユニット層による計算処理では、複数のゲーテッド・リカレント・ユニット層のそれぞれにおいて、重みを使って忘れる量を計算し、重みを使って反映量を計算し、出力候補を計算する処理を順次行うことを特徴とする。
第6の発明によれば、少なくとも1つの全対全結合層と複数のゲーテッド・リカレント・ユニット層による計算処理を実行することによって、出力候補を計算することにより、より人間らしい行動をコンピュータ相手の対戦でも実現することができる。
第7の発明は、第6の発明に係る格闘ゲームの学習装置において、学習制御部が各ゲーテッド・リカレント・ユニット層による計算処理として、出力候補の計算後に、選択的にドロップアウト処理をして出力する。
第7の発明によれば、選択的にドロップアウト処理をすることにより、より人間らしい行動をコンピュータ相手の対戦でも実現することができる。
第8の発明は、第2の発明に係る格闘ゲームの学習装置において、ゲーム制御部は、ゲープログラムの実行に関連して、入力操作部の操作に応じたキーデータを画面状態履歴記憶部に先入れ先出し態様で記憶させるとともに、学習によって最適化した層別の重みを学習データ記憶部(又は層別の重み記憶部)に記憶させる。
第8の発明によれば、相手が早い動きを繰り返しているなら行動を変えるといった、時系列での状況変化に応じた意思決定を深層学習に反映することができる。
第9の発明は、第1の発明ないし第5の発明のいずれかに係る格闘ゲームの学習装置において、学習データ記憶部が操作データと画面表示に関連する画面状態データを記憶する画面状態データ記憶部と、深層学習後の各層の重みを記憶する複数層分の重み記憶部とを含む。
学習制御部は、ゲームプレイ中のキーデータと画面表示に関連する画面状態データを先入れ先出し態様で画面状態データ記憶部に記憶させるとともに、深層学習後の各層の重みを対応する層別の前記重み記憶部に記憶させる。
第9の発明によれば、相手の時系列での行動変化だけでなく、自分が同じ攻撃を繰り返したら、次は同じ攻撃を繰り返さないといった、自分の履歴に応じた意思決定を学習結果に反映することができる。
第10の発明は、第1の発明ないし第9の発明のいずれかに係る格闘ゲームの学習装置において、格闘ゲームが第1のキャラクタと第2のキャラクタの2つのキャラクタによって対戦するものであって、第1のキャラクタおよび第2のキャラクタの少なくとも一方がプレイヤによって操作されるキャラクタである。そして、画面状態データは、少なくとも2つのキャラクタの位置データを含むデータである。
第10の発明によれば、少なくとも2つのキャラクタの位置データを含む画面状態データを用いて、深層学習の重みを反映したキーデータを計算することができる。
第11の発明は、第1の発明ないし第9の発明のいずれかに係る格闘ゲームの学習装置において、格闘ゲームが第1のキャラクタと第2のキャラクタの2つのキャラクタによって対戦するものであって、第1のキャラクタおよび第2のキャラクタの少なくとも一方がプレイヤによって操作されるキャラクタである。画面状態データは、少なくとも、2つのキャラクタの場所に関する場所データと、2つのキャラクタの表示に関するキャラクタ表示関連データとを含む。
第11の発明によれば、画面状態データとして、少なくとも、2つのキャラクタの場所に関する場所データと、2つのキャラクタの表示に関するキャラクタ表示関連データとを用いて、深層学習の重みを反映したキーデータを計算することができる。
第12の発明は、第11の発明に係る格闘ゲームの学習装置において、画面状態データは、2つのキャラクタの動きに関する速度データをさらに含む。
第12の発明によれば、画面状態データとして、少なくとも、2つのキャラクタの場所に関する場所データおよび2つのキャラクタの表示に関するキャラクタ表示関連データに加えて、さらに2つのキャラクタの動きに関する速度データを用いて、深層学習の重みを反映したキーデータを計算することができる。
第13の発明は、ゲームに関連する画像を表示するための表示部に接続して使用され、プレイヤ(遊技者)によって操作され、格闘ゲームに登場する第1のキャラクタと第2のキャラクタの一方のキャラクタの動きを指示するための方向指示部(実施例との対応関係を示せば、方向スイッチ22又はジョイスティック24)および当該キャラクタの動作を指示するための動作指示部(押ボタン23a〜23d)を含む入力操作部(20,20A)と、ゲームに関連する画像を表示するための表示部(12)と、各種プログラムおよびデータを記憶するための記憶部(30)と、コンピュータ(13)とを備えた格闘ゲーム装置(10)において、第1のキャラクタと第2のキャラクタの2つのキャラクタによって対戦し、第1のキャラクタおよび第2のキャラクタの少なくとも一方がプレイヤによって操作される格闘ゲームであって、コンピュータによって格闘ゲームを実行させる際に、プレイヤによって操作されるキャラクタの操作状態を学習するための学習プログラムである。
すなわち、コンピュータを、ゲーム制御部と学習制御部として機能させる格闘ゲームの学習プログラムである。
ゲーム制御部は、入力操作部による操作と記憶部に記憶されているゲームプログラムに基づいて、格闘ゲームに登場する複数のキャラクタの動きを制御して複数のキャラクタの動画を生成するとともに、格闘ゲームに関連する画像(例えば、背景画像や、パワー,技に関する表示,得点,ライフ等の情報)を生成して、当該複数のキャラクタの動画と当該格闘ゲームに関連する画像を表示部に表示させる
学習制御部は、プレイヤによって操作される所定タイミング毎の入力操作部の操作状態に応じてキャラクタの繰り出す技に関連する操作データと画面表示に関連する画面状態データを収集して、当該操作データと画面状態データに基づいて深層学習の計算処理を行うことによって学習結果に関する重みを最適化して記憶部に記憶させる。
た、ゲーム制御部は、第1のキャラクタおよび第2のキャラクタによる後続する対戦ゲームに際して、最適化した学習結果の重みを反映させて、入力操作部による入力に基づくことなく他方のキャラクタの動きを制御する。
第13の発明によれば、事前に学習させた結果を使用することによって、より人間らしい行動(すなわち、プレイヤの操作状態に似た動きをするキャラクタの行動)をコンピュータ相手の対戦でも実現することのできる、学習プログラムが得られる。
第14の発明は、第13の発明に係る格闘ゲームの学習プログラムであって、記憶部が画面状態データを一時的に記憶する画面状態データ記憶部と、深層学習の処理として複数の層別の重みの計算結果を記憶する層別の重み記憶部とを含む。
そして、コンピュータを、画面状態データ記憶部に記憶されている画面状態データを第1層の入力として、それぞれの層において入力と重みとを乗算して層別の出力を計算し、その出力を次の層の入力とする計算を逐次的に各層に対して行うことで、最終層の出力としてキーデータを算出し、そのキーデータと画面状態データ記憶部に記憶されているキーデータとの差分を用いて層別の重み記憶部に記憶を更新させる学習制御部として機能させる。
第14の発明によれば、請求項13と同様の効果が奏される。
第15の発明は、第13の発明に係る格闘ゲームの学習プログラムであって、
記憶部が画面状態データの履歴を一時的に記憶する画面状態履歴データ記憶部と、深層学習の処理として最適化した複数の層別の重みを記憶する層別の重み記憶部とを含む。
そして、コンピュータを、画面状態履歴データ記憶部に記憶されている各画面状態データを第一層の入力として、複数の層においてそれぞれの入力に対応する重みを乗算して、層毎の出力を計算し、その出力を次の層の入力として計算する処理を逐次的に行い、最終層の出力として得たキーデータと実際に押されていたキーの差分を用いて、層別の重みを最適化して層別の重み記憶部に記憶させる学習制御部として機能させる。
この第15の発明によれば、層別の重みデータを算出することによって、より一層人間らしい行動をコンピュータ相手の対戦でも実現することができる、学習プログラムが得られる。
この発明の格闘ゲームの学習装置によれば、事前に学習させた結果を使用することによって、より人間らしい行動をコンピュータ相手の対戦でも実現することができるという、特有の効果が奏される。
また、この発明によれば、プレイヤのキャラクタ操作の行動に基づいて学習することにより、キャラクタの動きを子細にプログラムで決めるためのプログラム開発に要する時間の短縮化を図ることができるという効果が奏される。
この発明の一実施例の格闘ゲーム装置のブロック図である。 格闘ゲーム装置に用いられる入力操作部の一例のコントローラの外観図である。 メモリの記憶領域(メモリマップ)の一例の図解図である。 格闘ゲームの画面の表示例を示す図である。 格闘ゲームに登場するあるキャラクタの技の種類と操作方法を図解的に示した図である。 技の他の例の「天地返し」の操作例とキャラクタの動きの表示例を示す図である。 技のその他の例の「超受け身」の操作例とキャラクタの動きの表示例を示す図である。 深層学習のためにデータ収集する際の履歴データの項目(種類)の詳細を図解的に示した図である。 この発明の一実施例の格闘ゲームの全体の制御(メインスレッドと学習・推論スレッド)を示すフローチャートである。 メインスレッドと学習スレッドのやりとりのタイムチャートを示す。 プレイヤの操作状態を学習するときのメインスレッドから学習スレッドへ送るデータを図解的に示した図である。 学習結果を利用してキャラクタを動かすときのメインスレッドと学習・推論スレッド間のやり取りするデータを図解的に示した図である。 学習・推論スレッドの動作原理を説明するための図解図である。 学習・推論スレッド中の「各層の重みデータを使って出力を計算する処理」の一例であって、データの流れから見たブロック図である。 全体フローにおける学習・推論スレッド中の「各層の重みデータを使って出力を計算する処理」の他の例のフローチャートである。 学習・推論スレッドにおける「各層の重みデータを使って出力を計算する処理」中の「全対全結合の処理」の一例の回路図である。 学習・推論スレッドにおける「各層の重みデータを使って出力を計算する処理」中の「全対全結合の処理」の他の例のフローチャートである。 学習・推論スレッドにおける「各層の重みデータを使って出力を計算する処理」中の「GRUのある一層の処理」の一例の回路図である。 学習・推論スレッドにおける「各層の重みデータを使って出力を計算する処理」中の「GRUのある一層の処理」の他の例のフローチャートである。 学習・推論スレッドにおける「重み更新処理」の詳細なフローチャートである。
以下、この発明の一側面における実施の形態に基づいて説明する。但し、この発明の範囲を逸脱することなく、種々の改良や変形を行うことができることは言うまでもない。すなわち、この発明の実施にあたって、実施形態に応じた具体的構成を適宜採用してもよい。
図1は、この発明の一実施例の格闘ゲーム装置のブロック図である。
図1を参照して、この発明の一実施例の格闘ゲーム装置として用いられる情報処理装置の外観構成と、システム構成を説明する。
この実施例の格闘ゲーム装置10は、家庭用テレビゲーム機,パーソナルコンピュータ(以下「パソコン」と略称)又は携帯ゲーム機情報通信端末機若しくはアーケードゲーム機(業務用ビデオゲーム機)等の情報処理装置と、格闘ゲームのための各種プログラムを含んで構成される。
より具体的には、格闘ゲーム装置10は、ゲーム機本体(図示では、外観図を省略し一点鎖線のブロックで示す)11に、中央処理ユニット(CPU)13と、ハードディスク(HDD)14と、通信制御部15と、半導体メモリ等の記憶装置(又はメモリ)30を内蔵して構成される。
ゲーム機本体11には、入力操作部(家庭用テレビゲーム機の場合はコントローラ)20が接続されるとともに、家庭用テレビ受像機等の液晶表示器(表示部)12が接続される。
そして、中央処理ユニット(以下「CPU」と略称する)13には、データバス16a,16b,16c,16d,16eを介して、対応する液晶表示器12,メモリ30,入力操作部20の一例のコントローラ20A,ハードディスク14,通信制御部15が接続される。
通信制御部15は、外部のネットワーク網17に接続され、CPU13から供給される送信データを並列−直列変換しかつ宛先データを付加してネットワーク網17へ送信するとともに、ネットワーク網17から送信された受信データを直列−並列変換してCPU13に与える。
図2は、格闘ゲーム装置に用いられる入力操作部の一例のコントローラの外観図である。
コントローラ20Aは、ハウジング21を含む。ハウジング21は、上面が平坦な中央部21aの左右に、グリップ状の左把持部21bと右把持部21cを形成して構成される。
中央部21aと左把持部21bの連結部分には、4つの押点を有する十字型の方向スイッチ22が装着される。中央部21aと右把持部21cの連結部分には、4つの押ボタン23a〜23dが十字形(上下左右の4方向)に配置して装着される。
また、必要に応じて、中央部21aと左把持部21bの連結部分の基部(方向スイッチ22の斜め右下方)には、アナログジョイスティック(以下「ジョイスティック」と略称する)24が傾動自在に装着される。中央部21aと右把持部21cの連結部分の基部(押ボタン23c,23dの斜め左下方)には、ジョイスティック25が傾動自在に支持される。
方向スイッチ22,ジョイスティック24及びジョイスティック25は、キャラクタの移動方向の指示、又は技の種類を指定するための操作に用いられる。具体的には、方向スイッチ22は、上下左右の4方向に押点を有し、上下左右の何れかの押点を押すことによって、上下左右の何れかの方向を指示するための入力を行うものである。また、ジョイスティック24及びジョイスティック25は、上下左右の4方向と、4方向の中間となる右斜め上(又は右上),右斜め下(又は右下),左斜め下(又は左下),左斜め上(又は左上)の4方向を加えた8方向の入力が可能である。
なお、方向スイッチ22を用いて8方向を指示する場合は、上と右の押点を同時に押して「右斜め上」、右と下の押点を同時に押して「右斜め下」、下と左の押点を同時に押して「左斜め下」、左と上の押点を同時に押して「左斜め上」のそれぞれの入力(斜め4方向)を指示することもできる。
一方、押ボタン23a〜23dは、その上面にアルファベットのABCD又は△〇×□等の記号が付されて、ゲームにおけるキャラクタの動作(動き又は行動)を指示するために用いられる。例えば、この実施例の格闘ゲームでは、押ボタン23a〜23dには、弱パンチ,強パンチ,弱キック,強キックの機能が割り当てられる。
ゲームプレイする場合、プレイヤは、左手で左把持部21bを握りかつ右手で右把持部21cを握った状態で、左手親指で方向スイッチ22又はジョイスティック24を操作し、右手親指で押しボタン23a〜23d又はジョイスティック25を操作する。
本願の格闘ゲームでは、方向スイッチ22又はジョイスティック24を何れかの同じ方向に連続して押し続けたときにキャラクタの移動方向を指示する。一方、方向スイッチ22又はジョイスティック24を複数の方向に素早く傾動させた(例えば、右横,右斜め下,下等を組み合わせて入力した)後で押ボタン23a〜23dの1つ又は複数を押したときは、技の種類を指定する入力を行うものである。
他にも、中央部21aの上面の空いたスペース又は上辺の左右の側面に、各種のスイッチ又はボタンが装着されるが、本願の格闘ゲームでは密接な関係が無いため、詳細な説明を省略する。
なお、情報端末装置が携帯ゲーム機又はスマートフォンの場合はコントローラ20Aに代えて入力操作部の他の例としてタッチパネルが用いられ、パソコンの場合はキーボードとマウスが用いられ、業務用ビデオゲーム機の場合はジョイスティックと押ボタンが用いられる。
図3は、メモリ30の記憶領域(メモリマップ)の一例の図解図である。
メモリ(記憶部)30は、ゲーム制御のプログラムおよびデータを記憶するゲーム制御プログラム用メモリ31と、学習・推論プログラム用メモリ32と、表示用データを記憶する表示用メモリ33を含む。
ゲーム制御プログラム用メモリ31は、記憶領域31a〜31eを含む。
記憶領域31aは、ゲーム制御のためのプロクラムを記憶するゲーム制御プログラム記憶領域であって、図9のメインスレッドの制御を行うためのプログラムを記憶する。
記憶領域31bは、キャラクタ別コマンドテーブル(又はコマンド表)を記憶するものであり、例えば複数(又は多数)のキャラクタ別に、技(わざ)の種類と、各技の種類別のキーシーケンス(後述の図5参照)等を記憶する。
記憶領域31cは、キャラクタ毎に当該キャラクタを描画するためのデータを記憶するキャラクタ描画データ記憶領域である。また、記憶領域31cは、各技を表示するための複数の変化点における画像を表示するための骨格に対応する頂点座標等を記憶する。例えば、各キャラクタをポリゴンで表示する場合はポリゴンの動きを制御するプログラムと、各ポリゴンに張り付けるテクスチャデータを記憶する。また、キャラクタのビットマップ画像でもよい。
記憶領域31dは、キー入力履歴データを記憶するキー入力履歴データ記憶領域であり、自分(プレイヤ)が操作するキャラクタの操作データと、対戦相手のプレイヤ(又はコンピュータ)が操作するキャラクタの操作データをセットで記憶するものである。この記憶領域31dは、一定の記憶容量を有していて、先入れ先出し方式でキー入力履歴を記憶するものである。そのため、一定容量を超えるキー入力履歴が蓄積されると、最も古い履歴データを消去して新しい履歴データを記憶することになる。
記憶領域31eは、画面状態データを記憶する画面状態データ記憶領域であり、対戦中の画面状態として、対戦する2つのキャラクタ(第1のキャラクタと第2のキャラクタ)別に、各キャラクタの場所に関するデータ(例えば、位置又は座標データ,向きデータ,残りライフデータ等)、各キャラクタの動画表示に関するデータ(例えば、アクション番号,アクションフレーム,キャラクタID等)、各キャラクタの動きに関するデータ(例えば、移動速度や移動加速度等)を記憶するとともに、その時点において操作されているキーデータを記憶する。この記憶領域31eは、比較的短い時間分の記憶容量(例えば1フレーム又は1画面分)を有していて、画面状態データ(図8の17項目の履歴データ)を記憶する。
学習・推論プログラム用メモリ32は、記憶領域32a〜32dを含む。
記憶領域32aは、学習・推論の制御のためのプロクラムを記憶する学習・推論制御プログラム記憶領域であって、図9の学習・推論スレッドの制御を行うためのプログラムを記憶する。この記憶領域32aも、記憶媒体の種類としては記憶領域31aと同様のものが用いられる。
記憶領域32bは、画面状態履歴データを記憶する画面状態履歴バッファメモリ(又は記憶領域)であり、対戦中の2つのキャラクタ(第1のキャラクタと第2のキャラクタ)別の画面状態(例えば、キャラクタ別の場所に関するデータと、各キャラクタの動画表示に関するデータと、各キャラクタの動きに関するデータ等の図9の17項目)を記憶する。この記憶領域32bは、記憶するデータ項目が記憶領域31eと同様であるが、記憶容量が記憶領域31eよりも大きな一定の記憶容量を有する。この記憶領域32bは、1ラウンドの履歴データを記憶するのに十分な比較的長い時間(例えば90秒程度)分の記憶容量を有していて、先入れ先出し方式で画面状態データを記憶する。そのため、一定容量を超える画面状態履歴が蓄積されると、最も古い履歴データを消去して新しい履歴データを記憶することになる。
このように、画面状態のデータを、メモリ31の記憶領域31eとメモリ32の記憶領域32bの二重で(又は別々に)記憶するのは、次の理由による。すなわち、記憶領域31eは、ゲームプレイ中の画面状態であって、格闘ゲームの制御に用いるための現時点(又は最新)の1画面分の履歴データを記憶するのに対して、記憶領域32bは人間(プレイヤ)がゲーム操作する際の判断の対象となる状態が見た目で(視覚的に認識される)画面状態であるので、その画面状態の変化の流れを累積的に履歴データとして記憶して、学習計算に利用するのに十分な時間分の画面状態履歴データを記憶するためである。
記憶領域32cは、対戦する2体のキャラクタ別であって、深層学習(「ニューラルネット」ともいう)の計算処理によって得られた深層学習の各層(又は多層)の重みデータを記憶する記憶領域であり、深層学習の層毎の記憶領域を有するものである。
なお、ゲーム制御プログラム用メモリ31の記憶領域31b,31c,31dおよび学習・推論制御プログラム用メモリ32の記憶領域32bに記憶される各種プログラム又はデータは、ゲーム機本体11が家庭用ゲーム機であれば、ゲーム制御および学習・推論のためのプログラムや画像データを外部の不揮発性記憶媒体として、CD−ROM又はDVD等のディスク状記録媒体に格納しておき、ゲームプレイの開始に先立って、ゲーム機本体11の半導体メモリ(例えばRAM)に読み込んで使用するようにしてもよい。その場合は、ゲーム機本体11内には、DVD等を光学的に読み取る光学式読取機が内蔵される。
表示用メモリ33は、液晶表示器12の1画面(1フレーム)分の各画素に対応する表示画像を少なくとも2画面分だけ一時記憶する記憶領域(又は記憶容量)を有する。そして、表示用メモリ33は、液晶表示器12の表示サイクルに同期して一方の記憶領域に書き込まれた画像データ(ビットマップデータ)を読み出し、次のフレームに表示すべき画像データを他方の記憶領域に書き込み、これをフレーム毎に交互に読み出しと書き込みを繰り返すものである。表示用メモリ33から読み出された画像データは、液晶表示器12に与えられて、表示される。
図4は、格闘ゲームの画面の表示例を示す図である。
格闘ゲームの表示画面40は、画面の縦方向の中央から広範囲に亘る領域が対戦画像表示領域(又はステージ)41であり、対戦画像表示領域41の上部の帯状の領域がキャラクタ別情報表示領域42となる。対戦画像表示領域41には、プレイヤの操作する第1のキャラクタ(自キャラクタ;以下「キャラクタ1」ということもある)43と、対戦相手(2人プレイの場合は相手、1人プレイの場合はコンピュータ)の操作する第2のキャラクタ(敵キャラクタ;以下「キャラクタ2」ということもある)44とが向かい合った状態で大きく表示される。
キャラクタ別情報表示領域42は、左右に分割されて、左側がプレイヤの操作するキャラクタ(自キャラクタ)用、右側が対戦相手のプレイヤの操作するキャラクタ(敵キャラクタ)用となる。キャラクタ別情報表示領域42には、各キャラクタの顔画像が左右に表示されるとともに、各キャラクタの顔画像に対応して対戦時に参照する情報(例えば、キャラクタの名前又はキャラクタID,残りライフ)がそれぞれ表示される。
なお、キャラクタ1とキャラクタ2の対戦時の表示位置は、自キャラクタと敵キャラクタを左右で逆にして、右をキャラクタ1、左をキャラクタ2としてもよい。
対戦画像表示領域41に表示される自キャラクタ43および敵キャラクタ44は、ステージ上の位置(座標情報),向き,アクション番号,アクションフレーム,移動速度と加速度の各情報をそれぞれ保有している。各キャラクタ43,44は、向きの情報と移動速度によって、移動する方向と速度が決められ、加速度によってジャンプの高さ又は飛ぶ距離が決まる。
例えば、自キャラクタ43は、ジョイスティック24(又は方向スイッチ22)が連続して右に傾動されると右へ移動し、ジョイスティック24(又は方向スイッチ22)が連続して左に傾動されると左へ移動し、ジョイスティック24(又は方向スイッチ22)が連続して上に傾動されるとジャンプし、ジョイスティック24(又は方向スイッチ22)が連続して下に傾動されるとしゃがみ込むような動き又は行動を行う。また、自キャラクタ43は、ジョイスティック24(又は方向スイッチ22)を下に傾動させた後、素早く上に傾動されると、ハイジャンプする。
図5は、格闘ゲームに登場するあるキャラクタ(図示の例では「大門」)の技の種類と操作方法を図解的に示した図である。
このキャラクタ別の技の種類と操作方法は、キャラクタ毎のコマンドテーブルとして、記憶領域31bに記憶されている。
コマンドテーブルには、キャラクタ毎に、技区分、技名称、各技の操作方法のデータが予め登録されている。例えば、図5の例では、キャラクタの名前が「大門」といい、技区分(又は技の分類)として、「通常投げ」,「特殊技」,「必殺技」,「超必殺技」,「MAX超必殺技」を使うことができる。技区分に対応して、複数の技があり、それぞれの技に名称(例えば、「つかみ叩きつけ」,「頭上払い」,「天地返し」,「切り株返し」・・・等)が付けられている。
各技に対応して、操作方法として、キー入力の操作手順が登録されている。例えば、図5の操作方法の記載例では、「頭上払い」という技を出す場合は、方向スイッチ22又はジョイスティック24を瞬時に右斜め下に傾けた後、押ボタン23cを押圧する。
また、「天地返し」という技を出す場合は、ジョイスティック24(又は方向スイッチ22)を瞬時に右に傾けて、右斜め下,下,左斜め下,左,右に順次傾けた後、押ボタン23a又は23cを押圧する。この場合、ジョイスティック24の操作は、右に傾けた位置から右斜め下を介して左まで時計回りに180度回転させた後で、右に傾動するように、極短時間に連続的に操作することになる。このジョイスティック24の複数の方向への瞬間的かつ連続的な傾動操作と押ボタン23a〜23dの1つまたは複数の押圧操作の流れが、技を入力するためのキーシーケンスとなる。
一方、ジョイスティック24のある1方向の傾き又は押ボタン23a〜23dの何れか1つの押圧によるキー操作は、1つのキーコードとして入力されることになる。
その他の技の種類の名称に対応する操作方法は、図5のコマンドテーブルに示すように、ジョイスティック24の傾き方向(矢印の記号の向き)と押ボタン23a〜23dの組み合わせ操作のとおりである。そして、コマンドテーブルは、図5の図示の例に限らず、他のキャラクタ別のテーブルを予め登録するものである。
次に、本出願人の格闘ゲームにおける代表的な技の種類について、操作例とキャラクタの動きの表示例を具体的に説明する。
図6は技の一例の「天地返し」の操作例とキャラクタの動きの表示例を示す図である。
技「天地返し」は、ジョイスティック24(又は方向スイッチ22)を瞬時に右に傾けて、下回り(時計方向)に半回転させた後で右に倒した後、押ボタン23a又は23cを押す操作によって、入力する。
この場合のキャラクタの動き又は行動の画像表現は、足を開きかつ両腕を構えて立ち、上半身を前に倒してから起き上がる際に、柔道の背負い投げのように投げた後に、立ったままで相手に向かい合って構えた態勢を取るような、一連の攻撃による演出表現である。
図6の技の例では、「天地返し」という技が5つのアクションフレーム1〜5で表現され、5段階のアクションフレームの全体で1つのアクションを特定するためのアクション番号が付される。
図7は技のその他の例の「超受け身(強)」の操作例とキャラクタの動きの表示例を示す図である。
技「超受け身(強)」は、ジョイスティック24(又は方向スイッチ22)を瞬時に下に傾けて、時計方向に1/4回転させた後で右に倒した後、押ボタン23dを押す操作によって入力する。
この場合のキャラクタの動き又は行動の画像表現は、前後に足を開いて上半身を少し前に倒して、前下方向に倒れ込み、半回転して受け身の姿勢を取ってから起き上がって、立ったままで相手に向かい合って構えた態勢を取るような、一連の攻撃による演出表現である。
図7の技の例では、「超受け身(強)天地返し」という技が4つのアクションフレーム1〜4で表現され、4段階のアクションフレームの全体で1つのアクションを特定するためのアクション番号が付される。
ところで、上述のような各種の技の動画による画像表現は、キャラクタの動きの大きな変換点となる複数のポイントの骨格データをキャラクタ別かつ技別に記憶領域31cに予め登録しておき、各変換点の間の画像を補完処理することによって、滑らかな動きのある技を見せるように演出表現している。
図8は、深層学習のためにデータ収集する際の履歴データの項目(種類)の詳細を図解的に示した図である。
履歴データは、自分(プレイヤ自身)の操作する第1のキャラクタの履歴データと、対戦相手である第2のキャラクタの履歴データに大別(大分類)される。
自分(プレイヤ自身)の履歴データ(小分類)としては、場所に関係するデータ、キャラクタの表示に関するデータ、キャラクタの動きに関するデータ、およびキー操作に関するデータがある。
場所に関係するデータには、例えば「ステージ上の座標位置(X座標とY座標)」「キャラクタの向き(左向き又は右向き)」「残りライフ」等がある。
「ステージ上の座標位置」と「キャラクタの向き」は、対戦相手との間合いと向きを知ることにより、技の有効性(効き具合い)を判断する情報として利用される。より具体的には、ステージ上での「位置」情報は、相手との間合いを認識し、距離によって当たる攻撃と当たらない攻撃があるのを判断するのに用いる。「向き」は、相手キャラクタが右側にいるか左側にいるかによって、近寄りたいときや遠ざかりたいときに押す方向のキーが逆になるため、判断の結果、意図通りにキャラクタを動かすために用いる。「残りライフ」は、次に攻撃を受けると負ける等の状況によって、自キャラクタの取るべき行動が変化するので、これを認識できるようにするために用いる。
キャラクタの表示に関するデータには、対戦している2つのキャラクタ別の技の種類を指定するための「アクション番号」、「アクションフレーム」、「キャラクタコード(ID)」等がある。「アクション番号」は、キャラクタの動き又は行動に対応して振られた番号で、例えば倒れる動き,斬りかかる動き,蹴る動き等の番号である。「アクションフレーム」は、アクション番号に対応する動き(行動)の動き始めから終わりまでのどの段階かを示すものであり、例えば図6及び/又は図7における技のどの変化点のアクションかを示すものである。「キャラクタID」は、ゲームで遊ぶ際に選べる複数のキャラクタのうち、プレイヤがどのキャラクタを操作しているかを示すコードである。
「アクション番号」および「アクションフレーム」は、画面上でキャラクタがどのように表示されているかを認識するのに用いる。「キャラクタID」は、キャラクタ毎にコマンドが異なり、取れる行動も異なるので、自分・相手のキャラクタの組み合わせに対応した適切な行動を判断できるようにするために用いる。
動きに関するデータには、移動速度と移動加速度等がある。これらの速度データは、X座標とY座標のそれぞれのデータを含む。「移動速度」と「移動加速度」は、相手が近づいてきている場合又は近づき終わった場合等によって、特別な判断が必要なときに参照できるようにするために用いる。
キー操作に関するデータには、押し込まれているキーを表すキーデータがある。キーデータの詳細については、図11を参照して後述する。
対戦相手(相手)の履歴データは、自分の履歴データのうちで、キー操作に関するデータを除くデータ、すなわち場所に関係するデータとキャラクタの表示に関するデータと、動きに関するデータである。
この履歴データは、CPUの動作サイクルのうちの所定時間(例えば液晶表示器12の1フレーム期間に相当する60分の1秒)毎に取得されて、記憶領域(又は画面状態履歴バッファ)32bに先入れ先出し方式で書き込み及び読み出しが行われることになる。
図9は、この発明の一実施例の格闘ゲームの全体の制御(メインスレッドと学習・推論スレッド)を示すフローチャートである。
この実施例の格闘ゲームの全体の制御としては、格闘ゲームをプレイするためのメイン(又はゲーム)スレッドと、深層学習するための学習・推論スレッドがある。
メインスレッドは、状態計算処理と描画処理(S6〜S9の処理)とに大別され、状態計算処理と描画処理を交互に実行するものである。状態計算処理は、キャラクタ1の状態計算処理(S1a〜S5a又はS1a,S11a,S12a,S3a〜S5aの処理)と、キャラクタ2の状態計算処理(S1b〜S5b又はS1b,S11b,S12b,S3b〜S5bの処理)とを含む。なお、キャラクタ1の状態計算処理とキャラクタ2の状態計算処理は、機能的に同じものであるので、同じステップ番号で示し、キャラクタ1用の処理とキャラクタ2用の処理を区別するために、ステップ番号の末尾にキャラクタ1用に「a」、キャラクタ2用に「b」を付けて示す。
また、メインスレッドでは、液晶表示器12の1フレーム期間に相当する1/60秒毎に、状態計算処理(キャラクタ1,2)と描画処理を順次実行する。
これらのキャラクタ1,2の状態計算処理と描画処理のプログラムが、CPU13をゲーム制御部として機能させる。換言すると、これらの状態計算処理と描画処理のプログラムとCPU13によって、ゲーム制御部が構成される。
学習・推論スレッドでは、メインスレッドから送られてくる画面状態データ及び/又はコントローラ20Aのキーデータに基づいて、キャラクタ1用の処理(S21a〜S25a)又はキャラクタ2用の処理(S21b〜S25b)を行うことにより、キャラクタ1とキャラクタ2の別に学習・推論のための処理を実行する。なお、学習・推論スレッドの処理も、キャラクタ1の処理とキャラクタ2の処理が同じものであるので、同じステップ番号の末尾にキャラクタ1用に「a」、キャラクタ2用に「b」を付けて示す。
この学習・推論スレッドの処理は、メインスレッドの状態計算処理と描画処理を行ってないときに、時分割的に実行される。この学習・推論スレッドのプログラムがCPU13を学習制御部として機能させる。換言すると、これらの学習・推論スレッドのプログラムとCPU13によって、学習制御部が構成される。
ここで、「学習」とは、プレイヤが実際に押したキーと現在の画面状態とを、深層学習の重みに反映する操作をいう。「推論」とは、現在の画面情報を、取得済みの重みと掛け合わせて、現時点の画面状態を見ているプレイヤ(人間)が押したであろうキーを導き出す操作をいう。
図10は、メインスレッドと学習スレッドの情報のやりとりのタイムチャートを示す。次に、図10を参照して、1つのキャラクタにおけるメインスレッドの処理と学習スレッドの処理の相互の関係の概要を説明する。
プレイヤの行動とキー入力を使って重みに学習を反映する場合は、図10に示すように、メインスレッドにおいてキーの操作状態を示すキーデータ(又はキーコード)の取得が行われ、画面状態の計算が行われた後、描画処理が行われる。このキーデータの取得と画面状態の計算処理と描画処理が、例えば1/60秒毎に行われる。そして、画面状態の計算が終了すると、実際に押されていたキーデータと現在の画面状態を表すデータ(例えば、自キャラクタ及び敵キャラクタ別の座標位置,残りライフ等)が履歴データとして学習スレッドへ送られる。これらの処理がキーデータの取得毎に順次行われる。
学習スレッドでは、画面状態と推論したキーと実際に押されたキーの差分が複数層(例えば6層)の深層学習の計算によって求められる。すなわち、メインスレッドから1/60秒毎に送られてくる履歴データが、学習スレッド側の記憶領域(画面状態履歴バッファ)32bに一定期間分蓄積されて保存される。十分な履歴データ(例えば、数秒から1ラウンド程度)が蓄積されると、履歴データを重みとして反映するための計算が行われる。履歴データに基づく重みが深層学習の各層の重みデータとして与えられ、重みを反映して計算される。これによって、深層学習の各層では、画面状態に基づいて層別の重みを計算して、記憶領域(層別の重み記憶部)32cに記憶させるものである。
(2人プレイの場合のメインスレッドの動作)
次に、図1〜図10を参照して、図9のメインスレッドの具体的な動作を説明する。
バトルの開始に先立って、何れかのプレイヤがコントローラ20Aを操作して、2人プレイモードを選択するとともに、バトル開始を指示する。これに応じて、CPU13は記憶領域31aに登録されているゲーム制御プログラムを実行して、メインスレッドの処理、すなわちキャラクタ1用及びキャラクタ2用の状態計算処理と、描画処理を開始する。
先ず、ステップ(フローチャートの図では、記号「S」で示す)1aにおいて、学習・推論に基づくキャラクタ1の再現動作中か否かが判断される。換言すると、推論・学習の結果を使ってキャラクタ1及び/又はキャラクタ2の動きを再現するモードであるか否かが判断される。この実施例では、2人プレイのときは、キャラクタ1とキャラクタ2の両方がプレイヤ(自分と相手)によって操作されるので、学習・推論処理に基づくキャラクタ1の再現動作中でないことが判断される。
なお、1人プレイのとき(すなわち相手がコンピュータのとき)には、キャラクタ1についてはプレイヤ(自分)によって操作されるので学習・推論処理に基づくキャラクタ1の再現動作中ではないことが判断されるが、キャラクタ2についてはコンピュータ(相手)によって操作されるので学習・推論処理に基づくキャラクタ1の再現動作中であることが判断されることになる。その場合は後述する。
そして、ステップ1aにおいて、キャラクタ1の学習・推論処理に基づくキャラクタ1の再現動作中でないことが判断されると、ステップ2aへ進む。ステップ2aにおいて、その時点において操作されているキャラクタ1用のコントローラ20Aの方向スイッチ22,押ボタン23a〜23d又はジョイスティック24の何れかの操作状態を示すキーのキーデータが読み込まれて、取得される。このとき取得されたキーデータは、図8の自キャラクタのキーデータとなる。
続くステップ3aにおいて、そのときの画面状態データと、ステップ2aで取得されたキーデータが学習スレッド(S21a)へ送られる。この場合のデータの詳細については、図11を参照して後述する。
ステップ4aにおいて、取得されたキーデータがキー履歴データとして記憶領域31dのキャラクタ1用の記憶領域に書き込まれる。
続くステップ5aにおいて、記憶領域31dに記憶されているキャラクタ1用のキー履歴データと記憶領域31bに記憶されているコマンド表を参照して、キャラクタ1の動作又は技を決定する処理が行われる。ただし、上述のステップ2aにおいて取得したキーデータは、1/60秒毎に取得する1つのキーデータのみであるが、このステップ5aにおいて技を決定するためには、自プレイヤがある期間内(例えば数フレーム〜数十フレームの期間内)に順次入力したキーデータの組み合わせ状態(図5の何れかの技に対応するキーシーケンス)である必要がある。そのため、技を特定できるだけの一連のキーデータが入力されるまではキャラクタの動作又は技を決定することなく、技を決定できるだけの複数のキーデータが入力されて蓄積されるのを待つことになる。
その後、キャラクタ2用の状態計算処理におけるステップ1bへ進む。
ステップ1bにおいて、学習・推論に基づくキャラクタ2の再現動作中でないことが判断されて、ステップ2bへ進む。
ステップ2aにおいて、その時点において操作されているキャラクタ2用のコントローラ20Aの方向スイッチ22,押ボタン23a〜23d又はジョイスティック24の何れかの操作状態を示すキーのキーデータが読み込まれて、取得される。このとき取得されたキーデータは、図8ではキャラクタ2にとっての自キャラクタのキーデータとなる。つまり、図8の履歴データは、キャラクタ1用とキャラクタ2用の2種類あることになる。
続くステップ3aにおいて、そのときの画面状態データと、ステップ2bで取得されたキーデータが学習スレッド(S21b)へ送られる(この場合のメインスレッドから学習・推論スレッドへ送られるデータについては後述の図11を参照)。
ステップ4bにおいて、取得されたキーデータがキー履歴データとして記憶領域31dのキャラクタ2用の記憶領域に書き込まれる。
続くステップ5bにおいて、記憶領域31dに記憶されているキャラクタ2用のキー履歴データと記憶領域31bに記憶されているコマンド表を参照して、キャラクタ2の動作又は技を決定する処理が行われる。ただし、この場合も上述のステップ5aと同様に、技を特定できるだけのキーデータが入力されて蓄積されるまでは、キャラクタ2の動作又は技を決定することなく、技を決定できるだけの複数のキーデータが入力されて蓄積されるのを待つことになる。
その後、描画処理におけるステップ6へ進む。
ステップ6において、画面状態の更新処理、例えば自キャラクタと敵キャラクタのそれぞれの骨格の位置の計算や、プレイヤの操作によって敵にどの程度のダメージを与えることができたかの計算等の処理が行われる。
ステップ7において、自キャラクタと敵キャラクタのライフの減分の計算又は両キャラクタのライフの残分の計算が行われる。このライフの減分の計算は、相手の繰り出した技のレベルに応じて、減分する値が異なるものである。
ステップ8において、描画の画像(自キャラクタと敵キャラクタの2体のキャラクタと背景画像)を生成して、表示用メモリ33に更新的に書き込む。具体的には、背景画像を表示用メモリ33に更新的に書き込むとともに、ステップ6において計算された自キャラクタと敵キャラクタの骨格位置等に基づいて、記憶領域31bに登録されている自キャラクタと敵キャラクタの技別の画像表示のための骨格データを読み出して、技を繰り出すため変化点毎の描画の画像をポリゴンによって順次生成して、各変化点の画像をビットマップ画像に変換して、表示用メモリ33に書き込む(実際には、背景画像の上に自キャラクタと敵キャラクタの画像を上書きする)。
なお、各キャラクタの技の変化を滑らかに表示するために、各変化点の間の画像の補完処理が行われる。
これらのステップ6〜ステップ8の描画処理の動作は、従来の格闘ゲームのゲーム制御の動作と同様であるので、詳細な説明を省略する。
ステップ9において、勝敗が決定したか否かが判断される。ここで、勝敗の決定は、自キャラクタ43と相手キャラクタ44の何れかのライフ(残りライフ)が0(ゼロ)になったとき、又は一定の対戦時間内に勝敗の決着がつかない場合に残りライフの大きなキャラクタを勝者と判断することにより行う。このステップ9において、勝敗が決定していないことが判断されると、前述のステップ1へ戻る。
そして、勝敗が決定するまで、ステップ1a〜5a(キャラクタ1用の状態計算処理),ステップ1b〜5b(キャラクタ2用の状態計算処理)およびステップ6〜9(描画処理)の動作が繰り返される。
これらの繰り返し動作中に、キャラクタ1,2用のそれぞれのキー履歴データが記憶領域31dに蓄積されて、技を特定できるだけの十分なキー操作による入力があると、上述のステップ5a又は5bにおいて、記憶領域31bのコマンド表を参照して、入力された技の種類又はキャラクタの動作が特定される。技又はキャラクタの動作が特定されると、ステップ7において自キャラクタの位置と相手キャラクタの位置を参照して、相手キャラクタ(又は自キャラクタ)のダメージが計算されて、ダメージに応じてライフの減分計算が行われ、残りライフを画面に表示する準備が行われる。
上述の動作を1ラウンド終了するまで繰り返すことによって、キャラクタ1のキー入力履歴データが記憶領域31dのキャラクタ1用のエリアに累積的に記憶され、キャラクタ2のキー入力履歴データが記憶領域31dのキャラクタ2用のエリアに累積的に記憶されることになる。また、現時点における画面状態データ(図8のキャラクタ1用とキャラクタ2用のそれぞれの8項目のデータと、キャラクタ1用のキーデータ)が、最新の画面状態データとして記憶領域31eに更新的に記憶されることになる。
そして、ステップ9において勝敗の決定したことが判断されると、次のステップ10において、終了処理が行われる。例えば、自キャラクタと敵キャラクタのうちの勝利した方のキャラクタの勝利演出の表示が行われ、必要に応じて対戦結果が保存される。終了処理の後、2人プレイの対戦プレイが終了する。
(1人プレイの場合のメインスレッドの動作)
バトルの開始に先立って、プレイヤ(自分)がキャラクタ1を操作してコンピュータ(キャラクタ2)と対戦する1人プレイを選択した後、スタートボタンを押圧する。応じて、キャラクタ1用の状態計算処理が実行される。
すなわち、ステップ1aにおいて、学習・推論処理に基づくキャラクタ1の再現動作中でないことが判断される。そのため、上述のステップ2a〜5aの動作が実行される。このステップ2a〜5aの処理は、2人プレイの場合の動作と同様であるので、省略する。
ステップ5aの後、キャラクタ2用の状態計算処理のステップ1bへ進む。
ステップ1bにおいて、キャラクタ2についてはコンピュータ(相手)によって操作されるので、学習・推論処理に基づくキャラクタ2の再現動作中であることが判断されて、ステップ11bへ進む。ステップ11bにおいて、後述するキャラクタ2用の学習・推論スレッドのステップ22bから送られてくる推論結果のキーデータを取得する。
続く、ステップ12bにおいて、キャラクタ2の画面状態データが学習スレッドへ送られる。このとき送られるキャラクタ2の画面状態データは、図8の相手キャラクタ用がキャラクタ2用で、自キャラクタ用がキャラクタ1用である。その後、ステップ4bへ進む。
ステップ4bにおいて、ステップ11bで取得したキャラクタ2のキーデータがキャラクタ2の履歴データに追加される。ステップ5bにおいて、記憶領域31dに記憶されているキャラクタ2用のキー履歴データと記憶領域31bに記憶されているコマンド表を参照して、キャラクタ2の動作又は技を決定する処理が行われる。
ところで、前述のステップ5a及び5bにおいては、数フレーム〜数十フレーム経過した後における技に対応する一連のキーデータが入力されて取得されたときに、図5に示す何れかの技を指定するキーシーケンスが入力されることになる。
その後、描画処理のステップ6へ進む。
続いて、ステップ6〜ステップ9の動作が順次行われるが、これらの動作は上述の1人プレイの場合の描画処理の動作と同様であるので、省略する。
そして、ステップ9において、勝敗の決定したことが判断されると、ステップ10において終了処理が行われた後、1人プレイによる対戦プレイが終了する。
なお、プレイヤの好みによって、キャラクタ2を操作して1人プレイ(コンピュータ対戦)したい場合もある。
その場合は、キャラクタ1側がコンピュータによって操作されるキャラクタとなり、キャラクタ2がプレイヤによって操作されることになる。
この場合の動作としては、キャラクタ1用の状態計算処理がステップ1a,11a,12a,4a,5aの流れで行われるとともに、キャラクタ2用の状態計算処理がステップ1b〜5bの流れで行われることになる。
ステップ1a,11a,12aの処理は、キーデータと画面状態データを送受する相手がキャラクタ1用の学習・推論スレッド(ステップ23a,21a)であることを除いて、キャラクタ2用の状態計算処理で説明したステップ11b,12bと同様であるので、その動作説明を省略する。
図11は、プレイヤの操作状態を学習する際のメインスレッドから学習スレッドへ送るデータを図解的に示した図である。
次に、図11を参照して、メインスレッドから学習スレッドへ送られるデータに着目して、画面状態データとキーデータを補足説明する。
前述の図9では、1/60秒毎に、ステップ3aにおいてキャラクタ1の画面状態データとキーデータを送信し、ステップ3bにおいてキャラクタ2の画面状態データとキーデータを送信しているが、その前にキャラクタ1(自分)又はキャラクタ2(相手又は敵)の何れもその時点における画面状態データが取得されて、記憶領域31eに記憶されることになる。このとき、キャラクタ1用の画面状態データに関連して、キャラクタ1用のキーデータがその時点の画面状態データに関連する履歴データの一部として記憶される。
ところで、図11における時刻のスケール(左列の1〜25で表す行)は、1行当たり1/60秒である。自プレイヤが押しているキャラクタ1を操作するためのキーは、図9のステップ2aで取得されるものであって、各時刻の横に矢印又はアルファベット記号で示す。格闘ゲームで各プレイヤによって押されるキーは、方向スイッチ22又はジョイスティック24によって指示される「左,右,上,下」と、押ボタン23a〜23dの「A,B,C,D」の8つある。なお、左斜め下は、下と左の両方が押されたことを表す。学習スレッドでは、各キーが押されているかどうかは、押されていないときを「0」、押されているときを「1」と定めて、8つのキーを8ビットの数字列(又はコード)で表す。8ビットの数字列は、「1」の立っているビット位置によって、方向の「左,右,上,下」及び/又は押ボタンの「A,B,C,D」を表す。
例えば、図11の例では、時刻1〜5の間に「下」が押されたときは、動作又は技を指示する「0,0,0,1,0,0,0,0」(下に対応する4ビット目のみ「1」)の数字列が発生されるとともに、図5のコマンド表を参照して「しゃがむ」動作を指定するコマンドと判断(又は解釈)されることになる。このとき、学習スレッドに送るデータは、その時点の画面状態データ(項目は図8の履歴データを参照)と、キーの操作として「下」を表す数字列(「0,0,0,1,0,0,0,0」)である(図9のS3a及びS3bで送るキーデータ)。
また、時刻6〜12の間に「左斜め下」が押されたときは、「1,0,0,1,0,0,0,0」(左に対応する1ビット目と下に対応する4ビット目が「1」)の数字列と、「しゃがみ後退」動作を指定するコマンドと判断される。このとき、学習スレッドに送るデータは、その時点の画面状態データと、キーの操作として「左斜め下」を表す数字列(「1,0,0,1,0,0,0,0」)である。
また、時刻13〜17の「左」が押されたときは、「1,0,0,0,0,0,0,0」(1ビット目のみ1)の数字列と、「後退」動作を指定するコマンドと判断される。このとき、学習スレッドに送るデータは、その時点の画面状態データと、キーの操作として「左」を表す数字列「1,0,0,0,0,0,0,0」(これをキーデータという)である。
さらに、時刻18〜25の「B」が押されたときは「0,0,0,0,0,1,0,0」(Bに対応する6ビット目のみ1)の数字列と、技「超受け身(弱)」のコマンドと判断される。このとき、学習スレッドに送るデータは、その時点の画面状態データと、キーの操作として「B」を表す「0,0,0,0,0,1,0,0」である。
しかし、キー「下」「左斜め下」「左」のそれぞれが押された時点では個々のコマンド入力と解されるが、その後にキー「B」が押されたことによって、キー「下,左斜め下,左」とキー「B」の組み合わせによって指定される技である「超受け身」(図7の技)が入力されたものと判断されて、決定される(図9のS5a又はS5bで判断される技又は動作)。
図12は、学習結果を利用してキャラクタを動かすときの、メインスレッドにおける学習スレッドとのデータの流れを図解的に示した図である。
次に、図12を参照して、学習スレッドとデータの流れ(図9のS11a又はS11b、S12a又はS12b)を簡単に説明する。
前述のステップ12a及び/又は12bにおいて各時刻における学習スレッドに送るデータは、図8の各画面状態データである。前述のステップ11a及び/又は11bにおいて学習スレッドから受け取るキーデータ(図12の中央列の矢印又はアルファベット記号で示すデータ)は、方向スイッチ22又はジョイスティック24によって指示される「左,右,上,下」と、押ボタン23a〜23dの「A,B,C,D」の8つの何れかである。
この各画面状態データと学習スレッドから受け取るキーデータに基づいて、学習・推論スレッド側では推論処理、又は推論処理と学習処理が行われる。この学習処理の結果として、学習結果後のキーデータが状態計算処理へ送られることになる。
(学習・推論の動作)
次に、図1〜図12を参照して、図9のフローチャートに沿って学習・推論スレッドの動作の概要を説明する。
学習・推論スレッドでは、メインスレッドのようにフレーム周期で(又は1/60秒毎に)動作するものではなく、メインスレッドのキャラクタ1用及びキャラクタ2用の状態計算処理部から画面状態データ及び/又はキーデータが送られてくる毎に、ステップ21a〜25a及びステップ21b〜25bの処理を順次実行するものである。なお、以下には、プレイヤがキャラクタ1を操作する場合であって、キャラクタ1用の学習・推論スレッドの動作を代表して説明するものとする。
前述のメインスレッドにおけるステップ3aにおいて画面状態データとキーデータが送られてくると、ステップ21aにおいて、画面状態データとキーデータが取得される。一方、ステップ12aにおいて画面状態データのみが送られると、ステップ21aにおいて、画面状態データが取得される。
ここで、深層学習の計算に用いる「画面状態データ」は、図8の履歴データに含まれる自キャラクタと敵キャラクタに共通する項目のうち、キーデータを除く項目であって、場所に関係するデータと、キャラクタの表示に関するデータと、キャラクタの動きに関するデータとを含む。場所に関係するデータとしては、キャラクタの位置(ステージ上の座標位置),キャラクタの向きおよび残りライフが含まれる。キャラクタの表示に関係するデータとしては、アクション番号(又は技の種類を表す番号),アクションフレームおよびキャラクタIDが含まれる。キャラクタの動きに関連するデータとしては、移動速度と加速度が含まれる。
なお、画面状態データは、これらの全てを用いる必要がなく、格闘ゲームにおいて重要な項目を適宜の1つ又は複数を選んでもよい。
次のステップ22aにおいて、本願の特徴となる深層学習の計算処理、すなわち各層の重みデータを使って出力を計算する処理が行われる。この処理は、推論処理であって、後述の図14,図16,図18に示す機能ブロック図又は図15,図17,図19に示すフローチャートによって実行されるが、詳細は図14〜図19を参照して後述する。
ステップ23aにおいて、推論したキー(キーデータ)を決定して、キャラクタ1用の状態計算処理のステップ11aへ送信する。実際には、ステップ21a〜24aを繰り返すうちに、1/60秒毎に読み込まれるキーの組み合わせに基づいて、所定期間(数フレーム〜数十フレーム間)内に、操作されたキーの組み合わせによるキーシーケンス(技を特定するキーシーケンス)が決定されることになる。
ステップ24aにおいて、学習中か否かが判断され、学習中でなければステップ21aへ戻り、ステップ21a〜24aの処理が1ラウンド中繰り返される。
前述のステップ21a〜24aの処理を繰り返しているときにおいて、ステップ24aにおいて学習中であることが判断されると、ステップ25aへ進む。
ステップ25aにおいて、重み更新の処理が行われる。この重み更新の処理は、ステップ22aにおいて推論した結果と対応する時点のキーデータを使って学習処理するものであり、図20に示す詳細フローを参照して後述する。
なお、プレイヤがキャラクタ2を操作してプレイしている場合(すなわち、2人プレイによる対戦の場合、または1人のプレイヤによるコンピュータ対戦であってコンピュータ側がキャラクタ1の場合)は、キャラクタ2用の学習・推論スレッドにおいて、ステップ21b〜24bの繰り返し処理、又はステップ21b〜25bの繰り返し処理が行われる。この場合は、キャラクタ2用の状態計算処理のステップ3b又はステップ12bから送られてくる画面状態データ及び/又はキーデータがキャラクタ2をプレイヤ操作する場合のデータである点を除いて、キャラクタ1の学習・推論スレッドの動作と同様なので、省略する。
(学習・推論結果を利用した1人プレイの動作)
ところで、前述のステップ23aと11aにおいては、学習・推論スレッド側から推論した結果のキーをキャラクタ1用の状態計算処理(S11a)側へ送っても、プレイヤがキャラクタ1を操作してプレイしている限り、ステップ1aからステップ11a,12aを通らないため、推論又は学習の結果がキャラクタ1の動きに反映されることはない。
一方、推論又は学習の結果がキャラクタの動きに反映されるのは、2人プレイの期間において少なくとも1ラウンド分の履歴データが記憶領域32bに蓄積され、当該ラウンドにおける層別の重みデータが記憶領域32cに蓄積された後に、1人のプレイヤが別のラウンドとしてコンピュータ対戦する場合に相手の操作状態に基づく推論及び/又は学習結果を用いてプレイするときであって、相手のキャラクタに対応する状態計算処理においてステップ1b,11b,12b(又はその逆の場合のステップ1a,11a,12a)を通る際に、推論及び/又は学習結果を利用した対戦プレイが行われることになる。つまり、少なくとも、1ラウンド終わった後のコンピュータ対戦する場合に、推論及び/又は学習結果を利用した対戦が行われることになる。
すなわち、キャラクタ1の状態計算処理では、前述の「1人プレイの場合のメインスレッドの動作」と同様の処理(S1a〜S5a)が行われるが、キャラクタ2の状態計算処理では、ステップ1bにおいて、学習・推論処理に基づくキャラクタ2の再現動作中であることが判断されて、ステップ11bへ進む。ステップ11bにおいて、キャラクタ2用の学習・推論スレッドのステップ22bから送られてくる推論結果のキーデータを取得する。ステップ12aにおいて、キャラクタ2の今回のラウンドにおける画面状態データが学習スレッドへ送られる。
その後、ステップ4bにおいて、取得されたキーデータがキー履歴データとして記憶領域31dのキャラクタ2用の記憶領域に書き込まれる。ステップ5bにおいて、記憶領域31dに記憶されているキャラクタ2用のキー履歴データと記憶領域31bに記憶されているコマンド表を参照して、キャラクタ2の動作又は技を決定する処理が行われる。この場合、1ラウンド前までの画面状態データおよびキーデータに基づいた学習結果によってキャラクタ2の動作又は技を決定することになる。
そして、描画処理におけるステップ6へ進み、前述と同様のステップ6〜9が実行される。そして、勝敗が決定するまで、ステップ1a〜5a,1b,11b,12b,4b,5b,6〜9の処理が繰り返される。このとき、学習結果に基づいてキャラクタ2の動作又は技が繰り出されるように、キャラクタ2の動きが制御されることになる。
このように、キャラクタ2用の状態計算処理と学習・推論スレッドのプログラム(処理ステップ)を、キャラクタ1用の状態計算処理と学習・推論スレッドのプログラムと全く同じに構成すれば、共通のプログラムを1つ作成するだけで、2体のキャラクタのプログラムを個別に開発する必要がなく、プログラムの開発時間を短縮化でき、プログラマの開発負担を軽減できる利点がある。
また、コンピュータ対戦する場合のコンピュータ側のプログラムが、様々な状況を考慮して作成するために複雑となるところを、本願のように推論・学習システムを採用すれば、コンピュータ側のプログラムを簡略化でき、開発時間の短縮化を図ることができ、開発コストの低減を図れる利点がある。また、ゲーム画面を見ている人間であれば操作するであろうキーを使って、コンピュータ側のキャラクタの動きを制御できる利点がある。
図13は学習・推論スレッドの動作原理の概要を説明するための概念図である。
図13の学習・推論制御部50は、キャラクタ1とキャラクタ2別に設けられ、キャラクタ別に学習・推論の処理を行うが、ここでは説明の簡略化のため、1つのキャラクタ(例えばキャラクタ2)の場合について説明する。
学習・推論制御部50は、推論処理部50aと学習処理部50bを含む。推論処理部50aは、ステップ22a又は22bの「各層の重みデータを使って出力を計算する処理」を行うものであって、複数層(例えば6層)のリカレント・ニューラル・ネットワーク(以下「RNN」と略称)で構成される。このRNNは、時系列のデータを深層学習するのに適している。また、推論処理部50aの他の例として、第1層の全対全結合層(入力側)と第2層〜第5層のゲーテッド・リカレント・ユニット(以下「GRU」と略称)層と第6層の全対全結合層(出力側)の6層で構成してもよい。
学習処理部50b、ステップ25a又は25bの「重み更新処理」を行うものであって、第1層の重み更新処理部ないし第6層の重み更新処理部を含む。
図9及び図13を参照して、キャラクタ2用の状態計算処理のステップ3bから送られてくる画面状態データ(キーデータを除く16項目)とキーデータ(両方合わせて、図8に示す履歴データ)は、ステップ21bにおいて取得されて、記憶領域32b(画面状態履歴バッファ)に先入れ先出し態様で記憶される。この記憶領域32bは、少なくとも1ラウンド分の履歴データを記憶する容量を有し、新しい履歴データが入力される毎に古い履歴データを順次シフトしながら記憶することにより、先頭のアドレスに最も古い履歴データ(t−(n−6)の時点ではラウンド開始時の履歴データ)を記憶し、最新時刻(t)に対応する入力側のアドレスに最新の履歴データを記憶する。
推論処理部50aは、記憶領域32bに履歴データが記憶されると、古い順に履歴データを順次読み出して、画面状態データを項目別に読み出してRNNの第1層(又は入力側の全対全結合層)へ並列的に入力させて、入力に対するそれぞれの重みを乗算して出力を求める。ここでいう入力別の重みは、入力をどれだけ出力に反映させるかを決めるものである。
また、画面状態データの項目は、キャラクタ1とキャラクタ2の別に、例えば8項目(両方合わせて16項目)あるが、1項目でX座標とY座標の2つの数値データを必要とする項目(位置座標,移動速度,加速度)もあるので、22要素の入力となる。
RNNの第1層(又は入力側の全対全結合層)は、画面状態データに対応する22要素毎に、重み計算を行う。そして、前段の層の出力が次段の層で重み計算されて、次々段の層の入力となる。このようにして、最終段のRNN層(又は第6層の全対全結合層)から、複数の層での計算を反映した出力が、ステップ23b(又は23a)でいう「推論したキーを決定したキーデータ」として、ステップ11b(又は11a)へ送られることになる。また、推論したキーを決定するキーデータは、学習処理部50bの入力とされる。
学習処理部50bは、推論処理部50aの最終層(又は第6層の全対全結合層)からの画面状態を反映した出力である現在の重みを使った場合に押したいキーと同じ時刻において、プレイヤが実際に押していたキーとの差分を誤差としてキャラクタ別に求める。このキャラクタ別の差分の誤差が、推論処理部50aの層順とは逆に、第6層から第1層の順(古い順)で層別の誤差として順次求められて、キャラクタ毎かつ層別に最適化された重みとして記憶領域32cに更新的に書き込まれる。キャラクタ毎かつ層別に最適化された重み(すなわち、学習結果としての画面状態を見たプレイヤが押すであろうキーデータに対応した重み)が記憶領域32cのキャラクタ別の層別に更新的に記憶される。
この学習結果のキーデータは、ステップ21b〜25b(キャラクタ1の場合は21a〜25a)の処理を繰り返している間のステップ23b(又は23a)において、ステップ11b(又は11a)へ送られることにより、キャラクタ2(又は1)の学習・推論処理に基づくキャラクタ2(又は1)の再現動作中にコンピュータ対戦しているキャラクタ2の動きの制御に利用される。
以下には、図14ないし図20を参照して、学習・推論処理の詳細を説明する。
図14は、学習・推論スレッド中の「各層の重みデータを使って出力を計算する処理(推論処理)」の一例であって、データの流れから見たブロック図である。
図14において、推論処理部50aは、例えば、第1層の全対全結合回路(入力側)51と、第2層〜第5層のGRU回路52〜55と、第6層の全対全結合回路(出力側)56の6層で構成される。
ここで、「全対全結合」とは、入力に対して、それぞれのセルで保持する、入力のそれぞれに対する重みを乗算することによって出力を得る層をいう。「GRU(Gated Recurrent Unit)」とは、LSTM(Long Short-Term Memoryの略)の性質を保ったまま単純化したセルをいう。
全対全結合回路(入力層)51は、入力が画面状態の項目数(16項目/1項目がX座標とY座標で表される位置座標,移動速度及び加速度の2要素の項目を含めて22要素)であり、出力が64要素である。ここで、入力の画面状態データの項目から見れば22要素で足りるが、この実施例では将来の項目数の増加及び計算処理の容易化を考慮して、16項目の22要素を64要素の出力形式となるようにしている。
この全対全結合回路51は、行列とベクトルの積の計算、すなわち画面状態データと各入力に対する重みの乗算を行うものであって、具体的には図16に示すような64個のセルからなるが、図17に示すようなフローの処理で実行される。
全対全結合回路51は、入力として画面状態を表す数列(16項目で22要素)を受けて、例えば64要素の出力を第1段目のGRU回路52の入力として与える。
全対全結合回路51の後段には、第2層〜第5層となるGRU回路52〜55が配列される。
GRU回路(GRUの第1段)52ないしGRU回路(GRUの第4段)55は、RNNを構成する部品の一種のLSTMであり、キャラクタ毎の画面状態データの項目別に、前段からの出力を入力として受けて、各入力と入力別に異なる重みの数値を乗算してそれぞれの層の出力を求め、次段の層の入力とする。
すなわち、GRU回路52の出力が第2段目のGRU回路53の入力(64要素)となり、GRU回路53の出力が第3段目のGRU回路54の入力(64要素)となり、GRU回路54の出力が第4段目のGRU回路55の入力(64要素)となり、GRU回路55の出力が全対全結合回路(出力層)の入力(64要素)となる。
全対全結合回路(出力側・最終層)の出力は、現在の画面状態に対応した推定されるキーデータとなり、そのキーデータが例えば8つのキー(方向スイッチ22の4方向の押点又は押ボタン23a〜23d)に対応する。
これらの全対全結合回路(入力層)51,GRU回路52〜55および全対全結合回路(出力層)56は、図15の各ステップ221〜226と同様の計算を行うものである。
全対全結合回路56の処理は、入力(画面状態の各項目データ)に対し、それぞれのセルで保持する、入力それぞれに対する重みを乗算することによって、出力を得る層である。例えば、適切な学習の後には、自分と相手の間合いを計算したりする。また、それぞれのセルの中で、その層の入力それぞれをどれだけそのセルの出力に反映するかの重みを保持している。
これらのGRU回路52〜55の具体的な構成は、図18に示す。
図15は、全体フローにおける学習・推論スレッド中の「各層の重みデータを使って出力を計算する処理(推論処理)」の詳細なフローチャートである。
図15では、2層(入力側と出力側)の全対全結合層と4層のGRU層からなる6層のニューラルネットによる重み計算の例を示す。
次に、「各層の重みデータを使って出力を計算する処理」の概要を説明する。この処理は、プレイヤがコントローラ20Aを操作して自キャラクタに技を繰り出させる状況を再現する際に、画面の状況、例えば自キャラクタと相手(敵)キャラクタの位置関係や組み合わせによって、技の出すタイミングや有効な技の種類が異なるので、画面の状況を考慮するために重みデータを更新処理するものである。
そして、全体として、それぞれの層がキャラクタ別に1回又は複数回の「画面状態に基づく項目別の入力×重みデータ=出力」の計算をすることによって、推論している。
本当に欲しい出力(人間プレイヤの操作/正解)が分かっているときは、この推論の結果が正解とは異なるので、逆に計算してやることによって重みを少しずつ調整して、欲しい出力が得られるようにしていく操作が学習である。
なお、層が複数に重なって、直前の層の出力がある層の入力に繋がっているので、重みの修正が必要な場合は出力側に一番近い層から行う必要がある。
次に、図15を参照して、「各層の重みデータを使って出力を計算する処理」の詳細を説明する。
学習スレッドでは、1/60秒毎に、メインスレッドから、そのときの画面状態データおよびその瞬間にプレイヤが押しているキーのキーデータを取得する(ステップ21参照)。それに応じて、ステップ221において、全対全結合の層(入力層)の出力計算が行われる。
全対全結合の層では、履歴データの項目別に、画面状態データからの入力と入力それぞれに対応する重みを掛け算した計算結果が出力となる。
この全対全結合の計算処理は、具体的には図16の回路又は図17に示すフローの処理によって行われるが、後述する。
ステップ222において、全対全結合層からの出力を受けて、履歴データの項目別にGRUの第1段(層)目の出力を計算する処理が行われる。ステップ223において、GRUの第1段(層)目の出力を受けて、履歴データの項目別にGRUの第2段目の出力を計算する処理が行われる。同様に、ステップ224において、前段の出力を受けて、履歴データの項目別にGRUの第3段目の出力を計算する処理が行われる。ステップ225において、前段の出力を受けて、履歴データの項目別にGRUの第4段目の出力を計算する処理が行われる。
これらのGRUの推論時の処理は、入力と3種類の重み(Z,R,W)と自身の出力を用いて計算する必要がある。GRUの重みに関する計算は、全対全結合の層の場合と同様の行列積である。
これらのGRU層の詳細は、図18のGRU回路又は図19のフローを参照して後述する。
その後、ステップ226において、全対全結合の層(出力層)の出力を計算する。この処理は全対全結合の層(入力層)と同じ処理であるが、入力層とは逆に出力の数が入力の数より少ない計算処理である。
そして、次のステップ23のキーを決定する処理へ進む。
ところで、「各層の重みデータを使って出力を計算する処理」(深層学習の処理)を、格闘ゲームにおけるコントローラ20Aの各キーの操作との関係で考察すれば、次のとおりである。
例えば、学習を反映する前の重み情報を利用して、それぞれの時刻で取得した画面情報から、それぞれのボタンを押すかどうか、重み情報を用いてキャラクタを動かすときと同様の処理で計算する。この処理において、方向スイッチ22又はジョイスティック24の上下左右と押ボタン23a〜23dの8つについて、押す(1)か、押さない(0)かの間(0〜1)の数値として計算される。その結果により、キャラクタを動かす場合は、計算結果が0.5よりも大きければ「押す」、0.5よりも小さければ「押さない」と決めて、キーデータ(0.0〜1.0の間の実数)をメインスレッドに送る(ステップ23)。
一方、学習している場合は、これらの情報を用いて重み更新の処理(ステップ25)が行われる。
図16は、学習・推論スレッドにおける「各層の重みデータを使って出力を計算する処理」中の「全対全結合」の一例の回路図である。図16では、データの流れから見た全対全結合回路の1つの要素(セル)の回路を示しているが、このようなハード回路で構成することもできる。
図16において、全対全結合回路51は、64個の全対全結合セル51−1〜51−64からなる。各全対全結合セル51−1〜51−64は、32個の乗算器51a〜51dと1つの加算器51eとから構成される。1つの全対全結合セル(例えば51−1)の乗算器51a〜51dには、1つの画面状態データの所定項目に対応する要素データが一方入力(各セルへの32ビットの入力、i1,i2,・・・i32)として与えられるとともに、各入力に対する重みが他方入力として与えられ、対応する一方入力と他方入力をそれぞれ乗算することによって行列計算を行う。
ここで、各入力に対する重みは、ランダムに初期化されるが、深層学習の学習を繰り返す毎に、次第に適切な重みに近づく。そして、学習結果として変化した重みの値が外部に保存されたり、外部から読み出されることになる。
各乗算器51a〜51dの乗算結果(すなわち行列計算の結果)が加算器51eによって加算されて、この層の1要素分の出力(o1)として出力される。
同様にして、他の全対全結合セル51−2〜51−64でも、乗算器51a〜51dによる行列計算の結果が加算器51eによって加算されて、この層の他の要素分(51−2〜51−64)の出力(o2〜o64)として出力される。
この全対全結合回路51の出力(o1〜o64)が第1段目のGRU回路52の入力(64要素)となる。
全対全結合の層の処理は、入力(画面状態)に対し、それぞれのセルで保持する、入力それぞれに対する重みを乗算することによって、出力を得る層である。例えば、適切な学習の後には、自分と相手の間合いを計算したりする。また、それぞれのセルの中で、その層の入力それぞれをどれだけそのセルの出力に反映するかの重みを保持している。
図17は、学習・推論スレッドにおける「各層の重みデータを使って出力を計算する処理(推論処理)」中の「全対全結合の処理」の詳細なフローチャートである。
ステップ221aにおいて、キャラクタ別であって画面状態データの各項目別に、重み行列(入力サイズ×出力サイズ)を入力のベクトルと乗算することによって、全対全結合の計算処理が行われる。すなわち、ステップ221aの処理は、キャラクタ別の画面状態データの各項目に対応する64要素別に、重み行列を入力のベクトルと乗算する計算が行われる。
図18は、学習・推論スレッドにおける「各層の重みデータを使って出力を計算する処理」中の「GRUのある一層の推論処理」の一例の回路図である。図18では、GRUをデータの流れから見て表したもので、64要素を並列的に処理するハード(回路)的に示す。
図18において、GRU回路52は、要素毎の積(行列・ベクトル積)を計算する乗算部52a〜52d,52g,52hと、要素毎の和を計算する加算部52e,52jと、減算部52fと、入力部521と、出力部522と、64要素のレジスタ(r,z,1−z)523,524,525と、重み部526,527,528と、ドロップアウト部52kとから構成される。
加算部52eと乗算部52hと加算部52jが直列的に接続されて、入力部521と出力部522の間に接続される。
重み部526〜528は64×64の行列であって、そのうち重み部526は出力をアップデート量に反映する行列(重み1)であり、重み部527は出力をリセット量に反映する行列(重み2)であり、重み部528はリセット量と出力を入力に反映する行列(重み3)である。これらの重み1〜3は、初期状態ではランダムに設定されるが、学習処理を重ねるに従って徐々に適正化され、最終的には最適化される。
また、出力部522の出力は、ドロップアウト部52kに与えられるとともに、乗算部52a〜52c及び52gに入力として与えられるように構成される。これによって、古い履歴データの各項目に対応する要素の重みを、新しい履歴データに基づく重み計算に反映(又はフィードバック)させている。ドロップアウト部52kは、要素毎に所定の確率で出力を0(ゼロ)に強制する。
これらの各乗算部52a〜52d,加算部52e,減算部52f,乗算部52g,52h及び加算部52jは、末尾の記号a〜jの順序で、それぞれの機能である乗算,加算又は減算の処理を行うものである。
これらの計算処理の詳細は、図19を参照して後述する。
なお、他のGRU回路53〜55も、GRU回路52と同様に構成される。
GRU回路52の動作としては、前段(全対全結合セル51−1〜51−64)の出力が入力されると、現在(又は現時点)の重みをどれだけ反映し、過去の状態の重みをどれだけ忘れるかを求める。
具体的には、乗算部52aは、出力部522の出力(現時点の1つ前の時点の画面状態データに基づく重み計算結果)と、重み部526から入力される重み1とを要素毎に乗算して、アップデート量(z)を計算し、その途中の計算結果をレジスタ524に一時ストアさせる。乗算部52bは、出力部522の出力と重み部527から入力される重み2とを要素毎に乗算して、リセット量(r)を計算し、その途中の計算結果をレジスタ523に一時ストアさせる。乗算部52cは、出力部522の出力とリセット量を要素毎に乗算する。
乗算部52dは、乗算部52cの出力と重み部528から入力される重み2とを要素毎に乗算する。
加算部52eは、入力部521からの入力である現時点の画面状態データの各要素と乗算部52dからの入力を要素毎に加算する。減算部52fは、乗算部52aの出力であるアップデート量の各要素を1から減算した値(1−z)を計算し、その途中の計算結果をレジスタ525に一時ストアさせる。乗算部52gは、アップデート量と現在の出力を要素毎に乗算する。乗算部52hは、加算部52eの出力と減算部52fの出力を要素毎に乗算する。
加算部52jは、乗算部52gの出力と乗算部52hの出力を要素毎に加算して、出力をアップデートする。この出力が、過去の状態を忘れさせるため、ドロップアウト部52kによって所定の確率でゼロに強制されて、ドロップアウト付きの出力として次段(層)のGRU回路53へ入力される。
このようにして、ゲームプレイしている人間の動き又はそれに近い動きとなるように、調整して出力(重み)を決める処理をしている。
図19は、学習・推論スレッドにおける「各層の重みデータを使って出力を計算する処理」中の「ドロップアウト付きGRU(ある一層)の推論処理」の詳細なフローチャートである。
各GRU層は、前段からの入力がある毎に、次のような処理を行う。ステップ222aにおいて、キャラクタ別の項目別に、現在の出力と重み1(Z)とを乗算することにより、アップデート量を計算する(図18の例との対応関係を示せば、計算途中の結果をレジスタ523に一時ストアさせること。以下、カッコ内の符号は図18の計算処理の対応部分を示す)。このアップデート量は、新しい入力を次の状態にどれだけ反映するかを決める量である。ステップ222bにおいて、現在の出力と重み2(R)とを乗算してリセット量を計算する(52b)。このリセット量は、古いことをどれだけ忘れるかを示す量である。ステップ222cにおいて、リセット量と現在の出力とを乗算する(52c)。これらのステップ222a〜222cの処理によって、重みを使い、忘れる量を計算している。
ステップ222dにおいて、重み3(W)とステップ222cで得た出力のベクトルを乗算する(52d)。これによって、重みを使い、反映量の計算を行うことにより、一つ前の出力をどれくらい今回の出力候補に反映するか計算している。
ステップ222eにおいて、入力とステップ222dで得た出力を加算する。ステップ222fにおいて、アップデート量(z)の各要素を1から減算した値を計算する(52f)。ステップ222gにおいて、アップデート量と現在の出力を、要素毎に乗算する(52g)。ステップ222hにおいて、ステップ222eの出力とステップ222fの出力を乗算する(52h)。これらのステップ222e〜222hの処理によって、重みを使い、出力候補の計算を行っている。
ステップ222jにおいて、ステップ222gの出力とステップ222hの出力を加算して、出力をアップデートする(52i)。これによって、ドロップアウト前の出力を計算している。
ステップ222kにおいて、出力の各要素をランダムに0(ゼロ)にして、次の層に渡す(52k)。これによって、ドロップアウト処理をして、出力を得る処理を行う。この処理は、出力毎にランダムに0にする処理である。具体的には、出力=要素毎に(ドロップアウト無し出力又はランダムで0にする)得られた出力の重みを学習の際に使うため、学習が必要な場合、記憶領域32の当該層に対応するエリアに時系列で記憶されて、蓄積される。
以上の処理を繰り返すことによって、GRU層は、過去の情報を加味する度合いを調整しつつ、新しい画面状態に対応するための適切なキーデータを計算している。
図20は、学習・推論スレッドにおける「重み更新処理」の詳細なフローチャートである。
次に、図20を参照して、「重み更新処理」の詳細な動作を説明する。
ステップ251において、現在時刻(又は現時点)の画面状態データが記憶領域(画面状態履歴バッファ)32bに追加して書き込まれる。すなわち、重み更新の処理では、メインスレッドから受け取った「プレイヤが実際に押していたキー」と、上述の処理で計算された「現在の重みを使った場合の押したいキーの差分」を「誤差」として扱う。この「誤差」と「受け取っている画面状態」、「プレイヤが実際に押していたキー」の各データが、まとめて記憶領域32bに時系列で保存される。
ステップ252において、画面状態データの履歴が十分に蓄積されているか否かが判断される。深層学習するためには少なくとも数秒分の履歴が必要であり、この段階で例えば5秒間の分の履歴がなければ、十分な履歴が蓄積されてから重みを更新処理することになる。そのため、履歴が十分でない場合は、「重み更新処理」を終了して、学習・推論スレッドのステップ21へ戻る。
一方、十分な(例えば5秒分の)履歴が十分に蓄積されていることが判断されると、ステップ253へ進む。
ステップ253〜259では、時刻tの誤差を最小にするために、記憶領域(画面状態履歴バッファ)32bに保存されている、「各時刻での画面状態」、「押されているキー」および「現在の重みを使った場合に押したいキー」の組のデータを、時系列の逆順に(新しいものから古いものの順に)、次の処理を施す。すなわち、第6層の全対全結合の層(図12のS226;図15の最下段の56に対応)については、当該層の出力の誤差がこの(現)時刻の誤差と一致している状態であるので、第6層の出力側から順に以下の処理を行う。
ステップ253において、現在時刻(t)が画面状態履歴バッファの最新時刻とされる。ステップ254において、現在時刻(t)の誤差を最小にするため、第6層の全対全結合層の重みの更新の方向を調整して、誤差に繋がった入力の差が計算される。
具体的には、全対全結合の層の出力(図15のS226、図15の出力に対応)は、第6層の入力と、「入力それぞれに対応する重み」を掛け算したものであるので、出力の誤差の責任が「重みにある」と仮定すれば、このときの入力に応じてそれぞれの重みをどのように変更すれば誤差を最小にできるかを、重みを変化させたときの誤差の勾配から計算して求めることができる。
この誤差を最小にする方向を、今思っている方向と合成して、新しい向きを決定する。次に、「入力に責任がある」として、今持っている重みのデータと出力を乗算することにより、この時刻での出力の誤差に対応する入力の誤差を計算することができる。これは、一段上の層で同様の処理を行うためである。
同様に、現在時刻(t)の誤差を最小にするために、ステップ255において、第5層のGRU層の各重みの更新の方向を調整して、誤差に繋がった入力の差が計算される。
続くステップ256において、第4層のGRU層の各重みの更新の方向を調整して、誤差に繋がった入力の差が計算される。ステップ257において、第3層のGRU層の各重みの更新の方向を調整して、誤差に繋がった入力の差が計算される。ステップ258において、第2層のGRU層の各重みの更新の方向を調整して、誤差に繋がった入力の差が計算される。さらに、ステップ259において、第1層の全対全結合層の各重みの更新の方向を調整して、誤差に繋がった入力の差が計算される。
ステップ260において、現在時刻(t)の履歴データが記憶領域32bの先頭のエリアに達したか否かが判断される。これは、記憶領域32bが先入れ先出し態様であるので、出力される記憶位置に達したかどうかを判断するためである。先頭のエリアに達していないことが判断されると、ステップ261において、現在時刻から「−1」(1を減算)されて、現在時刻がt=t−1となり、前述のステップ254へ戻る。そして、その次の時刻(t=t−1)における履歴データの重み更新を行うため、ステップ254〜260の処理が繰り返される。
ステップ260において、現在時刻(t)の最新履歴のエリアに記憶されていた履歴データが記憶領域32bの先頭のエリアに達したことが判断されると、ステップ262へ進む。ステップ262において、各層の重みを「学習率×更新の方向」で更新して、キャラクタ毎であって層毎に最適化された重みが記憶領域32cの対応するエリアに記憶される。
このようにして、ゲームプレイの場で入力されたデータに基づいて格闘ゲーム装置10の中で学習する、いわゆるオンライン学習が行われることになる。
そして、ゲームプレイ(対戦)を行う毎に上述の学習処理が繰り返されて、1ラウンドの対戦が終了する毎に、各ラウンドの6層分の重みデータがニューラルネットの各重みとして、ハードディスク14(図1参照)に累積的に記憶されることになる。
このようにして蓄積されたプレイヤの行動履歴は、重みデータ(固定長)に反映される。重みデータは、ゲーム終了時にハードディスク14に保存され、次回起動時に再び読み出すことにより、更に学習を行うか、学習した行動を再現するのに使用される。
そして、他のプレイヤの格闘ゲーム装置10に学習データを取り込むことにより、それを使ってプレイするのに利用される。これによって、上手な人の操作方法を習ってゲームプレイすることができる。
また、他のプレイヤの重みのデータは、ネットワーク網17を介して転送される。
自分のプレイによる重みデータは、例えばスコアランキングに紐付けたり、あるいはネット対戦の際にバックグラウンドで対戦し又は観戦しているユーザと交換することにより、プレイヤからの操作がなくても交換することも可能となる。
次に、本願の格闘ゲームの学習装置を格闘ゲームに採用すれば、プログラマの負担軽減がどのようにして実現されるかについて説明する。
従来、コンピュータが自動でキャラクタを操作するプログラムは、それぞれの技を出す条件や確率を、プログラマが一つずつ、「もし〜ならば〜」をプログラム中に記述することで作成していた。その場合のプログラマの作業量は、1対1の対戦ゲームにおいて、キャラクタの組み合わせが登場するキャラクタの数の2乗になるので、キャラクタの数の2乗倍に比例する複雑さのプログラムを作成する必要があった。
しかも、全てのキャラクタの組み合わせについて、矛盾なく自然に動くプログラムを作成するのには、注意と長時間の検証(デバッグ作業)を要していた。
本願の深層学習を用いれば、技を出す条件や確率等の条件を、プログラマが逐一明示(プログラミングで記述)することなく、実際の局面と行動の履歴から自動で抽出できる。この性質を利用して、ランダムな動きに準ずる行動履歴から始めて、互いに戦わせ、勝った方の行動履歴を学習させる、というステップを繰り返すことによって、自動的に強いキャラクタの操作方法を学習した重みデータを得ることができる(遺伝的アルゴリズム)。
そのため、本願の学習方法を用いれば、プログラマがコンピュータ対戦用のキャラクタの動きの条件や確率をプログラムで逐一記述する必要がなく、膨大なパターンでの対局で勝利することのできるような自動的にキャラクタを操作するプログラムを得ることができる。
また、本願では、学習のために使用している画面状態データが、2つのキャラクタの場所関係,キャラクタ表示関係,動きに関する数値データ(又は実数)であり、実際に表示される画面状態の画素(又はドット)データではないので、画素データを用いて学習計算する場合に比べて、学習の計算処理を高速に行うことができ、CPU13の負担を軽減できる利点がある。その結果、CPU13の処理能力を画像処理の時間に多く振り分けることが可能となる。
(変形例)
上述の実施例では、深層学習するための画面状態データの一例として、図8に示す履歴データの16項目の全てを用いて学習処理する場合を説明したが、他の例として、一部のデータ、例えば少なくとも場所関係に含まれるステージ上での位置情報(X座標とY座標)をキャラクタ別に持たせることによっても、本願の技術思想を実現できることは言うまでもない。
また、画面状態データのさらに他の例として、図8に示す履歴データのうち、場所に関する項目(例えば位置)とキャラクタ表示に関する項目(例えばアクション番号)と動きに関する項目(例えば移動速度)だけを用いて、学習させてもよい。
画面状態を表す項目数が少ないと、人間らしい動きを再現する精度が多少損なわれて、動きが若干荒くなることもあり得るが、技術思想としては実現可能である。
また、推論処理部50aを2層の全対全結合層(入力側と出力側)と4層のGRU層で構成する場合を説明したが、6層のRNNで構成してもよく、また層の数を適宜増減してもよい。また、各GRU層が64要素の場合を説明したが、項目数に応じて要素数を適宜変更してもよいことはもちろんである。
この発明によれば、事前に学習させた結果を使用することによって、より人間らしい行動をコンピュータ相手の対戦でも実現することができる。
この発明の格闘ゲームの学習装置および学習プログラムは、格闘ゲームのプレイヤの操作を学習する装置としての産業上の利用意義が大きい。
10 格闘ゲーム装置に用いられる情報処理装置
11 ゲーム機本体
12 液晶表示器(表示部)
13 CPU(制御部)
14 ハードディスク(HDD)
20 入力操作部
20A コントローラ
21 ハウジング
22 方向スイッチ(方向指示部)
23a〜23d 押ボタン(動作指示部)
30 メモリ(記憶部)
31 ゲームプログラム用メモリ
31a ゲームプログラム記憶部
32 学習・推論プログラム用メモリ
32a 記憶領域(学習プログラム記憶部)
32b 記憶領域(画面状態履歴記憶部)
32c 記憶領域(層別の重み記憶部)
33 表示用メモリ(表示用記憶部)
41 対戦画像表示領域41
42 キャラクタ別情報表示領域42
43 自キャラクタ43
44 敵キャラクタ44
50 学習制御部
50a 推論処理部
50b 学習処理部
51,56 全対全結合回路
52〜55 GRU回路

Claims (15)

  1. ゲームに関連する画像を表示するための表示部に接続して使用され、第1のキャラクタと第2のキャラクタの2つのキャラクタによって対戦し、第1のキャラクタおよび第2のキャラクタの少なくとも一方がプレイヤによって操作される格闘ゲームにおいて、プレイヤによって操作されるキャラクタの操作状態を学習する格闘ゲームの学習装置であって、
    プレイヤによって操作され、格闘ゲームに登場する前記第1のキャラクタおよび前記第2のキャラクタの少なくとも一方のキャラクタの動きを指示するための方向指示部と当該キャラクタの動作を指示するための動作指示部を含む入力操作部、
    格闘ゲームに登場する複数のキャラクタの動きを制御するゲームプログラムを記憶するゲームプログラム記憶部、
    プレイヤによって操作されるキャラクタの動きの履歴を取得するために、前記入力操作部の操作状態を深層学習し推論するための学習プログラムを記憶する学習プログラム記憶部、
    学習のためのデータを記憶する学習データ記憶部、
    前記表示部に表示させるためのゲーム画像データを更新的に記憶する表示用記憶部、
    前記ゲームプログラム記憶部に記憶されているゲームプログラムを実行して格闘ゲームに登場する複数のキャラクタの動きを制御するゲーム制御部、ならびに
    前記学習プログラム記憶部に記憶されている学習プログラムを実行する学習制御部を備え、
    前記ゲーム制御部は、
    記入力操作部の操作状態に応じて少なくとも一方の前記キャラクタの動きを変化させ、格闘ゲームに登場する複数のキャラクタの動画を生成するとともに、格闘ゲームに関連する画像を生成して前記表示用記憶部に更新的に書き込み、当該表示用記憶部に記憶されている画像を読み出して前記表示部に表示させ、
    前記学習制御部は、
    定タイミング毎に前記入力操作部の操作に応じてキャラクタの繰り出す技に関連する操作データと画面表示に関連する画面状態データを収集して前記学習データ記憶部に書き込み、
    前記学習データ記憶部に記憶されている一定数のタイミングの各操作データと画面状態データを、複数層からなるリカレント・ニューラル・ネットワークを用いて深層学習の計算処理を行うことによって学習結果の重みを最適化し、
    前記ゲーム制御部は、さらに、前記第1のキャラクタおよび前記第2のキャラクタによる後続する対戦ゲームに際して、前記最適化された学習結果の重みを反映させて、前記入力操作部による入力に基づくことなく他方のキャラクタの動きを制御することを特徴とする、格闘ゲームの学習装置。
  2. 前記ゲーム制御部と前記学習制御部は、時分割的にそれぞれの処理を実行し、
    記学習データ記憶部は、所定タイミング毎に送られてくる操作データと画面状態データを先入れ先出し態様で記憶する画面状態履歴記憶部を含み、
    前記学習制御部は、前記ゲーム制御部がゲーム処理の実行期間中でないときに、前記画面状態履歴記憶部に記憶されている一定数のタイミングの各操作データと画面状態データを、先行する各タイミングにおける操作データと画面状態データの単位で深層学習の計算処理を順次実行する、請求項1に記載の格闘ゲームの学習装置。
  3. 前記格闘ゲームは、前記第1のキャラクタおよび前記第2のキャラクタの何れか一方のキャラクタがプレイヤによって操作され、他方のキャラクタがプレイヤによる前記入力操作部の操作とは独立して動作するものであり、
    前記ゲーム制御部は、前記入力操作部によって入力された操作データを第1のキャラクタの繰り出す技に関するキーデータとして、前記学習制御部へ送り、
    記学習制御部は、深層学習の計算処理によって学習結果の重みを反映したキーデータを求め、後続する対戦ゲームに際して学習結果の重みを反映したキーデータを前記ゲーム制御部へ送り、
    前記ゲーム制御部は、後続する対戦ゲームに際して学習結果の重みを反映したキーデータに基づいてゲームプログラムを実行して他方のキャラクタの動きを制御する、請求項1に記載の格闘ゲームの学習装置。
  4. 前記学習データ記憶部は、画面状態データの履歴を一時的に記憶する画面状態履歴データ記憶部と、前記深層学習の処理結果として複数の層別の重みの計算結果を記憶する層別の重み記憶部とを含み、
    前記制御部は、収集した画面状態データを前記画面状態履歴データ記憶部に書き込むとともに、画面状態履歴データ記憶部に記憶されている各画面状態データを第一層の入力として、複数の層においてそれぞれの入力に対応する重みを乗算して、層毎の出力を計算し、その出力を次の層の入力として計算する処理を逐次的に行い、最終層の出力として得たキーデータと、実際に押されていたキーの差分を用いて、層別の重みを最適化して前記層別の重み記憶部に記憶させる学習制御部を含む、請求項1に記載の格闘ゲームの学習装置。
  5. 前記学習制御部は、現在の画面状態とその時点で最新の重みとを掛け合わせてプレイヤが押していたであろうキーを導き出すための推論処理部と、現在の画面状態とプレイヤが実際に押したキーを深層学習の重みに反映するための学習処理部を含み、
    前記推論処理部は、収集した画面状態データを前記画面状態履歴データ記憶部に書き込むとともに、画面状態履歴データ記憶部に記憶されている各画面状態データを第一層の入力として、それぞれの層において重みを乗算して、層別の出力を算出し、その出力を次の層の入力として逐次的に計算することで、最終層の出力としてキーデータを得るものであり、
    前記学習処理部は、前記推論処理部によって算出されたキーデータと、前記現在の画面状態の時点に対応するプレイヤの操作によるキーデータに基づいて深層学習の重みを最適化する、請求項4に記載の格闘ゲームの学習装置。
  6. 前記学習制御部は、深層学習の処理として、少なくとも1つの全対全結合層による計算処理と、複数のゲーテッド・リカレント・ユニット層による計算処理を実行するものであって、
    前記全対全結合層による計算処理では、重み行列を入力のベクトルと乗算する処理を実行し、
    前記各ゲーテッド・リカレント・ユニット層による計算処理では、複数のゲーテッド・リカレント・ユニット層のそれぞれにおいて、重みを使って忘れる量を計算し、重みを使って反映量を計算し、出力候補を計算する処理を順次行うことを特徴とする、請求項1ないし請求項5のいずれかに記載の格闘ゲームの学習装置。
  7. 前記学習制御部は、前記各ゲーテッド・リカレント・ユニット層による計算処理として、前記出力候補の計算後に、選択的にドロップアウト処理をして出力することを特徴とする、請求項6に記載の格闘ゲームの学習装置。
  8. 前記学習制御部は、前記ゲーム制御部によるゲームプログラムの実行に関連して、前記入力操作部の操作に応じた操作データを前記画面状態履歴記憶部に先入れ先出し態様で記憶させるとともに、前記学習結果に関する層別の重みを前記学習データ記憶部に記憶させる、請求項2に記載の格闘ゲームの学習装置。
  9. 前記学習データ記憶部は、操作データと画面表示に関連する画面状態データを記憶する画面状態データ記憶部と、前記深層学習後の各層の重みを記憶する複数層分の重みデータ記憶部とを含み、
    前記学習制御部は、ゲームプレイ中の操作データと画面表示に関連する画面状態データを先入れ先出し態様で前記画面状態データ記憶部に記憶させるとともに、前記深層学習後の各層の重みデータを対応する層別の前記重みデータ記憶部に記憶させる、請求項2ないし請求項5のいずれかに記載の格闘ゲームの学習装置。
  10. 前記格闘ゲームは、第1のキャラクタと第2のキャラクタの2つのキャラクタによって対戦するものであって、第1のキャラクタおよび第2のキャラクタの少なくとも一方がプレイヤによって操作されるキャラクタであり、
    前記画面状態データは、少なくとも2つのキャラクタの位置データを含む、請求項1ないし請求項9のいずれかに記載の格闘ゲームの学習装置。
  11. 前記格闘ゲームは、第1のキャラクタと第2のキャラクタの2つのキャラクタによって対戦するものであって、第1のキャラクタおよび第2のキャラクタの少なくとも一方がプレイヤによって操作されるキャラクタであり、
    前記画面状態データは、少なくとも、2つのキャラクタの場所に関する場所データと、2つのキャラクタの表示に関するキャラクタ表示関連データを含む、請求項1ないし請求項9のいずれかに記載の格闘ゲームの学習装置。
  12. 前記画面状態データは、2つのキャラクタの動きに関する速度データをさらに含む、請求項11に記載の格闘ゲームの学習装置。
  13. ゲームに関連する画像を表示するための表示部に接続して使用され、第1のキャラクタと第2のキャラクタの2つのキャラクタによって対戦し、第1のキャラクタおよび第2のキャラクタの少なくとも一方がプレイヤによって操作される格闘ゲームにおいて、プレイヤによって操作されるキャラクタの操作状態を学習する格闘ゲームのプログラムであって、
    プレイヤによって操作され、格闘ゲームに登場する前記第1のキャラクタおよび前記第2のキャラクタの少なくとも一方のキャラクタの動きを指示するための方向指示部および当該キャラクタの動作を指示するための動作指示部を含む入力操作部と、各種プログラムおよびデータを記憶するための記憶部と、コンピュータとを備えた格闘ゲーム装置において、前記コンピュータによって格闘ゲームを実行させるためのプログラムを含み、
    前記コンピュータを、
    前記入力操作部による操作と前記記憶部に記憶されているゲームプログラムに基づいて、格闘ゲームに登場する複数のキャラクタの動きを制御して複数のキャラクタの動画を生成するとともに、格闘ゲームに関連する画像を生成し、当該複数のキャラクタの動画と当該格闘ゲームに関連する画像を前記表示部に表示させるゲーム制御部と、
    プレイヤによって操作される所定タイミング毎の前記入力操作部の操作状態に応じてキャラクタの繰り出す技に関連する操作データと画面表示に関連する画面状態データを収集して、当該操作データと画面状態データに基づいて深層学習の計算処理を行うことによって学習結果の重みを最適化して前記記憶部に記憶させる学習制御部として機能させ、
    前記第1のキャラクタおよび前記第2のキャラクタによる後続する対戦ゲームに際して、前記最適化した学習結果の重みを反映させて、前記入力操作部による入力に基づくことなく他方のキャラクタの動きを制御するゲーム制御部として機能させる、格闘ゲームの学習プログラム。
  14. 前記記憶部は、画面状態データを一時的に記憶する画面状態データ記憶部と、前記深層学習の処理として最適化した複数の層別の重みを記憶する層別の重み記憶部とを含み、
    前記コンピュータを、前記画面状態データ記憶部に記憶されている画面状態データと重みを乗算してキーデータを計算し、前記画面状態データ記憶部に記録された実際に押されていたキーとの差分を用いて重みを最適化して前記層別の重み記憶部を更新する学習制御部として機能させる、請求項13に記載の格闘ゲームの学習プログラム。
  15. 前記記憶部は、画面状態データの履歴を一時的に記憶する画面状態履歴データ記憶部と、前記深層学習の処理として最適化した複数の層別の重みを記憶する層別の重み記憶部とを含み、
    前記コンピュータを、前記画面状態履歴データ記憶部に記憶されている各画面状態データを第一層の入力として、複数の層においてそれぞれの入力に対応する重みを乗算して、層毎の出力を計算し、その出力を次の層の入力として計算する処理を逐次的に行い、最終層の出力として得たキーデータと、実際に押されていたキーの差分を用いて、層別の重みを最適化して前記層別の重み記憶部に記憶させる学習制御部として機能させる、請求項13に記載の格闘ゲームの学習プログラム。
JP2018091401A 2018-05-10 2018-05-10 格闘ゲームの学習装置および学習プログラム Active JP6779941B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2018091401A JP6779941B2 (ja) 2018-05-10 2018-05-10 格闘ゲームの学習装置および学習プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2018091401A JP6779941B2 (ja) 2018-05-10 2018-05-10 格闘ゲームの学習装置および学習プログラム

Publications (2)

Publication Number Publication Date
JP2019195512A JP2019195512A (ja) 2019-11-14
JP6779941B2 true JP6779941B2 (ja) 2020-11-04

Family

ID=68538064

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018091401A Active JP6779941B2 (ja) 2018-05-10 2018-05-10 格闘ゲームの学習装置および学習プログラム

Country Status (1)

Country Link
JP (1) JP6779941B2 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111282267B (zh) * 2020-02-11 2021-08-20 腾讯科技(深圳)有限公司 信息处理方法、装置、介质及电子设备
CN113457152B (zh) * 2021-07-22 2023-11-03 腾讯科技(深圳)有限公司 一种游戏阵容生成方法、装置、设备及存储介质
JPWO2023037507A1 (ja) * 2021-09-10 2023-03-16
WO2023037508A1 (ja) * 2021-09-10 2023-03-16 日本電気株式会社 ゲームプレイヤーモデル利用提供装置
JP7459327B1 (ja) 2023-01-25 2024-04-01 株式会社バンダイナムコエンターテインメント ゲームシステム、プログラム、学習装置及びゲーム提供方法
JP7459328B1 (ja) 2023-01-25 2024-04-01 株式会社バンダイナムコエンターテインメント ゲームシステム、プログラム、学習装置及びゲーム提供方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
SG10201908300WA (en) * 2015-08-03 2019-10-30 Angel Playing Cards Co Ltd Fraud detection system in casino
JP6330008B2 (ja) * 2016-10-13 2018-05-23 株式会社 ディー・エヌ・エー Q学習を用いたニューラルネットワークの重み付け調整のためのプログラム、システム、及び方法

Also Published As

Publication number Publication date
JP2019195512A (ja) 2019-11-14

Similar Documents

Publication Publication Date Title
JP6779941B2 (ja) 格闘ゲームの学習装置および学習プログラム
CN101155621B (zh) 对战游戏***及游戏装置
US6679774B2 (en) Training-style video game device, character training control method and readable storage medium storing character training control program
KR100292147B1 (ko) 대전비디오게임장치,비디오게임방법및컴퓨터가읽을수있는기록매체
JP4919210B2 (ja) ビデオゲーム装置、ゲームの進行方法、並びにプログラム及び記録媒体
WO2005089895A1 (ja) ゲーム装置、ゲームプログラム、ゲームプログラムを記憶した記憶媒体およびゲーム制御方法
JP2001204963A (ja) モーション表示方法、ゲーム装置及び記録媒体、
JP7333204B2 (ja) 情報処理装置、ロボット操作システム、及びロボット操作方法
KR101114997B1 (ko) 게임 소프트웨어 및 게임장치
JPH08196744A (ja) 学習機能を有するコンピュータゲーム装置
JP6032710B2 (ja) シミュレーション装置及びプログラム
Oliveira et al. A framework for metroidvania games
KR101131882B1 (ko) 게임 장치, 게임 제어 방법, 게임 제어 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록 매체
JP6826171B1 (ja) プログラム、端末、サーバ装置及びシステム
US9421469B2 (en) Game machine, game system, game machine control method, and information storage medium
JP3041285B1 (ja) ビデオゲーム装置、ビデオゲームのプレイ制御方法及びその方法が記録された可読記録媒体
CN111773669A (zh) 一种在虚拟环境中生成虚拟对象方法及装置
JP4017114B2 (ja) 対局ゲーム装置、及び対局ゲームプログラム
JP2003079952A (ja) ビデオゲームのプログラムを記録したコンピュータ読み取り可能な記録媒体及びビデオゲームのプログラム及びビデオゲーム処理方法及びビデオゲーム処理装置
CN114565818A (zh) 一种基于mcu芯片的魔方转动状态智能监测方法方法与***
JP2007301020A (ja) ゲームプログラムおよびゲーム装置
JP6735780B2 (ja) 情報処理装置、情報処理方法およびプログラム
JP6783834B2 (ja) ゲームプログラム、ゲームプログラムを実行する方法、および情報処理装置
Pan et al. InstantGaming: playing somatosensory games using smartwatches and portable devices
JP7479541B2 (ja) ゲームプログラム、ゲームシステム、ゲーム装置、およびゲーム処理方法

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180613

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180613

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190725

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190920

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200204

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20200401

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200527

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20201007

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20201014

R150 Certificate of patent or registration of utility model

Ref document number: 6779941

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250