Darkside(リンクエラー修正しました)

2017年04月01日の記事

2017年4月1日(土) 19:07

時間の壁

 自動運転は、ちょっと旋回性能が不足すれば一気に破綻する。
 結局これまでもそうだったように、細分化してスクリプトに分担させることになる。
 そこで緩い右コーナーが終わってからの左→右→左の連続コーナーを専用スクリプトにしたが、これが大問題を発生させた。

 いつも通りの折れ線走行で最速解を探そうとしたが、場合の数が思った以上に増える。この3連続コーナーは一体化して調査したいパターンだが、どう考えても無理なので左→右の2連続コーナーだけを1つのスクリプトで処理させることにした。だが、いざ実行させると想定よりも桁違いに処理が進まない。下手すると、スクリプトを1ヶ月ぐらいブッ通しで動かさねばならないかもしれない。
 そこでバイナリサーチ化を行ったが、2〜3倍は速くなると期待したのに実際は1倍半ぐらいである。これも想定外に速くなってくれない。並列実行したところで、実用にならないほど実行時間が掛かる。


 止むを得ずコーナーを完全に分割し、左コーナーだけを1つのスクリプトで処理。そこで最速と判定できた解を次のスクリプトに食わせ、右コーナーを処理する。さすがにこれは合計数時間で調査完了したのだが、得られた最速解はちっとも速くない。
 左→右の2コーナー一体処理スクリプトが最初の48時間ぐらいで出力した解よりも、遥かに遅いのだ。蛇足ながら初代 F-ZERO のTASで「遥かに遅い」とは、0.1フレームぐらいの差が付く場合である。このゲームのTAS製作が年単位になっているのは、そういう次元の最適化を行っているからである。

 何しろ1コースで5周もするのだ。どこかのコーナーで0.1フレームを見逃せば、塵が積もって最終タイムは簡単にフレーム単位の遅延になる。
 どう見ても連続する2つのコーナーは互いに影響を及ぼす関係であり、フレーム未満の罠にハマって部分最適化の加算が全体最適化にならない。だから無茶っぽいのを承知で最初は、2コーナーを1つのスクリプトで絨毯爆撃しようと考えたのである。

written by higashino [ゲーム] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL
Darkside(リンクエラー修正しました)

Generated by MySketch GE 1.4.1

Remodelling origin is MySketch 2.7.4