r - 最大化向量的列乘法
问题描述
给定矩阵M
M <- structure(c(0.0700078597292304, -0.0136474068276584, 0.328056303784251,
-0.459178164601326, -0.586918574757874, 0.791669885627925, -0.877064344473183,
0.882802148349583, 0.421708580106497, -0.110332333017141, -0.287893873639405,
0.00899101700633764, -0.705056414008141, -0.897502972278744,
0.0145046846009791, -0.409322344232351, 0.622156938537955, 0.941861041355878,
0.622148288879544, 0.741163543891162, 0.695223031565547, 0.514508185908198,
-0.297026146668941, -0.930878807790577, 0.72842172626406, 0.899442498106509,
-0.0246643857099116, 0.993599037639797, 0.150956830941141, 0.341335460077971
), .Dim = c(10L, 3L))
# [,1] [,2] [,3]
# [1,] 0.07000786 -0.287893874 0.69522303
# [2,] -0.01364741 0.008991017 0.51450819
# [3,] 0.32805630 -0.705056414 -0.29702615
# [4,] -0.45917816 -0.897502972 -0.93087881
# [5,] -0.58691857 0.014504685 0.72842173
# [6,] 0.79166989 -0.409322344 0.89944250
# [7,] -0.87706434 0.622156939 -0.02466439
# [8,] 0.88280215 0.941861041 0.99359904
# [9,] 0.42170858 0.622148289 0.15095683
# [10,] -0.11033233 0.741163544 0.34133546
如何找到一个向量w
(单位间隔中的每个元素w
),使 和 的列乘法之w
和M
(以 miximize sum(M %*% w)
)最大化?
解决方案
只需定义您的目标函数:
fn <- function(w) sum(M %*% w)
然后优化:
optim(rep(0, 3), fn, lower = 0, upper = 1, method = "L-BFGS-B", control = list(fnscale = -1))
#$par
#[1] 1 1 1
#
#$value
#[1] 4.169071
#
#$counts
#function gradient
# 4 4
#
#$convergence
#[1] 0
#
#$message
#[1] "CONVERGENCE: NORM OF PROJECTED GRADIENT <= PGTOL"
推荐阅读
- .net - 'MsgBox' 未声明。由于其保护级别,它可能无法访问
- asp.net - MVC Core 2.0 中的控制器无法识别会话值。“可空对象必须有一个值。”
- c# - 如何防止 Asp.Net Core 从运行时存储引用依赖项
- javascript - 在用户刷新页面之前更改 url 搜索
- vba - 在 Excel 中对宏列表进行排序
- php - Calling a python script from PHP, facing issue related to writing, reading of file when open on browser
- python - Cannot use python-geoip with AWS Lambda
- sql - 传递引用值sql加参数
- c# - ServiceStack FallbackRoute 因升级的 ServiceStack 版本而失败
- jquery - 如何通过jquery远程获取具有相同类名的每个元素