プロジェクト2:マルチエージェント検索


プロジェクト2 -マルチエージェント検索- COMP 5430分の4200:人工知能、春2020年
1月10日
プロジェクト2:マルチエージェント検索(午後11時で3/6による)
目次
はじめに
ようこそ
Q1:レフレックスエージェント
Q2:ミニマックス
Q3:アルファ・ベータ剪定
Q4:Expectimaxの
Q5:評価関数
提出
パックマン、今幽霊と。
ミニマックス、Expectimax、
評価
はじめに
このプロジェクトでは、あなたは幽霊を含め、パックマンのクラシックバージョンのための薬剤を設計します。
道に沿って、あなたはミニマックスとexpectimax検索の両方を実装し、あなたの手を試してみ
た評価関数の設計で。
コードベースは、以前のプロジェクトから多くを変更しましたが、で開始してくださいしていない
というプロジェクト1からファイルを混在よりも、新鮮なインストール
このプロジェクトは、あなたの上の学年にあなたの答えをあなたのためのautograderを含み、プロジェクト1のように
マシン。:これは、コマンドを使用して、すべての質問に実行することができます
https://inst.eecs.berkeley.edu/~cs188/sp19/project2.html
2020年2月20日
2月10日
のpython autograder.py
注:あなたのpythonはを参照している場合Pythonの2.7、あなたが呼び出しのpython3する必要があるかもしれません
autograder.py(と同様に、後続のすべてのPythonの呼び出しの場合)またはcondaを作成
代写COMP 5430分の4200作业、代做データ课程作业
プロジェクト0で説明したように、環境(project0.html#インストール)。
:これは、このようなQ2として、ある特定の問題のために実行することができる
パイソンautograder.py -q Q2
それがフォームのコマンドである特定のテストのために実行することができる。
パイソンautograder.py -t test_cases / Q2 / 0-小規模木
デフォルトでは、-tオプションとautograderディスプレイグラフィックが、-qでない
オプション。あなたは--graphicsフラグを使用してグラフィックスを強制する、またはノーグラフィックスを強制することはできません
--no-グラフィックフラグを使用して。
autograderの使用方法の詳細については、プロジェクト0でautograderチュートリアルを参照してください。
このプロジェクトのコードはzipアーカイブとして利用でき、以下のファイルが含まれ
(資産/ファイル/ multiagent.zipを)。
編集ますファイル:
あなたのマルチエージェント検索エージェントの全てが存在しますmultiAgents.py。
:あなたが見たいかもしれませんファイル
pacman.pyパックマンのゲームを実行するメインファイルを。このファイルには、
あなたが使用するパックマンGameStateタイプ、説明し
、このプロジェクトで広くします。
どのようにパックマンの世界の作品の背後にあるロジックをgame.py。このファイルには
AgentState、エージェント、のようないくつかの支持タイプについて説明
ディレクション、およびグリッド。
検索アルゴリズムを実装するためのutil.pyの有用なデータ構造。
あなたはこのプロジェクトのためにこれらを使用する必要はありませんが、見つけることが
有用であることが、ここで定義された他の機能を。
あなたは無視することができ、ファイルのサポート:
graphicsDisplay.pyグラフィックスパックマンのための
パックマングラフィックスのためのgraphicsUtils.pyのサポートを
2020年2月20日
3/10
パックマンのためtextDisplay.pyのASCIIグラフィック
制御幽霊にghostAgents.pyエージェント
パックマンを制御するkeyboardAgents.pyキーボード・インターフェース
のレイアウトファイルを読み込み、その内容を保存するためのlayout.pyコードを
autograderプロジェクトautograder.py
testParser.py解析しのautograderテストおよびソリューションは、ファイル
のテストクラスのautograding testClasses.py全般
test_casesを/ディレクトリには、各質問のためのテストケースを含む
multiagentTestClasses.pyプロジェクト2特定autogradingテストクラス
を編集するファイルと提出:あなたが中にmultiAgents.pyの部分に記入します
割り当て。あなたが割り当てを完了したら、生成されたトークン提出する
submission_autograder.pyでは。このディストリビューション内の他のファイルを変更しないでください
または、このファイル以外の当社独自のファイルのいずれかを提出します。
評価:あなたのコードでは、技術的な正確さautogradedされます。変更しないでください
、コード内の任意の提供する機能やクラスの名前を、またはあなたが大混乱をもたらすだろう
autograderに。しかし、あなたの実装の正確さ-ない
autograderの判断は-あなたのスコアの最後の裁判官になります。必要であれば、私たちはします
、あなたのために起因するクレジットを受け取ることを保証するために、個別に検討し、グレードの割り当て
作業。
学業不正:私たちは、他の投稿に対するあなたのコードをチェックされる
論理的な冗長性を確保するためのクラスです。あなたは誰か他の人のコードをコピーして、マイナーでそれを提出した場合
変更は、我々は知っているだろう。これらのチートの検出器は、欺くことは非常に困難であり、そうしようとしないでください。
私たちは、あなた自身の作品を提出するあなたのすべてを信頼し、私たちをがっかりさせないでください。そうした場合、私たちはします
、私たちに利用できる最も強力な結果を追求しています。
困ったときはを:あなたは一人ではありません!あなた自身が何かに引っかかっ見つけた場合は、お問い合わせ
ヘルプはもちろん、スタッフを。営業時間、セクション、およびディスカッション・フォーラムは、あなたのためにそこにある
サポート。それらを使用してください。あなたが私たちのオフィスの時間を作ることができない場合は、私たちが知っていると我々はなります
より多くのスケジュール。我々は、これらのプロジェクトはイライラない、やりがいや教育になりたい
とがっかり。とき、またはどのように助けにあなたが聞いていない限りしかし、私たちは知りません。
ディスカッション:スポイラーを投稿しないように注意してください。
マルチエージェントパックマンへようこそ!
:まず、次のコマンドを実行して、古典的なパックマンのゲームをプレイする
2020年2月20日
4月10日
のpython pacman.pyを
して移動するには、矢印キーを使用して。さて、で提供ReflexAgentを実行
multiAgents.py
のpython pacman.py -p ReflexAgent
:それも簡単なレイアウトにかなり悪い果たしていることを注意
パイソンpacman.py -p ReflexAgent -l testClassic
(multiAgents.pyで)そのコードを点検し、確認してくださいあなたはそれがやっているものを理解しています。
質問1(4点):レフレックスエージェントは
立派プレイするmultiAgents.pyでReflexAgentを向上させます。提供レフレックス
エージェント・コードが用GameStateを問い合わせる方法のいくつかの有用な例を提供します
情報。できる反射物質は、食品の場所とゴーストの両方を検討する必要があります
だけでなく実行する場所を。あなたのエージェントは、容易かつ確実にtestClassicクリアする必要があります
:レイアウト
のpython pacman.py -p ReflexAgent -l testClassic
1人のゴーストまたは2でデフォルトmediumClassicのレイアウト上のあなたの反射エージェント試してみてください
(表示スピードアップするためにオフとアニメーションを):
Pythonのパックマンを。 PY --frameTime 0 -p ReflexAgent -k 1
のpython pacman.py --frameTime 0 -p ReflexAgent -k 2
どのようにあなたのエージェントの運賃はいますか?しない限り、それはおそらく、多くの場合、デフォルトのボード上の2人の幽霊で死んでしまう
あなたの評価関数はかなり良いです。
注:newFoodは機能asListを(持っていることに注意してください)
注:機能として、重要な(食品への距離など)の値ではなくの逆数試みる
よりも、単に値そのものを。
注:あなたがしている書き込みが状態行動対が評価された評価関数。後の部分で
のプロジェクトの、あなたは状態を評価することでしょう。
2020年2月20日
5/10
注:あなたはそれが役に立つデバッグするためのさまざまなオブジェクトの内部内容を表示することがあります。
あなたは、オブジェクトの文字列表現を印刷することでこれを行うことができます。たとえば、印刷することができ
、印刷(newGhostStates)とnewGhostStatesを。
オプション:デフォルトの幽霊がランダムです。あなたも少し賢くと楽しみのために遊ぶことができる
-g DirectionalGhostを使用して、方向幽霊。ランダム性は、あなたを妨げている場合
あなたのエージェントが改善しているかどうかを言ってから、あなたは、固定されたランダムで実行するには、-fを使用することができます
シード(同じランダムな選択すべてのゲーム)。あなたはまたと行に複数のゲームをプレイすることができ
-n。すぐにゲームの多くを実行する-qとグラフィックスをオフにします。
グレーディング:私たちはopenClassicレイアウト10回であなたのエージェントを実行します。あなたは0受け取りません
勝っ決してあなたのエージェントがタイムアウトする場合のポイントを、または。あなた剤が、勝った場合は、1ポイントを受け取ることになります
少なくとも5倍、またはあなたのエージェントは、すべての10試合を勝てば2点。あなたはさらに1受け取る
ことがより大きければ、あなたのエージェントの平均スコアは500よりも大きい場合のポイントを、または2ポイント
1000あなたはこれらの条件の下で、あなたの薬を試すことができる
のpython autograder.py -q Q1
グラフィックスなしでそれを実行するには、使用する:
パイソンautograder.py -q Q1 --no-グラフィックが
先行プロジェクトの嘘の肉として、しかし、この質問にはあまりにも多くの時間を費やすことはありません。
質問2(5点):ミニマックス
今、あなたが提供MinimaxAgentクラスのスタブに敵対検索エージェントを書き込みます
multiAgents.pyインチ だからあなたのミニマックスエージェントは、幽霊の任意の数で動作するはずです
、あなたが以前にきたものよりもわずかに一般的であるアルゴリズム記述する必要があります
講義で見られます。具体的には、あなたのミニマックスツリーは、複数の分層(それぞれに1つずつ持っています
すべての最高層のためのゴーストを)。
あなたのコードは、任意の深さにゲームツリーを展開すべきです。葉スコア
付属self.evaluationFunction、デフォルトにして、あなたのミニマックス木を
scoreEvaluationFunction。MinimaxAgentはMultiAgentSearchAgent、拡張
self.depthとself.evaluationFunctionへのアクセスを提供します。確認してくださいミニマックス
のコードでは、これらの変数がされているように、適切なこれら二つの変数への参照になり
、コマンドラインオプションに応じて、人口を。
重要:単一の検索プライは1パックマンを移動し、すべての幽霊であると考えられている
深さ2探索がパックマンと2回移動し、各ゴーストを伴いますので、応答。
グレーディング:私たちは、それが正しい探究するかどうかを判断するために、あなたのコードをチェックされる
ゲーム状態の数を。これは、いくつかの非常に微妙なバグを検出するための唯一の信頼できる方法である
ミニマックスの実装。その結果、autograderは、どのようにについて非常にうるさいとなります
2020年2月20日
6/10
あなたがGameState.generateSuccessorを呼び出す回数。あなたが任意のより多くても少なくても、それを呼び出した場合
に必要な、autograderは文句を言うでしょう。テストとあなたのコードをデバッグ、実行するため
のpython autograder.py -q Q2
これはあなたのアルゴリズムは、小さな木の数だけでなく、パックマンに何が表示されます
ゲーム。、グラフィックスなしで使用し、それを実行するには、次
のpython autograder.py -q Q2 --no-グラフィック
ヒントと観察が
ヒント:再帰的ヘルパー関数(複数可)を使用してアルゴリズムを実装します。
ミニマックスの正しい実装は、いくつかのゲームを失うことパックマンにつながる
テスト。これは問題ではありません:それは正しい行動があるとして、それはテストに合格します。
この部分のパックマンのテストのための評価関数は、すでに書かれています
(self.evaluationFunction)。あなたはこの機能を変更するが、ことを認識してはならない
、我々はリフレックスエージェントのためにあったように、今、私たちは状態ではなく、行動を評価しています。先読み
反射エージェントが行動から評価するのに対し、薬剤は、将来の状態を評価し
、現在の状態を。
minimaxClassicレイアウトの初期状態のミニマックス値は9、8、7、-492するためのもので
、それぞれ深さ1、2、3、4。あなたのミニマックスエージェントは、多くの場合、(1000分の665勝つことを注意
深さ4ミニマックスの悲惨な予測にもかかわらず、私たちのためのゲーム)。
パイソンpacman.py -p MinimaxAgent -l minimaxClassic -a深さ= 4
パックマンは常にエージェント0であり、およびエージェントは、エージェントインデックスの昇順に移動します。
ミニマックスのすべての状態は、いずれかのgetActionに渡さGameStates、またはする必要があります
GameState.generateSuccessorを介して生成。このプロジェクトでは、あなたはされません
簡略化された状態に抽象化します。
このようopenClassicとmediumClassic(デフォルト)のような大きなボードでは、あなたは見つける
パックマンが勝利で死んでいないで良いが、非常に悪いと。彼は多くの場合、周りのスラッシュよ
進展せずに。彼もそれを食べずに右隣のドットの周りのスラッシュかもしれない
彼はそのドットを食べた後に行くだろうと彼は知っていないため。あなたはこの見たら心配してはいけない
行動を、質問5は、これらの問題のすべてをクリーンアップします。
パックマンは、彼の死が避けられないと考えていたとき、彼はすぐにゲームを終了しようとします
ので、生活のために一定のペナルティを可能な限り。時には、これは間違ったことです
ランダムな幽霊で行うが、ミニマックスエージェントは、常に最悪の前提とする:
pythonのpacman.py -p MinimaxAgent -l trappedClassic -a深さ= 3
を確認してくださいパックマンは、この場合は、最も近いゴーストを突入理由を理解します。
問3(5点):アルファ・ベータ剪定
2020年2月20日
7月10日には、
より効率的に使用するアルファベータ刈り込みがミニマックス探求という新しい薬を作る
AlphaBetaAgentで、ツリーを。ここでも、あなたのアルゴリズムは、よりわずかに、より一般的になります
挑戦の一部は、アルファ・ベータ法の拡張することですので、講義からの擬似コード
の複数の最小化エージェントに適切なロジックを。
あなたはスピードアップ(おそらく、深さ3アルファベータは深さ2と同じ速さで実行されます表示されるはずです
ミニマックス)。理想的には、smallClassicの深さ3は、移動あたりわずか数秒で実行する必要があります
または速いです。
パイソンpacman.py -p AlphaBetaAgent -a深さ= 3つの-l smallClassic
ザAlphaBetaAgentミニマックス値はMinimaxAgentミニマックスと同一でなければならない
アクションも選択が異なるためタイブレーク動作を変えることができるが、値。
再び、minimaxClassicレイアウトの初期状態のミニマックス値は9、8、7ており
、それぞれの深さ1 -492、2、3、4。
グレーディング:我々はそれが正しい探るかどうかを判断するためにあなたのコードをチェックするので
状態の数を、あなたが並べ替えずにアルファベータ刈り込みを行うことが重要である
子供たちを。言い換えれば、後継の状態は常に順番に処理されなければなりません
GameState.getLegalActionsによって返されました。ここでも、呼び出すことはありません
必要以上GameState.generateSuccessorを。
あなたは状態の集合は、当社で探検一致させるために、平等に剪定してはならない
autograder。(実際には、代わりに、私たちのautograderと互換性がない、ともあろう
ルート・ノードの各子に平等に一度アルファ-ベータたinvokeプルーニングを可能にする、
これはautograderと一致しません。)
の擬似コードは、以下を表しアルゴリズムあなたはこの質問のために実装する必要があります。
テストとあなたのコードをデバッグ、実行するため
のpython autograder.py -q Q3
これはあなたのアルゴリズムは、小さな木の数だけでなく、パックマンに何が表示されます
ゲーム。:グラフィックス、使用せずにそれを実行するために、
2020年2月20日
8月10日
パイソンautograder.py -q Q3 --no-グラフィック
アルファ・ベータ法の正しい実装は、いくつかの負けパックマンにつながる
テストを。これは問題ではありません:それは正しい行動があるとして、それはテストに合格します。
質問4(5点):Expectimax
ミニマックスとα-βは素晴らしいですが、彼らは両方ともあなたが対戦していることを前提とし
、最適な意思決定を行う敵。これまでに三目並べを獲得したことのある人が言うように
、あなたを、これは必ずしもそうではありません。この質問では、実装する
エージェントの確率的行動モデル化するのに有用であるExpectimaxAgent、
次善の選択肢を作ることを。
このクラスでは、これまでカバーした検索や制約充足問題と同様に、
これらのアルゴリズムの美しさは、彼らの一般的な適用です。あなた自身の促進するために
開発し、我々は、一般的な木に基づいて、いくつかのテストケースを供給してきました。あなたはデバッグすることができ
ます。コマンドを使用して、小さなゲーム木の実装
のpython autograder.py -q Q4
推奨され、これらの小さなかつ管理テストケースにデバッグをしてあなたを助ける
迅速なバグを発見します。
あなたのアルゴリズムは、小さな木に取り組んされたら、あなたはパックマンでの成功を観察することができます。
ランダムの幽霊はもちろんない最適なミニマックス薬のものであり、そうでそれらをモデリング
ミニマックス検索することは適切ではないかもしれません。ExpectimaxAgentは、もはや分を負いません
すべてのゴーストアクションの上に、しかし期待はどのようにあなたのエージェントのモデルに応じて
幽霊は行動します。あなたのコードを簡素化するために、あなただけの敵に対して実行されると仮定
一様にランダムにそのgetLegalActionsの間で選択します。
パックマンでExpectimaxAgentの振る舞いは、実行する方法を確認するには、次
のpython pacman.py -p ExpectimaxAgent -l minimaxClassic -a深さ= 3
あなたは今、幽霊との接近戦ではより多くの傲慢なアプローチを観察する必要があります。では
特に、彼がトラップされる可能性がありますが、いくつかつかむために逃れる可能性があることをパックマンの知覚であれば
、少なくとも試みで、彼はよ食品のより多くの部分を。これら2つのシナリオの結果を調べる:
パイソンpacman.py -p AlphaBetaAgent -l trappedClassic -a深さ= 3 -q -n 10
パイソンpacman.py -p ExpectimaxAgent -l trappedClassic -a深さ= 3 -q -n 10
2 / 2020分の20
9/10
あなたの間、あなたのExpectimaxAgentは、半分の時間について勝っていることを見つける必要があります
AlphaBetaAgentは常に失います。ここでの動作が異なる理由を必ず理解してください
ミニマックスケースから。
expectimaxの正しい実装は、テストの一部を失うことパックマンにつながります。
これは問題ではありません:それは正しい行動があるとして、それはテストに合格します。
質問5(6点):評価関数が
提供する機能でパックマンのためのより良い評価関数を書く
betterEvaluationFunction。評価関数ではなく、状態を評価する必要があり
、あなたの反射エージェントの評価関数のようなアクションがやったよりも。あなたは、あなたにどんなツールを使用することができ
、最後のプロジェクトから検索コードを含む、評価のための処分。深さ2
検索では、あなたの評価関数は、1人のランダムにレイアウトsmallClassicをクリアする必要があり
、より半分の時間より幽霊とまだ妥当な速度で実行します(完全な信用を得るために、パックマンは
、彼が勝っています時に1000ポイントの周りに平均化する必要があります)。
成績評価:autograderはsmallClassicレイアウトに10回あなたのエージェントを実行します。私たちはします
、以下の方法で、あなたの評価関数にポイントを割り当てる:
あなたは一度autograderアウトのタイミングなしに、少なくとも勝った場合、あなたは1ポイントを受け取ります。任意のエージェント
これらの基準を満たしていない0ポイントを受け取ることになります。
少なくとも5回、全10回勝つため+2勝つため+1
(含む少なくとも1000の平均スコアのために少なくとも500の平均スコアのために+1を+2を
紛失したゲーム上のスコア)
1あなたのゲームは平均的に少ないautograderマシン上で30秒、より取る場合
--no-グラフィックスで実行します。このマシンが公正になりますのでautograderは、EC2上で実行される
リソースの量を、しかし、あなたのパソコンは、はるかに少ないパフォーマンス(ネットブック)かもしれない
またははるかにパフォーマンス(ゲームリグ)。
あなたがあれば平均スコアと計算時間のための追加のポイントにのみ授与されます
少なくとも5回を獲得します。
あなたはこれらの条件の下で、あなたの薬を試すことができる
のpython autograder.py -q Q5
、グラフィックスなしでそれを実行するために使用することを:
pythonのautograder.py -q Q5 --no-グラフィック
提出
プロジェクトを提出するには順序、実行するPythonのsubmission_autograder.pyそして、提出
Gradescopeのプロジェクト2割り当てにmultiagent.tokenトークンファイルを生成しました。

99515681またはEメール:[email protected]マイクロ手紙:codehelp必要な場合は、QQを追加してください

おすすめ

転載: www.cnblogs.com/kaitong/p/12384628.html