第21回競技部門のFAQです。
Q1「競技時間は 5~15分とします。」とありますが、ゲームの終了条件は時間で決められると解釈してもよいのでしょうか?それともフレーム数で決められるのでしょうか?
競技時間は分で指定します。ゲームの終了までのフレーム数は、指定された時間(分)×60÷3×180フレームとなります。
Q2 ロボットの初期位置はどのように決められますか?
ロボットの初期位置はマップ情報の公開時(試合開始10秒前)に指定します。
なお、各チームのロボットは必ず対称に配置されます。
Q3 ロボットとセルの最大貯水量はどのくらいですか?
ロボットの最大貯蓄水量とセルの最大水量は共に約21億リョウマまで扱えます。
Q4 自陣の水を吸い取ることは出来ますか?
できません。通常の移動命令として扱われます。
したがって、自分チームが配水しているセルから自分で水を減らす手段はありません。
Q5 敵エリアは移動不可能で、もしそのセルに向かって移動を行った場合、移動ではなく吸い取りになるとのことでしたが、自エリアであるセルには、移動可能なのでしょうか?
自分チームの配水セルに対しては吸い取りは行われませんので、通常の移動命令になります。したがって、自エリアへは移動可能です。
Q6 「3秒間(180フレーム)以内でスタートできなかった命令はすべて無視されます。」とありますが、この命令は無視された上で次のセッションには引き継がれないという解釈でよろしいでしょうか。
はい。引き継がれません。
Q7 勝敗判定の記述に「2. フィールド内の自チーム総配水量が多いチーム」とありますが、これの「総配水量」はゲーム全体を通して配水した量を表しているものでしょうか。それとも各ゲームの終了時点でフィールドにある配水量の合計を表しているのでしょうか。
同様に、「3. 各チームのロボットの総蓄積水量が少ないチーム」はゲーム全体を通したものでしょうか。もしくは各ゲームの終了時点でのロボットの蓄積水量の総和なのでしょうか。
「2. フィールド内の自チーム総配水量が多いチーム」はゲーム終了時点でフィールドにある自分チームが配水しているセルに残っている水量の合計で判定します。
また、「3. 各チームのロボットの総蓄積水量が少ないチーム」はゲーム終了時点での自分チームのロボットの蓄積水量の総和で判定します。
Q8 「ロボットに対する操作命令は擬似的にリアルタイムで要求することができます。」というのはそのセッション内であれば複数に分けて操作命令を要求できる、と解釈してよろしいでしょうか。
1セッション分の複数の操作命令は、まとめて1度に要求する必要があります。1セッション分の操作命令を複数に分けたり、セッションの実行途中で操作命令を変更することはできません。
Q9 配水について、占有していない状態で配水の命令を行った場合、どのようになるのでしょうか。
配水は行われません。ただし指定されたフレーム数(19フレーム)は消費します。
Q10 ”RESTful WebAPI” とは、何ですか?
本競技においては、次の特徴を持つプロトコルをさす言葉として用いています。
* HTTPのGETリクエストによりアクセス可能
* リクエストに対してXML形式のデータを転送
Q11 「フィールドの状況」を取得する場合,
にget要求を送れば、競技サーバが 以降のテキストデータを返してくれるという解釈でよろしいですか?”
にget要求を送れば、競技サーバが 以降のテキストデータを返してくれるという解釈でよろしいですか?”
はい。HTTPのGETリクエストの結果として、XML形式のテキストデータがクライアントに送られます
Q12 「試合の進行状況」において「……ロボットへの操作命令を送った戻り値として以下の様に与えられます。」とありますが、この情報はどの時点の情報でしょうか。
試合開始
→1セッション目の命令を要求
→要求の戻り値として進行状況が帰る(このときの進行状況は開始局面)
→1セッション目の命令を処理する
→2セッション目の命令を要求
→1セッション目終了時点の状況を得る
という流れでいいのでしょうか。
ロングポーリングと呼ばれる手法を用いており、一般的なHTTPのGETリクエストと違って結果がすぐに返ってくるわけではないことに注意してください。
結果は次のセッションの開始時に返ってきます。
したがって、
試合開始
→1セッション目の命令を要求
→1セッション目の命令を処理する
→要求の戻り値として進行状況
(このときの進行状況は1セッション目終了時点の状況)が返る
→2セッション目の命令を要求……
となります。
Q13 「ネットワークによる問題の配信と解答の提出について…… この場合、パラメータ等が大きく変更される可能性があります。」とありますが、この「パラメータ等」とはどのようなものを指すのでしょうか。
万が一、ネットワークによる問題配信と解答提出ができない場合は、ルールに記載の1セッション180フレームで多数のセッション情報をUSBフラッシュメモリ等で受け渡ししながらゲームを進行することが困難であろうと予想しています。
また1セッションの時間(3秒)の指定等もほぼ意味がなくなるといえます。したがって、このような場合にはゲームの時間や1セッションのフレーム数のパラメータ等が通常のルールで指定された値から大きく変更される可能性があることを示しています。
Q14 「1台のコンピュータで競技を行う事ができるスタンドアローン版のシステムを4月中旬迄に提供する予定」とありますが、現在どこかに提供されていますか?もし、まだ未提供とすれば、いつどのような形で提供見込みですか
公開が遅れており申し訳ございません。公開に向けて現在準備中です。
公開を開始次第、提供方法を含めプロコン公式サイトでアナウンスしますので、定期的な確認をお願いします。
Q15 競技開始時の初期状態はどうやって得ますか? ウェブリクエストの場合,そのタイミングでどうしてもDoS攻撃的にならざるを得ません。
また,形式も可能であればゲーム中と同じXML形式であって欲しいと思います。
初期状態は基本的に司会者の進行に合わせて公開します。
また、10数秒前にHTTPのGETリクエストを1度送っておくと、競技開始の10秒前に初期状態の情報を得ることが出来ます。必要以上のリクエストを送信した場合は失格にすることもあります。
なお、初期状態を表すデータの形式は「募集要項」の11~12ページにあるようなXML形式となります。
Q16 互いに異なるチームに属する2体のロボットA,Bがあると仮定します。試合中のある局面でA,Bが隣接している状態で完全に同一なフレームで
A…配水命令
B…Aがいる地点への移動命令
以上の命令要求があった場合、どのように処理されるでしょうか?
「募集要項」12?13ページの「各フレームでの処理手順」にあわせて処理されます。したがって、Aが配水したあとBが吸い取りの動作を行います。
Q17 命令要求は要求した時点でそのセッション時間内であれば、無視されず処理されるのでしょうか?
それとも要求受付サーバーが受付処理を完了した時点でセッション時間内になければいけないのでしょうか?
180フレームを超える命令でも要求することは可能です。ただし、180フレームを超えた命令は無視されます。
Q18 フィールド情報などが競技開始10秒前に公開されるとありますが、その時点で、情報取得用のプログラムを実行させて、情報を取得可能であると解釈していいでしょうか?
また、この解釈が正しい場合、競技開始までの間に情報取得以外の動作をするプログラムを実行することは可能でしょうか?
競技開始10秒前から情報を取得することが可能で、提供された情報を利用して10秒間の間に何らかの処理を行うことも可能です。
Q19 エリアには「(1)配水によってなったエリア」と「(2)囲まれたことによってなった配水なしのエリア」の2種類があるのですね?
(A) ロボットが他のロボットの配水によって囲まれた場合、上記(2)のエリア内では、配水はされていないので,平地と荒地や水瓶にロボットは、吸い取り無しで、移動できるのですネ?
(B) 上記(1)と(2)の両エリアは、試合の進行状況のセルの所有者にチーム名が入りますね? (それとも(2)は、入らないのでしょうか? 入らないなら、(2)であることは、どのように、試合の進捗状況内に表現されるのでしょうか? それとも、(2)は全く表現されないのでしょうか? )
(C) 上記(1)と(2)の区別は、試合の進行状況のセルの配水量情報が零以外か零かを調べることによってできますか? それとも?
(D) 試合の進行状況のセルの所有者と配水情報は、それぞれ1681個存在する(空白の分も含れている)のですね?
(E) セルの所有者と配水情報の中の文字は「0~9または,」以外は無いのですネ?(改行情報等は無いのですネ?) あるなら、有り得る文字を16進数で教えてください。
エリアについては(1),(2)の通りです。
(A) (2)のエリアのセルについては吸い取り無しで移動できます。
(B) (1)エリアのセルには所有者情報としてチームIDが入ります。(2)のエリアのセルの所有者情報には0(所有者なし)が入ります。(2)のエリアがどのチームの得点エリアとなっているかは、周辺のセルの情報から把握することになります。
(C) (2)のエリアのセルでは配水量情報が0となります。
(D) 配水量情報とセルの所有者情報は、それぞれいずれも空白セルを含む1681個分があります。
(E) 配水量情報とセルの所有者情報には0~9の数字とそれらの区切りであるカンマ(,)しかありません。
Q20 「フィールドの状況」の「フィールド情報(map)」の内容は1681個ある(空白を含む)のですね?
そのようになります。
Q21 試合の進行状況の中のmapの配水情報とセルの所有者は、空白のセルの分も内容0で存在し、全部で1681個づつ存在するのですね?
そのようになります。
Q22 チーム1が閉曲線で囲んだエリア内にチーム2が閉曲線で囲んだエリアがある場合、チーム2の閉曲線で囲んだ未配水のセルは、チーム2の得点エリアになると思われますが、その囲まれた未配水のセルは、(チーム1の閉曲線内にも有ることになりますが、)チーム1の得点エリアにもなるのですか? それともチーム2だけの得点エリアになるのですか?
チーム2だけの得点エリアになります。
Q23 チーム1が閉曲線で囲んだエリア内に閉曲線でないチーム2の配水エリアがある場合,そのチーム2の配水エリアは、チーム1とチーム2の両方の得点になるのですか? チーム1だけの得点になりますか? 又はチーム2だけの得点となりますか?
チーム2が配水したセルは、チーム2だけの得点エリアとなります。
Q24 ロボットの最初の位置が水瓶内や荒野の中にある場合もありますか?
ロボットの初期位置として、空白や壁はありませんが、平地・水瓶・荒地の可能性はあります。
Q25 フィールドの状況を提供するシステムのprefixと、操作命令の送り先のシステムのprefixは同一ですネ?(前者のprefixと後者のprefixが異なるようなことは無いですネ?)
prefix は「IPアドレス/ディレクトリ名」となる可能性があります。IPアドレスは同一の予定ですが、ディレクトリ名は異なる可能性もあります。
Q26 移動しようとした時、移動先に他チームのロボットが居て、まだ配水されていない状態である場合、移動しようとした時と同時に他チームのロボットが配水をした場合、他チームは配水できない(移動は成功して、同じセルに複数のロボットがいる状態となる)のですか? それとも配水はできる(移動は吸い取りとなる)のですか?(移動と配水が同時に行われた場合、移動が先に処理されますか?それとも配水が先に処理されますか?)
「募集要項」の12~13ページの「各フレームでの処理手順」にしたがって処理されます。したがって、同じフレームで配水と移動を行おうとした場合は、配水が先に処理されるため、移動を行おうとしたロボットは吸い取りの動作になります。
Q27 待ち時間倍率は現在のロボットの位置で決まりますネ?(平地から荒地又は荒地へ移動する場合、および平地で隣の平地又は荒地の吸い取りをする場合は待ち時間倍率は1であり,荒地から平地又は荒地へ移動する場合、および荒地で隣の平地又は荒地の吸い取りをする場合は、待ち時間倍率は2ですネ?)
「募集要項」の12?13ページの「各フレームでの処理手順」にしたがって、移動が行われた場合の待ち時間倍率は移動先のセルの待ち時間倍率になります。
Q28 水瓶の固まりの数、荒地の固まりの数、壁の固まりの数のそれぞれの有り得る最小値と最大値を教えていただけませんか?
1個以上で、競技に使用するセルの数を超えることはありません。
Q29 試合開始直後又は応答をもらった直後に、3秒以内に解答を送信しなければならないのですね?
原則として3秒以内に命令が送られることを想定しています。送信されない場合は「募集要項」の10ページの操作命令の説明にある「操作可能なフレームであるにも関わらず、なにも命令されない場合」とみなし、当該セッションは「チャージ」の動作が連続して命令されたことと同じになります。
Q30 3秒以内に解答を送らなかったら、どのような命令を送ったことになるのですか? (ヒョットして3秒間移動も何もしないことが可能ですか?それとも、失格ですか? それとも解答が全部揃うまで,競技システムは3秒以上無制限に待つのですか?)
3秒以内に命令が送信されない場合は、「募集要項」の10ページの操作命令の説明にある「操作可能なフレームであるにも関わらず、なにも命令されない場合」とみなし、当該セッションは「チャージ」の動作が連続して命令されたことと同じになります。もちろん失格にはなりません。
Q31 3秒以内に解答を送信したけど、合計フレーム数が180未満の場合は、最後の命令の 実行後、余ったフレームでは、移動もなにもやらないで、次のセッションにいきますか? (それとも、失格ですか?)
送信した命令をすべて実行しても180フレームに満たない場合は、「募集要項」の10ページの操作命令の説明にあるように、操作可能なフレームであるにも関わらず、なにも命令されない場合となりますので、自動的に「チャージ」の動作になります。もちろん失格にはなりません。
Q32 オフラインでのファイル提出は、3秒毎に行う必要がありますネ?それとも、セション毎の試合の進捗状況の情報をもらえずに、試合時間分解答しなければならない(全く違う競技をする)ということですか? (もしそうなら、殆どやる意味がないように思えますが。。。。。)
ネットワークによる問題配信と解答提出ができない場合は、USBフラッシュメモリ等で受け渡しを行う可能性があります。この場合3秒ごとのやり取りによるゲームの進行は困難であろうと予想しています。したがって、セッションのフレーム数を大きくしやり取りの回数を減らす等のパラメータ変更があり得ます。
ゲームの進捗状況の情報を1度も返さないゲームにはしない予定です。
Q33 同一フレームにおいて、あるチームAが誰も配水していないセルCに対して配水命令を出し、別なチームBがセルCへの移動命令を発行した際は、どちらの命令が優先されるのでしょうか?
具体的には、チームAの命令が優先されチームBの動作は吸い取り動作とされてしまうのか、それともチームBの命令が優先されチームAは配水に失敗するのか、どちらになっているのでしょうか?
「募集要項」の12~13ページの「各フレームでの処理手順」にしたがって、配水が先に行われた後、移動の命令の処理が試みられますので、移動の命令は吸い取り動作となります。つまり同じフレームでの配水命令と移動命令は配水命令が優先されます。
Q34 複数のチームの配水セルによって作られた閉曲線が,さらに他のチームの配水セルにより囲まれている場合,内側の閉曲線の内部のセルはどのチームの得点エリアとみなされるのでしょうか。あるいは,どのチームのものでもないとされるのでしょうか。
内側の閉曲線の内部のセルは、内側のチームの得点エリアとしてカウントされます。
Q35 競技時間はXML形式にて通知されないようですが,どのような方法で伝えられるのでしょうか。
競技時間は競技場所への入場までに口頭・印刷物等でお知らせします。
Q36 セルの配置について、セルの配置は毎試合変わりますか?
1回戦、決勝戦等で壁や荒地、水瓶のセル数の比率はどのくらいかあらかじめ決まっていますか?
フィールドの初期状態は試合ごとに変わります。配置されるせる等の比率に関しては事前の公開は行いません。
Q37 待ち時間倍率について
例)平地→荒地の場合
実行(1)+39*2
実行(2)+39*2 のどれになりますか。
例)荒地→平地の場合
実行(1)+39*2
実行(2)+39*2
実行(1)+39
実行(2)+39 のどれになりますか。
※実行(1)という括弧の中と数字はフレーム数です。
詳しく書くと、
実行フレームは厳密にいうと移動する前のフレームで処理されるのか、移動した後で処理されるのか。
待ち時間は移動した後のセルに対する待ち時間倍率で計算するのか。
例えば、平地にマシンがいて接する荒地のリョウマをすい取りするときは(実行の1フレーム+待ち時間の39フレーム*待ち時間倍率1)=40
と解釈してよいのか。
実行の1フレームは待ち時間に含まれるのか。
例えば、平地から荒地に移動する場合は
(平地での実行の1フレーム+荒地に移動 した後に待ち時間39フレーム*待ち時間倍率2)=79フレーム
となるのか。
それとも(荒地に移動完了した後に実行の1フレーム+荒地での待ち時間の39)*待ち時間 倍率2=80
の計算になるのかということです。
また、荒地から平地に移動する場合は
(荒地での実行の1フレーム+待ち時間の39フレーム*待ち時間倍率1)=40
の計算なのか。
「募集要項」の12~13ページの「各フレームでの処理手順」にしたがって、移動が行われた場合の待ち時間倍率は移動先のセルの待ち時間倍率になります。また動作は最初の命令を実行する1フレームも含めて待ち時間倍率が適用されます。
Q38 実施要項に「ネットワークによる問題の配信と解答の提出について、(中略)
パラメータ等が大きく変更される可能性があります。」 とありますが、セルの数が改変される可能性はありますか。
セルの数(フィールドの大きさ)は変更されません。
Q39 マップの地形は必ずしも対称とは限らないのでしょうか。
6角形のフィールドを、その試合の参加チーム数で分割して、各分割されたフィールド内で同じ地形の配置・ロボットの初期位置となります。したがってQ2.の回答の添付図にあるように、フィールドの中心を対称点とした点対称のような配置となります。
Q40 一つの平地のセルに複数のロボットがいる状態で、最初に行動するロボットが配水をするとします。その際に、他のロボットが移動またはチャージすることは出来ますか。
セルに配水する場合には、そのセルを占有している状態でなければ配水できません。1つのセルに複数のロボットがいる状態での配水の命令では配水は行われずフレームのみ消費します。
また、ロボットの移動は可能です。なお、チャージは水瓶セルでしか行うことはできません。
Q41 配水についてです。占有しているセルで配水命令を出したとき、もし同一フレーム内にて他のロボットが、配水命令が出ているセル内に移動しようとしたときどうなるのでしょうか?
「募集要項」の12~13ページの「各フレームでの処理手順」にしたがって、同一フレームでは配水命令が先に実行されますので、他チームのロボットのそのセルに対する移動命令は、吸い取り動作を行います。
Q42 待ち時間倍率により「動作に必要なフレーム数」が変化するとありますが、それが影響するのはそのセルに移動するときですか、それともそのセルから行動するときですか。
「募集要項」の12~13ページの「各フレームでの処理手順」にしたがって、すべての動作に対してセルの地形に応じた待ち時間倍率が適用されます。
移動が行われた場合の待ち時間倍率は移動先のセルの待ち時間倍率になります。
また動作は最初の命令を実行する1フレームも含めて待ち時間倍率が適用れます。
Q43
コンテストPWは、仮想コンテスト上での試合と本選の両方で共通に必要なものですか?それとも、上記のいづれかのみで必要なものですか?
コンテストPWは、ネットワーク競技システムの仮想コンテスト用のものですので、本戦では使用しません。
Q44
コンテストPWは、どの時点で要求されるのですか? (フィールド状況の取得APIを送った時と操作命令のAPIを送った時の両者で毎回要求されるのですか?それとも、ある時点に限定されるのでしょうか?)
コンテストPWはAPIでは一切使用しません。試合運行を行うプロセッサやビジュアライザのシステム用のもので、API側に指定するのはcontest_idのみです。
Q45
インターネット経由(プロキシ経由)で、インターネット競技サーバを使用する場合、最初に送信するのは、コンテストID付のフィールド状況の取得APIで良いのでしょうか?
ゲームが開始されていない場合、フィールド状況の取得APIは呼び出すことができません。プロセッサを使用してゲームを作成し、ゲーム開始後にアクセスしてください。 フィールド状況の取得APIには、試合開始10秒前からアクセス可能です。
Q46
現状で、コンテストIDなしのフールド状況の取得APIを送ると、フィールド状況を得ることができますが、その場合、10秒後に操作命令の送信APIをおくれば、試合が開始するのでしょうか?(インターネットでゲームを開始するには、何を、どの順番でおくればよいのですか?)
contest_idを指定しない場合、contest_id=1とみなされます。 本戦ではcontest_id=1としてアクセスしてください。現時点でcontest_idを指定せずに取得できるフィールド情報は別の仮想コンテストのものですので、試合に使うことはできません。無視してください。試合開始10秒前から /system/map/の取得が可能で、試合開始後から/system/command/の取得が可能となります。APIを呼び出す順番や回数に、特に制限はありません。
上記(Q46)の手順と本選の手順では、どのような違いがありますか?
本戦の場合、contest_id=1とするだけで、手順の違いはありません。
Q48
本選での接続LANのネットマスクはいくつですか?
255.255.255.0です
Q49
各チームのIPアドレスは別途Webで公開しますとありますが、遅くともいつごろ公開予定ですか?
現在準備中です。
Q50
問題の読み込みまではうまく行くようになったのですが、回答を送信すると、token is blankでエラーとなってしまいます。
tokenが指定されていない可能性があります。 ブラウザから
http://procon-online.net/system/command/token={トークン}&contest_id={コンテストID}
にアクセスしてみてください。上記のURLでteam is not game memberが帰ってくるなら、POSTで送信しているクエリパラメータの中に正しいtokenが含まれるかどうか確認してください。