我正在做一些强化学习任务,我有环境(包括草,森林,泥土和水)和捕食者和猎物。我的猎物试图尽可能远离捕食者,同时消耗水和草来生存。我有两个必须编辑的功能,getStateDesc <- function(simData, preyId)
和getReward <- function(oldstate, action, newstate)
。我已经默认实现了一些状态和奖励,我的状态空间保留了qlearning算法的c(distance to predator, direction to predator, and if prey is on border)
状态记录。在奖励功能中,我的猎物会根据与捕食者的距离以及是否试图在边界移动而受到惩罚。我现在想要添加状态来检查我的猎物是否在林中(所以它可以隐藏)我已经实现了函数isPreyInForest。我希望保留两种状态,如果isPreyInForest==TRUE => state<-1 if not state<-2
并且稍后根据此奖励我的代理人。问题是我无法更改状态空间的维度(c(distance, direction, border)
,因为当我尝试向qlearning c(distance,direction,border,state)
运行模拟时,尝试向此添加状态((c(30, 4, 5,2), maxtrials=100)
以及稍后在qlearning中
(注意,这里30表示距离捕食者的最大距离,4表示方向,因此4个最大方向,5个是边界,前4个数字是边界,5个是当代理不在边界状态时)我有Error in apply(Q, len + 1, "[", n) : dim(X) must have a positive length
。那么任何想法如何扩展状态空间并为qlearning函数提供良好的论据?