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

2017年06月の記事

<< 前のページ

2017年6月30日(金) 21:44

うまく行かない


 うまく行かない。

 最初のコーナーを抜けた段階で得られた何十通りという解を初期値に使用し、片っ端からスクリプトに食わせる。だが、どんなに計算しても作り直し前より0.2フレーム以上遅い解しか得られない。
 作り直しにより、最初のコーナーを抜けた段階で0.6〜0.7フレーム速くなっている。それが、あっさり逆転されて手も足も出ない。

 これはミュートシティーのヘアピン同様に、1フレームに1回しか最速突破の機会が無いという関門状態になっているようだ。
 別の戦略を考えねばなるまい。

 しかしここで、驚天動地の大事件発生!
 最近このゲームのTAS製作に没頭していたため、エミュレーター動向のチェックを怠っていた。久しぶりに確認すると、5月初めに BizHawk がネジコン対応していた!
 TAS製作は進めるつもりだが、優先順位は激変である。

 自分がTASを作りたいゲームの多くがネジコン対応なので、エミュレーターを改造して製作していた。それが、正式エミュレーターで純正対応だ。つまり、TasVideos
に申請することが可能となる。実際ネジコン不用のこのゲームのポートタウン2やキングリーグのマスタークラスは、TasVideos
を完全に念頭に置いていた。だが、それ以外もOKってことだ。
 既存のネジコンTASを、正式公開できる時が来たのだ。そっちの計画も考えねばならない。

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

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

2017年6月29日(木) 21:18

やはりカオス

 1周目の棒磁石地帯は作り直しである。とはいえロスは1フレーム未満のようなので、最終的には爆速コーナー抜けに負けて遅くなるかもしれない。しかし、さまざまなステートは保存してあるので、幾らでもやり直しできる。とにかく速い方を採用すれば良い。

 棒磁石地帯は、最適走行ラインが不明確である。スイートスポットの目星は付いているが、ある程度の広がりがある。一方では爆速コーナー抜けのカオスに立ち向かうため、初期値のバリエーションが必要。そうなると、棒磁石地帯を手作業で操作するのは非効率だ。コースがX軸やY軸に平行ではないために、人間がメモリー内容を確認する効率が落ちるのも痛い。
 操作の余地が小さいのが逆にスクリプトには有利で、片っ端から調べても短時間で終了する上に調査漏れもない。

 走行ラインがスイートスポットに含まれる操作パターンを片っ端から列挙させ、それを人間がフルイに掛ける。類似の走行ラインでも僅かな操作の差により0.5フレームぐらい一瞬で損をすることが良く分かった。やはり、手作業は良くなかった。

 棒磁石地帯の抜け際。作り直したことにより0.5フレームぐらいは速くなっている。これがスクリプトで実現できるのだから、作成さえ可能ならその威力は大きい。

 この第1コーナーもクリッピングポイントから離れた操作パターンを即座に切り捨てて、4〜5時間で計算が終了するところまで短縮できた。棒磁石地帯でスクリプトが発生させた走行を、5種類ぐらいスクリプトに放り込んで調査する。そういう作業も、この実行時間なら十分に実用になる。

 そして判明したのは、スイートスポット内なら優劣の差が無いこと。トップ3ぐらいのチャンピオン候補それぞれ異なる初期状態なのに、最初のヘアピンを抜けるスクリプトを通したら全く同じ結果セットが得られた。そしてこれらトップ3の素晴らしい結果の初期値は、それだけを見て他の初期値と区別できない。似たような座標の初期値に完全に紛れていて、何の特徴もない。

 やはりこのゲームは、最適を追求するとカオスだ。計算してみるまでは、どの初期値が最速なのか分からない。

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

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

2017年6月28日(水) 20:55

カオスとの戦い

 3つ目の急コーナーを操作するスクリプトの初期状態で比較すると、速い1周目(左)は速度も速い。2周目(右)に比べると、より左側を向いていることも分かる。
 そこで、エミュレーターならではの機能を使って調査することを考える。

 初期値を少しずつ変化させ、どれぐらいまでのズレなら1周目のように速く抜けられるかを確認する。そして、直前のスクリプトでは、その範囲に入るような解を選んで出力させてみよう。
 この基本アイデアを元に、まずは過去の走行におけるパラメーターを確認する。自機の座標と向きと速度が、どうなっているか?

 結果は意外だった。最速1周目のパラメーターはごく平均的であり、他から突出したものは無い。特徴はない。すなわち、初期状態を見て有望かどうかの判断はできない。
 このこと自体は想定内。60分の1秒という時間分解能が余りに大雑把過ぎて、最適化がカオス状態だという話は何度も書いている。他とどこが違うのかも分からない微妙な初期値の差が、簡単に2フレーム差に開いたりするのだ。このゲームにおいて、トータルタイムで究極の0.1秒落ち以内まで迫ろうとすれば、カオスを掻き分けて最適化を行わねばならない。それは、ひたすら計算リソースを消費する。
 だから、誰もこのゲームのTASを作ろうとしない。

 他にも爆弾がある。

 1周目は3つ目のコーナーが爆速だが、実は棒磁石地帯が遅い。棒磁石地帯に入る直前には、1周目と2周目の差は1693フレームである。これが、昨日の記事の通り、棒磁石地帯後には一時的に1692フレーム差にまで(2周目に)詰められている。

 だから1周目の棒磁石地帯は作り直すべきであり、これすなわち爆速の1周目コーナー抜けも作り直さねばならないという意味だ。
 1周目から5周目まで、3つのコーナーを爆速で抜けねばならない。そして今作っているのはプラクティスだが、グランプリのマスタークラスだってある。最低でも10回は、3連続コーナーのスクリプトを動作させるのだ。コーナー1つあたり、一昼夜ぶっ通しでも終わらないのに!

 まして、カオス攻略のため試行錯誤する余裕などない。このままでは、完全に詰んでいる。

 そこでまず、スクリプトの高速化に取り組む。ポート2はプラクティスとグランプリの両方で製作するため、他コースに比べるとスクリプトの活躍機会が2倍。特に時間の掛かる3連続コーナーのスクリプトは、時間を使って性能を上げる価値がある。

 最初に目を付けたのは、クリッピングポイントだ。各コーナーで、ガードビームすれすれを走行できないような走りは、さっさと捨てても問題ないはずだ。ガードビームとの間合いを監視し、離れ過ぎた走行は即座に切り捨てて次の操作パターンを調べる。特に第2コーナーは、過去の走行例が安定してインベタになっている。非常に切り捨てし易い。2分木サーチも入れて、調査速度を上げる。
 すると、第2コーナーを抜けられる解はすべて合わせて、44通りしか存在しなくなった(2周目)。

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

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

2017年6月27日(火) 21:24

また遅い

 最後の急コーナーを抜けると、一気に計算量が減る。シケイン抜けは相当に重いが、それでも1日のうちに終了できる計算量だ。そしてシケインを抜ければ、実際の速さを容易に比較可能となる。

 そこで明らかになったのは、2周目が異様に遅いこと。ゴールライン通過時で、1周目(左)に比べて2周目(右)は1694フレーム以上も遅れている。
 1694フレーム差で自機の進行具合はほぼ同一だが、2周目はゴールラインに到達していない。

 では一体どこが遅いのか?
 お馴染みの犯人探し比較である。

 最後の急コーナーにおけるクリッピングポイントでは、1周目と2周目の差は約1692フレームしかない。

 しかしコーナー立ち上がりでは、差は相変わらず約1692フレームのままだが、脱出速度がまるで違う。

 そのまま走行を続ければ速度差のせいで差が広がり続け、シケイン手前では約1694フレームに広がっている。コーナーの脱出が遅いだけで、2フレームもの大損害なのだ。だからこそこのコーナーは、極めて重要なのだ。

 だが、そんなことは分かり切っているから、非常に重い計算を行って徹底的に最速解を求めた。それがなぜ、2周目は1周目のような速い解を発見できなかったのか?

 そもそも1周目を製作していたときに、シケイン抜けスクリプトが誤動作した。原因はスクリプトの想定よりも速度が速かったためだが、つまりこの1周目は特別に速かったのだ。

 それ以外のラップでは、そこまで速い解が得られていない。仮にこの1周目が平凡なら、実はそれだけ速く抜けられるということに気付くのが遅れただろう。全く気付かないままTAS製作を続行させたかもしれない。WIPのエキスパートクラスが、そうなったように。

 では、2フレームも速い解を得るための条件は何か?

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

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

2017年6月26日(月) 21:59

計算中


 このコーナー攻略は、超絶に重いスクリプトである。それだけではなく、超絶に重要でもある。大きな減速が必至であるため、最高速に復帰するまでの走行距離も長く、僅かなロスが大変なタイム差になる。だから、スクリプトで徹底的に操作パターンを洗って最適化せねばならない。
 現状ではスクリプトが終了せず途中結果しか出ておらず、まだ先には進めない。


 そしてまたここの解は、判定に悩むことが多い。すなわち、しっかり減速して走行距離を短くすべきか、走行距離が伸びてもコーナー脱出速度を優先すべきか、という問題だ。

 左の方が脱出速度が速く、ここから長大なコースを速いまま走り続けられる。しかし走行距離が長いため、現時点では右よいも遅れている。さて、左右どっちが速い?

 基本的には速度変化は計算できるため、今後どれぐらいの距離を走行できるかも計算できる。それにより、スクリプトは速遅判定を行っている。この例では、右の方が0.2フレームぐらい速いだろうという結論になっている。

 しかし、計算は直進した場合を想定している。座標や向きが僅かに頃なるため、両者の最適走行ラインも同一にならない。そのため、実際には左が速くなる可能性もある。つまり、実際に両者とも製作を進行させて、先の状態を比較するしかない。

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

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

<< 前のページ

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

Generated by MySketch GE 1.4.1

Remodelling origin is MySketch 2.7.4