底层最开始有很多比较简单的改进的地方
首先防守策略在bhv_basic_move.cpp中,铲球的可以尽可能的铲 ,但是前提是不存在队友可踢,否则就是铲自己人的铁憨憨if(!wm.existKickableTeammate()),角度用60比较合适Bhv_BasicTackle(0.1,60.0)
之后通过观察比赛,我们发现一个逻辑漏洞就是,如果我与球小于3m 或者 我是全队最接近球并且比对方最近的队员接近球的距离3米以内,我就去追球,这是不合理的,会让对方长驱直入。
可以将3改为10,如果希望有夹击的效果,不妨加个条件
||(wm.self().pos().absX()>20&&self_min<mate_min+10&&self_min<opp_min+10)
但是我们发现,会有我方球员在没有对方球员靠近的情况下去抢球,所以在函数体内加一个条件
if(!(self_min>mate_min && mate_min<opp_min -3 ))
人海战术防守:
持球策略在sample_field_evaluator.cpp中,这里有点强化学习的感觉了,对场地不同点进行打分,首先它对进入对方球门打了较高的分数,自己方的球门则是低分,出界也是低分。
但是之后使用40 - (对方球门到球的距离)打分,这样球员只会向前不会后退。想使它会回传也可以,但是要考虑到我们不希望它在自己半场倒脚,也不希望它没事的时候回传,希望他在转身护球的时候回传,但是我们又希望他不要在没有敌方靠近时回传,所以可以加入以下代码
if(state.self().pos().x>0&&state.self().face().cos()<0&&state.ball().pos().x<state.self().pos().x-5)
{
double nearnest_self_dist =65535.0;
state.getOpponentNearestTo(state.self().pos(),10,&nearnest_self_dist);
if (nearnest_self_dist<8)
return +1.0e+6;
}
禁区三角进攻方法较为有效