【问题标题】:How to sort a list of matrices based on fitness of each matrix如何根据每个矩阵的适应度对矩阵列表进行排序
【发布时间】:2018-06-14 21:34:26
【问题描述】:

有一个列表(19)矩阵

bulk.list <-list(1:19)

for(i in 1:19) {
  bulk.list[[i]]<-matrix(i, 12, 126)
}

我需要选择 前 10 个矩阵,它们在输入到 Fitness() 函数时回报最大。

fitness <- function(S)
{
  total=0
  for (t in 1:12){
    for (i in 1:126){
      total=total+(S[t,i])
    }
  }
  return(total)
}

我需要将这 10 个矩阵写入另一个列表(不需要按任何特定顺序)

pop.list <-list(1:10)

适应度函数恰好是资源密集型的,所以我尝试使用它的次数最少。到目前为止,我有一个列表健身价值观

flist.list=lapply(bulk.list, fitness)

但我无法理解如何对这个适应度值列表进行排序会产生 10 个对应矩阵的所需列表。我可以用这两个列表创建一个数据框,然后以某种方式对其进行排序吗? 我的输出需要是包含 10 个适应度值最高的矩阵的列表

pop.list <-list(1:10)

PS:作为一个stackoverflow菜鸟,请原谅最初缺乏格式

【问题讨论】:

  • 请展示一个可重现的小示例和基于该示例的预期输出

标签: r list matrix genetic-algorithm


【解决方案1】:

我可以通过使用 order() 然后将订单存储在另一个列表中来做到这一点

首先将适应度存储在 flist.list 中

flist.list <-list()
for (i in 1:l){
  flist.list[[i]]= fitness(bulk[[i]])
}

flist.list=lapply(bulk.list, fitness)

然后我使用了订单功能,并将订单存储在一个新的数据框中

order1=order(-as.data.frame(fit.list))

最后,我根据需要使用该数据框将顶部矩阵写入新列表

for (i in 1:10){
    poplist.list[[i]]=bulk[[order1[i]]]
}

不是最好的解决方案,但它确实有效。

【讨论】:

    猜你喜欢
    • 2019-03-28
    • 2020-11-04
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    • 2015-10-12
    • 1970-01-01
    相关资源
    最近更新 更多