具有许多变量的约束非线性最小化

时间:2014-11-18 15:01:03

标签: r mathematical-optimization

这是我想要解决的最小化问题,但无论我尝试使用哪种形式或套餐,它都无法自行解决。

问题是具有二次目标函数的运输问题。它的表述如下:

最小化f(x),f(x)为x' * C * x,受等式约束UI * x - ci = 0。

其中C是常量的对角矩阵,UI是矩阵,值为0,1,-1,以便设置约束。

我将提供一个示例,我目前已尝试使用两个函数nloptr来自其同名的包和constrOptim

以下是nloptr的示例:

require(nloptr)
objective <- function(x) {return( list( "objective" = t(x) %*% C %*% x,
                                    "gradient" =  2* C %*% x )) }
constraints <- function(x) {return( list( "constraints" =   ui %*% x - ci,
                                        "jacobian" = ui))}

C <- diag(c(10,15,14,5,6,10,8))
ci <- c(20, -30, -10, -20, 40))
ui <- rbind( c(1,1,1,0,0,0,0),
             c(-1,0,0,1,0,0,0),
             c(0,-1,0,-1,1,1,0),
             c(0,0,-1,0,-1,0,1),
             c(0,0,0,0,0,-1,-1))
opts <- list("alorithm" = "NLOPT_GN_ISRES")

res <- nloptr( x0=x0, eval_f=objective, eval_g_eq = constraints, opts=opts)

当试图用constrOptim解决这个问题时,我面临的问题是我必须提供可行区域内的起始值。但是,我最终会有很多方程式,并且不知道如何设置这些起点。

以下是与constrOptim相同的示例:

C <- diag(c(10,15,14,5,6,10,8))
ci <- c(20, -30, -10, -20, 40)
ui <- rbind(    c(1,1,1,0,0,0,0),
            c(-1,0,0,1,0,0,0),
            c(0,-1,0,-1,1,1,0),
            c(0,0,-1,0,-1,0,1),
            c(0,0,0,0,0,-1,-1))
start <- c(10,10,10,0,0,0,0)

objective <- function(x) { t(x) %*% C %*% x }
gradient <- function(x) { 2 * C %*% x }
constrOptim(start, objective, gradient, ui = ui, ci = ci)

1 个答案:

答案 0 :(得分:1)

试试这个:

co <- coef(lm.fit(ui, ci))
co[is.na(co)] <- 0
res <- nloptr( x0=co, eval_f=objective, eval_g_eq = constraints, 
  opts=list(algorithm = "NLOPT_LD_SLSQP"))

,并提供:

> res

Call:
nloptr(x0 = co, eval_f = objective, eval_g_eq = constraints, 
    opts = list(algorithm = "NLOPT_LD_SLSQP"))


Minimization using NLopt version 2.4.0 

NLopt solver status: 4 ( NLOPT_XTOL_REACHED: Optimization stopped because 
xtol_rel or xtol_abs (above) was reached. )

Number of Iterations....: 22 
Termination conditions:  relative x-tolerance = 1e-04 (DEFAULT) 
Number of inequality constraints:  0 
Number of equality constraints:    5 
Optimal value of objective function:  37378.6963822218 
Optimal value of controls: 28.62408 -29.80155 21.17747 -1.375917 -17.54977 -23.6277 -16.3723