The RoboCup Soccer Simulator documentation
Soccer Server 足球服务器(下)
Heterogeneous Players 异构球员
在 rcssserver 版本 7 中,引入了异构球员。对于异构球员,服务器在启动时生成 player::player_types
随机球员类型。根据 player.conf 文件中定义的权衡,不同的球员类型具有不同的能力。一场比赛的两支球队使用相同的球员类型。类型 0 是默认类型,并且始终相同。如果 player::random_seed
不为 0,则可以根据给定的种子值生成固定的一组异构玩家参数。下表显示了异类玩家的差异:
Table The parameter differences of heterogeneous players 异构球员区别参数表
Parameter | Description |
---|---|
PlayerSpeedMax | maximum speed |
StaminaIncMax | Amount of stamina recovered in one step |
PlayerDecay | Player speed decay rate |
InertiaMoment | Player inertia force when moving |
DashPowerRate | Dash acceleration rate |
PlayerSize | Player size |
KickableMargin | Kickable area radius |
KickRand | The amount of noise added to the kick |
ExtraStamina | Extra stamina available when stamina is exhausted |
EffortMax | Maximum value of the player’s effort amount |
EffortMin | The minimum amount of effort for the player |
CatchAreaLengthStretch | Streach Length to Catch |
KickPowerRate | Kick Power Rate |
FoulDetectProbability | Probability that the referee will take the foul |
当球员和教练连接到服务器时,他们可以收到有关可用球员类型的信息。在线教练可以在第一次开球前无限次更改球员类型,并在其他非 play_on 比赛模式下使用 change_player_type 命令更改球员类型 player::subs_max
次(参见命令)。
在线教练可以在 player::pt_max
次内替换相同的球员类型。此限制也适用于默认球员类型。这意味着必须将所有外场球员更改为非默认类型。在版本 16 中,守门员仍然可以被指定为默认类型。但是,如果 server::allow_mult_default_type
为 false,并且球队使用默认球员类型多于 player::pt_max
,则 rcssserver 会在比赛模式更改为开球之前自动将异类球员类型分配给场上球员。如果 player::pt_max
为 1,则除默认类型外的每个播放器类型只能使用一次。
每当一名球员被其他球员类型取代时,其耐力、恢复和努力都会重置为相应球员类型的初始(最大值)值。
为每场比赛提供的异构球员参数是不同的。因此,每个agent不一定具有实施策略所需的参数。无论情况如何,您都需要一种方法来选择异类玩家的最佳组合。
Parameter for substitutions and heterogeneous player types
Parameter in player.conf | Value |
---|---|
player_types | 18 |
subs_max | 3 |
pt_max | 1 |
Referee Model 裁判模型
自动裁判向玩家发送消息,让玩家了解游戏的实际游戏模式。自动裁判的规则和行为在Sec. Kick-Off描述。玩家收到裁判消息作为听到消息。一名球员可以在任何情况下听到裁判信息,而与该球员从其他球员那里听到的信息数量无关。
Play Modes and referee messages 比赛模式和裁判的消息
比赛模式的改变由裁判宣布。此外,还有一些裁判信息会宣布诸如进球或犯规之类的事件。如果您查看服务器源代码,您会注意到一些当前未使用的附加比赛模式。比赛模式和裁判消息都使用 (referee String) 来宣布,其中 String 是相应的播放模式或消息字符串。
Table: Play Modes 游戏模式表
Play Mode | tc | subsequent play mode 后续的比赛模式 |
comment 注释 |
---|---|---|---|
before_kick_off | 0 | kickoffSide | 前后半场开始前 |
play_on | 正常比赛 | ||
time_over | End of the game | ||
kickoffSide | 比赛开始 (after pressing the Kick Off button) | ||
kickinSide | |||
freekickSide | 【任意球】 | ||
cornerkickSide | 当球越过球门线,没有进球并且最后一次被防守队员触及时。 | ||
goalkickSide | play_on | 一旦球离开禁区,比赛模式就会改变 | |
goal_Side | currently unused | ||
drop_ball | 0 | play_on | |
offside_Side | 30 | freekickSide | 越位球员,在队友击球时更接近对方球门,无论是在球前,还是在对方最后一名球员前。 越位规则防止球员在对方球门前集中,因为没有球员可以站在对方球门附近等待球得分,并且在接近对方球门附近送出长传的可能性是有限的。这样,防守者可以远离自己的目标,在比赛中更多地参与。 |
penaltykickSide | 【点球大战】当比赛以6,000个循环和加时赛的平局结束时,将通过点球决出胜负。 | ||
foulchargeSide | 【犯规冲锋】Pushing the opposing player | ||
backpassSide | 【回传犯规】如果队友将球传给守门员,则不允许守门员在自己的禁区内接球。如果守门员犯错,对方将在触球点获得间接任意球。 | ||
freekick_faultSide | 【任意球犯规】球员在任意球后不得将球踢给自己。如果一名球员在任意球后将球踢给自己,则在第二次任意球发生时将任意球判给对方球队。 | ||
indirectfree_kickSide | 在直接任意球中,球员可以将球直接射向球门,但间接任意球不能而且必须将球传给队友。 | ||
illegaldefenseSide |
其中 Side 是字符 l 或 r,OSide 表示对手的一方。 tc 是直到宣布后续游戏模式的时间(以周期数计)。
Table: Referee Messages 裁判消息表
Message | tc | subsequent play mode | comment |
---|---|---|---|
goal_Side_n | 50 | kickoffOSide | announce the n th goal for a team |
foul_Side | 0 | freekickOSide | announce a foul |
goaliecatch_ballSide | 0 | freekickOSide | |
time_up_without_a_team | 0 | time_over | sent if there was no opponent until the end of the second half |
time_up | 0 | time_over | sent once the game is over (if the time is ≥ second half and the scores for each team are different) |
half_time | 0 | before_kick_off | |
time_extended | 0 | before_kick_off |
Illegal Defense Referee 非法防守裁判
从服务器版本 16 开始,增加了一个新的裁判模块来控制防守球员的数量。我们在 server_param 中有四个新变量来改变这个裁判的参数。
server::illegal_defense_duration = 20
该参数决定了在判罚任意球之前非法防守情况必须保持的循环数。
server::illegal_defense_number = 0
此参数确定在非法防御情况倒计时开始之前需要在指定区域内的玩家数量。如果该值设置为 0,裁判永远不会检测到非法防守情况。
server::illegal_defense_dist_x = 16.5
该参数决定了检测防守球员时与球场球门线的距离。
server::illegal_defense_width = 40.32
该参数决定了与水平对称线的水平距离,用于检测防守球员。
规则
如果在由illegal_defense_dist_x 和 illegal_defense_width的矩形内存在防守球员,他们将被标记为非法状态。如果被标记球员的数量大于或等于illegal_defense_number 并且这种情况持续了illegal_defense_duration ,那么进攻球队的比赛模式将更改为 freekick[lr]。
当球队的球员是最晚开球的球员时,球队被视为进攻球队。如果两支球队在同一个循环中踢球,则两支球队都不会被视为进攻,倒计时会重置。上述规则也适用于铲球动作。比赛模式的改变不会影响非法防守情况的循环。