R:is.nloptr(ret)中的错误:x0中的不等式约束返回NA

时间:2017-04-11 12:10:42

标签: r optimization runtime-error nonlinear-optimization

我试图使用R CRAN page中的nloptr包来解决非线性优化问题。

library('nloptr')

#parameters 
N_h <- c(39552, 38347, 43969, 36942, 41760)

s_h1 <- c(4.6, 3.4, 3.3, 2.8, 3.7)

s_h2 <- c(11.7, 9.8, 7.0, 6.5, 9.8)

s_h3 <- c(332, 357, 246, 173, 279)

Cost <- c(3,4,5,6,7)

C_cap <- c(1.5, 1.5, 1.5, 1.5, 1.5)

c<- Cost+C_cap
N <- sum(N_h)
d_h <- c(N_h/N)
d1 <-(d_h)^2*s_h1
d2 <-(d_h)^2*s_h2
d3 <-(d_h)^2*s_h3



#Objective
f0<-function(x, d1, d2, d3, c, Gamma){
 return(x[1])
}


#Constraints
g0<- function(x, d1, d2, d3, c, Gamma){
   return(c((c[1]*x[2]+c[2]*x[3]+c[3]*x[4]+c[4]*x[5]+c[5]*x[6]+x[7]*Gamma+sum(x[8:12])-x[1]),

       (-x[7]-x[8]+c[1]*x[2]),
       (-x[7]-x[9]+c[2]*x[3]),
       (-x[7]-x[10]+c[3]*x[4]),
       (-x[7]-x[11]+c[4]*x[5]),
       (-x[7]-x[12]+c[5]*x[6]),
       (d1[1]/x[2]+d1[2]/x[3]+d1[3]/x[4]+d1[4]/x[5]+d1[5]/x[6]-0.5037),
       (d2[1]/x[2]+d2[2]/x[3]+d2[3]/x[4]+d2[4]/x[5]+d2[5]/x[6]-0.50868),
       (d3[1]/x[2]+d3[2]/x[3]+d3[3]/x[4]+d3[4]/x[5]+d3[5]/x[6]-0.55),
       (x[2]+x[3]+x[4]+x[5]+x[6]-1081)
   ))
    }

  #Initialization and algo
x0<-c(100, 10,10,10,10,10,  2,  2,2,2,2)



Rob2 <- nloptr(x0=x0,
                eval_f = f0,
                lb=c(-Inf, 2,2,2,2,2,  0,  0,0,0,0),
                ub=c(Inf, 1000,1000,1000,1000,1000,  Inf,  Inf,Inf,Inf,Inf),
                eval_g_ineq=g0,
                opts=list("algorithm"="NLOPT_GN_MLSL",
                          maxeval=100000,
                          "xtol_rel"=1.0e-8,
                          "print_level" = 2),
                d1=d1, d2=d2,d3=d3, c=c, Gamma=Gamma)

运行此算法时,错误如下:

   Error in is.nloptr(ret) : inequality constraints in x0 returns NA

任何建议或帮助都会非常明显。!!

#Edit

原始问题如下

Min x[1]
subject to
-x[7]-x[8]+c[1]*x[2]<=0
-x[7]-x[9]+c[2]*x[3]<=0
..
..
x[2]+x[3]+x[4]+x[5]+x[6]-1081<=0

1 个答案:

答案 0 :(得分:0)

我想这里的问题是你用初始x0包含常量值,你需要把它分别作为d1&lt; -2                                  d2&lt; -2