[rc-simjp 436] 2Dサーバ バージョン13

Back to archive index

Hidehisa Akiyama hideh****@aist*****
2008年 9月 24日 (水) 12:55:02 JST


SimJPの皆様

秋山@産総研です.

さきほど国際メーリングリストの方に来年以降の2Dシミュレータの
変更案についてアナウンスしました.すべて反映されるかどうかは
まだ分かりませんが,10月中には確定させる予定なので,ご意見が
あれば早めにメーリングリストまで送って下さい.出来るだけ国際の
方に直接出して欲しいですが,敷居が高いのであれば,このメーリン
グリストに投げてもらえれば僕の方で反映することはできます.

少なくとも来年の時点では,今年のルールで動くクライアントは
そのまま動くように互換性を保つ予定なので,仕様変更への対応は
それほど大変にはならないはずです.とりあえずは,プレイヤの
足が遅くなるのと,stamina_max=8000に対応できるようにしておけば
大丈夫だと思います.しかし,将来的には大幅な変更になるものが
あるので(特にダッシュとスタミナ),そのつもりで準備し始めて
おいた方が良いと思います.

来年の春季競技会とJapanOpenは(多分,今年の秋キャンプも)
バージョン13を使用することになります.


以下,変更案の適当な日本語訳.

 - バージョン13に導入予定
   - 延長戦の長さ変更
   - 新ダッシュモデル
   - 新スタミナモデル
   - ヘテロの設定変更
   - 後方タックル禁止
   - プロトコルバージョン13
   - ログフォーマット変更
   - パッケージ変更

 - 将来,導入するかも
   - ヘテロキーパー
   - ファウル

========================================
  延長戦の長さ変更
========================================

- 新パラメータ

  server::extra_half_time = 100


- Description

デフォルトの延長ハーフの長さを1000サイクルに変更.


========================================
  新ダッシュモデル
========================================

- 新パラメータ

  server::min_dash_angle = -180
  server::max_dash_angle = +180
  server::dash_angle_step = 0.0~90.0 (*)
  server::side_dash_rate = 0.25 (**)
  server::back_dash_rate = 0.5  (**)
  server::min_dash_power = -100 (***)
  server::max_dash_power = +100 (***)

(*) 未確定.コミュニティで議論後に決定.

(**) 未確定.テスト後に決定.

(***) 互換性維持のために導入.将来のバージョン(14以降)では,min_dash_power=0
に設定される予定.


- アルゴリズム

Player::dash( double power, double dir )

  power = NormalizeDashPower( power ); // [server::min_dash_power, server::max_dash_power]
  dir = NormalizeDashAngle( dir ); // [server::min_dash_angle, server::max_dash_angle]

  bool back_dash = power < 0;
  double dir_rate = ( fabs( dir ) > 90.0
                      ? back_dash_rate - ( back_dash_rate - side_dash_rate )
                                         * ( 1.0 - ( fabs( dir ) - 90.0 ) / 90.0 )
                      : side_dash_rate + ( 1.0 - side_dash_rate )
                                         * ( 1.0 - fabs( dir ) / 90.0 ) );
  double power_need = back_dash
                    ? power * -2.0
                    : power );
  power_need = min( M_stamina + M_player_type->extraStamina(), power_need );

  M_stamina = max( 0.0, M_stamina - power_need );
  power = back_dash
        ? power_need / -2.0
        : power_need;

  double effective_dash_power = fabs( M_effort
                                      * power
                                      * dir_rate
                                      * M_player_type->dashPowerRate() );
  double actual_dir = back_dash ? dir + 180 : dir;
  if ( server::dash_angle_step < EPS )
  {
    // players can dash in any direction.
  }
  else
  {
    // The dash direction is discretized by server::dash_angle_step
    actual_dir = server::dash_angle_step
                 * (int)floor( NormalizeDashAngle( actual_dir )
                               / server::dash_angle_step )
  }

  M_accel += fromPolar( effective_dash_power, body + actual_dir );


- 説明

dashコマンドの第二引数にダッシュ方向を追加できるようになる.
ダッシュ方向は体の向き(power<0の場合は体の向きの逆方向)との
相対角度.

ダッシュ方向は[server::min_dash_angle,server::max_dash_angle]に
限定.ダッシュの効果はダッシュ方向の大きさに応じて変化する.0度の
とき100%の効果,90度のときserver::side_dash_rate(0.25)の効果,
180度のときserver::back_dash_rate(0.5)の効果.0〜90度のとき1.0〜server::side_dash_rate,
90〜180度のときserver::side_dash_rate〜server::back_dash_rateの
間で線形に変化.

server::min_dash_powerは将来的に0に設定される(負のパワーによる
ダッシュを禁止にする)予定.

server::dash_angle_stepはダッシュ方向の離散性を決定する.
server::dash_angle_step=90.0 なら,プレイヤは4方向にしかダッシュ
出来なくなる.
server::dash_angle_stepの値は未確定で,コミュニティの議論に
基づいて決定予定.


========================================
  新スタミナモデル
========================================

- 新パラメータ

 server::stamina_capacity = 127000 // 値は未確定


- Changed parameters

 server::stamina_max = 8000
 server::extra_stamina = 50 // デフォルトプレイヤのextra stamina
 player::extra_stamina_delta_max = 50 // extra staminaの範囲は[50,100]


- New stamina update algorithm

PlayerクラスにM_satamina_capacity変数を追加して,server::stamina_capacity
で初期化.

Player::updateStamina()

  double stamina_inc = min( M_recovery * M_player_type->staminaIncMax(),
                            server::stamina_max - M_stamina );

  if ( server::stamina_capacity >= 0.0 )
  {
    if ( stamina_inc > M_stamina_capacity )
      stamin_inc = M_stamina_capacity
  }

  M_stamina += stamina_inc;

  if ( server::stamina_capacity >= 0.0 )
  {
    M_stamina_capacity -= stamina_inc;
    if ( M_stamina_capacity < 0.0 )
      M_stamina_capacity = 0.0;
  }


スタミナキャパシティの回復ポリシーは以下のとおり

  - 通常ハーフ時
    キックオフ直後に全回復
  - 延長戦およびペナルティキック
    通常ハーフ終了時に全回復するが,延長戦とペナルティキックの
    間は一切回復しない


- 説明

この変更は,チームに長期的な戦略を考えさせることが目的.

server::stamina_capacityは各プレイヤの最大回復容量を決定する
パラメータ.プレイヤのスタミナが回復するときキャパシティを
消費し,キャパシティが0になるとスタミナは回復しなくなる.この
場合,プレイヤはextra staminaしか使用できなくなる.

スタミナキャパシティを消費し尽くした後にプレイヤがまったく
動けなくなることが無いように,server::extra_staminaが50に
設定されて,どのプレイヤも十分なextra staminaを持つようになる.
server::extra_stamina<0の場合,プレイヤは無限のキャパシティを
持つ(従来のモデルとまったく同じになる). 

server::stamina_maxが8000に設定される.この変更によって,
プレイヤは100mを全力で走ることが出来るようになる.ただし,
スタミナキャパシティのためにスタミナ管理は依然として難しい.
# 難しさの質が変化すると言った方が正しいか

server::stamina_capacityの値はまだ未確定.プレイヤのスタミナ
消費量は各プレイヤのstamina_inc_maxの大きさに依存するので,
新しいヘテロの設定が確定した後に決定する予定.チームに移行
期間を与えるために,多分,来年は大きめの値に設定する.


========================================
  ヘテロの設定変更
========================================

プレイヤの走る速さをより遅くする(現在の設定では,もっとも速い
プレイヤは100mを9秒未満で走れてしまう).現在,妥当なパラメー
タを調査中.


========================================
  後方タックル禁止
========================================

- 変更されるパラメータ

server::max_back_tackle_power = 0.0


- 説明

後方へのタックルが完全に禁止される.


========================================
  プロトコルバージョン13
========================================

- seeメッセージ

最後のキッカーの判別が難しい(バックパスを回避することが
難しい)ので,タックルと同様にキックしている状態を観測出来る
ようにする.

プレイヤのチームが見えるとき,キックの状態を'k'というフラグ
で観測できる

  `((p "<TEAMNAME>" <UNUM>) <DIST> <DIR> <DISTCHG> <DIRCHG>
                            <BDIR> <HDIR> [<POINTDIR>] [k])'

  `((p "<TEAMNAME>") <DIST> <DIR> [<POINTDIR>] [k])'


ただし,キック状態はキック直後の1サイクルの間しか観測できない.


- sense_bodyメッセージ

以下のように,スタミナキャパシティの値がsense_bodyメッセージに
追加される.

  '(stamina <STAMINA> <EFFORT> <CAPACITY>)'


========================================
  ログフォーマット変更
========================================

スタミナキャパシティの情報がゲームログ中の各プレイヤに追加
される.

テキストログに,サイクル停止中の時間情報が記録されるようになる.

old:
  "1020         Recv Teamname_1: (turn 10)(turn_neck 10)"
  "1020         Recv Teamname_1: (dash 100)(turn_neck 20)"
  "1020         Recv Teamname_1: (dash 100)(turn_neck 30)"

new:
  "1020,1       Recv Teamname_1: (turn 10)(turn_neck 10)"
  "1020,2       Recv Teamname_1: (dash 100)(turn_neck 20)"
  "1020,3       Recv Teamname_1: (dash 100)(turn_neck 30)"


========================================
  パッケージ変更
========================================

rcssbaseがrcssserverへ統合される.



========================================
  ヘテロキーパー
========================================

バージョン13ではまだ導入しない.
妥当なモデルがあれば,バージョン14以降で導入する.
TC内ではまだ具体的な案が出ていない.
コミュニティからの提案募集中.


========================================
  ファウル
========================================

バージョン13ではまだ導入しない.
バージョン14以降で導入するかもしれない.
TC内ではまだ合意できていない.
より詳細な議論が必要.

現在の提案内容は以下のとおり

- 新コマンド

  (foul <DIR>)


- 新パラメータ

  server::min_foul_angle = -180
  server::max_foul_angle = +180
  server::foul_cycles = 10
  server::max_foul_points = 100
  server::foul_fail_probability = ???
  ...


- 説明

ファウルのモデルはタックルと似ている.foulコマンドにはプレイヤの
体からの相対方向を引数として与える.ただし,foulコマンドの対象
はボールではなく他のプレイヤ.

プレイヤのfoulコマンドがserver::foul_fail_probabilityによって失敗
した場合,そのプレイヤはserver::foul_cyclesサイクルの間動けなくなる.
コマンドが成功した場合,両方のプレイヤが動けなくなり,foulを実行した
プレイヤには罰が与えられる.

foulを実行したチームのプレイヤがボールを取った場合,相手チームに
フリーキックが与えられる.foulされたチームがボールを取った場合,
プレイは続行されるが,プレイモードがplay onから変更された時にfoulを
実行したプレイヤは罰せられる.

罰はfoulを実行したプレイヤにポイントとして累積される.累積ポイントが
server::max_foul_points/2 以上になればイエローカードが与えられ,
server::max_foul_points 以上になればレッドカードが与えられて退場に
なる(サーバから切断される).


-- 
 Hidehisa Akiyama
 hideh****@aist*****




Rc-oz-simjp メーリングリストの案内
Back to archive index