我正在学习使用GA,并在R中使用if else函数进行循环,并试图解决我的第一个问题。
但是当我运行这段代码时,会出现类似 Error in as.numeric(xij) : cannot coerce type 'closure' to vector of type 'double'
的错误。有人可以告诉我我做错了什么地方吗?我不知道该怎么办。我也编辑了几次编码,但仍然没有获得正确的编码。非常感谢你们!
attach <- data1
schedule <- as.matrix(data1)
schedule
Jobj Processing_time_Jobj Due_date_Jobj Weighted_Jobj
[1,] 1 25 61 3
[2,] 2 7 102 7
[3,] 3 42 86 1
[4,] 4 36 44 3
[5,] 5 18 150 1
[6,] 6 29 134 4
fitness <- function(j){
for(j in Job){
xij <- function (i,j) if(i==j) 1 else 0
y <- as.numeric(xij)
Cj <- sum((Processing_time_Jobj[j]*xij)+c[j-1])
Lj <- sum((Weighted_Jobj[j]*xij)+(cj[j]-Due_date_Jobj[j]))
}}
GA <- ga(type = "permutation", fitness = fitness, lower = 1, upper = 500)
as.numeric(xij)中的错误:无法将类型'closure'强制转换为 输入“ double”
答案 0 :(得分:0)
xij
已定义为两个参数的函数
xij <- function (i,j) if(i==j) 1 else 0
下一条语句
y <- as.numeric(xij)
正在导致错误消息。
xij
需要使用一些参数来调用,例如
as.numeric(xij(2,3))
[1] 0
答案 1 :(得分:0)
如果打印出logger.debug(...)
,则会看到它是一个函数,而不是数字。
您应将此行替换为
xij
并摆脱xij <- ifelse(i==j, 1, 0)
变量