1

我之前问过类似的问题,但我的问题并不清楚。这是另一个尝试。

假设您有以下函数,它接受两个输入,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)
}

对于 [0, 100] 范围内 a 的所有可能值,我想找到使上述函数的输出最大化的 b 值,但限制 b 也必须是 [0, 100] 范围内的值]。

换句话说,我想将 b 绘制为 a 的函数,这样对于给定的 a 值,b 最大化上述函数的输出值。

您将如何为此编写代码?

4

1 回答 1

3

首先,我会按照这个顺序将函数重写为两个参数的函数,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)

在此处输入图像描述

于 2020-03-09T07:15:27.643 回答