LoginSignup
23
7
お題は不問!Qiita Engineer Festa 2023で記事投稿!

ポケモン版アキネーターのwebアプリを作ってみた! / 実装編

Last updated at Posted at 2023-06-15

概要

皆さん, アキネーターというゲームはご存知でしょうか.
特定の人物を, 質問から当てるゲームです.
やったことある人はわかると思うのですが, 何回かの質問で目的の答えまでたどり着けるのはすごいですよね.

そんなアキネーターなのですが内部のアルゴリズムは秘密となっているそうです.
面白そうなので, 内部のアルゴリズムを妄想し, 実際に組んでみました!!

題材としては, 種類の多くデータのまとまっているポケモンをターゲットにしました.

よければ遊んでやってください

アルゴリズム編と実装編の2つを予定しています.

アルゴリズム編の復習

アルゴリズム編の結果から,

  • 質問と実際の解答のデータセット
  • ユーザーの回答

の2つがわかれば, 式をこねくり回すことで

  • どのポケモンが選ばれるのか
  • 次の質問をどれにすればいいのか

の2つが概算できることが示せました.

そのため, 残る課題は

  • 式中のハイパーパラメータをどう決めるのか
  • 質問と実際の解答のデータセットをどう作るか

が挙げられます

ハイパーパラメーターをどう決めたか

自分の数式の場合では, softmaxの中の$\beta$がハイパーパラメータになります.

実際のユーザーログというのが得られない以上. ヒューリスティックに決め打ちするしかありません.
今回は, 「ユーザーの回答」と「実際の状態」の誤答率が5%くらいになるようにハイパーパラメータを調整しました.
(ユーザーは20回に一回くらい, 間違った答えを入力するだろうと)

この誤答率を高く見積もりすぎると, 特定するまでの質問の回数が多くなります.
逆に誤答率を低く見積もりすぎると, ユーザーが一問でも間違えにると, 必要な質問が急増します.

質問と実際の解答のデータセットをどう作るか

データセットの縦幅としては, 全ポケモン
横幅としては, 全質問になります
そのため, イメージとしては

赤色? 青色? 緑色? 黄色?
ヒトカゲ
フシギバナ
ゼニガメ

といった表を作ればいいことになります.

ポケモンは1000匹程度いることを考えると, これを人力で行うのは不可能です.

そのため, ポケモンのデータベースであるpokeAPIを使いました

このapiを叩くことで, ポケモンの必要な情報が得られます.

このapiで得られる情報などから質問を以下のように生成しました

  • 種族について
  • 性別の偏りについて
  • 伝説・幻ポケモンか
  • 身長体重について
  • 世代について
  • タイプやタイプ相性について
  • 進化について
  • 体色について
  • 身体的特徴について
  • 名前について

実装について

flutter×pythonなライブラリである, fletで実装を行いました
GUIだけだと2時間ぐらいで, 完成しました.
気軽にサクッとpythonでwebアプリを組みたい方にオススメです!!

23
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
7