[英]nloptr error in getting the function evaluated
我在 R 中運行優化程序時遇到問題。我在這里附上了代碼。 此代碼用於具有 8 個決策變量 (X[j]) 的非線性規划。 我正在嘗試最大化目標函數。 使用 nloptr 包運行整個函數時出現錯誤
Error in -(for (i in 1:nrow(ldata)) { :
invalid argument to unary operator
set.seed(123)
a <- sample(1:6,10,replace = T)
b <- sample(1:3,10,replace= T)
w<- rnorm(10,10,2)
Z<-0.08
Y<-4
D<-2.7
cd<-matrix(0,10,11)
for(i in 1:10){
cd[i,1]<-a[i]
cd[i,2]<-w[i]
cd[i,3]<-cd[i,1]*cd[i,2]
cd[i,4]<-b[i]
if (cd[i,4]==1){
cd[i,5]=max(0,cd[i,3]-23)
}
else if (cd[i,4]==2){
cd[i,5]=max(0,cd[i,3]-28)
}
else{
cd[i,5]=max(0,cd[i,3]-32)
}
if (cd[i,4]==1){
cd[i,6]=max(0,cd[i,1]-2)
}
else if (cd[i,4]==2) {
cd[i,6]=max(0,cd[i,1]-2)
}
else {
cd[i,6]=max(0,cd[i,1]-3)
}
cd[i,7]<-cd[i,5]*Y*D
if (cd[i,6]>=1){
cd[i,8]=runif(1,120,130)
}
else{
0
}
if (cd[i,6]>=2){
cd[i,9]=runif(1,cd[i,8]+1,140)
}
else{
0
}
if (cd[i,6]>=3){
cd[i,10]=runif(1,cd[i,9]+1,150)
}
else{
0
}
if (cd[i,6]>=4){
cd[i,11]=runif(1,cd[i,10]+1,160)
}
else{
0
}
};cd
A1<-sum(cd[,7]);A1
ldata<-cd[,-c(1:7)];ldata
obj_fn<-function(x){-
(for(i in 1:nrow(ldata)){
for(j in 1:4){
#price[i,j] <- cdata[i,j] * (x[j] + x[j+4]) * Z * D
ldata[i,j] * as.vector(x[j] + x[j+4]) * Z * D
}
})
}
我不知道這是否可行,但試試這個:
eg <- expand.grid(i = seq_len(nrow(ldata)), j = 1:4)
obj_fn <- function(x){
sum(mapply(function(i,j) sum(ldata[i,j] * as.vector(x[j] + x[j+4]) * Z * D),
eg[[1]], eg[[2]]))
}
鑒於您的樣本數據和我使用任意x <- 1:8
,我得到以下信息:
obj_fn(1:8)
# [1] 4640.256
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.