非线性优化

时间:2019-04-27 21:05:43

标签: r

我正在尝试解决带有约束的非线性优化问题。我编写了代码(见下文),以最大程度地减少受约束的平方误差之和。我需要找到a [1]和a [2],以便它们的总和为1。我提供了初始猜测的向量,代码运行了,但是最后除了最初的猜测之外,什么也没有给我。我做错了什么?谢谢。

MIS <- c(0.0156, 0.0087, 0.0468)
EDF <- c(0.0008, 0.0088, 0.0059)


QFM <- data.frame(Factor1 = c(100,100,50), Factor2 = c(50,25,100))


qt.mean <- mean(EDF)

qt.sd <- sd(EDF)

z.qt <- (qnorm(EDF) - qt.mean)/qt.sd

weight <- 0.7
alpha <- -2.7
beta <- 1.0

objfun <- function(a) {

  RQL <- a[1] * QFM$Factor1 + a[2] * QFM$Factor2
  z.ql <- (RQL - mean(RQL))/sd(RQL)
  corr.factor <- cor(z.qt, z.ql)
  denom <- sqrt(weight ^ 2 + (1 - weight)^2 + 2 * corr.factor * weight * (1- weight))
  z.cs <- 1/denom * (weight * z.qt + (1-weight) * z.ql)
  z.fs <- alpha + beta * z.cs
  return(sum((MIS - pnorm(z.fs))^2))
}

eqn <- function (a) {sum(a)}

solnp(c(0.5,0.5), fun  = objfun, eqfun = eqn, eqB = 1, LB = c(0,0), UB = c(1,1))
Iter: 1 fn: 0.002509     Pars:  0.50000 0.50000
solnp--> Completed in 1 iterations
$pars
[1] 0.5 0.5

$convergence
[1] 0

$values
[1] 0.00250929 0.00250929

$lagrange
     [,1]
[1,]    0

$hessian
     [,1] [,2]
[1,]    1    0
[2,]    0    1

$ineqx0
NULL

$nfuneval
[1] 35

$outer.iter
[1] 1

$elapsed
Time difference of 0.02330089 secs

$vscale
[1] 0.00250929 0.60000000 1.00000000 1.00000000

0 个答案:

没有答案
相关问题