• [rcssserver] キックノイズモデル再変更 (akiyama) 01:51:02

再び変更というか,別アルゴリズムをテスト.

double power_rand = M_kick_rand * eff_power * power / ServerParam::instance().maxPower();
double speed_rand = M_kick_rand * M_stadium.ball().vel().r();
double max_rand = power_rand + speed_rand;
PVector kick_noise = PVector::fromPolar( drand( 0.0, max_rand ),
                                                       drand( -M_PI, M_PI ) );

accel += kick_noise;

昨日のアルゴリズムだとボールスピードによるノイズの計算に無理があったが,これならkick_randを素直にスピードの大きさへ反映できる. 実装もシンプルで分かりやすいし,生成されるノイズもまあまあ妥当.

  • [rcssserver] MPObject::noise() 変更 (akiyama) 02:00:51

変更すべきかどうか迷ったが,どう考えても元のノイズ生成アルゴリズムは不自然なので変更してみた.

旧:

 double maxrnd = M_randp * vel().r();
 return PVector( drand( -maxrnd, maxrnd ), 
                      drand( -maxrnd, maxrnd ) );

新:

 double maxrnd = M_randp * vel().r();
 return PVector::fromPolar( drand( 0.0, maxrnd ),
                                     drand( -M_PI, M_PI ) );
  • [rcssserver] スタミナパラメータ調整案 (akiyama) 16:15:22

デフォルトタイプの設定でstamina_inc_max=50, stamina_max=5000くらいあってもいいんじゃないかとは思うんだが,スタミナ不足に陥りやすいのはほとんどヘテロプレイヤだし,デフォルトのパラメータはなるべく変えたくないので,ヘテロの設定による調整を考えてみる.

現在,dash_power_rateの変化に対してstamina_inc_maxの変化率は -10000 . つまり,dash_power_rateが 0.001 上昇すれば,stamina_inc_max は10減少する. バージョン11までの設定だと,dash_power_rateは最大で0.002上昇したから,stamina_inc_maxは最大で20も減少する. デフォルトタイプのstamina_inc_maxが45だから,最大のdash_power_rateを持つプレイヤタイプのstamina_inc_maxは25になる.

このstamina_inc_maxの減少率が大き過ぎるように思うので,思い切って -5000 くらいにしてみたらどうだろうかと検討中.

それ以前に,そもそもヘテロのパラメータトレードオフがイマイチなので,ヘテロの生成ルールを根本的に変えた方がいいと思うんだけど.今年はそこまでやるべきではないと思うのでとりあえず保留.

  • [rcssserver] 新スタミナモデル (akiyama) 16:24:30

来年度にはまだ反映しないが,新しいスタミナモデルに使える要素を考えてみる.

とりあえず,スタミナの総使用量に応じてrecoveryとeffortを減少させた方がいいのではないかと思うので,プレイヤが1ハーフでどのくらいスタミナを消費しているのかを計測してみた.

(p "HELIOS" 1 goalie) consumed stamina = 15672
(p "HELIOS" 2) consumed stamina = 95841
(p "HELIOS" 3) consumed stamina = 94876
(p "HELIOS" 4) consumed stamina = 112539
(p "HELIOS" 5) consumed stamina = 118682
(p "HELIOS" 6) consumed stamina = 129157
(p "HELIOS" 7) consumed stamina = 143057
(p "HELIOS" 8) consumed stamina = 138965
(p "HELIOS" 9) consumed stamina = 127099
(p "HELIOS" 10) consumed stamina = 128225
(p "HELIOS" 11) consumed stamina = 121385
(p "WE2007" 1) consumed stamina = 122498
(p "WE2007" 2) consumed stamina = 123347
(p "WE2007" 3) consumed stamina = 125736
(p "WE2007" 4) consumed stamina = 120191
(p "WE2007" 5) consumed stamina = 144288
(p "WE2007" 6) consumed stamina = 138039
(p "WE2007" 7) consumed stamina = 134719
(p "WE2007" 8) consumed stamina = 113804
(p "WE2007" 9) consumed stamina = 118858
(p "WE2007" 10) consumed stamina = 113297
(p "WE2007" 11 goalie) consumed stamina = 28586.1

この数値は,純粋にdashコマンドで消費されたスタミナの累計値. 試合内容にもよるが,フィールドプレイヤで上限は150,000くらいかな.

単純に,スタミナ消費の累計値に比例してeffortやrecoveryを減らすのではダメかなぁ. 使用したダッシュパワーの大きさも考慮しないと不自然か. そもそも,人間じゃないんだからrcssserver3Dみたいにバッテリーを想定したモデルにした方がいいような気もする. スタミナ回復は一切無しで総容量15万,スタミナの残りが少なくなるとeffortが下がる,とか. 1ハーフ3000サイクル分を考慮したスタミナ管理が必要になるから,結構面白いかも. これだけなら,多分,新しいパラメータもルールも一切必要無くて,既存のパラメータ設定を変えるだけで実現できる.

まあ,そのうち色々試してみよう.

  • [rcssserver] オーバーフロウ (akiyama) 16:47:42

stamina_max=150,000 を試してみようとしたら,モニタプロトコルでオーバーフロウを起こしてしまった. モニタプロトコルでは,実数は65536倍して32ビット整数に変換するんだけど,150,000 * 65536 = 9830400000 で 34ビット必要. 符号付き32ビット整数に収まる最大の実数は32768か.これじゃ全然足りんな. さて,どうするか. テキストベースのモニタプロトコルを作る方が先かも知れない.

  • [rcssserver] recover_dec_thr のデフォルト値を変更 (akiyama) 17:14:51

ほとんどのチームにとって意味の無いパラメータとなっている effort_dec_thrを生かすために, recover_dec_thr を 0.3 から 0.1 へ引き下げてみた. これによって,スタミナが400を切るまではrecoveryが減少しなくなるが,effort_dec_thrは0.3のままなので,スタミナが1200を切ったらeffortは減少する. この設定の方が面白そうだけど,どうかな.

  • [rcssserver][メモ] ベンチ入り人数 (akiyama) 19:46:45

プレイヤタイプの数は人間のサッカーのルールと同じにしようと思っていて,検索してみたら「チャンピオンズ・リーグや代表戦などでは7人までのベンチメンバーが許されており、」というフレーズが見つかるのでプレイヤタイプの総数は18にしていたんだけど,ワールドカップではこれが23になるとの噂.

ワールドカップのルールを読んでみたが,ベンチ入り人数について言及されている項目を発見できなかった. 見落としただけかなぁ. 正式には,一体,何人なんだ.

  • [rcssserver] kick_rand調整,stamina_inc_max調整 (akiyama) 22:54:33

kick_randは,デフォルトタイプを0.1とした [0.0, 0.2] で良さそう.

new_stamina_inc_max_delta_factor を -10000 から -5000 に変更しようと思っていたけど,recover_dec_thrを0.1に下げたらstamina_inc_maxが低くても結構走れるようになった気がする. もうちょっとテストしてみよう.

  • [librcsc] SelfObject::getSafetyDashPower() 修正 (akiyama) 23:20:50

recoverを消費しないダッシュパワーを求めるはずが,effortを消費しないダッシュパワーを求める計算になっていたので,修正.


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-03-14 (月) 14:51:37 (1348d)
SourceForge.JP
Creative Commons License
RoboCup tools by Hidehisa Akiyama is licensed under a Creative Commons 表示-非営利 2.1 日本 License.