在R中使用两个函数最大化

时间:2017-10-11 12:37:53

标签: r optimization

我想找到一个受这种情景的马哈拉诺比斯距离限制的最大经济压力情景。为此,我必须考虑优化中的两个函数。

为了简化操作,我们可以解决一个简化的问题:我们有一个简单的线性模型:y=a+bx。为此,我想尽量减少:sum(a+bx-y)^2。但是,我也有例如(ab*5)/2<30的限制。

使用excel求解器计算此问题不是问题。但是,我如何在r中得到这个?

1 个答案:

答案 0 :(得分:0)

您可以尝试将约束合并到目标函数中,例如

# example data whose exact solution lies outside the constraint
x <- runif(100, 1, 10)
y <- 3 + 5*x + rnorm(100, mean=0, sd=.5) 

# big but not too big
bigConst <- sum(y^2) * 100

# if the variables lie outside the feasible region, add bigConst
f <- function(par, x, y) 
    sum((par["a"]+par["b"]*x-y)^2) + 
    if(par["a"]*par["b"]>12) bigConst else 0

# simulated annealing can deal with non-continous objective functions
sol <- optim(par=c(a=1, b=1), fn=f, method="SANN", x=x, y=y)

# this is how it looks like
plot(x,y)
abline(a=sol$par["a"], b=sol$par["b"])