Morikatron Engineer Blog

モリカトロン開発者ブログ

CEDEC2020の補足 ー格闘ゲーム編その1ー

 お久しぶりです。モリカトロンでエンジニアをやっております、馬淵です。

 前回私がブログを書いたのがNEATに関して書いたとき*1(2020年2月24日)で、これを書き始めているのが2020年9月8日なので、私がブログを書くのは実に6ヶ月強ぶりになります。 何故これほど間隔が空いたのかですが、2020年9月4日のCEDECにおける弊社の講演を見ていただいた方には既に察しの通り、CEDEC発表に向けて色々行っていたからです。 今回の発表で出てきたWANN(Weight Agnostic Neural Network:重みを無視できるNN)ですが、実はNEATの手法を利用して実装されており、私がNEATに関して書いているときはWANNに関しての調査を行っている時期でした。 その後、WANNを手加減や調整に利用出来たらよいという理想を基に格闘ゲームAIのプロジェクトが立ち上がり、CEDECでの発表がトントン拍子で決定、発表に至るという状態です(完璧な伏線回収ですね)。そこで、今回はCEDEC2020の発表で説明しきれなかったことや、発表に至るまでの失敗例、創意工夫、苦労話などを書いていこうと思います。

続きを読む

【CEDEC2020】模倣学習でAIに3Dアクションゲームを攻略させてみる(後編)【ML-Agents】

こんにちは、エンジニアの竹内です。
この記事は【CEDEC2020】模倣学習でAIに3Dアクションゲームを攻略させてみる(前編)【ML-Agents】 - Morikatron Engineer Blogの続きとなります。
前編ではUnity側で行った学習の準備を中心的に扱いましたが、後編ではPython側における学習パイプラインやアルゴリズムの実装、それから学習した結果や考察などを中心に扱っていきます。

  • Python側でやること
    • 行動の選択肢の変換
    • gymラッパーの作成
    • デモデータのロード
    • アルゴリズムの実装
  • 学習
  • 他に試した事や失敗例、考察
    • デモの行動を重視しすぎると敵を攻撃しなくなる
    • チェックポイントに戻ることでデモにない状態に陥る事がある
    • 局所的な方策と大局的な方策を分けて学習させる(失敗)
    • 状態価値と行動価値の可視化
  • まとめ
続きを読む

【CEDEC2020】模倣学習でAIに3Dアクションゲームを攻略させてみる(前編)【ML-Agents】

こんにちは。エンジニアの竹内です。
まずはじめに、この記事はCEDEC2020というゲーム開発者向けのカンファレンスで発表した内容(CEDEC2020: 攻略、接待、変更に強いAIプレイヤー開発のためのアプローチ)の模倣学習部分について、発表で網羅しきれなかった検証過程での試行錯誤や、考察、技術的な部分の深堀りなどについて解説したものです。
CEDEC2020で行った講演の資料は以下のリンクからご覧いただけますが、この記事単体でも内容は追えるようにしています。
攻略、接待、変更に強いAIプレイヤー開発のためのアプローチ
前編では主に学習を行うためにUnityサイドで行った準備について触れていきたいと思います。

  • 何をしたか?
  • 誰のための記事?
  • 学習に使用した環境について
  • Unity ML-Agents
  • 模倣学習させるための準備
    • 特徴量と報酬の設定
      • 画像情報を利用しなかった理由
      • 特徴量の選択
      • 報酬の設定
    • エージェントの移動方法の変更
    • 最大ステップ数などの細かい部分の設定
    • デモの作成
  • まとめ
続きを読む

幻想的な旅:自分のマンモスを復活しました・パート3

こんにちは!まるたんです。今日はみんな待てました、マンモスパート3の記事です!

 

AI:ペイントができる?

ペイントて言う時に、何ですか?意味を調べるとペイントは「着色のため物体の表面に塗る流動体」。AIはそれを物理的に行うことはできません。ただ、AIはこれを事実上行うことができます。

しかし、アーティストとしての絵画について、独自のビジョンを持っている場合、AIは人間の美的タッチで創造的な作業を行うことが困難になります。

AIのはとても上手のがスタイルのコピー・転送することです。例えば、写真から有名な画家のスタイルにする。

マーケットにこういういくつなサービスがある。一番有名のは:

AI Gahaku

 

DeepDreamGenerator

AI Painter

楽しいですので試してみてください。

 

塗料のツール:

塗装を始めるために、いくつのツールは必要になる。

※:今日はエアーブラシのペインティングではなくて筆のペインティングの話をするのでエアーブラシの技術の話はしない。

筆:

筆の形、サイズなど大勢な違う種類はあります。

最大の違いは毛の種類です:人工または自然な毛。

初心者の時、人工に使った方がおすすめです。一番安いだから。

そして、4種類ぐらいで一応大丈夫です。

サイズ1:一番使う筆

サイズ4:大きな作業の筆

ドライブラシ:ドライブラシの技術の専門筆(後で説明します)

サイズ4/0ぐらい:詳しい詳細をペイントする時

f:id:morika-martin:20200824110617j:plain

https://www.bnamodelworld.com/mig-productions-mig-abt830-1-round-brush-size-1?zenid=04cac8c9fb57b6c6705f98b015018539

f:id:morika-martin:20200824110701j:plain

https://www.games-workshop.com/en-JP/M-Drybrush
塗料:

同じくチョイスが多いです。始まりたい場合、一番簡単のはGamesWorkshopのお店に直接行ってスタッフに相談のお願いをしましょう。

f:id:morika-martin:20200824110930j:plain

http://quindiastudios.blogspot.com/2012/04/citadel-paint-bundle.html
プライマースプレー: 

ミニチュアのプライミングはペイントの重要な部分です。プライマーは、モデルの表面を塗装する準備をする特別なタイプの塗料です。 基本的に、プライマーは塗料を吸収し、ミニチュアへの接着性を高めるために作成されます。

f:id:morika-martin:20200824111045j:plain

https://citadelcolour.com/playlist/6038888620001/6038126833001
 ウェットパレット:

ウェットパレットは特別な種類のペイントパレットであり、ペイント中に濡れた状態を保ち、ペイント中の乾燥を防ぎます。

f:id:morika-martin:20200824111115j:plain

https://www.incomgaming.co.uk/products/painter-everlasting-wet-palette
他:

筆のクリーナー:ペインティングのセッションが終わる時、筆のクリーニングするためのツール

ティッシュ、水

ミニチュア塗料のステップ:

 ペインティングの技術がたくさんあります。今日はそれぞれの技術を詳しい説明するわけでなくて軽くよく使っている技術の意味の説明をする。

良い画家になることは非常に長いクエストです。数年の練習・失敗、気が長いのは必要です(笑)。しかし、今の世界で簡単に始めて、短時間で十分なレベルに到達することは、これまでにないほど簡単です。チュートリアルは沢山あります!

いいスタートはこちらになります:

https://citadelcolour.com/#painting-basics

 

ベースコート:

ベースコートは、ミニチュア、具体的にはミニチュアのパーツに塗る最初のペイントコートです。多くの場合、ベースコートは中間調の色なので、シェーディングに必要な場所を暗くし、ハイライトを明るくすることができます。

シェーディング:

シェーディングは、別の色を暗くするために、何らかの形で色を適用しています。 あなたが適用するより暗い色は、レイヤリング、グレージング、ワォッシングなどで行うことができます。

ハイライト:

ハイライトは、照明を表現するために別の色に明るい色を適用しています。

ウォッシング:

ウォッシュは、非常に水っぽい特殊なタイプの塗料です。 ミニチュアにウォッシュを適用して、陰影と深みを追加します。

ドライブラシ:

これは筆を使ってペイントを塗って、ほとんどのペイントをティッシュペーパーで拭き取る。 次に、ミニチュアを軽くブラッシングします。一般的にこれは何かをすばやく簡単にハイライトするための優れた方法です。

ブレンド:

方法がたくさんあります。色のグラデーションを作成するプロセスです。 ブレンディングを使用すると、2つの異なる色の間のスムーズな移行を作成したり、色を暗くしたり、明るくすることもできます。

グレージング:

グレージングとは、色を取り、別の色の上にペイントして色を付けるプロセスです。

レイヤリング:

これはペイントのレイヤーを別のペイントのレイヤーの上に適用して、通常は前のレイヤーの一部を表示したままにするペイントテクニックです。 標準のレイヤリングでは、多くの場合、シェーディングとハイライトを作成するために色を構築する必要があります。

 

ミニチュアのペインティングをする時、毎回上に書いてあるの技術を使うわけではなくて、あなたはあなたの好み、スキル、そしてあなたが目指しているレンダリングに適応します。

 

マンモス:

早速自分のマンモスを復活しましたイメージです❣

f:id:morika-martin:20200824124723j:plain

f:id:morika-martin:20200824124758j:plain

f:id:morika-martin:20200824124823j:plain

f:id:morika-martin:20200824124844j:plain

f:id:morika-martin:20200824124913j:plain

f:id:morika-martin:20200824124952j:plain

f:id:morika-martin:20200824125031j:plain

f:id:morika-martin:20200824125103j:plain

f:id:morika-martin:20200824125131j:plain

f:id:morika-martin:20200824125215j:plain

f:id:morika-martin:20200824125314j:plain

f:id:morika-martin:20200824125343j:plain

f:id:morika-martin:20200824125431j:plain

 

このたびに長く付き合ってもらってありがとうございました。また今度他の記事で会いましょう!

【CFR】不完全情報ゲームを学習するAIを実装してみる【KuhnPoker】

こんにちは、エンジニアの竹内です。
これまでの記事ではDQfD、PPOといった深層強化学習のアルゴリズムを紹介してきましたが、今回は少し趣向を変えて、ニューラルネットを使わずに不完全情報ゲームの戦略を求めるアルゴリズムを扱いたいと思います。

  • 不完全情報ゲームのAI
  • KuhnPokerのルール
  • 記号の定義と説明
    • ナッシュ均衡
  • Counterfactual Regret Minimization
  • 実装
    • ゲームのルール部分
    • CFRアルゴリズム
  • 結果
  • まとめ
  • References
続きを読む

島旅のススメ(後編)

こんにちは。

モリカトロンのお外担当の三宅です。
前編から間が空いてしまいました。
その間に『Go To トラベル』キャンペーンが開始となりましたが、東京は除外など色々ゴタついていますね……。
僕もこのキャンペーンを利用して島旅を計画しようとしていたのですが……さてどうしたものか。

といったところで後編です。
前回は島に向かう「船旅」だけで字数が尽きてしまいました。
今回は改めて「島」の魅力について書いてみたいと思います。


島って…?

「島」とは「大陸の面積より小さく、四方を海洋に囲まれた陸地である。(Wikipedia)」と定義されています。
「四方を海洋に囲まれた」という特徴、それはすなわち普段生活している陸地とは、物理的に切り離された世界です。

前回出航の高揚感、解放感・非日常感を書きましたが、島はその延長線上にある存在なのです。
つまり、島に滞在すること自体が“解放される”、癒しの世界なんだと感じています(笑)


また「島」とは、俯瞰してみれば、海の中にそびえたつ「山」です。
山頂部が海面から突き出しているものが「島」といえるかもしれません。

つまり、島とは「海の中にある山」、1か所で山も海もどちらの楽しめるロケーションが「島」なのです。
限られた休暇の中で自然を楽しむには、こんなお得なロケーションはなかなかありませんよ!

 

島の「山」

島の成り立ちにもよりますが、海底から屹立している分、往々にしてダイナミックな地形が楽しめます。
ここではその一部を紹介してみますね。

 

■青ヶ島

八丈島のその先にある火山島で、島の大半がカルデラの外輪山でぐるっと囲われています。その中にはもう1つ内輪山のカルデラがある、珍しい“二重カルデラ”という地形です。

f:id:morika-miyake:20200804073136j:plain

内閣府防災情報ページより http://210.149.141.46/kohou/kouhoubousai/h28/84/volcano.html

しかし何度見てもすごい地形…僕はまだ未訪なのですが…何とか行ってみたい島です。

(船の就航率が悪く、ヘリコプターも座席が限られているため、天候が悪いと“しばらく帰ってこれない”ことを覚悟しないといけないですが…会社が許してくれるのなら(笑)

 

■屋久島

云わずと知れた世界自然遺産の島…樹齢4000年とも6000年ともいわれる縄文杉が有名ですね。

f:id:morika-miyake:20200804074814j:plain

縄文杉…やっぱり荘厳ですね。

屋久島は地下で冷え固まった溶岩(花崗岩)がマグマの作用によって隆起してできたと言われています。

なので島の大地のほとんどが花崗岩質で、その上に薄く堆積した土に根を張る屋久杉は貧栄養のため成長が遅く、年輪が詰まった緻密で硬い木質になり、結果的に長寿であると言われています。

上述のように花崗岩の隆起によってできた島なので、島内は巨岩・奇岩が目白押しです!(クライマーさんなら登攀したくてワクワクします?)

f:id:morika-miyake:20200804080133j:plain
f:id:morika-miyake:20200804080156j:plain

左:トーフ岩 右:天柱石 https://www.rinya.maff.go.jp/kyusyu/yakusima_hozen_c/mountain/170928.html

右の天柱石をふもとから見るとこんな感じです。

f:id:morika-miyake:20200804080437j:plain

山頂付近に天柱石がそびえているのが見えますか?

山々の頂に、こんな巨岩があるなんて、とても不思議な光景です。

f:id:morika-miyake:20200804080515j:plain
f:id:morika-miyake:20200804080455j:plain
左:モッチョム岳 右:千尋の滝

モッチョム岳も大きな岩盤でできていることがわかります。その麓にある千尋の滝、このバカでかい岩盤、1枚岩なんですよ!

  

■南島

f:id:morika-miyake:20200804081704j:plain
f:id:morika-miyake:20200804083326j:plain
小笠原自然情報センターより http://ogasawara-info.jp/index.html

小笠原父島の南西に浮かぶ、“沈水カルスト地形”が特徴の南島です。これは石灰岩の大地が雨などに浸食されたのちに、海面上昇に伴い沈降して形成された地形で、国の天然記念物としても指定されています。

左の湾状のところ(鮫池)からボートで、もしくは中央のすり鉢状の窪み(鏡池…右の写真)を囲む岸壁にに空いている穴からカヤック、もしくは泳いで上陸します。

カツオドリやオオミズナギドリの営巣地でもあり、岩の窪みをのぞくと卵を温める親鳥やヒナを見ることもできますよ!


島の「海」

四方を海で囲まれた「島」は、当然全周どこも「海」があります。
特に太平洋上の黒潮の当たる海では、ズドンと抜ける透明度、澄み切った青い海がとても魅力的です。
この青さは、島々によって「八丈ブルー(八丈島)」「慶良間ブルー(慶良間諸島)」「ボニン(無人)ブルー(小笠原)」など、島々にその青さが冠された言葉ができるほどです。

f:id:morika-miyake:20200804084134j:plain

この澄み切った青さ!

そして、海中はパラダイス!
珊瑚礁の発達した島々では、サンゴの織り成す景観とともに色とりどりの魚が群れ泳ぐ姿が楽しめる、まさに天然の水族館です。
f:id:morika-miyake:20200804084246j:plain人が少なく採集圧も低い離島では、魚影の濃さも圧倒的で、もういつまでも海に浸かって眺めていたくなるくらい!

f:id:morika-miyake:20200804165655j:plain
f:id:morika-miyake:20200805082532j:plain
f:id:morika-miyake:20200804165715j:plain
水槽じゃなくって水中です
f:id:morika-miyake:20200805080837j:plain
f:id:morika-miyake:20200805082848j:plain
ひょいと手づかみできたり(笑)

もちろん釣りだって最高です(笑)

f:id:morika-miyake:20200805080915j:plain
f:id:morika-miyake:20200805083320j:plain


ビーチから泳ぎ出るだけでウミガメに出会えたりしますし、ボートで出ればイルカと一緒に泳げたり、離島ならではの体験がそこには待っています!

f:id:morika-miyake:20200804084316j:plain
f:id:morika-miyake:20200804084553j:plain
イルカたちともこんなに近くで!

 僕はマスクとフィンとシュノーケルの3点セットはいつも持っていくのですが、ビーチエントリーで手軽にこれらが楽しめる、というのが島の海の醍醐味です。
南伊豆のコンディションの良いときの海が、離島では普段の海、というイメージかなと思います(笑)

 

ただし、一つ気を付けなければならないのは、島の海は「流されたら終わり」ということです。
多くの島々の海は外洋に直結しています。
海水が滞留しない(=潮の流れが速い)からこそ、この抜けるような透明度が楽しめるのですが、もし流されてしまうと周囲に流れつける陸地はありません。
ですので、遊泳区域などはしっかりと守り、潮が速いときは沖にでない、などの自衛策もしっかりと講じなければいけません。

 

なお、直接火山の噴火によって島ができたもの(今まさに小笠原西之島が噴火によって島が大きくなっていっていますね)、地下のマグマの活動によって岩盤が押し上げられたものなど、島の成り立ちには地球の地殻活動がかかわっているものが多く、そのため、島には温泉が楽しめるところも多かったりします。
トレッキングや海遊びで疲れた体を癒す温泉…なんて魅力的な組み合わせなんでしょう!

大海原に沈む夕日や、満点の星空を眺めながらつかる温泉は本当に最高です!

f:id:morika-miyake:20200804085657j:plain

https://www.travelroad.co.jp/izu/spot/hachijojima/miharashinoyu

島の自然

そして四方を海で囲まれた「島」では、海によって隔離された個体群が独自の進化を遂げ、島固有の動植物がみられることも特徴です。
(ダーウィンのガラパゴス諸島が有名ですが、日本でも小笠原は固有種の宝庫で、「日本のガラパゴス」なんて異名もあります)

島を散策すると、普段あまり目にすることのない動植物と、本当に身近に接することができます。

f:id:morika-miyake:20200805060732j:plain
f:id:morika-miyake:20200805060802j:plain
マルハチ:葉の落ちた跡が丸の中に「八」(をひっくり返した)ように見えますね
f:id:morika-miyake:20200805063805j:plain
f:id:morika-miyake:20200805063832j:plain
左:アカガシラカラスバト 右:メグロ ※小笠原ビジターセンターtwitterより
f:id:morika-miyake:20200805064729j:plain
f:id:morika-miyake:20200805065244j:plain
サルとかシカとか ヤクザルどんだけくつろいでるねん…

そう…人も往々にして少ないからか、動物の警戒心も比較的低く、案外近くで見ることができる、というのも大きな魅力です。上のヤクシマザルのように…(笑) 

島の「星」

島は四方を海で囲まれている、つまり島の周囲には人工的な明かりが殆どないことが大半です。
これは当然他の陸地から離れた“絶海の孤島”ほど顕著で、例えば瀬戸内の島々では対岸の本州や四国の沿海部、近隣の島々の明かりは目に入ります。
それでも、都市部のそれと比べると、周囲の“暗さ”は際立っています。
これは「星を見る」には最適な環境です。
東京の夜空ではなかなか見えることのない「天の川」も、離島ならはっきりと肉眼で視認できます。

f:id:morika-miyake:20200805084242j:plain

小笠原ビジターセンターtwitterより

ちなみに屋久島には湯泊温泉という海に面した露天の温泉があるのですが、夜にここに来るのが超オススメです!

ぬるめの温泉につかりながら空を見上げると…全天に広がる星空。

f:id:morika-miyake:20200805060135j:plain

男湯と女湯が衝立で分かれているだけ…なので真っ暗な夜がおすすめです(笑)

  

ほら。もう島へ行くしかないでしょう!

海水温は9月が一番高く、秋に向けてプランクトンが減り海中の透明度が上がる季節です。

 

コロナがもう少し落ち着いたら、ぜひ島旅も検討してみてください!

 

 

Pythonと音楽と...(3)MIDIファイルの再生

こんにちは、モリカトロンのチーフエンジニア松原です。 連載第3回めの今回は、MIDIファイルの読み込み、解析、音声波形の生成、合成、再生まで実装しました。

  • MIDIについて
    • 概要
    • MIDIの仕様書を読みたい方は
    • MIDIファイルの中身
    • MIDIファイルを入手するには
  • PythonでMIDIを扱うには
    • むかし
    • いま
  • sample5_play_midi.py
  • marching.midについて
  • まとめ
続きを読む