Как найти список из n минимальных значений целевой функции из матрицы? - PullRequest
0 голосов
/ 21 июня 2020

Предположим, что у нас есть следующий код:

x1<- runif(40, min = -4.5, max = 4.5)                               # Create x vector 
y1 <- runif(40, min = -4.5, max = 4.5)                                 # Create y vector 

custom_fun <- function(x, y) {        # Create custom function in R ; here i used the beale function 
  z <- (1.5 - x + x*y)^2+(2.25 - x + x*y^2)^2+(2.625 - x + x*y^3)^2
  return(z)
}

m <- outer(x1, y1, custom_fun)

print(m)

Мой вопрос в том, как получить список из n минимальных значений матрицы m, мне также нужно получить соответствующие позиции в векторах x1 и y1 (что означает пары из x1 и y1, которые позволяют нам получить эти минимальные значения матрицы m).

Например, если выполнение предыдущего кода дает:

#m
           [,1]      [,2]      [,3]       [,4]      [,5]       [,6]
[1,]  508.64893 11.245614  7887.387  3.4916340  1.517622  3232.9724
[2,]  727.76775 19.629751 17649.225 46.0714031 63.427516  6708.3153
[3,] 2227.94868  7.948157 39784.638  0.3509784  6.073413 15901.8932
[4,]   56.06329 13.568900   432.400 11.4225081 10.455426   205.5854
[5,] 1723.86138 22.552465 39256.366 67.8455312 99.733390 15069.6231
[6,] 1328.44959 21.510099 30755.388 59.7772840 86.142180 11775.4025

, и мне нужны, например, минимальные значения p матрицы, пусть p = 3, тогда я получу значения:

0,3509784 -1,517622- 3,4916340 (эти значения близки к оптимуму функции beale ).

Затем мне нужен способ получить пары (x, y), которые позволят нам получить эти минимальные значения (из текущего исключения!):

custom_fun(a1,b1)=0.3509784
custom_fun(a2,b2)=1.517622
custom_fun(a3,b3)=3.4916340

так как Могу ли я получить (a1, b1) из текущих векторов x1 и y1 ??? Мне также нужно будет получить пары (a2, b2) и (a3, b3). .

Другой пример, предположим, что текущее исключение дает следующее:

[1] "x4 list :"
[1]  2.0695110  3.7844526 -0.6914949
[1] "y4 list :"
[1] -4.079663  1.771313 -4.206778
[1] "matrix of objective function : denoted m "
          [,1]       [,2]      [,3]
[1,] 20870.387 199.495204 25007.158
[2,] 70719.411 521.366216 84647.031
[3,]  2625.535   1.807467  3115.075

с p = 2; значения 1.807467 и 521.366216 хороши при поиске минимума, но вопрос в том, как получить их соответствующие координаты (x, y) из (x4, y4) возможностей.

I wi sh мой вопрос ясен .

Большое спасибо за помощь!

1 Ответ

1 голос
/ 21 июня 2020

Думаю, может помочь что-то вроде этого:

p <- 3
#Get p minimum value
p_minimum_value <- sort(m)[1:p]
#Get their row and column position
which(relist(m %in% p_minimum_value, m), arr.ind = TRUE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...