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

第1回 ハースストーン固定デッキAI大会(フェイスハンター)

  • TCGの一つとして有名なハースストーンには、公開されたpythonプラットフォームであるfireplaceがあります。fireplaceを用いた、人工知能プレーヤー(エージェント)の競技大会により、TCGの人工知能についての知見を深めることを目標とします。
  • いくつかのレギュレーションを計画していますが(以下を参照のこと)2021年は固定デッキ大会を試験的に開催いたします。3月に第1回を計画しておりますが、ここではアグロ系デッキとして有名な「フェイスハンター」を固定デッキとして(したがって相手のデッキもわかっている状態で)対戦をするエージェントの開発を競い合います。
  • 簡単のため、AIは手札からカードをプレーする部分とミニオンの攻撃のみを担うこととします。したがって、特定のカードをプレイした時に発生するカードの選択や発見はランダムに行われるものとします。
  • 1ターンの制限時間は30秒とします。(他のAI大会を参考にしました。)マシンスペックについて特に指定しませんが、市販のintel core i7 2GHz程度のマシンであれば大丈夫だと思います。(今回は30秒を過ぎても「警告」を与えるだけで失格とはしません。)
  • [はじめかた]]と[エージェントの作り方は、それぞれリンク先を参照してください。
  • エージェントを作って参加してください。
  • エージェントは非公開領域(game.current_player.deck, game.current_player.opponent.deck, game.current_player.opponent.hand) を参照してはいけないことにします。プレイログから相手がプレイした秘策がみれますが、人工知能には判断が難しい事柄として第一回は考慮して良いものとします。
  • 参加エージェントを総当たりで7戦ずつすることを考えています。参加するエージェントの数で変動する可能性があります。
  • 勝ち数の合計で順位を決めます。

このコンペは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)にご連絡ください。

日時、スケジュール

第1回ハースストーンAIデッキ固定大会(予選)
時間: 2021年3月6日 01:00 PM より 04:00 PM まで
ZoomミーティングID: 931 4668 6115
パスコード: 241355
(参観には手続きは不要です。)

予選結果詳細:https://github.com/aharalabMeiji/fireplaceAharaLab/blob/master/fireplaceAharaLab/fig/202103061503.zip

第1回ハースストーンAIデッキ固定大会(決勝)
時間: 2021年3月7日 02:00 PM より 03:30 PM まで
上位2名で15戦行います!
(03:00 PM からGAT2021のツアーで中継いたします。)

本戦結果:https://github.com/aharalabMeiji/fireplaceAharaLab/blob/master/fireplaceAharaLab/fig/202103061503.zip

動作プロジェクト:

https://github.com/aharalabMeiji/fireplaceAharaLab/tree/1st_competition_fixed_deck

で同じプレーを動かすことができます。

大会参加

参加を希望される方は、山田(cs192023(at)meiji.ac.jp)に「GAT2021 第1回 ハースストーン固定デッキAI大会参加希望」という件名でメールを送ってください。
メール本文には「所属」「氏名」「エージェント名」「エージェントの簡単な説明」を明記し、ソースコードをメールに必ず添付してください。 締め切りは2021年3月1日23:59とします。

大会レギュレーションの構想

デッキについては
(A)デッキはいくつかの準備されたものから用いて、プレーヤーごとに固定して戦う
(B)デッキは全員統一して固定して戦う
(C)デッキはプレーヤーが自由に設定して戦う。
の3つのレギュレーションが候補として考えられますが、2021年は(B)のレギュレーションで実行します。将来的には(A)や(C)のレギュレーションで行うことも考えています。第1回は固定されたデッキ、フェースハンター

faceHunter = [\
	'SCH_617','SCH_617','SCH_312','SCH_312','DRG_253','DRG_253','SCH_133','SCH_133',\
	'SCH_231','SCH_231','SCH_600','SCH_600','BT_213','BT_213','DRG_252','DRG_252',\
	'EX1_611','ULD_152','EX1_610','BT_203','SCH_142','SCH_142','EX1_536','EX1_536',\
	'EX1_539','EX1_539','NEW1_031','NEW1_031','DRG_256','SCH_428']

を使用することとします。これらのカードの特殊能力は明治大学阿原研究室により実装しました。(fireplaceのオリジナルには実装がありません。)

(D)(環境を想定して)30枚くらいの小さいカードプールを設定して、同一のエージェントを用いて、良いデッキを構築するAIを競う。

と言うアイディアもあるのですが、レギュレーションはまだまとまっていません。

対戦を実行するには

対戦を実行するにはmain.pyのmain()を変更します。ここではそのイメージを提示します。

 def main():
     from fireplace import cards
     cards.db.initialize()
     from utils import Agent,play_set_of_games,play_MechaHunterGames
     from hearthstone.enums import CardClass
     Human=HumanAgent("Human",HumanAgent.HumanInput)
     #プレーヤー1
     Random=StandardAgent("Standard",StandardAgent.StandardRandom) # Classを指定しないとHUNTER
     
     # プレーヤー2
     Maya=MayaAgent("Maya",MayaAgent.Maya_MCTS)

     # プレーヤー3
     Vector=StandardVectorAgent("Vector",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.HUNTER)

     # プレーヤー4
     from agent_word_strategy import WordStrategyAgent
     WordStrategy = WordStrategyAgent("WS", WordStrategyAgent.agent_word_strategy\
     	,myOption=[WS.ミニョンで敵ヒーローの体力を削る, WS.呪文を使えるなら呪文, WS.ランダムにプレー]\
     	,myClass=CardClass.PRIEST)

     # プレーヤー5
     HunterCat : faceHunter専用のエージェント
     from agent_HunterCat import HunterCatAgent
     HunterCat=HunterCatAgent("HunterCat", HunterCatAgent.HunterCatAI)

     #デッキを固定しての対戦(ここでは両者ともフェイスハンター)
     play_set_of_games(Human, Random, BigDeck.faceHunter, BigDeck.faceHunter, gameNumber=10, debugLog=True)