Robocup 2D 的学习

**关于robocup2d学习

比赛基本流程
由 SoccerServer 控制的比赛流程分为以下步骤
(1) 裁判启动仿真平台。(可以利用 rcsoccersim 同时启动 SoccerServer 和 SoccerMonitor)
(2) 双方启动各自的 12 个 Client 程序(一般为 11 个球员智能体和 1 个教练智能体)与 
平台连接。
(3) 准备完成后,裁判按下 Kick_off 按钮开始上半场 3000 周期的比赛(为实际时间的 5 分钟)。
(4) 上半场结束,SoccerServer 暂停比赛。
(5) 在下半场比赛开始之前,每个 Client 使用 reconnect 命令重新连接 SoccerServer。
(6) 下半场结束,比赛自动停止。
(7) 若比赛为平局,则进入上下半场各位 1000 周期的加时赛,当加时赛仍未平局时,则进入双方互射单刀球形式的“点球大战”决出最后胜利者


**代码解读:***
现在代码基本上是基于agent或者yushan或者miracle底层代码编写;
agent2d底层代码目录
rcsc:
rcsc/action 动作类(重点) 
rcsc/ann 人工神经网络类 (目前写出来的不多,如yushan、Apollo等)
rcsc/coach 在线教练类 
rcsc/common 公共的类 
rcsc/formation 一些阵型类(agent2d只使用了DT跑位) 

**关于跑位的知识:**
(  在 RoboCup 足球仿真比赛中,设计者借鉴人类足球的知识,
引入阵型的概念,使场上球员位置分布更合理,合理规划球队阵型也是设计初期显著提高球队
水平的方法之一。仿真环境下,球员通过跑位和合作保持阵型的稳定性。和现实比赛相似,
RoboCup 仿真比赛中常见的阵型由 442、433、424、532、352 等。在比赛中,球队的阵型可以
动态调整,在这个问题上,有三种基本策略:

(1) 固定阵型:在最初阵型设计中定义好阵型,球员严格按照此跑位,保持不变。

(2) 实时调整:根据场上时间或情况,通过全体球员都能够接收的信息实时变化调整阵
型,如:根据比分变化调整,根据时间段调整,根据己方球员体力及对方位置的改变进行调整。
*个人认为这是目前最为可靠的(没有编写智能体的情况下)都知道智能体现在大多采用学习对方的策略在进行规划的,而这个的定义很有可能在新定义跑位时干扰对方的智能学习*

(3) 通讯协调 :由场上某一重要队员决定调整,并通过发送信息的方式告知全部队友。后两种调整都改变球员的内在状态,实时调整的触发机制和通讯协调的通讯协议都是预先定义好的。在实际的比赛中,球员的跑位需要有一定的灵活性,要求能够适应场上一些不同情况。我们以 CMUnited 球队为例,介绍他们在研究中对于这个问题的三种方法:
**个人认为这是需要具有一定智能体才能实现,目前更可靠的是(2)号方案。**

a) 对手盯防:根据关门协议,给不同角色的球员分配不同的对手球员进行盯防,活动范
围不再仅仅依赖所安排的区域。
b) 基于球的跑位:根据球位置的实时变化,调整球员的跑位。
c) 基于吸引子和排斥子的策略跑位(strategic position by attraction and repulsion,SPAR)
将场上跑位的相关概念形式化,通过某种原则计算决定跑位。这种方法主要考虑非持球队友的
跑位配合。
CMUnited 球队基于角色进行阵型描和现实足球有着很好的相似性和适用性,并取得了很
好的成果,之后的许多站位的实现实际上都是在 CMUnited 球队工作的基础之上完成的。)



rcsc/geom 一些几何类 

rcsc/net 一些与server交换数据的类 

rcsc/param 一些参数类 

rcsc/player 一些球员类(重点)
 
rcsc/time 时间类(一般用不到)
 
rcsc/trainer 一些离线教练类 
rcsc/util game_mode math version

src:
以bhv开头的都是在各种情况下的动作执行类(重要) 

以role开头的都是角色类 

以sample开头的都是示例,可以模仿其结构修改代码 

以intertion开头的是意图类 

以neck开头的是转脖子动作

chain_action动作链,核心

data/formations-dt 阵型文件(重要)
*可以参考上面跑位的策略进行更改*

**球员决策流程**
//关于这个流程推荐这个网站(写的详细但是有点乱)

https://www.tceic.com/1ilgj0g1284gi850gj02423h.html

Agent2D底层执行的过程如下:
先由Main()函数开始,首先是一些环境变量设置,启动球员类。
进入BasicClient 类中,执行Run() 函数,
  RunOnline()【跑位控制】 调用 PlayerAgent 类的 HandleMessage () 函数处理获得的信息,
  HandleMessage () 函数调用在 PlayerAgent 类中的 Action() 函数进行动作决策和Server参数的解析parse()函数。
       在Action()函数中依次执行
         ActionImpl()函数
         DoArmAction()函数
         DoViewAction()函数
         DoNeckAction()函数
         CommunicationImpl()函数
       其中ActionImpl()函数是主要的决策函数的框架。
  基于球员在场上的角色(Role)以及场上位置(Home_Position),执行相应的Role策略,这种基于角色的策略增加了球员的灵活性,使不同类型的球员具有不同的策略,对于球场动态环境具有更强的自适应性。
每个球员的决策流程从 sample_player.cpp 中的 actionImpl() 函数开始。
***最主要的是球员的跑位跟断球的策略(个人这么认为)***

  • 9
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值