[レポート] Dynamic Encounters for Veteran Players Using Machine Learning #reinvent #GAM305

 

タケダノです。

ギャンブルの街ラスベガスでワークショップに参加するというギャンブルをしてきました。

 

今回参加したのはGAM305:Dynamic Encounters for Veteran Players Using Machine Learning

機械学習を使ったベテランプレイヤー向け動的な対戦としておきましょうか。

ゲームにおいてベテランプレイヤーが飽きないような仕組みを作るのがゲーム会社としても一捻り欲しいところ。それを機械学習で解決しましょうという取り組みです。

 

結論

内容に入る前に、結論から申し上げますと、「最後までたどり着けませんでした」ということになります。

2時間枠だけでなく、ラスベガス滞在中、日本に帰国してから、じっくりと検証をしていたのですが、昨日よりワークショップのためのサイトが終了しておりまして、続きを断念するという顛末でございます。

 

2時間に渡るセッションで、ワークショップ自体2部構成になっていたので、日本に居ながらでもできるのか、やってみたいところでした。(ちなみに2回に分けて文字起こしをしたところ、1回目が4千500文字、2回目が6千文字となっていました。)

従いまして、検証記事については、ボツとさせていただきます。

 

概要

Are you trying to keep your game fresh for long-time players but don't have the resources to keep building new handcrafted content? Join this session to learn how to launch dynamic content for groups of players without relying on static techniques like instancing or spawn points. We dive into Amazon Kinesis and Amazon Kinesis Data Analytics for real-time data collection and hotspot detection, and machine learning for encounter-building based on observed player behavior.

 

スピーカー

Curd Zechmeister - Amazon Web Services

Chris Finch - Sr. Gaming Specialist SA

Daniel Whitehead - Solutions Architect, Amazon Web Services

Shreyas Subramanian - AI/ML Specialist Solutions Architect

 

内容

今回は大体30人弱くらいの参加といったところです。開始早々に諦めた人や、最後までたどり着いたのか、時間が終わる頃には半分くらいになっていました。

ワークショップなのでPCが必要です。

持っていない人にはPC貸し出しをしているようですがみんな持参していました。

AWSアカウントも必要です。

サービスアカウント発行してくれるようですが、みんな準備は万端といったところでした。

 

今回は主催側で用意した銀河系での対戦ゲームにチャレンジです。

問題設定>アクティビティ1>アクティビティ2>チャレンジという流れで進みました。

 

まずは課題設定をします。

「ゲーム時間は20分、50人で18ヶ月のプロジェクトに取り組んだ。」というのがFuller Game ProductionのFullerさんから設定された課題です。

今回の全体像です

 

これを前後半に分けて取り組みました。今回は、流れだけ紹介します。

ゲームは宇宙を舞台とする多人数参加型ゲームで"EmuStar One"と言います。

Activity 1: Ingestion and Monitoring

最初に簡単な行動分析パイプラインとモニタリングプラットフォームを設置します。

 

アーキテクチャ1 – 取り込みとモニタリング

アナリスティックスパイプラインをセットアップします。パイプラインは以下の図のようになっています。

SERVICE:COGNITO

ゲームサーバーはCognitoを利用してAWSに対して自分自身を認証し、他のAWSサービスにアクセスするのに必要な役割をもつ暫定的な資格情報を割り当てることが出来ます。

 

SERVICE:FIREHOSE

Kinesis Firehoseで配信ストリームを作成、設定します。

SERVICE:CLOUDWATCH

CloudWatch Dashboardを作成し、ウィジェットの表示が出来るようにします。

CHECKPOINT:CONNECT!

ここでは作ったものをテストします。

 

ここまでがLAB1です。

 

LAB 2 - BUILDING A REAL-TIME ANALYTICS PIPELINE

LAB1では、Cognito Identity PoolとKinesis Firehose Streamを設定しました。LAB2では、Kinesis Analyticsアプリケーションを配線し、Lambda出力関数を作成してゲームクライアントに返すイベントを生成します。

 

このLAB2では、LAB1の同じKinesis FirehoseとS3バケットを使用しますが、今回はKinesis Analyticsを使用してS3バケットにストリーミングされるデータを繰り返し処理します。下の図は、このラボで構築しているデータパイプラインのアーキテクチャを示しています。このラボを終了すると、ゲームクライアントがこの分析パイプラインを移動し、SQSメッセージを介してゲームクライアントによって消費されるイベントによって循環パイプラインが生成されます。

 

SERVICE - KINESIS ANALYTICS, LAMBDA, SNS & SQS

Kinesis Firehose Delivery Streamを接続、設定をします。Firehoseストリームがクライアントに接続されている間に"Discover Schema"の設定をします。

SERVICE- SQS & SNS

ゲームクライアントにメッセージを戻すための取り込みメカニズムを作成しようとしています。これは、SNSトピックを購読し、SNSトピックにサブスクライブするSQSキューを作成します。

SERVICE – DYNAMODB

検出された新しいホットスポットをフィルタリングする場所が必要です。ホットスポットと、ハッシュとレンジキーとして効果的に使用できるutcフォーマットの文字列を利用するため、DynamoDBを使用します。

SERVICE – LAMBDA & KINESIS ANALYTICS

今、Kinesis Analyticsの問い合わせによりデータを取得し、メッセージをゲームクライアントに戻すパイプラインができました。もしイベントが起動されるべきなら、推論するためにKinesis Analyticsが呼び出すことができるホットスポットを作成する必要があります。

SERVICE – API GATEWAY, LAMBDA, SAGEMAKER

検出された新しいホットスポットをフィルタリングする場所が必要です。ホットスポットと、ハッシュとレンジキーとして効果的に使用できるutcフォーマットの文字列を利用するため、DynamoDBを使用します。

CHECKPOINT: CONNECT!

いよいよ、ビルドしたものをテストするときです。ゲームエミュレーションに接続する準備ができたら、Firehose Delivery Stream、API Gateway Invocation URL、およびCognito Identity Pool IDフィールドに、これらのアセットを作成したときに生成された値が入力されていることを確認します。ワークショップのファシリテーターの1人が、ゲームサーバーからアナリティクスを受け取っていることを知らせ、ゲームクライアント用のSQSで生成されたメッセージを見ることができます。

ここまででLAB2の完成となります!

スライド上ではコンテストの項目が用意されていましたが、実際にはコンテスト的な試みはなされませんでした。おそらくほとんどの人が最後まで辿り着かなかったのかもしれません。

最後に

いかがでしたか。

既にスライドは発表されているようです。

興味のある方は“Dynamic Encounters for Veteran Players Using Machine Learning (GAM305) - AWS reInvent 2018”で検索してみてください。

 

また来年、ワークショップに参加するチャンスがあればチャレンジしてみたいと思います。