DCS Laboratory 1
2人追跡ゲームの作成


トーナメントの手順

ゲームの概要

2人追跡ゲーム(2 players pursuit game)は探索対戦型のゲームである. このゲームは,以下の図のような8×8の2次元格子世界(grid world)で行わ れる.世界は自由格子(free grid)と障害物(obstacle)から構成され, そのいずれかの自由格子に一人の捕食者(predator)と一匹の獲物(prey)がいる. 捕食者のミッションは獲物をとらえて食べることであり,獲物のミッションは, 捕食者から逃れることである.

          ........
          .@......
          ........
          ..#.....
          ..#..#..       @: predator
          ........       *: prey
          .....*..       .: free grid
          ........       #: obstacle grid

この世界では,捕食者と獲物はいずれかの自由格子にいて「クロック」にし たがって動く同期系システムである.クロックとはこの世界を支配する時計で あり,離散的な時間単位である.初期状態は0クロック目と考え,以後順に1ク ロック目,2クロック目と1クロックずつ時間が進んでいく.

捕食者と獲物は1クロック後に現在自分がいる格子の上下左右 の隣接自由格子に移動することができる(斜め方向には動けない).移動せずに 同じ格子にとどまっていることも許される.さらに,捕食者と獲物は,障害物 の置いてある格子や格子世界の外へは移動できない.また,一つのゲームの開 始から終了までの間,障害物は移動しないものとする.

このゲームでは,任意の初期状態(捕食者,獲物,そして複数の障害物の初期 位置により規定される)からスタートし,あるクロックにおいて捕食者と獲物 が同じ格子に入ったら獲物が食べられたと解釈して終了する. また,捕食者と獲物の最初の位置や障害物の数や位置は初期状態により変化す る.初期状態はデータファイルにより規定される.

捕食者と獲物は移動の過渡状況(今のクロックと次のクロックの間)において, すれ違うような状況になることがあるが,その場合は捕獲されないと解釈する. 具体的に述べると次のようなことである. 例えば,あるクロックにおいて捕食者と獲物が左右に隣接していたと する.次のクロックにおいて捕食者は右側の格子に,そして獲物は左側の格子 に移動しようとしたとする.この場合,今の状態と次のクロックの状態の間 (過渡状況)で二人がすれ違うことになるわけだが,その場合は捕食者は獲物を 捕獲できない.あくまで両者の移動先が確定した段階で,捕獲できたかどうか を判断するものとする.

捕食者も獲物も互いに相手がどういう戦略で動くかは不明である.初 期状態からはじめて,捕食者は,可能な限り少ないクロックで獲物をとらえる ことが要求される.逆に,獲物は可能な限り長い間逃げまわることが要求され る.

諸注意

  1. 11月8日(水)の講義のとき,すべてのプログラムでトーナメント戦を行う.
    マシンは学内のファイルサーバ ginga01.fun.ac.jpを用いる.トーナメントの詳細は以下を参照のこと.

  2. トーナメントの成績が上位のプログラムに関しては,プログラム作成上 のアイデアに関して簡単な発表をしてもらう予定.

  3. 提出物はプログラム(ソースコードとオブ ジェクト),レポートである.これらの詳細は以下を参照のこと.

  4. プログラム全体は,以下の規定にあるようにいくつかの関数に分割して プログラミングする.

  5. ラボ1では,対戦の都合上,複数の関数をそれぞれ指定され たファイルにいれて,コンパイル・リンクする.どの関数をどの名前のファイ ルにいれるかの指定,そして複数のソースコードをコンパイルする方法は 最後に説明するREAD_ME_FIRST.htmlを参照すること. 作成したすべてのソースコードは ginga01.fun.ac.jpマシンの "/export/home/Fun/DCS/2023/lab/1/<学籍番号>/" ディレクトリの下にコピーしておくこと.ソースコードのアク セス許可モードはそれぞれ644 (-rw-r--r--),755(-rwxr-xr-x)とする.


トーナメントの規定

  1. トーナメントの初回対戦組み合わせはくじ引きにより決める.

  2. 1クロックは実際には1秒で実装されている.つまり,捕食者関数,獲物 関数の呼出しから終了までは1秒とし,関数呼出しから1秒以内にリターンしな い場合は,その関数呼出しは強制終了される.

  3. 1回の対戦は2ゲームから構成される.まず,一方の学生の捕食 者用プログラム,他方の学生の獲物用プログラムでゲームを行い,次にその 逆の組み合わせでゲームを行う.ただし,一つのゲームは最長30クロックで終 了するものとする(30クロック目でゲームを強制終了する). 以下の採点方式で勝ち負けを決める.

  4. 各対戦の各ゲームにおいて,もしも捕食者が30クロック以内に獲物を捕 まえられたら捕食者の勝ちとし,そうでない場合は獲物の勝ちとする. 2勝した方の勝ちとする.
    もしも1勝1負の場合は,獲物として対戦したゲームで逃げ通したクロック数 (E)から,捕食者として対戦したゲームで捕まえるまでにかかったクロック数 (C)を引き点数とし,点数の高い方のプログラムの勝ちとする.
    同点の場合はジャンケンで決着をつける.

  5. さらに,トーナメントにおいては,獲物の動作周波数(1ク ロック時間の逆数)を捕食者のそれの2/3に落として対戦することとする.これ は,捕獲を可能にするためである.なぜなら,捕食者と獲物が同じ周波数で動 作する場合,捕獲できる保証はないからである.

  6. 獲物の動作周波数を2/3に落とす場合,これはpursuit.c 内 で行う.predator.cファイルや prey.cファイル内でクロックを操作する ことを禁ずる. この規則に従わないプログラムはトーナメント戦にお いて高い確率で負けることになる.

提出物

以下のものを提出すること.


期限

プログラムとレポートは11月6日(月)の23:00を提出期 限とする.プログラムはこの時間までに指定されたディレクトリ (ginga01.fun.ac.jpマシンの"/export/home/Fun/DCS/2023/lab/1/<学籍番号>/" ディレクトリ)にコピーしておくこと.それ以降は指定されたディレクトリは書き込み不可能とな る.プログラム提出期限をトーナメントの前の週にするのは,トーナメントの ための事前確認と調整などを行うためである.

レポートはHOPEの「課題・ラボ」にPDF形式で提出すること.

提出の遅延は認められない.


ラボ1詳細 -2人追跡ゲームの作成-

2人追跡ゲームの概要は先に述べた. ラボ課題1では,ゲームの進行と格子世界を管理 するゲームマネージャプログラム(pursuit.c),は提供されるもの(ginga01.fun.ac.jp:/export/home/Fun/DCS/2023/resource/1/pursuit.c)を用い, (1)捕食者の動作を決定する捕食者プログラム (predator.c),そして(2)獲物の動作を決定する獲 物プログラム(prey.c)を作成する.

プログラムを作成するに当り,以下の各仕様を守ること.


...Return