gpt4 book ai didi

r - 生态模拟,如何比较矩阵中的多个数字来做出决定

转载 作者:行者123 更新时间:2023-12-01 14:34:44 25 4
gpt4 key购买 nike

我在开发生态模拟时遇到了一个问题。我在下面附上了一些代码以突出显示该问题。总之,假设我有 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 之间做出选择

我正试图弄清楚如何编写一个代码来比较位置的相对质量,如果个人无法区分位置(如果是这样,它在哪些位置之间进行选择),或者如果一个位置显然更大(如果是这样,它需要返回位置编号,以便我可以将个人移动到另一个矩阵中的那个位置)。

最佳答案

我建议为位置创建一个类。我不知道您将如何在 r 中执行此操作,但我相信您可以弄清楚这部分内容。

这是我建议的算法:

  • 对于每个位置,对于每个其他位置,如果有机体可以区分质量差异,则将排名较低的标记为“坏”(可能使用 bool 数组;不要为此在对象内部使用标志,因为这违反了良好的设计)
  • 在这些 for 循环中,如果您抓取带有标记标志的 Location,请使用 continue 语句以节省时间。
  • 现在,再次检查列表,并将所有未标记标记的列表复制到新列表。
  • 检查列表的长度并将其用于决策。

关于r - 生态模拟,如何比较矩阵中的多个数字来做出决定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10624600/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com