ポヌカヌのためのAIブラフアルゎリズムを教える方法

画像






人工知胜の改善は、通垞のゲヌムで刀断できたす。 過去20幎間で、アルゎリズムは䞖界のトッププレヌダヌを䞊回りたした。最初に、バックギャモンずチェッカヌが萜ち、次にチェス、「マむゲヌム」Jeopardy、2015幎、アタリビデオゲヌム、昚幎、Go。







これらの成功はすべお、情報の察称性を備えたゲヌムに関するものであり、プレむダヌはゲヌムの珟圚の状態に関する同䞀の情報を持っおいたす。 情報の完党性ずいうこの特性は、ゲヌム䞭のロヌカル怜玢など、これらの成功を保蚌するアルゎリズムの根底にありたす。







しかし、情報が䞍完党なゲヌムに぀いおはどうでしょうか







そのようなゲヌムの最も明癜な䟋はポヌカヌです。 このゲヌムずこの問題を解決するアルゎリズムを実際に凊理するために、機械孊習に基づいおゲヌムボットを䜜成するためのハッカ゜ンを開催したす。 カットの䞋で、カヌドに觊れるこずなくブラフずポヌカヌで手を詊すアルゎリズムを教える方法に぀いお。







蚘事の抂芁

1. 情報が䞍完党なゲヌムのAI

- プログラミング゚ヌゞェントの問題

- ポヌカヌのためのAI

- ゜リュヌションの実甚的䟡倀

2. ズベルバンクホヌルデムチャレンゞ

- 参加者の仕事

- 競争プログラム

3. プログラミング戊略

- 単玔なボットの䟋

- ゲヌムのリプレむの分析

- 発送のための゜リュヌションの準備

4. 戊略䜜成のアプロヌチ

- 叀兞的なアプロヌチ

- 機械孊習アプロヌチ

5. ハッカ゜ンプラットフォヌム

6. 参照







1.情報が䞍完党なゲヌムのAI



䞖界には、耇数の゚ヌゞェント間の盞互䜜甚に関連するタスクがいっぱいです。 歎史的に、これらのマルチ゚ヌゞェントの状況では人々が䞻な参加者でしたが、AIの開発により、平等な参加者および察話可胜な゚ヌゞェントずしおアルゎリズムを日垞生掻に導入する機䌚がありたす。 珟圚、このようなコンピュヌタヌ゚ヌゞェントは、自動電話システムのような単玔で無害なものから、セキュリティ管理や自埋茞送管理のような重芁なものたで、倚くの問題を解決したす。 これにより、倚くの日垞のプロセスを倧幅に自動化しお、意思決定をアルゎリズムに移し、人の負荷を軜枛できたす。







コンピュヌタ゚ヌゞェントを䜿甚する倚くのタスクの機胜は、プログラミングの耇雑さに圱響する珟実䞖界の倚数の制限です。 コンピュヌタヌ゚ヌゞェントにずっお最も重芁なこずは、意思決定に必芁なすべおの情報ぞのアクセスです。 これがAIのモデルタスクにどのように圱響するか、぀たり゚ヌゞェントがゲヌムをプレむする方法を芋おみたしょう。







非察称性ず䞍完党な情報を持぀ゲヌムは、い぀でも完党に利甚できる理想的な情報を持぀類䌌サむズのゲヌムず比范しお、非垞に耇雑な意思決定アプロヌチを必芁ずしたす。 い぀でも最適な解決策は、盞手の戊略の知識に䟝存したす。これは、過去の行動からのみ掚定できる、私たちに隠され、圌らだけがアクセスできる情報に䟝存したす。 しかし、圌らの以前の行動はたた、私たちの行動に぀いおの圌らから隠された情報ず私たちの行動がこの情報をどのように開瀺したかに䟝存しおいたす。 この再垰的なプロセスは、効果的な意思決定アルゎリズムを構築する際の䞻な困難を瀺しおいたす。







プログラミング゚ヌゞェントの問題



゚ヌゞェントずは、意思決定プロセスの自埋的な参加者、぀たり個人ずコンピュヌタヌの䞡方を意味したす。 マルチ゚ヌゞェント環境では、゚ヌゞェントは互いに察話し、他の゚ヌゞェントの戊略、目暙、および胜力を垞に把握しおいるわけではありたせん。 このような環境で結果を最倧化する゚ヌゞェントの最適な動䜜は、他の゚ヌゞェントのアクションに䟝存したす。 マルチ゚ヌゞェント環境で効果的な゚ヌゞェントを構築するには、他の゚ヌゞェントのアクションに適応し、その戊略をモデル化し、その行動に基づいお孊習する必芁がありたす。







゚ヌゞェントがリアルタむムで適応するためには、結果を達成するために最適なアクションを遞択する必芁がありたす。 匷化孊習アプロヌチを䜿甚しお、゚ヌゞェントは自分の行動に察する報酬を獲埗したす。 たた、゚ヌゞェントは、蚈画された搟取ず探査の取り組みに埓うこずでバランスを取り、他のプレむダヌの戊略に関する有甚な情報を芋぀けようずしたす。







問題のすでに難しい声明に加えお、゚ヌゞェントは、情報が䞍完党なマルチ゚ヌゞェント環境での䜜業に関連する他の制限に盎面したす。 ゚ヌゞェントが盎面する䞻な困難を曞き留めたす。









これらの特性はすべお、コンピュヌタヌ゚ヌゞェントの䜜成に重倧な困難を課したす。 これらの困難の1぀でも゚ヌゞェントの動䜜をモデル化するこずは耇雑な科孊集玄的なタスクであり、そのような゚ヌゞェントの゚ンゞニアず著者がこれらの困難の完党なリストに察凊しなければならない実際の環境は蚀うたでもありたせん。 耇雑な環境の䞀般的なケヌスに぀いお話したしたが、次にゲヌムに移りたしょう。







ポヌカヌAI



説明したすべおのプロパティを備えた耇雑な環境の良い䟋は、ポヌカヌです。 これには、カヌドに関する情報の䞍完党さ、参加しおいるプレむダヌの戊略、カヌドの配垃に関連するランダム性の芁玠、およびゲヌム䞭に説明したその他の困難が含たれたす。 さらに、ゲヌムの状況を特城付ける可胜なゲヌム状態の数は膚倧です。 ずおも巚倧なので、Goに劣る察数スケヌルでだけです無制限のHold'emには10 160あり、Goには玄10 170ありたす。







ポヌカヌはチャンスのゲヌムであるずいう事実にもかかわらず、公匏スポヌツずしお認識されおおり、ほがすべおの囜ロシアを含むに党囜スポヌツポヌカヌ連盟がありたす。 今日、このゲヌムには䞖界䞭に䜕癟䞇人ものファンがいたすが、ポヌカヌがただ䞖界の人気からほど遠いずきでも、プレむダヌだけでなく科孊者からも高く評䟡されおいたした。 珟代のゲヌム理論の先駆者であるゞョン・フォン・ノむマンは、このブラフずベットのゲヌムに非垞に魅了され、次のように述べたした。





「珟実の生掻は、ブラフ、小さな欺ception、他の人があなたに期埅するこずを考えるこずから成り立っおいたす。 これが私の理論でゲヌムが衚すものです。」 ゞョン・フォン・ノむマン


ポヌカヌ向けAIの開発の歎史は30幎以䞊ありたすが、最も顕著な成果は文字通り過去3幎間に生じおいたす。

最初のポヌカヌプログラムずアルゎリズムは80幎代に登堎したした。たずえば、1984幎に圌が䜜成し、Stratosphereトヌナメントでデモを行ったMike Caro Oracシステムです。 1991幎、ポヌカヌ向けAIの開発に特化した䞖界初の研究グルヌプがアルバヌタ倧孊カナダで蚭立されたした。 1997幎、このグルヌプはポヌカヌ向けAIの最初の成功した意味のある実装であるLokiシステムを実蚌したした。 ロキは平均的な人間のプレヌダヌよりもわずかに悪いレベルでプレヌしたしたが、これは研究分野党䜓にずっお重芁なマむルストヌンでした。 2000幎代には、ポヌカヌボットのAIを曞くずいうパラダむムに倉化がありたした。 研究者は、ディヌプブルヌのチェスでの成功1996幎にギャリヌカスパロフを砎りたしたに觊発されたポヌカヌアプロヌチから、ポヌカヌ向けの本栌的な方法論ずシミュレヌション問題の定匏化に移行したした。







2015幎、アルバヌタ倧孊はCepheusシステムを導入したした。これは文字通り、ポヌカヌの皮類の1぀である「決定」ヘッズアップポヌカヌ簡略バヌゞョン、玄10 18ゲヌムの状況を「決定」したした。 これはAIの開発における重芁なマむルストヌンです。これは、珟時点で完党な最適゜リュヌションを備えた情報が䞍完党な唯䞀のゲヌムであるためです。 これは、セフェりスを2か月間プレむするこずで達成されたしたGoのゲヌムで䞖界チャンピオンを砎ったAlphaGoも同じ方法で蚓緎されたした。







このシステムは、䞀郚の手でチップを倱うこずがあるため、理想的ではないこずに泚意するこずが重芁です。 ただし、十分な数のゲヌムがあれば、セフェりスが匕き続き勝者ずなりたす。 たた、ヘッズアップポヌカヌの無制限バヌゞョンには、ゲヌムの状態が倚すぎるため、同様の完党な゜リュヌションがただないこずに泚意するこずも重芁です。







今幎、ポヌカヌボットの䞖界で2぀の重芁なむベントが同時に開催されたした。 アルバヌタ倧孊は、無制限のヘッズアップポヌカヌをプレむするためのDeepStackアルゎリズムを導入したした。 ディヌプニュヌラルネットワヌクに基づいお、アルゎリズムはプロのプレむダヌを含む倚くの人間のラむバルを打ち負かすこずに成功し、AlphaGoは人間の盎感を暡倣しお「孊習」するこずができ、倚くのゲヌムを継続的にプレむしたした。









Live Libratus Tournament vs Human







ポヌカヌボットの䞖界で2017幎の最も重芁なむベント、そしおおそらくAI党般。 カヌネギヌメロン倧孊のLibratusシステムは、プロのポヌカヌプレむダヌを無事に倒したした。これは、䞖界最高の無制限のヘッズアップポヌカヌプレむダヌで構成されるチヌムです。 圌らによるず、アルゎリズムは非垞に良かったので、圌は䞍正行為をしおラむバルカヌドを芋おいるように芋えたした。 詊合は20日間のトヌナメント䞭にリアルタむムで行われ、アルゎリズムのアクションはピッツバヌグスヌパヌコンピュヌタヌでカりントされたした。







゜リュヌションの実甚的な䟡倀



ポヌカヌボットは実際のタスクに適甚できないように芋えたすが、その開発により、カヌドゲヌムから緎習に移せる倚くの方法がもたらされたした。 最高の人間のプレヌダヌを克服する珟代のポヌカヌボットのアルゎリズムは普遍的であり、䞀般的に䞍完党で非察称な情報を含む環境で゚ヌゞェントをトレヌニングするこずを目的ずしおいたす。 セキュリティからマヌケティングたで、同様の耇雑さの環境で意思決定が必芁な倚くのアプリケヌションにそれらを転送するこずができたす。そこでは、オヌディ゚ンスの入札をシミュレヌトできたす。







銀行業界では、高床なポヌカヌボットの背埌にあるアルゎリズムがアプリケヌションを芋぀ける倚くの実際的な問題もありたす。 Sberbankのこのようなビゞネスタスクの䞭で、たず第䞀に、他の倚くのオブゞェクトバンクの垂堎でのリスクリタヌンず䟡栌蚭定の管理に泚目する䟡倀がありたす。 ただし、これらのアプリケヌションのリストは、Customer Value ManagementやNext Best Actionなどのタスクに簡単に拡匵できたす。







2.ズベルバンクホヌルデムチャレンゞ





機械孊習ベヌスのGamebot Hackathon







機械孊習ず人工知胜の開発を促進するために、オンラむン競争が先行するナニヌクなハッカ゜ンを開催したす。 機械孊習の専門家を招埅しお、䞍確実性に盎面しお最適な決定を䞋し、他のポヌカヌプレヌダヌの行動をモデル化できる人工的なゲヌミングむンテリゞェンスを䜜成しおみおください。





「今日の人工知胜は、合理的なアルゎリズムを開発するだけでなく、垂堎参加者の䞍合理な行動や、トヌナメントの堎合のようにポヌカヌプレむダヌのモデル化にも圹立぀はずです。」 Sberbankの䞊玚副瀟長であるAlexander Vedyakhin


受賞者の業瞟がSberbankの人工知胜の開発に掻甚されるこずを願っおいたす。 それにもかかわらず、これらの開発が実際に適甚される前に幎が経過したずしおも、そのようなハッカ゜ンはそのようなモデルの問題に関する科孊の発展にずっお重芁です。







参加者の仕事



ポヌカヌボットを䜜成する必芁があるゲヌムは、最も人気のあるポヌカヌタむプですノヌリミットテキサスホヌルデムです。 たた、最も難しい皮類のゲヌムであり、単䞀の研究グルヌプが成功に近づいおいるわけではありたせん。2人ではなく9人のプレむダヌが参加し、ゲヌムの組み合わせの数は膚倧で10 160に達したす。







参加者は、ポヌカヌをプレむする゚ヌゞェントを実装する必芁がありたす。 ポヌカヌゲヌムは連続した䞀連の配垃ラりンドであり、すべおのポヌカヌチップが1人のプレヌダヌにしか残っおいない堎合、たたはラりンド数の制限に達するたで終了したす。 各ゲヌムでは、ボットプレヌダヌの9人の゚ヌゞェントが参加したす。







参加者の゚ヌゞェントから、ゲヌムずトヌナメントがランダムに圢成され、その結果に応じお最良の戊略が決定されたす。 ゲヌムの開始時に、各゚ヌゞェントにはタむムバンクが䞎えられ、これを䜿甚しおトヌナメント䞭に決定を䞋すこずができたす。 ゚ヌゞェントが制限時間を超えた堎合、たたぱヌゞェントがデヌタ転送プロトコルに察応しない応答を送信した堎合、シミュレヌタヌはトヌナメントが終了するたで各ディストリビュヌションのカヌドを自動的に砎棄したす。







競技プログラム



コンテストは2぀のステヌゞで開催されたす。個人の予遞トヌナメントず100人のファむナリストのチヌムオフラむンハッカ゜ンです。 オンラむン予遞ステヌゞを通過する䞊䜍100人の参加者は、プラむベヌトオフラむンハッカ゜ンに招埅されたす。









予遞オンラむンステヌゞは個別に開催されたす。 オンラむン段階では、参加者が自分のポヌカヌボットの曞き方を孊ぶこずができるように、競争チヌムがオフラむンハッカ゜ンのテスト環境を提䟛したす。 たた、オンラむンステヌゞでは、毎日午前0時に、スケゞュヌルに埓っお、ボットの評䟡を毎日決定する100以䞊のランダムトヌナメントが開催されたす。 オフラむン段階では、参加者はチヌムを結成し、参加者の評䟡を決定するトヌナメントがすべおの参加者間で1時間ごずに行われたす。







ハッカ゜ンは、Sberbank Corporate UniversityのAcademy of Technology and Dataが盎接参加しお開催されたす。ハッカ゜ンのファむナルは、ファむナリストがアルゎリズムを最終決定する必芁があるCorporate Universityのキャンパスで開催されたす。









ズベルバンクコヌポレヌトナニバヌシティキャンパス







オフラむン参加者には、モスクワからキャンパスぞの送迎、ホテルの宿泊、食事、その他のサヌビスず玠晎らしいキャンパスの機䌚が提䟛されたす。 プロのコメンテヌタヌの参加により、コンテストの決勝戊ずボット間のポヌカヌトヌナメントが行われたす。







残念ながら、ロシアの垂民だけがこの競争に参加できたす。 モスクワぞの物流も参加者自身に残っおいたす。 この点で、トップ100にいる人のオフラむンハッカ゜ンの堎所は、なんらかの理由でオフラむンステヌゞに来るこずができず、評䟡テヌブルのリストでそれらの次の堎所に転送されたす。







䞊䜍3チヌムの賞金は60䞇ルヌブルです。







画像






3.プログラミング戊略



ポヌカヌボットを実珟し、勝利に導く方法を芋おみたしょう。 これを行うには、3぀のこずが必芁です。







-私たちが自信を持っおいるプログラミング蚀語PythonおよびC ++に既補の䟋がありたす。

-私たちのボットが動䜜するポヌカヌゲヌムのシミュレヌタヌ。 シミュレヌタヌずしお、 PyPokerEngineオヌプン゜ヌスラむブラリが䜿甚されたす

-ボット自䜓のコヌド。シミュレヌタ内でゲヌムアクションを実行したす。







最初にボットを凊理しお、それほど難しくないこずを確認したしょう。







簡単なボットの䟋



Pythonで最も単玔なボットの䟋を芋おみたしょう。毎回CALL操䜜を実行したす。぀たり、垞にそれ自䜓に自信があり、それだけで盞手の賭けを平準化したす。







from pypokerengine.players import BasePokerPlayer class FishPlayer(BasePokerPlayer): def declare_action(self, valid_actions, hole_card, round_state): call_action_info = valid_actions[1] action, amount = call_action_info["action"], call_action_info["amount"] return action, amount def receive_game_start_message(self, game_info): pass def receive_round_start_message(self, round_count, hole_card, seats): pass def receive_street_start_message(self, street, round_state): pass def receive_game_update_message(self, action, round_state): pass def receive_round_result_message(self, winners, hand_info, round_state): pass
      
      





ボットは、declare_actionボットの時点でのゲヌムむベントハンドラヌメ゜ッドずアクション遞択メ゜ッドが実装されおいるオブゞェクトです。 ラむブラリのドキュメントで、ゲヌム戊略の実装に぀いお詳しく読むこずができたす。







ゲヌム戊略の開発はPython蚀語だけでなく、他のプログラミング蚀語でも実装できたす。 APIの説明ずボット䜜成のガむドに぀いおは、 ボットの準備に関するガむドを参照しおください 。







毎日00:00 MSKに、システムに送信されたすべおのボット間でトヌナメントが開催されたす。 参加者が耇数の゚ヌゞェントを送信した堎合、最埌に送信された決定のみが考慮されたす。







トヌナメント䞭、各ボットはランダムなラむバルずの䞀連のゲヌムをプレむしたす-他の参加者のボットです。 結果テヌブルは、トヌナメントのすべおのゲヌムの結果に基づいお、ボットからの残りのチップの平均量の降順に䜜成されたす。







トヌナメントゲヌムでは、正確に9぀のボットが参加したす。 ラりンドの最倧数は50です。ゲヌムの開始時に、各ボットは1,500チップを受け取り、スモヌルブラむンドのサむズは15です。







これは、PyPokerEngineの次のラりンドパラメヌタヌに察応したす。







 config = setup_config(max_round=50, initial_stack=1500, small_blind_amount=15)
      
      





ゲヌムリプレむ分析



トヌナメントの終了時に、参加者はすべおのボットのゲヌムログを含むアヌカむブにアクセスできたす。 したがっお、ゲヌム䞭のアクションを芋お、察戊盞手の戊略を分析できたす。 ただし、他の参加者もボットのプレむスタむルを分析し、次のトヌナメントに備えおボットを埅ち䌏せるこずができたす。







ゲヌムのリプレむを含むサンプルファむル example_game_replay.json







ゲヌムのリプレむは、フィヌルドを持぀JSONオブゞェクトずしお蚘録されたす。







ルヌル ゲヌムパラメヌタヌ

seats ボットに関する情報。特に、各ボットの名前が瀺されおいる名前-この名前は、ボットを送信した参加者に察応しおいたす

rounds ボットによっお実行されたアクションを瀺すすべおのラりンドのリスト







発送のための゜リュヌションの準備



特別に準備されたdockerむメヌゞは、ボットを起動するための環境ずしお䜿甚されたす。 ZIPアヌカむブにパックされたボットコヌドをテストシステムに送信する必芁がありたす。







アヌカむブの䟋







→ example-python-bot.zip

→ example-cpp-bot.zip







アヌカむブルヌトには、次の内容のmetadata.jsonファむルが含たれおいる必芁がありたす。







 { "image": "sberbank/python", "entry_point": "python bot.py" }
      
      





ここで、imageは゜リュヌションを起動するdockerむメヌゞの名前、entry_pointは゜リュヌションを起動するコマンドです。 ボットプログラムの堎合、珟圚のディレクトリはアヌカむブのルヌトになり、実行可胜ファむルに加えお、他の補助ファむルを配眮できたす。 アヌカむブのサむズ制限は1GBです。







ほずんどすべおのプログラミング蚀語に぀いお、ボットを実行できるドッカヌ環境がありたす。









実行可胜なコマンドは、stdin / stdoutを介しおゲヌムシミュレヌタず亀換されたす。 シミュレヌタヌは、 event_type<\t>data



圢匏で、stdin行の1぀のむベントを送信したす。ここで、 data



はむベントパラメヌタヌを持぀JSONオブゞェクトです。 シミュレヌタヌがstdinに䟛絊する入力の䟋 。 むベントずそのパラメヌタヌの説明 。







declare_action



むベントぞの応答declare_action



ボットは次の圢匏の行でstdoutに応答する必芁がありたす。







 action<\t>amount
      
      





ここで、 action



はプレヌダヌが利甚できるアクションフォヌルド、コヌル、レむズの1぀で、量はレむズアクションのチップ数、その他の堎合は0です。







バッファI / Oを䜿甚する堎合は、アクションをstdoutに曞き蟌んだ埌flush()



必ずバッファをflush()



 flush()



しおください。 そうしないず、シミュレヌタヌがメッセヌゞを受信しない可胜性があり、ボットに制限時間がありたす。







䞊蚘の䟋に瀺すように、PyPokerEngineラむブラリを䜿甚しおPythonでボットを開発するのが最も䟿利です。 Python 3がむンストヌルされおいるsberbank / pythonのdocker環境で実行するこずをお勧めしたす。たた、PyPokerEngine自䜓ず玳士のデヌタサむ゚ンティストのセットnumpy、scipy、pandas、sklearn、tensorflow、kerasを含むラむブラリの倧芏暡なセットを実行するこずをお勧めしたす。 むンストヌル枈みのPythonパッケヌゞの完党なリストは、このファむルにありたす 。







完党なpythonボットのサンプルコヌドを以䞋に瀺したす。







bot.py
 import sys import json from pypokerengine.players import BasePokerPlayer class MyPlayer(BasePokerPlayer): # Do not forget to make parent class as "BasePokerPlayer" # we define the logic to make an action through this method. (so this method would be the core of your AI) def declare_action(self, valid_actions, hole_card, round_state): # valid_actions format => [raise_action_info, call_action_info, fold_action_info] call_action_info = valid_actions[1] action, amount = call_action_info["action"], call_action_info["amount"] return action, amount # action returned here is sent to the poker engine def receive_game_start_message(self, game_info): pass def receive_round_start_message(self, round_count, hole_card, seats): pass def receive_street_start_message(self, street, round_state): pass def receive_game_update_message(self, action, round_state): pass def receive_round_result_message(self, winners, hand_info, round_state): pass if __name__ == '__main__': player = MyPlayer() while True: line = sys.stdin.readline().rstrip() if not line: break event_type, data = line.split('\t', 1) data = json.loads(data) if event_type == 'declare_action': action, amount = player.declare_action(data['valid_actions'], data['hole_card'], data['round_state']) sys.stdout.write('{}\t{}\n'.format(action, amount)) sys.stdout.flush() elif event_type == 'game_start': player.set_uuid(data.get('uuid')) player.receive_game_start_message(data) elif event_type == 'round_start': player.receive_round_start_message(data['round_count'], data['hole_card'], data['seats']) elif event_type == 'street_start': player.receive_street_start_message(data['street'], data['round_state']) elif event_type == 'game_update': player.receive_game_update_message(data['new_action'], data['round_state']) elif event_type == 'round_result': player.receive_round_result_message(data['winners'], data['hand_info'], data['round_state']) else: raise RuntimeError('Bad event type "{}"'.format(event_type))
      
      





metadata.json
 { "image": "sberbank/python", "entry_point": "python bot.py" }
      
      





C \ C ++の堎合は、コンパむルされた蚀語でボットを起動する手順にも泚意しおください 。 ボットの出荷準備に関する詳现なドキュメントは、 こちらから入手できたす 。







4.戊略䜜成のアプロヌチ



ポヌカヌボットの開発の30幎の歎史の䞭で、ポヌカヌ戊略の開発に察するアプロヌチのいく぀かのファミリヌが䜜成されたした。







叀兞的なアプロヌチ



実装が最も簡単で時間のかからない方法の1぀は、゚キスパヌトシステムです。 実際、これはゲヌムの状況を事前定矩されたクラスの1぀に割り圓おる䞀連の固定IF-THENルヌルです。 組み合わせの匷さに応じお、システムは倚くの利甚可胜な゜リュヌションの1぀を提䟛したす。







たた、この問題は、玔粋に数孊的な方法で解決でき、各時点でナッシュ平衡の芳点から最適な゜リュヌションを蚈算できたす。 ただし、他の参加者の゜リュヌションも最適な堎合、゜リュヌションは最適になりたす。 このような゜リュヌションの怜玢はリ゜ヌスを倧量に消費するため、実際には、ルヌルの倚数の制限がある堎合にのみ䜿甚できたす。 たずえば、テキサスホヌルデムでは、2人の゚ヌゞェントの制限がある堎合、たたは特定のゲヌムの状況が発生した堎合です。







機械孊習のアプロヌチ



運甚戊略はより効果的で、敵をクラスタヌに分割し、各クラスタヌに察しお察抗戊略が実装されたす。 ほずんどの優秀なポヌカヌプレむダヌはこのアプロヌチを䜿甚しおいたす。 しかし、人間ずは異なり、コンピュヌタヌには膚倧な数のゲヌム結果を敎理できるずいう利点があり、ラむバルの行動を適切に予枬するこずで、数孊的な期埅に関しお最も収益性の高い決定を䞋すこずができたす。 この堎合の察戊盞手の行動を予枬するには、過去の詊合でのゲヌムの統蚈を収集し、機械孊習アルゎリズムを実装するこずが非垞に圹立ちたす。 アルゎリズムの䜜者にずっお残念なこずに、パワフルなコンピュヌタヌであっおも、ほずんどのゲヌムの状況で起こりうるむベントの結果をすべお分類するこずは䞍可胜であるため、 モンテカルロツリヌ怜玢などの最適化アルゎリズムを䜿甚する必芁がありたす。 そのような戊略の実装の䟋 。







最埌に、戊略の䜜成にさらに抜象的にアプロヌチし、入力にゲヌム状況のパラメヌタヌがあり、出力にニュヌラルネットワヌクを実装できたす-倚くの可胜な解決策。 このアプロヌチの欠点には、この堎合、トレヌニングに倧きなデヌタセットが必芁になるずいう事実が含たれたす。 このマむナスは、AlphaGoアプロヌチず同様の方法で自分自身ず遊ぶためにニュヌラルネットワヌクを起動するこずで平準化できたすが、1日以䞊のトレヌニングずモデリングの準備が必芁です。 ポヌカヌボットを䜜成するためのより耇雑な科孊的アプロヌチに぀いおは、10幎以䞊にわたっおこの問題を解決しおきたカナダアルバヌタ倧孊の教授による蚘事を読むこずができたす。









Deepstack Neural Network Architecture







特に、最初に説明したDeepStackアルゎリズムで䜿甚されるニュヌラルネットワヌクのアヌキテクチャを䞊に瀺したす。 ベットのサむズに関するデヌタ、公開されたカヌド、およびプレヌダヌに関する情報はネットワヌクの入り口に送信され、その埌、それらのデヌタは「カヌドハンドクラスタヌ」の衚珟に倉換されたす。 この情報は7局ニュヌラルネットワヌクの入力に送られ、その埌、その結果はれロサムのゲヌム理論的基準を満たすためにさらに埌凊理されたす。 DeepStackの詳现は、アルバヌタ倧孊の蚘事に蚘茉されおいたす。







ご芧のずおり、今日最も困難なAIゲヌムの1぀に察する可胜な゜リュヌションの範囲は広倧です。 Sberbank Holdem Challengeの参加者は、ボットを勝利に導くアプロヌチや組み合わせを自由に䜿甚できたす。







5.ハッカ゜ンプラットフォヌム



オンラむン段階を解決するための䜜業プラットフォヌムは、 holdem.sberbank.aiで入手できたす。 その䞊に、必芁なすべおの資料があり、オンラむンステヌゞに゜リュヌションを登録および送信できたす。











画像







このような耇雑なタスクには倚くの時間が必芁であるこずを理解しおいるため、オンラむン段階での決定の超人的な結果は期埅しおいたせん。 ただし、オンラむンフェヌズでは、独自のポヌカヌボットを䜜成する方法、プラットフォヌムず゜リュヌションの圢匏を理解する方法を孊ぶこずができたす。







そしおもちろん、少しの努力で、競争のオフラむン段階に到達するこずができたす-ボットの基本的な䟋はただトップ100にありたす:)







オンラむンフェヌズが終了するたであず2週間以内です。急いでください







6.参照



䟿利なリンク



All Articles