第二回大会要領 - aharalabMeiji/fireplaceAharaLab GitHub Wiki

第2回 ハースストーンさんすくみデッキ大会 〜〜有利を押し付け,不利を覆せ〜〜

目的

  • TCGの一つとして有名なハースストーンには、シミュレータとして公開されたpythonプラットフォームであるfireplaceがあります。fireplaceを用いた、人工知能プレーヤー(エージェント)の競技大会により、TCGの人工知能についての知見を深めることを目標とします。
  • 第2回は相性差のはっきりとしたデッキ3つを用いて,有利対面をどう生かすか,不利対面をどう切り抜けるかに焦点を当てたレギュレーションにしました

ルール

  • 運営が用意した相性がさんすくみの3デッキと,参加者が各々用意したプレイエージェントを用いて行います.
  1. 各マッチアップごとに3デッキのうちランダムに2デッキを選びます.
  2. AデッキとBデッキが選ばれた場合,参加者1&Aデッキ vs 参加者2&Bデッキ を7戦行い,その後デッキを交換してまた7戦,計14戦します.
  3. 参加者総当たりで対戦します.
  • 参加するエージェントの数で試合数は変動する可能性があります。
  • 勝ち数の合計で順位を決めます。
  • 簡単のため、ミニオンを召喚する際の配置に関しては選べません.
  • 1ターンの制限時間は30秒とします。(他のAI大会を参考にしました。)マシンスペックについて特に指定しませんが、市販のintel core i7 2GHz程度のマシンであれば大丈夫だと思います。(今回は30秒を過ぎても「警告」を与えるだけで失格とはしません。)
  • [はじめかた]]と[エージェントの作り方は、それぞれリンク先を参照してください。
  • エージェントを作って参加してください。
  • エージェントは非公開領域(game.current_player.deck, game.current_player.opponent.deck, game.current_player.opponent.hand) を参照してはいけないことにします。

大会で使用される3つのデッキ

  • クラウンドルイド, アグロハンター, ビッグウォリアーの予定です(===詳細は12月公開予定===)

クラウンドルイド
アグロハンター
ビッグウォリアー

これらのカード実装は明治大学阿原研究室により行いました。(fireplaceのオリジナルにはこれらのカードの実装がありません。)

このコンペはBlizzard Entertainmentとは関係ありませんし営利目的で開催いたしません。この大会はfireplaceの枠組みで行われています。fireplaceはハースストーンというゲームの類似であり、人工知能の開発のために提供されているものです。fireplaceはハースストーンのオリジナルのゲームをプレイすることを許していませんし、いかなる方法をもってしてもゲームサーバーに接続することも許していません。ハースストーン、Blizzard EntertainmentはBlizzard Entertainment社によって 米国その他の国において登録商標として登録されているものです。

(This competition is not associated with Blizzard Entertainment nor for the purpose of profit. It is based on the fireplace framework which mimics the game Hearthstone and provides access points for the development of AI agents. The framework does not allow to play the original game nor does it connect to the game’s servers in any way. Hearthstone and Blizzard Entertainment are trademarks or registered trademarks of Blizzard Entertainment, Inc. in the U.S. and/or other countries.)

詳細についての問い合わせは 阿原(ahara(at)meiji.ac.jp)にご連絡ください。

日時、スケジュール

第2回ハースストーンAI大会 ハースストーンさんすくみデッキ大会
時間: 2022年3月20日 [14:00] から数時間程度 他種目と合わせて結果発表
https://us02web.zoom.us/j/81181977788?pwd=YnpsU00vRFl4Qmh6NjVMc0ovdVZ1UT09
ミーティングID: 811 8197 7788
パスコード: 289462
(参観には手続きは不要です。)

動作プロジェクト:

https://github.com/aharalabMeiji/fireplaceAharaLab

大会参加

参加を希望される方は、宮原(cs212031(at)meiji.ac.jp)に「GAT2022 第2回 ハースストーンAI大会参加希望」という件名でメールを送ってください。
メール本文には「所属」「氏名」「エージェント名」「エージェントの簡単な説明」を明記し、ソースコードをメールに必ず添付してください。 締め切りは2022年3月10日23:59とします。 質問は宮原のtwitterまで→ Twitter URL

対戦を実行するには

対戦を実行するにはmain.pyのmain()を変更します。ここではそのイメージを提示します。 一番下のplay_set_of_gamesの引数をいじると様々なagentやデッキを使った様々な対戦ができます(deckを指定しないとランダムデッキになります)

def main():
	cards.db.initialize()
	#manual input(if you don't specify a class, it will be a hunter)
	Human1=HumanAgent("Human1",HumanAgent.HumanInput,myClass=CardClass.DRUID,
		choiceStrategy=HumanAgent.HumanInputChoice)
		# ,mulliganStrategy=HumanAgent.HumanInputMulligan)
	Human2=HumanAgent("Human2",HumanAgent.HumanInput,myClass=CardClass.WARRIOR)
	# random agent
	Random1=StandardAgent("Random1",StandardAgent.StandardRandom, myClass=CardClass.MAGE) 
	Random2=StandardAgent("Random2",StandardAgent.StandardRandom, myClass=CardClass.HUNTER) 
	#ベクトルプレーヤー。意外と強い。このプレーヤーとサシで勝負して勝てるくらいが一応の目安。
	Vector1=StandardVectorAgent("Vector1",StandardVectorAgent.StandardStep1\
		,myOption=[3,1,4,1,5,9,2,6,5,3,5,8,9,7,9,3,2,3,8,4,6,2,6,4,3,3,8,3,2,7,9,5,0,2,8]\
		,myClass=CardClass.WARRIOR)
		#,mulliganStrategy=StandardVectorAgent.StandardMulligan) 
	Vector2=StandardVectorAgent("Vector2",StandardVectorAgent.StandardStep1\
		,myOption=[3,1,4,1,5,9,2,6,5,3,5,8,9,7,9,3,2,3,8,4,6,2,6,4,3,3,8,3,2,7,9,5,0,2,8]\
		,myClass=CardClass.DRUID)
		#,mulliganStrategy=StandardVectorAgent.StandardMulligan)

	####################################################################

	#ゲームプレイ(きまったゲーム数を対戦し、勝ち数を数える)
	from utils import BigDeck#BigDeck.faceHunter, BigDeck.clownDruid, BigDeck.bigWarrior
	a,b,c = play_set_of_games(Vector1, Vector2, deck1=BigDeck.clownDruid, deck2=BigDeck.bigWarrior, 
		gameNumber=1, debugLog=True)

大会デッキと大会参加エージェントの説明

人がデッキを扱う場合の戦術

クラウンドルイド
5ターン目までにコンボパーツを集めつつデッキに4枚入ってるキーカードで1ターンに使えるマナ数を増やす。6ターン目以降で中型ミニオンを複数出して攻める(有利マッチの場合は相手が攻めてくるまでコンボパーツをため続け、攻めてきたタイミングで一気に特大コンボを決める。不利マッチの場合、相手の序盤の攻めをいなすために重複したコンボパーツを切って応戦したり、時には理想のコンボとは違った少し小さいコンボでいなす。)

アグロハンター
1ターン目から全力で小型ミニオンを出して攻める。6ターン目くらいまでに相手を瀕死にさせないと返される(有利マッチ不利マッチどちらもほぼ同じ戦術)

ビッグウォリアー
6ターン目まで相手をの攻めをいなして、7ターン目から単体の超大型ミニオンを出して攻撃に転ずる(有利マッチ不利マッチどちらもほぼ同じ戦術)

Vector

前回大会は優勝者とほぼ同格だったエージェント
毎アクション,全ての選択肢を試して,独自定義のボードスコアが高かったアクションを行う.

HappyCat

作成者からの説明↓
(1)1手読みのVectorエージェントをベースに作っている。自分方、敵方のデッキごとに別々に強化学習を行う。
(2)Vectorエージェント同士の対戦を20000対戦程度行い、ヒューリスティックに盤面データの畳み込みを行ったうえでこれをDQNで強化学習させる。(勝ちにつながるムーブだけを学習する。)
(3)基本的には盤面ごとに学習した内容に従って着手するが、「上位3位までの候補手を抽出し実行可能な候補手がない場合」「Vectorがリーサルを読み切っている場合」にはVectorに従って着手する。
(問題点)Q学習を1回行っただけなので、学習前のVectorよりは賢くなっていると思うが、十分に賢いわけではない。 (問題点)負けにつながるムーブの学習は時間が足りなくて行わなかったが、これは必要。分が悪い相手に勝率をよくするのに、上の手法は使えるが、分が良い相手だと学習しなくなってしまうという問題点が露見した。

Queen

作成者からの説明↓
q学習エージェント
ハースストーンにおける大きな戦術 テンポプレイ バリュープレイ
それらをどちらも重視した均衡解ならどんな相手でも戦えるのでは?
カードを使用した時のターン数とボードに与えた影響を評価値とした(勝ち負けは考慮しない)
使用するカードにターゲットが必要な場合、独自のボードスコアを基準に決定する

大会結果

スクリーンショット 2022-03-20 140247
基準エージェントとなるVectorを超えるエージェントが現れなかったため、優勝者はなしとします。

スクリーンショット 2022-03-20 145749

主催者感想

コンペとして難しすぎた?ような結果だったと思います。今回は、MCTSを捨てる条件戦ではなかったのですが、結局参加者はQテーブルにチャレンジし、何もしてないVectorに結局勝てなかったという結果でした。デッキが難しかったのでは、という意見がありましたが、結局コントロールデッキを意識的にきちんとコントロールできるエージェントがまだ作れていないというのが本当かなと思います。(シークレットメイジは、実装カードから作れますし、検討してもよいと思いました。)

その一方で、DNNがDTCGに技術として使えそうだという見込みは立ちました。どのように畳み込むかという問題は絶えず残っていますが、現状での感覚では、おおらかな畳み込みで全体の流れをコントロールし、部分的にはMCTSでターン内を読み切るのが良いようにも思いました。