在我正在开发的生态模拟过程中,我遇到了一个问题。我在下面附上了一些代码来突出这个问题。总之,假设我有 3 个不同质量的位置。动物想要移动到最高质量的位置(数字越大,质量越高),但无法区分差异小于或等于 0.1 的质量(这是更大循环的一部分,因此此过程将得到重复数千次)。
例如,在这种情况下(个人从位置 #2 开始):
a<-matrix(c(1,2,3,.6,.9,.7),nrow=2,ncol=3,byrow=TRUE)
attributes(a)$dimnames<-list(c("Location","Quality"),c())
a
[,1] [,2] [,3]
Location 1.0 2.0 3.0
Quality 0.6 0.9 0.7
个人会清楚地将位置#2 识别为最佳位置,并留在那里。
在这种情况下(个人从位置 #2 开始):
a<-matrix(c(1,2,3,.5,.7,.8),nrow=2,ncol=3,byrow=TRUE)
attributes(a)$dimnames<-list(c("Location","Quality"),c())
a
[,1] [,2] [,3]
Location 1.0 2.0 3.0
Quality 0.5 0.7 0.8
个人将无法清楚地区分 #2 和 #3 的质量(因为差异需要至少为 0.1 才能被检测到),这将触发另一种行为(这可能涉及个人留在 # 2,或评估此示例中不存在的更多位置)。但是,我需要知道位置 #2 和 #3 在质量上接近,而位置 #1 被排除在选项之外。
在这种情况下(同样,从位置 #2 开始)
a<-matrix(c(1,2,3,.9,.7,.6),nrow=2,ncol=3,byrow=TRUE)
attributes(a)$dimnames<-list(c("Location","Quality"),c())
a
[,1] [,2] [,3]
Location 1.0 2.0 3.0
Quality 0.9 0.7 0.6
个人将从位置 2 移动到位置 1。
在这种情况下(同样,从位置 #2 开始)
a<-matrix(c(1,2,3,.8,.7,.6),nrow=2,ncol=3,byrow=TRUE)
attributes(a)$dimnames<-list(c("Location","Quality"),c())
a
[,1] [,2] [,3]
Location 1.0 2.0 3.0
Quality 0.8 0.7 0.6
个人将根据位置 #3 与位置 #1 的差异来消除位置 #3,并且无法在留在 #2 或搬到 #1 之间做出选择
我试图弄清楚如何编写一个代码来比较位置的相对质量,如果个人无法区分位置(如果是,它在哪个位置之间进行选择),或者如果一个位置是显然更大(如果是这样,它需要返回位置编号,以便我可以将个人移动到另一个矩阵中的那个位置)。