Morikatron Engineer Blog

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

【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について
  • まとめ
続きを読む

Pythonと音楽と...(2)トラックとミックス

こんにちは、モリカトロンのチーフエンジニア松原です。
連載第2回めの今回は、前回作成した音を鳴らすプログラムをもうすこしキチンとした実用的なプログラムに改造して行きます。具体的には、音楽を扱いやすいように「トラック」を導入し、音の切れ目のプチプチノイズを除去する仕組みも入れてみます。また、音名(C4とかそういうの)を指定してメロディを作り、複数トラックのミックス(合成)まで実装します。

  • トラックとは
  • sample3_play_all.py
  • プチプチノイズの除去
  • トラックのミックス
  • sample4_play_all_tracks.py
  • ということで
続きを読む

ホットサンドメーカーを買いました

暑いんだか涼しいんだか分からない毎日が続いておりますが、皆様いかがお過ごしでしょうか。
食べ物のお話担当、モリカトロンの大里です。

前回の更新でネタが尽きたら小麦粉の話でもするか、と思っていましたが、キャンプ大好き上司たちの話を聞いているうちにネタがふってきました。そう、タイトルにあるとおり「ホットサンドメーカー」です。

最近はお家でできるキャンプやら、ホットサンドメーカーで作るレシピも話題になってます。なので周回遅れだとは思いつつも、自分が買った時に気をつけたポイントをお伝えいたします。

  • どこで使うか?
  • 直火式だとしても、IH対応か?
  • ちゃんとパン同士が圧着できるか?
  • サンドイッチ以外も焼きたい!
  • 内側で分割できたり1枚で焼いたり
  • コンパクトにしまいたい!
  • そういえば、トースターで使うやつって?
  • 結論(ではない)
続きを読む

Pythonと音楽と...(1)音を鳴らす

モリカトロンのチーフエンジニア松原です、こんにちは!
今回から「Pythonと音楽と...」と題して連載します(全部で四回くらいの予定)。第一回は「音を鳴らす」。音のデータ化や録音・再生の仕組みから、Pythonで指定した周波数の音を発音するところまで、となります。Pythonで音を鳴らしたい人、Pythonでメロディを再生したい人、PythonでMIDIを扱ってみたい人などが対象読者です。どうぞよろしくお願いします。

  • そもそも音ってなんなの?
  • Pythonで音を出すには
  • サイン波を作って鳴らしてみる
    • sample1_play_file.py
  • メモリ上の音を直接鳴らす
    • sample2_play_buf.py
  • 今後の予定
  • 参考にさせていただいたサイト(ありがとうございます)
続きを読む

WebSocket を TCP の代わりに使ってみる

どうも、モリカトロンでプログラマおじさんをしている岡島です。

現在 TCP を使ってプロセス間の通信を行っているのですが、同一のマシンで沢山のプロセスと通信しようとすると空いているポート番号がたくさん必要になるし、 ネットワーク上の複数の機器を使って分散処理をしようとするとポート開放をしないといけない……と悩むことが多くなってきました。 そこで TCP の代わりに WebSocket を使えないないかを検討しています。

ということで、今回は Python ですでに TCP を使って通信をしているプログラムを出来るだけ少ない変更で WebSocket に置き換えられないかというお話です。

  • TCP 通信をしていて困ってること
  • TCP の代わりとして見る WebSocket
  • TCP を WebSocket に置き換えてみる
    • Python で使える WebSocket
    • asyncio?
    • 簡単な TCP 通信のプログラムを Websocket に置き換えてみる
      • tcp_server.py
      • tcp_client.py
      • ws_server.py
      • ws_client.py
    • 同一機器から複数接続してみる
      • ws_client_multithread.py (これは正しく動かない)
      • asyncio.get_event_loop() はサブスレッドから呼び出せない
      • 正しく動く ws_client_multithread.py
  • 最後に
続きを読む