UnityとゲームAIと将棋

Unity、Pythonを中心にゲーム開発やゲームAI開発の技術メモ等、たまに将棋も

2023-01-01から1年間の記事一覧

【AlphaZeroを理解する】多腕バンディット問題編

概要 囲碁、将棋、チェスなどのボードゲームにおいてルール以外のドメイン知識を利用せずに対戦用AIとしてのState-of-the-art(SOTA)を達成したAlphaZeroを細かく分解しながら理解していこうというシリーズです。今回はモンテカルロ法の基礎となる多腕バン…

【C#】List<T>とIEnumerable<T>の選択についてのメモ

結論 メソッド引数の場合 基本的にはIEnumerableを利用。IEnumerableの方がメモリ効率が良いため。 Listを使うのは下記のような場合。 要素数の取得をする foreach文を2回以上通過する 内部で配列やリストに変換している メソッド戻り値 基本的にはListなど…

【ゲームAI】オセロの結論が引き分けであることが解析されたらしい

結論 オセロの結論は引き分けということが解析されたらしい(弱解決) 詳細 オセロの結論は引き分けであるということを解析したという論文がArxivに投稿されていた。 arxiv.org 上記の論文を読んでみて気になったのが「解かれたゲーム」というのには ultra-w…

【AlphaZeroを理解する】モンテカルロ法編

概要 囲碁、将棋、チェスなどのボードゲームにおいてルール以外のドメイン知識を利用せずに対戦用AIとしてのState-of-the-art(SOTA)を達成したAlphaZeroを細かく分解しながら理解していこうというシリーズです。今回はAlphaZeroの根底にあるモンテカルロ木…

【GitHub】GitHub Actions でDiscordにWebHookで通知を送りたい時のサンプルコード

結論 name: 'GitHub Notification' on: workflow_dispatch: jobs: notify: runs-on: ubuntu-latest steps: - name: Send Discord notification uses: stegzilla/discord-notify@v2 with: webhook_url: ${{ secrets.DISCORD_WEBHOOK_URL }} title: GitHub Not…

【Unity】リリースビルドからデバッグ用コードを除外したい時のシンボル

結論 DEVELOPMENT_BUILD || UNITY_EDITORのシンボルで括る #if DEVELOPMENT_BUILD || UNITY_EDITOR #endif 詳細 Unityで開発をしていると リリース時はデバッグ用機能を無効、除外したい Developmentモードのビルド時はデバッグ機能有効にしたい Editor上で…

【Unity】MLAgentsでターン制ゲームのAIを実装する時の行動決定方法

結論 RequestDecisionメソッドを使用する 詳細 Unity MLAgentsで自作ゲームのAIを実装する際に、サンプルの実装を参考にすると思いますが、サンプルゲームにはリアルタイム性の強いものが多く、ほとんどが下記の画像ようにDecisionRequesterのコンポーネント…

【Python】Ubuntu で socket.gethostbyname() が 127.0.1.1 を返す時の対処法

結論 /etc/hostsファイル内で以下のように自分のPC名のホスト名が127.0.1.1に指定されているので固定IPに書き換える 127.0.0.1 localhost 127.0.1.1 <自分のPC名> 詳細 Ubuntu 上にて Python で Flask を使ってサーバーを立てるためのコードを書いている際に…

【LLM】大規模言語モデルを動かすのに必要なGPUメモリ

結論 【推論】 推論時の必要GPUメモリ[GB] = パラメータ数[b] × 2 【学習】 学習時の必要GPUメモリ[GB] = 推論時の必要GPUメモリ[GB] × 4 【n bit 量子化】 量子化時必要GPUメモリ[GB] = 通常時必要GPUメモリ[GB] × ( n / 通常時の bit 数) 【LoRA】 学習時…

【Python】シェルスクリプトで venv のセットアップをする

結論 シェルスクリプトを source コマンドで叩く必要がある。 python3 -m venv env source env/bin/activate pip3 install -r requirements.txt のようなシェルスクリプトは現在のシェルに反映させるためには source setup.sh と叩く。 詳細 仮想環境を venv…

【Node.js】Electronで開発ビルドと本番ビルドを分けたい時の手法

結論 ビルド時に.envファイルに環境変数を書き込む "scripts": { "build:dev": "tsc && touch .env && echo NODE_ENV=development > .env && electron-builder build --mac --x64 --dir", "build:prod": "tsc && touch .env && echo NODE_ENV=production > .…

ゲーム開発でのゲームAI・機械学習技術の活用

概要 ゲーム開発において、ゲームAI技術や機械学習技術を活用する流れが加速していると日々実感しています。実際の現場でも導入されることが増え、ゲーム開発の様々な部分で効率化が進んでいると思います。ただ、どのようなケースで、どのような技術を使用す…

【Unity】C#におけるアップキャストとダウンキャスト

Unityでゲームの開発をしている時に派生クラスで追加したフィールドに、取得した基底クラスのインスタンスを使ってアクセスしたいというケースがありました。 このケースを解決するためにアップキャストとダウンキャストについて調べていた際、以下の二つの…

確率統計関連の基本事項思い出し用シート

機械学習関連の本や論文などを読んでいると「記載されている数式の変形がどういった背景で行われているのか?」「そもそもこの式って何についての式なのか?」といったようなことをよく忘れてしまい、その都度調べるのも大変なので、基本的なものを一覧とし…

Android・iOS用アプリ「対局時計Simple」リリース

先日、Unityで製作していた「対局時計Simple」というアプリをGooglePlayおよびAppStoreでリリースしました。 対応言語は日本語のみで、無料のアプリになります。 GooglePlay play.google.com AppStore 対局時計SimpleTsubasa HizonoUtilitiesFreeapps.apple.…

Riderの設定をする時に参考にした記事まとめ

Riderの設定をカスタマイズする時に参考にさせてもらった記事をまとめておきます。 shibuya24.info kan-kikuchi.hatenablog.com unity-yuji.xyz qiita.com shibuya24.info qiita.com pleiades.io

Botを常時起動させておくためのservice, plistファイルを置く場所について

SlackBotやDiscordBotを作成する場合、サーバー上で常に起動させておきたいことが多いと思います。 そんな時に使うservice, plist ファイルの置き場所をよく忘れてしまうので、メモしておきます。 Linuxの場合 → /etc/systemd/system/ Macの場合 → /Library/…

Cygamesの「クライアントとサーバーの開発言語をC#に統一する試み」が面白かった

Twitterを眺めていたら流れてきたCygamesさんの「プリグラ」開発に関するCEDECでの発表資料を読んでみたら、非常に勉強になったので共有。 speakerdeck.com PvPゲームにおいては常にクライアントチートがつきまとうのですが このチートに対する対応策として …

【Unity】デザインパターンに関する解説記事のメモ

Unityでの開発で用いられるデザインパターンについての解説記事で分かりやすかったものをまとめておきます。 ■Singletonパターン zenn.dev ■MVPパターン developers.cyberagent.co.jp ■Factoryパターン coacoa.net ■Unity公式のデザインパターンに関するblog…

【Unity】MVPパターンに関する情報メモ

MVPパターンとはModel-View-Presenterパターンの略で、GUI周りに関するデザインパターンの一つです。個人でゲーム開発をしている際にUI周りのコードを分かりやすく書きたくなって、それならばMVPパターンを使ってみようと思ったので、参考になりそうなリンク…

最近注目しているAIエンタメコンテンツ

最近ではstable diffusion や chatgpt といった機械学習技術を応用したアプリケーションの登場で、ゲーム・エンタメ業界でもAIを取り入れているコンテンツが増えてきましたが、その中でも私が注目しているのが AIVtuberネウロ様 Gatebox の2つです。 m.yout…

【機械学習】RNNの内部計算メモ

本記事の概要 前回のFNNの内部計算の記事 tsubasa-alife.hatenablog.com の続きで、本記事ではRNNの内部計算について備忘録的にメモしておきます。 RNNの計算グラフ RNNの計算グラフ ※各パラメタ・要素の説明 : 時刻tにおける入力 : 入力層と中間層の結合重…

【機械学習】FNNの内部計算メモ

本記事の概要 大学・大学院時代に研究を始める際、ニューラルネットの基礎を学ぶためC++でFNNとRNNのスクラッチ実装に取り組んだことがあったのですが、その際にニューラルネットの内部計算がどのようになっているのかを理解するため、計算グラフをもとに内…

PRML読む時に参考にしていた資料やリンクのメモ

PRMLこと「パターン認識と機械学習」を読む際に大学院時代に参考にしていた資料をメモしておきます。 tips-memo.com herumi.github.io PRMLはひとりで読み込むのはなかなか大変ですが、こういった資料を作成してくれている方々がいると勉強しやすくて本当に…

個人製作ゲーム「さんもくにゃらべ」公開中

Unityroomで「さんもくにゃらべ」というゲームを公開しています。 unityroom.com ルールは通常の三目並べと同じで、縦横どちらかの一列に自分の色の猫を並べることができれば勝ちです。 対戦可能キャラは4キャラでそれぞれ対戦用AIの強さが異なります。 探索…

【Unity】Unity上でニューラルネットを組みたい時に使えるライブラリ候補のメモ

Unityでニューラルネットワークを組みたい場合にPythonでのPytorchやNumpyのように利用できそうなライブラリをメモしておく。 TorchSharp .NETからPytrochを利用できるようにバインドしたライブラリ。.NET公式。モバイル機器での動作には対応していないらし…

各プレイヤーによって状況とやることが異なる協力型ゲーム

ゲームには様々な種類のものがありますが、個人的にいいなと思っているのがタイトルにも書いたような「各プレイヤーによって状況とやることが異なる協力型ゲーム」です。 自分がやったことがあるもので言えば、 We Were Here シリーズがあります。 store.ste…

【Unity】PrefabのInstantiateやロードが重いことに関する情報メモ

Unityでゲーム開発をしていて、Prefabを生成する際に画面がハングする問題に悩まされていたので、その際に調べたリンクをメモしておく。 qiita.com www.snoopopo.com crosstie-bell.com これらの記事を読んでいて個人的に助かった情報は以下の二つ。 Instant…

【Unity】深層学習用ライブラリ "KelpNet" を使ってみる

本記事の概要 ※Qiitaからはてなブログに引っ越しました! 本記事ではC#向け深層学習用ライブラリKelpNetを使って簡単な学習を行う方法を解説します。 学習のサンプルとしてはFNNでXORの学習を行うコードを作成し、Editor拡張上で学習を実行します。 KelpNet …

【Unity】遺伝アルゴリズム用ライブラリ "GeneticSharp" を使ってみる

本記事の概要 ※Qiitaからはてなブログに引っ越しました! 本記事では、C#向け遺伝アルゴリズム用ライブラリ "GeneticSharp" に関して Unity上に導入する方法 Unity上でのGeneticSharpの使い方 遺伝アルゴリズムを使って簡単な問題を解く方法 をまとめていま…