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

<< 前のページ | 次のページ >>

2017年4月26日(水) 21:43

モンテカルロ法


 この右旋回では、最初に左旋回を少し行ってガードビームから車体を離し、続いて直進を少し行う。それからフルハンドルを右に切る。
 つまり、フル旋回の前に「左旋回フレーム数」「直進フレーム数」という2つのパラメーターが存在する。

 これら2つのパラメーターをどう設定するのがベストかというのは結構厄介な問題であり、簡易判定しているものの決定版がない。パラメーターを適切に設定しないと速い解は出て来ないが、速い解を探す計算コストが極めて大きい。S-JET の適切なブレーキタイミングは自明ではなく、しかし片っ端から試したのでは実行時間が実用にならない。
 2つのパラメーターを絞り込んでから、集中的に調べたい。

 ここでふと思い付いた。だったら、有望パラメーター探しに、モンテカルロ法はどうだろう?

 フル右旋回では、まず S-JET のブレーキタイミングを計算する。これは、意味がありそうなタイミングの範囲を計算するものだ。そして、その範囲内でブレーキタイミングを変化させて操作結果を調べる。この計算と試行は、S-JET の速度ループが1周するごとに行う。
 右旋回で8周期とか9周期が当たり前なので、ブレーキタイミングのバリエーション数が8乗とか9乗された操作パターン数になる。とても全数調査できないので、ガードビームに弾かれずに右旋回を最後まで無事に行えるかどうかを重視している。最後まで走れれば類似の走行パターンは調査せず切り捨てる。
 どうやらこの手法で、速い解が切り捨てられているフシがある。

 かと言って全部調べるのは無理。ならば、ブレーキタイミング候補の中からランダムに1候補だけ選んで試行。これで最後まで右旋回させ、結果をチェックする。ランダムに何度か繰り返せば、速そうな解が存在しそうかどうか見当が付くのでは?

 やってみると、思った以上にうまく機能した。
 モンテカルロ法では、有望そうな選択肢に絞って乱数を使うのが効果的である。このスクリプトでは、もともとブレーキタイミングとして有望な範囲を計算しているから、その中からランダムに選んでも悪くはない。

 また、並列実行が容易というメリットも大きい。
 普通のスクリプトを並列実行する場合、試行パラメーターが重複しないよう管理する手間が掛かる。また、途中でスクリプトを止めると重複回避は困難になる。
 しかしランダムなプレイアウトを行うモンテカルロ法であれば、スクリプトをいっさい書き換えずに並列実行できる。許容できる実行時間内で、ただ走らせれば良い。非常に使い勝手が良い。そして期待通り、従来のスクリプトでは発見できない解を見つけ出してくれた。

 さっそく、デスウインド2の S-JET 右旋回スクリプトも、モンテカルロ版を用意した。

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

この記事へのトラックバックPingURL

2017年4月25日(火) 21:12

また解無し


 もう1つの天王山もまた、トラブルを持ち込んでくれた。解が無いのだ。

 速い解から順番にスクリプトの初期値へセットして処理すると、非常に遅い解を初期値に据えるまで解が得られない。
 最速の解でさえ妙にインのガードを削る量が少ないのに、全くインを削らずかなり遅い解からバトンタッチしないと続く右旋回で解が出ない。


 ガードビームに重なったまま右旋回を突っ走るので、邪魔カーは楽に回避できる。
 しかし右旋回の途中でアウトに膨らんでしまい、論外に遅い解しか得られない。大量の初期値を用意してどんどん処理しても駄目だ。いや、何でもいいから解が欲しい、というなら解は得られる。だが、再生すると最適化されているとは到底言えない走行だ。

 とはいえ、S-JET 噴射中にブレーキを使わない簡易走行だと、かなりマトモな走行ラインが実現できている。ブレーキを使った場合にも、速い解が隠れていそうだと思える。問題は例によってブレーキ使用の操作パターンが極端に多いため、丸ごと調べるには時間が掛かり過ぎること。
 適当に有望なパラメーターだけ調べていると、マトモな解がなかなか出て来ない。

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

この記事へのトラックバックPingURL

2017年4月24日(月) 21:21

反射ドリフトも山場


 反射ドリフトでは、反射時の大減速を抑止するのが重要になる。

 大減速が連続3フレームで収まるのが今のところベストパターンで、連続4フレーム以上になるのは外れだ。そこで、反射時に大減速の連続数をカウントし、4以上ならその先は調査しないことによりスクリプトの実行時間を大幅に短縮できる。

 しかし、2周目では効果的だったものの3周目では3フレームに収まる解が無くて苦労した。
 そしてこの4周目では逆に、3フレームに収まる解だらけになってスクリプトがなかなか終了しない。


 得られた解は、3周目よりも更に速い。いずれも邪魔カーが絡んでいない。

 どうやらこの反射ドリフトは、ミュートシティーのヘアピン同様に重大なポイントみたいだ。走行ラインの僅かな違いで1フレームぐらい簡単に変わりそうだし、べストな走行ラインを実現するためのスイートスポットは極端に狭い。

 ファイアーフィールドは妥協してノーミスなだけの走りを作るだけなら、実のところかなり簡単である。しかしTASといてキッチリと最適化を追い求めれば、ミュートシティーのように厄介な予感。

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

この記事へのトラックバックPingURL

<< 前のページ | 次のページ >>

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

Generated by MySketch GE 1.4.1

Remodelling origin is MySketch 2.7.4