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*****