エミュレーター入力の最適化問題をどのように分類しますか?どのアルゴリズムでそれにアプローチする必要がありますか?


10

質問の性質上、多くの背景情報を含める必要があります(私の質問は:これをどのように絞り込むのですか?)とはいえ、要約すると(私の知る限り)次のようになります。

非常に大きな組み合わせ検索空間で局所最適を見つける方法は何ですか?

バックグラウンド

ツールを使用したスーパープレイコミュニティでは、コスト(通常は完了までの時間)を最小限に抑えるために、ビデオゲームコンソールまたはエミュレータに特別に細工された(リアルタイムでは生成されない)入力を提供することを目指しています。これが現在行われている方法は、例えば(何度もゲームフレーム・バイ・フレームを再生し、フレームごとに入力を指定して、多くの場合、実行の部分をやり直すことである最近発表されたため、実行ゼルダの伝説を:時間のオカリナを持っています合計198,590回の再試行)。

これらの実行を実行して目標を達成するには、通常、ルート計画とトラバーサルという2つの主な要因があります。前者は後者よりもはるかに「創造的」です。

ルート計画は、プレイヤーがゲームを完了するために全体的にナビゲートする方法を決定するものであり、多くの場合、ランの最も重要な部分です。これは、たとえば、使用するソート方法の選択に似ています。世界で最高のバブルソートは、100万要素のクイックソートよりも優れているわけではありません。

ただし、完璧を求めて、トラバーサル(ルートの実行方法)も大きな要因です。類推を続けると、これがソーティングアルゴリズムの実装方法です。特定の入力フレームがないと実行できないルートもあります。これはツール支援の最も退屈なプロセスであり、完了したランの生成には数か月、場合によっては数年もかか​​ります。同じアイデアのさまざまなバリエーションを試してみるのが一番だと考えられるため、難しいプロセスではありません(人間にとって)。このタスクへのマシンの適用は、ここでは適切なようです。

私の目標は、今やニンテンドー64システム全体のトラバーサルプロセスを自動化することです。この問題の探索空間があるはるかに強引なアプローチで攻撃するには大きすぎます。N64ランのnフレームセグメントには2つの30n可能な入力があります。つまり、30フレームの入力(30FPSでの1秒)には2つの900可能な入力があります。これらの潜在的なソリューションをテストすることは不可能であり、2時間の実行全体をテストすることはできません。

ただし、フルランの全体的な最適化を試行する(または試行するつもりはありません)ことに興味はありません。むしろ、初期入力が与えられたときに、実行の特定のセグメントの局所最適値(または、ある種のセミグローバル最適化の場合は最も近いn個の局所最適値)を近似したいと思います。つまり、ルートとそのルートの最初のトラバーサルを指定します。そのトラバーサルの近隣を検索してコストを最小限に抑えますが、問題を解決できるすべてのケースを試すように縮退しないでください。

したがって、私のプログラムは、開始状態、入力ストリーム、評価関数を取り、評価の結果を最小化することによって局所最適を出力する必要があります。

現在の状態

現在、すべてのフレームワークを処理しています。これには、エミュレーターの操作、セットアップとティアダウン、構成などによる入力ストリームの評価が含まれます。また、一種のプレースホルダーとして、オプティマイザーは非常に基本的な遺伝的アルゴリズムです。入力ストリームの母集団を評価し、勝者を格納/置換し、勝者ストリームを変更して新しい母集団を生成します。このプロセスは、時間や世代番号など、任意の基準が満たされるまで続きます。

このプログラムの最も遅い部分は、断然、入力ストリームの評価になることに注意してください。これは、nフレームのゲームをエミュレートする必要があるためです。(時間があれば、この種のものへのフックを提供する独自のエミュレーターを作成しますが、今のところ、メッセージの合成と、別のプロセスからの既存のエミュレーターのメモリの変更が残っています。)メインコンピューターかなりモダンで、200フレームの評価には約14秒かかります。そのため、関数の評価の数を最小限に抑えるアルゴリズム(選択した場合)を使用したいと思います。

エミュレータを同時に管理するフレームワークでシステムを作成しました。そのため、線形パフォーマンススケールで一度に多数のストリームを評価できますが、実際には、システムパフォーマンスが低下する前に、実行中のエミュレーターの数は8から32にしかなりません(32は実際にそれを押し上げています)。つまり、オプティマイザは評価を待つ間、かなりの作業を行うことができるため、評価が行われている間に処理を実行できるアルゴリズム(選択した場合)は非常に有益です。

テストとして、私の評価関数(ゲームBanjo Kazooieの)は、フレームごとに、プレーヤーからゴールポイントまでの距離を合計することでした。つまり、最適なソリューションは、できるだけ早くそのポイントに近づくことです。変異をアナログスティックのみに制限すると、問題のないソリューションを取得するのに1日かかりました。(これは同時実行を実装する前でした。)

同時実行を追加した後、Aボタンを押す操作の変更を有効にし、ジャンプが必要な領域で同じ評価関数を実行しました。24個のエミュレーターを実行すると、最初は空白の入力ストリームから目標に到達するのに約1時間かかりましたが、最適に近いものに到達するには、おそらく数日実行する必要があります。

問題

私が直面している問題は、最適化問題を適切にモデル化する方法を知るのに数学的最適化フィールドについて十分に知らないということです!たとえば、Wikipediaで説明されているように、多くのアルゴリズムの概念的なアイデアを大まかに追跡できますが、問題を分類する方法や、そのカテゴリに最新のアルゴリズムを選択する方法がわかりません。

私が知ることができることから、私は非常に大きな近所との組み合わせの問題を抱えています。その上、評価関数は非常に不連続で、勾配がなく、多くのプラトーがあります。また、制約はそれほど多くありませんが、問題を解決するのに役立つ場合は、それらを表現する機能を喜んで追加します。たとえば、[スタート]ボタンを使用しないように指定できますが、これは一般的なケースではありません。

質問

だから私の質問は:これをどのようにモデル化するのですか?どのような最適化問題を解決しようとしていますか?どのアルゴリズムを使用すると思いますか?私は研究論文を読むことを恐れていないので、何を読むべきかを知らせてください!

直感的に、遺伝的アルゴリズムは実際には学習していないように見えるため、最高ではありません。たとえば、[開始]を押すと常に評価が悪化するように見える場合(ゲームが一時停止するため)、「ある時点で[開始]を押しても役に立たない」と学習するある種のデザイナーまたは頭脳があるはずです。しかし、この目標でさえ、思ったほど簡単ではありません。スーパーマリオ64のいわゆる「一時停止後方ロングジャンプ」などのように、プレスを押すの最適な場合があるためです。ここでは、脳はより複雑なパターンを学習する必要があります。「スタートを押しても、プレーヤーがこの非常に特殊な状態にあり、ボタンを押しながらいくつかの組み合わせを続ける場合を除き、役に立たない」

変更にもっと適した他の方法で入力を表現する(またはマシンが学習できる)ようです。フレームごとの入力は細かく見えます。本当に必要なのは「アクション」であり、これは複数のフレームにまたがる場合があります...しかし、多くの発見はフレームごとに行われるため、完全に除外することはできません(前述の一時停止後方ロングジャンプには、フレームレベルの精度が必要です)。また、入力がシリアルに処理されるということは、活用できるものでなければならないようですが、方法はわかりません。

現在、私は(リアクティブ)タブー検索、超大規模近傍検索、教育学習ベースの最適化、およびアリコロニー最適化について読んでいます。

この問題は、ランダムな遺伝的アルゴリズム以外のものに取り組むのが難しいほど単純ですか?それとも実際にずっと前に解決された些細な問題ですか?読んでくれてありがとう。返事を送ってくれてありがとう。


あなたの投稿は非常に長く、追加の背景情報なしで質問を明確に述べるトピックの短いセクションがある場合、それは読者を助けるでしょう。
カヴェ

@カベ:私はそれが長いことを理解していますが、質問の性質上、絞り込む方法をかなり尋ねているので、絞り込むのはかなり難しいです。:(

回答:


6

あなたがあなたの質問で与えた情報から、私は(私が知っている)標準的な最適化方法を適用する方法を見ることができません。オブジェクトはそれほど複雑ではありませんが(後で詳しく説明します)、ターゲット関数は厄介なものです。その値は、制御不能な外部システムによって定義されているため、適切なプロパティを持つことはほとんどありません。したがって、私は遺伝的アルゴリズムを使用することは実行不可能ではなく、おそらくここでの良いアプローチでさえあると思います。問題の構造について手掛かりがない場合、他の方法よりもうまく機能することがよくあります。考慮すべきことがたくさんあります

  • オブジェクト空間、
  • ターゲット関数と
  • 遺伝的アルゴリズムのパラメーター

詳しく説明させてください。

あなたのオブジェクトは何ですか?

あなたはすでにそれに答えました:あなたは一連のアクションを見ています。それぞれのアクションは1フレームを占めます。これは細かすぎるかもしれません。おそらく、(フレーム数で)持続時間のある一連のアクションを試してください。これにより、「Aのプレスを挿入する」とは異なる確率で自然に「少し長く歩く」などの突然変異を持つことができます。何が最もうまくいくか試してください。あなたは他の成分について考えた後、このアイテムを再訪する必要があるかもしれません。

ターゲット関数は何ですか?

これは本当に重要です。何を最適化したいですか?ゴールまでの時間?さまざまなアクションの数?集めた星の数は?いくつかの要因の組み合わせ?複数のターゲットを取得するとすぐに、物事は毛むくじゃらになります -(通常は)最適ではなくなります!

あなたはゴールまでの時間について言及しました。これは、おそらく良いターゲット関数ではありません。どうして?ほとんどのシーケンスは目標に到達しないため、一定の結果を下に導き、次のようなフィットネスランドスケープを作成します(1次元の概念的なスケッチ)。

ここに画像の説明を入力してください
[ ソース ]

ターゲット関数がである巨大な領域があります。遺伝的アルゴリズムはすべて信号に関するものです。ソリューションの小さな変更は、変更が最適なソリューションに「理想的に」向けられている場合にのみ、品質の改善(または低下)を示す必要があります。そうでない場合(劇的に)、ランダム検索に過ぎず、近い確率で適切な解決策を見つけ。それは私たちのターゲット機能にとって何を意味しますか?全体的な品質がまだ低い場合でも、ソリューションがわずかに改善するたびに改善する必要があります。だからどうですか000

11+final distance to goal+11+time to goal

目標に到達しない場合、目標までの時間として「無限大」を使用し。これは、2番目の加数を設定し。目標が達成されない限り、近づくとフィットネスが最大ます。目標に到達したすべてのシーケンスのベースラインはで、より速くなるとさらに改善されます。1 1011

それでは、距離をどのように測定しますか?直線距離は魅力的に見えますが、問題があります。この場合も、間違った信号が送信される可能性があります。この単純なシナリオを考えてみましょう:

ここに画像の説明を入力してください
[ ソース ]

上廊下へのジャンプで始まるすべてのシーケンスは、ゴールの真上のスポットに到達するまで向上しますが、実際にゴールに到達することはできません。さらに悪いことに、ゴールに達しないすべてのシーケンスの中で、上昇するシーケンスは下降するシーケンスと同じくらい良いので、GAは明らかに運命にあるシーケンスを拒否できません。言い換えると、線形距離は特に悪いローカルオプティマを作成し、レベルに行き止まりがある場合にGAをトラップする可能性があります。

したがって、レベルの上にグリッドをオーバーレイし、ゲームキャラクターが別のポイントに移動できる場合は、隣接するポイントを接続することをお勧めします。次に、シーケンスが文字を着地する場所に最も近いポイントからゴールに最も近いポイントまでの最短経路の長さでゴールからの距離を計算します。これは簡単に計算でき、行き止まり(ローカルオプティマ)に足を踏み入れるとすぐに罰せられます¹。もちろん、レベルデータにアクセスする必要がありますが、それはあると思います。

GAはどのように機能しますか?

これで、実際の遺伝的アルゴリズムに到達できます。重要な考慮事項は、個体数、選択、生殖/突然変異、および停止基準です。

人口

あなたの人口はどのくらいの規模になるのでしょうか?小さすぎると、適切なソリューションに到達するために必要な多様性が得られない可能があります。大きすぎると、無駄なゴミを持ち歩きやすくなり、処理が遅くなります。

どのように人口を初期化しますか?ランダムなアクションシーケンスを選択しますか?もしそうなら、どの長さですか?手動で生成された、シードするための合理的なソリューションが(少数)ありますか?

選択

どの個体が生存/生殖のために選択されますか?最高の?トーナメントを開催していますか?個人の生存率をその適応度に関してランダムに決定しますか?いずれにせよ、最高の状態で生き残りたいですか、それとも死ぬことができますか(ローカルオプティマを残すのに役立つ場合があります)²?k

ここでの核となるコンセプトは選択圧力です:それが生き残るのはどれほど難しいですか?小さすぎると、がらくたの解決策を排除しないでください。高すぎると、変更(特にローカルオプティマ間の移動)が困難になります。

生殖と突然変異

1つのラウンドの生存者を選択したら、それらから次の世代を作成する必要があります(両親は生存し、次の世代の一部ですか?)。突然変異と組換えという2つの主要な戦略があります。

詳細は異なる場合がありますが、突然変異は非常に明確です。個人のシーケンスのすべての位置について、ある程度の確率で変異させます。これを位置ごとに個別に行うか、突然変異の数をランダムに選択するか、または異なる確率で異なる突然変異を実行できます(新しい要素の挿入、1つを削除、1つを変更など)。突然変異は通常、小さな変化です。

再結合、つまり2つ以上のソリューションの側面を組み合わせて新しいものにすることはよりトリッキーですが、1つの「フィットネスマウンテン」を離れ、別の(より高い可能性がある)斜面に直接移動する大きなステップを許可できます。古典的なアイデアはクロスオーバーです。ここでそれが意味をなすかどうかはわかりません(特定のシーケンスのプレフィックスを別のものと交換すると、サフィックスの価値が下がる可能性が高いようです)。おそらく、シーケンスのさまざまなポイントでのゲームキャラクターのレベルと位置に関する知識を使用してこれをガイドできます。つまり、両方のシーケンスでキャラクターが同じ位置にある場合にのみクロスオーバーポイントを作成します。

終了

いつ止まるの?世代後?ラウンド以降、最大適合度が改善されなかった場合は?役に立たない初期母集団を早期に排除するために、ラウンド後に何らかの適合性(上記の関数)に到達していない場合、早期に停止しますか?k 1 nNk1n


ご覧のとおり、これらすべてが絡み合って実際のパフォーマンスに影響を与えています。複数の母集団を並行して実行する場合は、移住や大災害による遺伝的ドリフトの実装について考えることもできます。あなたの道を導く理論はほとんどないので、さまざまな設定を試して、それがどこに届くのかを調べる必要があります。うまくいけば、あるレベルで機能するものが他のレベルでも機能するようになるでしょう。ハッピーいじり!

注意:BoxCar 2Dを上から見てください。彼らはいくつかのことをかなり上手く行っており(他はそうではありません)、GAのパラメーターがパフォーマンスにどのように影響するかを直感的に理解できます。


  1. 実際、この適合性を使用して貪欲にシーケンスを構築すること、つまり可能なすべての次のアクションから目標までの距離を最小化するアクションを選択することは、非常にうまく機能する可能性があります。GAを使用する前に試してください。
  2. もちろん、オブザーバーとしてのあなたは、これまでに出会った最高のソリューションを常に覚えています。

1
いいね!2つの質問。MOOには(通常)オプティマがないと言うのはなぜですか?ポイントはパレート最適です。つまり、何かを犠牲にすることなく何かを改善することはできません。そのとき、彼らに価値を与えることはモデラー次第です。また、突然変異は小さな確率で小さな変化についてではないですか?突然変異の確率が大きい場合、検索はランダムでガイドなしの動きをする傾向があり、通常はパフォーマンスに悪影響を与えます。小さな突然変異確率が最もよく機能することが観察されたと思います。
Juho

@Juho:1)そう、パレート最適!=最適。それについては詳しく説明したくありませんでした。2)私はそれがどうやって誤解されるのかを理解しています。高い確率で、小さな変化が起こるはずだということです。3)私は、「小さな突然変異の確率が最もよく機能する」とは、各ビットが他のビットとは無関係に、ある程度の(小さい)確率で、多くの場合(はシーケンスの長さ)変化するモデルを指すと思います。突然変異の確率は全体的に高く、予想される変更の数はです。n 11/nn1
ラファエル

わかりました。3番目の点については、そういう意味です。ありがとう!
Juho

すべての情報をありがとう。私の理解を明確にする本当にうまくレイアウトされた答え。
GManNickG 2012

1

教育学習ベースの最適化(TLBO)メソッドとそのコードの詳細については、次のペーパーを参照してください。

R. Venkata RaoとV. Patelによる複雑な制約付き最適化問題を解決するためのエリート主義の教育学習ベースの最適化アルゴリズム。International Journal of Industrial Engineering Computations 3(4):535–560(2012)

追加の読み物:


1
cs.SEへようこそ。回答ありがとうございます。Markdownを使用して投稿をフォーマットできることに注意してください。編集内容を確認することをお勧めします。コンテンツに関しては、特定の手法の詳細ではなく、問題をモデル化する方法を知りたいと思われるOPに役立つとは思いません。さらに、TLBOに取り組んでいるのはこの1人だけですか?
ラファエル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.