受约束影响的差异的线性优化

时间:2017-03-23 19:01:17

标签: r optimization constraints

我有一个值向量(x1,x2,x3,x4,x5,x6,x7),我想创建一个最小化新未知向量的向量(y1,y2,y3,y4,y5,y6, y7)这样我可以最小化|| xy || ^ 2。我还想创建这个新的向量,受x1 + x2 + x3 + x4 + x5 = x6和x1 + x2 + x3 + x4 = x7的约束。我尝试使用constrOptim,但我认为我没有正确的输入。任何帮助将不胜感激!

是否最好提出一组值,然后使用nls模型进行预测?我该怎么做?

谢谢!!

1 个答案:

答案 0 :(得分:0)

我们假设问题的实际意图是y是已知的,我们希望得到带有指示约束的x。

请注意,nls不适用于零残留问题,并且因为在问题中没有提供数据我们不知道这是否是这种情况所以我们首先提出两个可以处理它的解决方案然后最终我们为非零残差案例显示nls。我们使用下面(1)中显示的y作为(1)和(2)的测试输入,并且它具有零残差。对于(3),nls解,我们使用不同的y,这不会导致零残差。

以下是一些替代解决方案:

1)lm 我们定义x5_to_x7x的前5个分量映射到整个7元素向量。由于x5_to_x7是线性运算符,因此它对应于我们形成的矩阵X,然后在lm中使用:

# test data
y <- c(1:5, sum(1:5), sum(1:4)) 

x5_to_x7 <- function(x5) c(x5, sum(x5), sum(x5[1:4]))
X <- apply(diag(5), 1, x5_to_x7)
fm <- lm(y ~ X + 0)

,并提供:

coef(fm)
## X1 X2 X3 X4 X5 
##  1  2  3  4  5 

all.equal(x5_to_x7(coef(fm)), y)
## [1] TRUE

2)优化或者我们可以通过定义残差平方和函数来使用optim,并使用optim y和{{1}来解决它如上所述:

x5_to_x7

,并提供:

rss <- function(x) sum((y - x5_to_x7(x))^2)
result <- optim(numeric(5), rss, method = "BFGS")

3)nls 如果y为残差不为零,则可以使用问题中建议的> result $par [1] 1 2 3 4 5 $value [1] 5.685557e-20 $counts function gradient 18 12 $convergence [1] 0 $message NULL > all.equal(x5_to_x7(result$par), y) [1] TRUE

nls
相关问题