Optimization 带R的约束优化
我想用R'Rsolnp'包解决一个最小化问题。我的目标是:Optimization 带R的约束优化,optimization,minimization,Optimization,Minimization,我想用R'Rsolnp'包解决一个最小化问题。我的目标是: sum((I[i, j]*a[j] - E[i, j]*b[i])^2/(I[i, j] + E[i, j])) 以及约束条件: sum((I[i, j]*a[j] + E[i, j]*b[i])/2 - M[i, j], 等于0 我有8个参数(a[j]和b[I]),它们必须是正(!)值。我已经尝试了solnp函数。我的编码: cf <- function(...) { i = c(1:8) j =
sum((I[i, j]*a[j] - E[i, j]*b[i])^2/(I[i, j] + E[i, j]))
以及约束条件:
sum((I[i, j]*a[j] + E[i, j]*b[i])/2 - M[i, j],
等于0
我有8个参数(a[j]和b[I])
,它们必须是正(!)值。我已经尝试了solnp
函数。我的编码:
cf <- function(...)
{
i = c(1:8)
j = c(1:8)
I = matrix(c(1, 59, 31, 4, 1, 5, 5, 24,
36, 1, 10, 22, 3, 4, 17, 56,
56, 25, 1, 2, 1, 1, 1, 25,
2, 1, 3, 1, 34, 12, 3, 17,
1, 1, 1, 14, 1, 1, 1, 2,
10, 1, 1, 58, 2, 1, 1, 7,
3, 17, 1, 7, 1, 1, 1, 95,
5, 34, 6, 6, 1, 1, 104, 1), nrow = 8, ncol = 8, byrow = TRUE)
E = matrix(c(1, 17, 31, 2, 1, 5, 1, 3,
16, 1, 22, 1, 1, 1, 3, 28,
173, 45, 1, 1, 1, 2, 2, 21,
5, 15, 1, 1, 11, 27, 2, 10,
1, 1, 1, 5, 1, 3, 1, 1,
1, 1, 1, 7, 1, 1, 1, 1,
4, 13, 1, 2, 1, 1, 1, 93,
14, 36, 3, 5, 1, 2, 99, 1), nrow = 8, ncol = 8, byrow = TRUE)
flow = sum((I[i, j]*a[j] - E[i, j]*b[i])^2/(I[i, j] + E[i, j]))
}
kf <- function(...)
{
i = c(1:8)
j = c(1:8)
I = matrix(c(1, 59, 31, 4, 1, 5, 5, 24,
36, 1, 10, 22, 3, 4, 17, 56,
56, 25, 1, 2, 1, 1, 1, 25,
2, 1, 3, 1, 34, 12, 3, 17,
1, 1, 1, 14, 1, 1, 1, 2,
10, 1, 1, 58, 2, 1, 1, 7,
3, 17, 1, 7, 1, 1, 1, 95,
5, 34, 6, 6, 1, 1, 104, 1), nrow = 8, ncol = 8, byrow = TRUE)
E = matrix(c(1, 17, 31, 2, 1, 5, 1, 3,
16, 1, 22, 1, 1, 1, 3, 28,
173, 45, 1, 1, 1, 2, 2, 21,
5, 15, 1, 1, 11, 27, 2, 10,
1, 1, 1, 5, 1, 3, 1, 1,
1, 1, 1, 7, 1, 1, 1, 1,
4, 13, 1, 2, 1, 1, 1, 93,
14, 36, 3, 5, 1, 2, 99, 1), nrow = 8, ncol = 8, byrow = TRUE)
M = matrix(c(1, 59, 31, 4, 1, 5, 5, 24,
36, 1, 22, 22, 3, 4, 17, 56,
173, 45, 1, 2, 1, 2, 2, 25,
5, 15, 3, 1, 34, 27, 3, 17,
1, 1, 1, 14, 1, 3, 1, 2,
10, 1, 1, 58, 2, 1, 1, 7,
4, 17, 1, 7, 1, 1, 1, 95,
14, 36, 6, 6, 1, 2, 104, 1), nrow = 8, ncol = 8, byrow = TRUE)
constraint = sum((I[i, j]*a[j] + E[i, j]*b[i])/2 - M[i, j])
}
n = 8
LB = rep(0, 2*n)
kfB = rep(0, n)
a = rep(0.1, n)
b = rep(0.1, n)
x0 <- c(a, b)
solnp(pars = x0, fun = cf, eqfun = kf, eqB = kfB, LB = LB)
cf