快速评估离散双变量函数的最大值

时间:2017-04-05 23:48:17

标签: r optimization

假设我有一个函数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更复杂,并且此过程必须运行数百次,这很慢。 我想知道是否有一个更优雅的方法来取代嵌套循环。

2 个答案:

答案 0 :(得分:1)

如果您真的想使用这种强力方法进行优化,那么矢量化通常是实现您想要做的事情的最快方法:

x <- 1:100
y <- 1:100

df <- expand.grid(x=x,y=y)

df$z <- df$x + df$y

max(df$z)

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

答案 1 :(得分:0)

如果函数具有某些属性,则可以使用各种优化方法而不是强力搜索。如果函数是线性的,则可以使用线性编程技术,例如单纯形算法。如果函数是线性的并且自变量必须是整数,那就是整数线性编程,其中存在许多算法。如果它不仅是连续但可微分的,您可以使用渐变来找到局部最大值。