マラソンマッチのビジュアライザいろいろ
マラソンマッチのビジュアライザについて、各者/各社さまざまな作り方をしているので、まとめてみました。
longcontest-visualizer-framework
kimiyukiさんのlongcontest-visualizer-frameworkおよびRCO/リクルートの日本橋ハーフマラソンで使われている方法
(お互いに参考にしながら開発している?)
- 時系列ごとに行動を出力する形式の問題では、時系列に沿った状況の推移が見たい。そのため、UIで時系列に沿って再生・巻戻し・早送りする機能がある
- 入力・出力から毎フレームの情報を計算したのち、各フレームの情報をhtmlのCanvas 2Dに描画する
- Canvasを画像に変換したり、動画に変換する機能もある(https://github.com/jnordberg/gif.js を使っている)
画像出力からの動画変換
そういえばですが、標準エラー出力に
— kimiyuki@うさぎ🐇 (@kimiyuki_u) 2021年5月1日
-----BEGIN-----
LUDLUURLDDDDDDDLULDDDDD
-----END-----
みたいなフォーマットで暫定解を吐くようにして python3 https://t.co/9mJ3Szh8Si ってやればこの動画ができるようなスクリプトがあるので、まだ復習してる人はぜひ#AHC002https://t.co/g6VBDQ9Br7 https://t.co/iJzm3cDhoQ
https://github.com/kmyk/atcoder-heuristic-contest-002/blob/master/scripts/visualize.py
以下のようにして、AtCoder Heuristic Contest002の焼きなましの解の改善の様子を動画で出力している
- ----BEGIN----と----END----と囲まれた範囲はビジュアライザ用出力とする。解法プログラム内で一定間隔ごとにビジュアライザ用出力を行うようにしておく。
- 各ビジュアライザ用出力ごとに公式ビジュアライザを呼び出して画像を出力する
- 出力された画像をffmpegで動画に変換する
画像を出すだけなら、いろんなアプローチがある(Pythonのmatplotlib, RustのSVGクレートなど)。とりあえず画像を出力してffmpegで動画変換というのは汎用的なアプローチかもしれない。
gvc/General Visualizer Client
colunさんのマラソンマッチ用ビジュアライザのプロトコル/ライブラリ
解法プログラム内でプロトコルに沿った形式で命令を出力し、それを読み込んでJavaプログラムで表示する
siv3d
マラソンR3、今回も@ReputelessさんのSiv3Dをビジュアライザに使いました、感謝!手動配置したあとに、最小費用流で、選択したマスの中で最適な絵が自動で選ばれるようにしました。動画を作れる機能もあるっぽいので、あとで試します pic.twitter.com/wtlQDMkVV7
— nico_shindannin(診断人) (@nico_shindannin) 2014年7月11日
「ゲームとメディアアートのための C++ ライブラリ」であるsiv3dを用いて表示する
Unity
天下一 Game Battle Contest 2021 Spring で使われた方法
今回は 5 体のエージェントを操作して、タスクを達成するゲームです。
— 天下一プログラマーコンテスト (@klab_tenka1) 2021年4月24日
みなさんのご参加をお待ちしています!
※参加はコチラから!https://t.co/O093n0lOal#klabtenka1 pic.twitter.com/TLiRuBtTSj
https://github.com/KLab/tenka1-2021-spring
UnityのWebGLビルドを使っている。魅せる目的では有効そう。ビジュアライザで求められる要件とゲームエンジンの相性は良いように思えるが、さすがにヘビーな気はする
React
最近私が研究しているアプローチ
数理最適化 Advent Calendar 2020のネタがやっと完成した pic.twitter.com/AnawBv6Q1d
— threecourse (@threecourse) 2020年12月19日
ナーススケジューリング問題を焼きなまし法により解く
https://threecourse.github.io/nurse-scheduling-simulated-annealing/