我之前也问过类似的问题,但不清楚。这是另一种尝试。
假设您具有下面的函数,该函数需要两个输入a和b。
inputs <- c(a, b)
y <- function(inputs) {
a <- inputs[1]
b <- inputs[2]
output <- a/100 * (20 * b)^0.8 + (100 - a) / 100 * (10 * (100 - b))^0.8
return(output)
}
对于a在[0,100]范围内的所有可能值,我想找到使上述函数的输出最大化的b的值,并限制b也必须是在[0,100]范围内的值]。
换句话说,我想将b绘制为a的函数,以使b对于给定的a值使上述函数的输出值最大化。
您将如何为此编写代码?
首先,我会重写功能的两个参数的函数,这个顺序,b
和a
。这是因为R基函数optimize
在其第一个参数上进行了优化。从文档中:
该函数
optimize
在从下到上的间隔中搜索f
相对于其第一个参数的最小值或最大值。
默认值是最小化,以最大化将各自的参数设置为TRUE
。
然后,为了最大化a
间隔中的值,请[0, 100]
对一系列a
值运行优化函数。结果存储在列表中,强制到data.frame并绘制。
y <- function(b, a) {
output <- a/100 * (20 * b)^0.8 + (100 - a) / 100 * (10 * (100 - b))^0.8
output
}
a <- seq(0, 100, by = 0.1)
max_list <- lapply(a, function(.a){
optimize(y, interval = c(0, 100), .a, maximum = TRUE, tol = .Machine$double.eps^0.5)
})
max_data <- do.call(rbind.data.frame, max_list)
row.names(max_data) <- NULL
head(max_data)
# maximum objective
#1 9.302363e-09 251.1886
#2 9.302363e-09 250.9375
#3 9.302363e-09 250.6863
#4 9.302363e-09 250.4351
#5 9.302363e-09 250.1839
#6 9.302363e-09 249.9327
plot(objective ~ maxima, max_data)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句