Log(DailinH) - DailinH/MAgent GitHub Wiki

2018/11/10 update

Part 1 - 定义三方模型trio

A方:可移动,目标是攻击C方
B方:可移动,目标是(利用攻击A方的方式)保护C方免受A方攻击
C方:静止

我们可以认为,A-C之间与B-A之间存在predator-prey的捕食关系。如果更为缜密地考虑这个问题,会发现B的损失函数还应该与C的受攻击情况相关。如果想要一个更为理想的结果,需要重新构造一个具有合作意义的agent类型,但在本周的报告中对此不作考虑。

Part 2 - 尝试更改MAgent

MAgent 本身的默认模型并没有设置特殊reward,而是较为笼统地将reward设为总攻击量,loss设为受攻击量。
在我们新定义的场景trio下,需要更改reward rule, 对\src\gridworld\RewardEngine.h进行研究

可以看到,在class RewardRule中有std::vector<AgentSymbol*> receivers, 为接收reward的agent类型分配。

2018/11/11 update

需要对\src\gridworld部分源码进行研究
grid_def.h中是对gridworld各设置的总定义。可以看到,agent的移动方向暂时只有东、南、西、北四种情况 在AgentType.h 中对agent类型进行了定义。其中暂时不太理解但可能用得上的有

class AgentType {
public:
... ...
    int speak_ability;
    float damage, trace, eat_ability, step_recover, kill_supply, food_supply;
... ...
    Reward step_reward, kill_reward, dead_penalty, attack_penalty;
};

其中的speak_ability推测为a2c的交互有关参数,kill_supplyfood_supply可能与攻击/受攻击类型有关,但这两个参数都是float类型,有点奇怪,待后续研究。
这里的Reward 等同于float(见grid_def.h)

2018/11/12 update

通过def load_config(mapsize)函数设置agent以及reward rule

我们设三类agent分别为attacker, defender, target

PROBLEM: minimap_mode是指什么?Embedding size呢?

attacker = cfg.register_agent_type("attacker",{
'width': 1, 'length': 1, 'hp': 10, 'speed': 2,
'view_range': gw.CircleRange(6), 'attack_range': gw.CircleRange(1),
'damage': 2, 'step_recover': 0, 'attack_in_group': True,
'step_reward': -0.01,  'kill_reward': 1, 'dead_penalty': -0.1, 'attack_penalty': -1,
})

其中,step_reward设为负促使attacker尽快赢得比赛;dead_penalty疑为