首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在适应度函数中打印迭代

如何在适应度函数中打印迭代
EN

Stack Overflow用户
提问于 2022-01-13 11:44:43
回答 1查看 40关注 0票数 0

我想监视算法的进展,以便了解算法的工作时间,我想看到这样的情况

代码语言:javascript
复制
for(i in 1:100) print( paste("iter number",i))
[1] "iter number 1"
[1] "iter number 2"
[1] "iter number 3"
[1] "iter number 4"
[1] "iter number 5"
[1] "iter number 6"
[1] "iter number 7"

我试着做这样的事情,但我的柜台没有更新。

代码语言:javascript
复制
i <- 0
fit <- function(x) {
  
  ##/// my count
  i <- i+1
  print( paste("iter number",i))
  ##////
  
  
  y <- numeric(2)
  y[1] <- crossprod(x, x)
  y[2] <- crossprod(x - 5, x - 5)

  return (y)
}

当我运行优化算法时,我得到以下结果

代码语言:javascript
复制
library(mco)
ns <- nsga2(fit, 2, 2,
            generations=150, popsize=100,
            lower.bounds=rep(-5, 2),
            upper.bounds=rep(10, 2))

[1] "iter number 1"
[1] "iter number 1"
[1] "iter number 1"
[1] "iter number 1"
[1] "iter number 1"
[1] "iter number 1"
[1] "iter number 1"
[1] "iter number 1"
[1] "iter number 1"
[1] "iter number 1"
[1] "iter number 1"
[1] "iter number 1"

如何才能正确地做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-13 14:09:08

正如在评论中所解释的,这里是一个小演示。

这是因为我将只更新您的函数,而不是以外的您的函数。这就是为什么函数不打印0,而是始终打印1的原因。因为环境的原因。您可以做的是将i <- i+1更改为i <<- i+1,我将在函数之外进行更新。

简单演示

代码语言:javascript
复制
i <- 0
z <- 0

fit <- function() {
  i <- i + 1
  print(paste("i iter number:", i))
  z <<- z + 1 # note the <<- instead of <-
  print(paste("z iter number:", z))
}

for(x in 1:3) fit()

[1] "i iter number: 1"
[1] "z iter number: 1"
[1] "i iter number: 1"
[1] "z iter number: 2"
[1] "i iter number: 1"
[1] "z iter number: 3"

i # is still 0
[1] 0
z # is now 3
[1] 3
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70696040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档