R 通过优化加权向量使目标数最大化

R 通过优化加权向量使目标数最大化,r,optimization,R,Optimization,我试图通过一个1x42加权向量(权重)最大化数字N元素 N\u ent通过以下函数计算: N_ent <- exp(-sum((((solve(pca$rotation[])) %*% t(weight))^2)* (pca$sdev^2)/(sum((((solve(pca$rotation[])) %*% t(weight))^2)* (pca$sdev^2)))*log((((solve(pca$rotation[])) %*% t(weight))^2)* (pca$s

我试图通过一个1x42加权向量(权重)最大化数字N元素

N\u ent
通过以下函数计算:

N_ent <- exp(-sum((((solve(pca$rotation[])) %*% t(weight))^2)*
  (pca$sdev^2)/(sum((((solve(pca$rotation[])) %*% t(weight))^2)*
  (pca$sdev^2)))*log((((solve(pca$rotation[])) %*% t(weight))^2)*
  (pca$sdev^2)/(sum((((solve(pca$rotation[])) %*% t(weight))^2)*(pca$sdev^2)))))) 

N\u ent以下是使用库
nloptr
的解决方案

library(nloptr)

pca <- dget('pca.csv')
#random starting point
w0 <- runif(42, -0.1, 1)
#things that do not depend on weight
rotinv <- solve(pca$rotation)
m2 <- pca$sdev^2

#function to maximize
N_ent <- function(w) {
  m1 <- (rotinv %*% w)^2
  -exp(-sum(m1 * m2 / sum(m1 * m2) * log(m1 * m2 / sum(m1 * m2))))
}

#call optimization function
optres <- nloptr(w0, N_ent, lb = rep(-0.1, 42), ub = rep(1, 42),
                 opts = list('algorithm' = 'NLOPT_LN_NEWUOA_BOUND', 'print_level' = 2, 'maxeval' = 1000, 'xtol_rel' = 0))
库(nloptr)

pca我使用
nloptr
包和函数进行约束优化。请包括一个示例数据集
pca
,我将写下答案。非常感谢,我不知道如何上传数据,但它是一个42x42矩阵,所有元素都在-1和1之间,如果有帮助的话?或者,也许我可以以某种方式将数据集发送给您?请阅读线程。dput命令产生的输出太大,无法从控制台复制,因此我将其写入此csv文件,希望它能工作。你能详细介绍一下你正在解决的问题吗?是科学问题还是现实问题。熵最大化的背后是什么?我试图给它添加一个不等式约束,但不断得到错误:
错误:nlopt\u add\u不等式\u mconstraint返回nlopt\u INVALID\u ARGS
。能不能也给我一个格式?约束是A*w-B>=0,其中A=
矩阵(runif(42,0.5,3),nrow=1,ncol=42)
,B是一个常数。您应该使用参数
eval\u g\u ineq
,它的函数在解
g(w)中