Google AIチャレンジ用のボットを作成しています。 クイックスタート





Google AI Challenge Antsがまもなく開始されます。 2日前、このコンテストについて既にハブで発表がありました。

http://habrahabr.ru/blogs/sport_programming/130457/

。 参加したい人、または少なくともこれがどのように行われるかを詳しく知りたい人のために、この「クイックスタート」を書きました。

この記事から、マシンでゲームを実行する方法、最初のボットを書く方法、2つのコピーを起動して互いに戦う方法を学びます。





Linux(Debian)を使用していますが、サイトにはWindows用のキットもあります (Pythonをシステムにインストールする必要があります)。

Perlでのボットの例を挙げますが、これは別の言語で書く人にとっての記事の有用性を否定するものではありません。

aichallengeのキットには、Java、PHP、C#、Pythonの言語で書かれた既製のボットが含まれています。

さらに、このサイトでは、言語でボットを作成するためのスターターパックをダウンロードできます。

C#、C ++、Common Lisp、D、Go、Java、JavaScript、Lua、OCaml、Pascal、Perl、PHP、Python、Ruby、Scala。

すぐにこれらの言語が追加されます:

C、Clojure、CoffeeScript、Erlang、Groovy、Haskell、Visual Basic。



はい。 異なるプログラミング言語で書かれたボットの戦いを同時に開始できます。



別れの言葉


プログラミングの経験がほとんどなく、何も輝いていないと思う場合でも、少なくともローカルマシンで手を試すことをお勧めします。 少なくとも、優れたプログラミングスタイルの例が表示され、他の人のコードを操作するような有用なプログラマスキルが得られます。

ちなみに、Googleは1年生に特別な賞品を提供することを約束しています。



さあ、始めましょう。



何を始める必要がありますか?





まず第一に、すべての有用な情報がある公式ウェブサイトへのリンクです: http : //beta.aichallenge.org/



ボットを作成するには、 スターターパックが必要です。 ページで

http://beta.aichallenge.org/starter_packages.phpプログラミング言語を選択して、アーカイブをダウンロードします。 Perlを選択しました:

$ wget http://beta.aichallenge.org/starter_packages/perl_starter_package.zip
      
      







たとえば、MyBotディレクトリで展開します。

 $ unzip -d MyBot perl_starter_package.zip Archive: perl_starter_package.zip inflating: MyBot/Ants.pm inflating: MyBot/MyBot.pl inflating: MyBot/MyBot.pm inflating: MyBot/Position.pm inflating: MyBot/README.md
      
      







これはシンプルですが、すでに動作しているボットのバージョンです! それを実行することができます。 しかし、最初にその目的を説明します。

戦闘は長方形のエリアで行われます。 敷地には土地、水、食物、蟻塚があり、実際、主人公はアリです。

ゲームはターンベースです。

ボットは無限のサイクル(1サイクル-1ステップ)で競技場の状態を受け取り、アリの新しい位置を返すプログラムです。

ボットはすべてのアリの集合体であり、アリが知っているすべてのことを知っています。 各サイクルで、各アリのボットは次のステップを決定する必要があります。次のステップでは、アリは北、南、東、西、または所定の場所に留まります。 それだけです これがゲームのポイントです。



それでは、実装に移りましょう。 ボットの実装はMyBot.pmファイルにあります。

ファイルAnts.pmおよびPosition.pmは、ゲームワールドと対話するために必要なファイルです。 ファイルMyBot.pl-ボットを起動するためのファイル。

ボットの作成に関するすべての作業は、MyBot.pmファイルで行われます。

ここでの主な機能は次のとおりです。



 sub create_orders { my $self = shift; for my $ant ($self->my_ants) { my @food = $self->nearby_food($ant); for my $f (@food) { my $direction = $self->direction($ant, $f); next unless $self->passable( Position->from($ant)->move($direction) ); $self->issue_order( $ant, $direction ); last; } } }
      
      





これはまさに、すべてのステップで呼び出される関数です。

すべてのアリのすべてのアリのために

  for my $ant ($self->my_ants) {
      
      





何かが行われています...そして結果として、システムは指示されます:

  $self->issue_order( $ant, $direction );
      
      





このアリがこのように行くことを。



それだけです そして誰がどこへ行くのか-これはあなたのファンタジーです。 この例では、アリは利用可能な最初の食物に従います。

しかし、ボットの作成を試みると約束しました。 そして、レッスンをシンプルにするために、最もシンプルでありながら最も役に立たないオプションも記述します-アリはランダムに歩きます。



しかし、先に進む前に、ボットの戦いをどこで見るかを理解する必要があります。

公式ウェブサイトには、Pythonで記述されたAnts game visualizerという特別なキットが用意されています。

Linux / MacOSバージョン: http : //beta.aichallenge.org/tools.tar.bz2

Windowsバージョン: http : //beta.aichallenge.org/tools.zip



私たちは取ります:

 $ wget http://beta.aichallenge.org/tools.tar.bz2
      
      





開梱:

 $ tar -xjvf tools.tar.bz2
      
      







見ます。 フォルダのルートに名前を話す2つのシェルスクリプトがあります。

play_one_game.sh

play_one_game_live.sh

プロセスを観察するには、ファイルplay_one_game_live.shが必要です。

注意深く見てみましょう:



 #!/usr/bin/env sh ./playgame.py -So --player_seed 42 --end_wait=0.25 --verbose --log_dir game_logs --turns 1000 --map_file maps/maze/maze_9.map "$@" \ "python sample_bots/python/HunterBot.py" \ "python sample_bots/python/LeftyBot.py" \ "python sample_bots/python/HunterBot.py" \ "python sample_bots/python/LeftyBot.py" | java -jar visualizer.jar
      
      







ゲームを開始するとき:

 $ ./play_one_game_live.sh
      
      





ビジュアライザーが開き、4つの蟻塚のある大きなフィールドが表示され、戦いを見ることができます。

コードからわかるように、ビジュアライザーにバンドルされている4つのPythonボットがあります。 Pythonボットに加えて、私が言ったように、C#、Java、PHPで書かれたボットがあります。







最初のステップが実行されました。 いいね! 次は?



次に、Perlボットをゲームに接続します。 スクリプトを変更します。

「python sample_bots / python / HunterBot.py」という行は、ボットを起動するコマンドです。 このコマンドの動作の結果は、入力データを受信して​​結果を生成する実行中のプロセスでなければなりません。 したがって、任意のプログラミング言語で書かれたプログラムがここにあります。

私の場合、ボットを起動するプログラムはMyBot.plです。



sample_bots / perlディレクトリを作成し、ボットに必要なすべてのファイルをスターターキットからこのディレクトリにコピーします。



 $ cp MyBot/*.pl MyBot/*.pm tools/sample_bots/perl/
      
      







ボットがあります。 よりシンプルなマップを選択しましょう。 マップはマップディレクトリにあります。 各カードはテキストファイルです。 最初の3行は、マップ上のプレーヤーのサイズと人数です。

注意してください、マップに示されているのと同じ数のプレイヤーを起動してください!

私は2人のプレイヤーがいる小さな地図を選びました。

マップ/例/ tutorial1.map



play_one_game_live.shスタートアップファイルに変更を加えます

 #!/usr/bin/env sh ./playgame.py -So --player_seed 42 --end_wait=0.25 --verbose --log_dir game_logs --turns 1000 --map_file maps/example/tutorial1.map "$@" \ "python sample_bots/python/HunterBot.py" \ "perl sample_bots/perl/MyBot.pl" | java -jar visualizer.jar
      
      







すべて準備完了です。 ボットのゲームを起動して見ることができます。





ランダムに歩くボットを作成します





タスクの実装に進みます。 MyBot.pmファイルを開き、 サブcreate_orders関数から不要なものをすべて削除します。 出発点は次のとおりです。



 sub create_orders { my $self = shift; for my $ant ($self->my_ants) { $self->issue_order( $ant, $direction ); } }
      
      







彼女はまだ働いていません $方向が定義されていません。 issue_order関数(Ants.pmファイルにあります)のコードを見ると、2番目の引数として文字Nを受け入れていることがわかります: N、S、WまたはE (北、南、西または東)。



文字の配列を作成し、アリごとにこの配列の任意の要素を取得します。 したがって、すべてのステップですべてのアリは未知の方向に進みます。



perl言語はこれらすべてを数行で書きたがりますが、 この記事は、さまざまなタイプとレベルのプログラマー向けに設計されているため、次のように記述します。



 sub create_orders { my $self = shift; my @directions = qw(NSWE); for my $ant ($self->my_ants) { my $index = int (rand (4)); $self->issue_order( $ant, $directions[$index] ); } }
      
      







ライバルの容赦ない冷酷なアリに盲目の子猫がどのように食い尽くされているかを観察します。







じゃあ このボットは準備はできていますが、愚かですが、独自のものです。 要点は小さい:知能をボットに追加し、食物を探して戦うように教え、勝利のために送ることができます。 ここで私たちの道は分岐します。

私は食べ物とライバルを見つけるための機能を独立した研究のために残します。 Ants.pmファイルを参照してください。



結論として、私は登録についていくつかの言葉を言いたいです。

正しい登録リンクはこちら: beta.aichallenge.org/submit.php

サイトの一部の場所(最後のチャンピオンシップのように見える)に誤ったリンクが表示されたため、最初は私を怖がらせ、このベンチャーをやめそうになりました。

登録後、最初のスターターパックをそのままアーカイブにダウンロードして、できるだけ早くあなたの名前が評価に表示されるようにすることができます。



戦場でお会いしましょう!



All Articles