CodinGame Spring Challenge 2023 解法まとめ

ゲームAIのコンテストCodinGame Spring Challenge 2023の解き方のまとめです
1
bowwowforeach @bowwowforeach

ジャッジのコードを移植したけど、びっくりするぐらい無駄な探索が多かった。ルールを理解して書き換えたらかなり高速になる。

2023-06-05 17:47:52
bowwowforeach @bowwowforeach

アリの移動方向は周りのアリの数とビーコン数で変わるから毎回計算するしかないと思ってたけどできるのかな

2023-06-05 17:33:29
ヴァル @ValGrowth

@bowwowforeach アリの移動経路は最短経路の中でしか変化しないので最短経路の1歩目だけ調べればよくて、Refreeコードで毎回目的地までPathFindingしてるのが省略できるって感じです。 「目的地への最短経路の1歩目の中から、アリ数とビーコン数が最も多いセル」を選ぶ処理は毎回必要です。

2023-06-05 17:43:44
いちご @itigo_purokonn

@bowwowforeach 候補が減らせるという話だと思ってます

2023-06-05 17:36:36
いなにわ @inani_waon

こどげ方針 ・目標構築は最小森 ・ビーコンは等分 ・卵だけ狙う→蟻数負けが無さそうになったら両方狙う ・基地との距離が敵の倍以上あれば諦める

2023-06-05 17:05:17
いなにわ @inani_waon

卵を優先する→アグロに負ける 先を狙いすぎるのを直す→先に進む力が弱くなる 近距離を太く結ぶ→経路の大きな変更が多くてロスタイムが増える と、良さそうな方針も結果的に悪くなることが多くてきつかった

2023-06-05 17:09:22
いなにわ @inani_waon

蟻を遠くに送るのは、根の側のビーコンを無にして葉に近い側を強くするのをやってみたけど、近くの資源を取る動きが弱くなって捨てた

2023-06-05 17:26:41
いなにわ @inani_waon

「〇〇すると強い」が色々な他の要素に引っ張られて人によって違うので、迂闊に他人を参考にしてはいけないタイプのコンテストだった気がする

2023-06-05 17:43:27
じろう @Jiro_tech15

ビーコンへの変換は、各蟻の移動先を最小費用流でいい感じに決めた後に、javaのコードと同様の順序で(Ant, Beacon)を確認していき、その(Ant, Beacon)によって蟻が目的地に向かうなら貪欲にBeaconを置く、をしました(多分最適)

2023-06-05 17:12:22
じろう @Jiro_tech15

拠点を根、リソースの存在する点を頂点、辺上の1マスあたりの蟻の数をCapacity、とした根付きフロー木を使って探索書いたものの、蟻さんはfloatじゃないので微妙でした

2023-06-05 17:09:04
じろう @Jiro_tech15

理想通りに動かすビーコン配置があるなら貪欲で求まる(多分)けど、解がない時にマシなビーコンを求める方法が思いつかなくて、割り当てられなかった蟻をその場待機させるようにした結果崩壊した 山登り/焼きなまし かー 確かに

2023-06-05 17:18:12
じろう @Jiro_tech15

どの資源を目指すかのみを行動にして、それ以外はヒュで頑張ってRLに投げるをしたかったけど、そもそもヒュが壊滅していた

2023-06-05 17:26:07
るてん @ruthen71

- ビーコンと資源マスを頂点とみて、頂点間の最短路を前計算しておきMSTを計算(途中で打ち切る) - 公式の実装をまねすればアリの移動をシミュレーションして獲得資源量を計算できるのでビーコンの配置を焼きなますgithub.com/CodinGame/Spri…

2023-06-05 17:12:18
るてん @ruthen71

焼きなましと書いたが、時間が足りないのか実装が違うのか、山登りのほうが点数が上がり、謎だった

2023-06-05 17:12:40
るてん @ruthen71

多分焼きなまし部分は近傍の取りかたが下手だったな

2023-06-05 17:16:26
いちご @itigo_purokonn

大局の戦略をルールベースで決定して、ビーコンに対して蟻がどう動くかはシュミレーションできるのでビーコン配置を焼きなまししました

2023-06-05 17:06:32
いちご @itigo_purokonn

焼きなましがほぼ全てで、マクロのゲームなんかほぼしてなくて蟻の動きを予知できた人が強いだけのゲーム

2023-06-05 17:11:26
いちご @itigo_purokonn

焼きなまし評価関数は「直後のターンの収穫量」「ルールベースに近づいてるか」で作りました 蟻のシュミレーションを限界まで高速化すると700~3000回程度焼けます

2023-06-05 17:08:20
いちご @itigo_purokonn

1位の人だけマクロのゲームを完全理解していて、凄いなぁになってる(機械学習的な何かなんだろうな)

2023-06-05 17:24:55
いちご @itigo_purokonn

評価関数によっては「同じスコアの違う状態」がめちゃくちゃ大量発生するので同点の遷移を許した山登り焼きなましほぼ変わらない(同点遷移を許さないと、明らかに弱いけど)

2023-06-05 17:28:25
いちご @itigo_purokonn

最初のターンに卵の優先度とchainの大きさを決定するシュミレーション書いたけど、なぜか弱くなったので結局マジックナンバー埋め込みした

2023-06-05 17:38:46
いちご @itigo_purokonn

上位がc++だらけなの、焼きなましが強いからだろうなぁ

2023-06-05 17:43:45
毎日就職 @pu__Ne

3000回焼くだけでビーコンの場所決まるんか

2023-06-05 17:08:55
毎日就職 @pu__Ne

蟻、ビーコンの距離で他の蟻を操作しないようにして操ったな

2023-06-05 17:11:07