r语言 - 计算离散二元函数最大值的快速方法



假设我有一个函数 f(x,y( 和两个向量 X 和 Y,我希望两个找到值 X 和 Y 的组合,给出最大值 f .

*该函数定义良好且有界。X 和 Y 各有大约 1000 个元素。

*该函数是连续的,但我只需要向量 X 和 Y 的最高点,即使最大值可能介于两者之间。

一种可能的实现是使用两个嵌套的 for 循环,如本例所示;其中每个 x 和 y 是 10 个元素向量,z=f(x,y(=x+y

max =-1 
for (x in 1:10){
   for (y in 2:20){
       z = x+y
       if (z>max){
           z=max
           x_sol = x
           y_sol = y
       }
   }
}
x_sol #10
y_sol #20

此代码显示 x 和 y 的所有可能组合的最大值为 (x,y(=(10,20(。这段代码很好;问题是,当 x 和 y 保存更多值时,z 更复杂,并且此过程必须运行数百次,速度很慢。我想知道是否有一种更优雅的方法可以替换嵌套循环。

如果你真的想使用这种蛮力方法来优化,矢量化通常是实现你想要做的事情的最快方法:

x <- 1:100
y <- 1:100
df <- expand.grid(x=x,y=y)
df$z <- df$x + df$y
max(df$z)

当然,此解决方案取决于您要使用的功能类型。

如果函数具有某些属性,则可以使用各种优化方法代替暴力搜索。如果函数是线性的,则可以使用线性规划技术,例如单纯形算法。如果函数是线性的,并且自变量必须是整数,这就是整数线性规划,存在许多算法。 如果它不仅是连续的而且是可微的,则可以使用梯度来查找局部最大值。

相关内容

  • 没有找到相关文章

最新更新