Минимум с условиями x [1] + x [2] = 1 [r] optim - PullRequest
2 голосов
/ 09 мая 2020
#attempt
optim(c(0.1,0.1),
      function(x){x[1]^2*0.05126875+2*((x[1]*x[2])*-0.00809375)+x[2]^2*0.03376875})

Как создать функцию, которая генерирует значения от 0,01 до 1 для x [1] и x [2] и возвращает мне самый низкий результат с условием x [1] + x [ 2] = 1?

1 Ответ

2 голосов
/ 09 мая 2020

Если у вас есть ограничение и вы все еще хотите использовать optim, вы можете переформулировать задачу оптимизации с ограничениями, например,

optim(0.1, 
      function(x) x^2*0.05126875+2*((x*(1-x))*-0.00809375)+(1-x)^2*0.03376875, 
      lower = 0,
      upper = 1,
      method = "L-BFGS-B")

, что дает

$par
[1] 0.4135589

$value
[1] 0.01645614

$counts
function gradient
       4        4

$convergence
[1] 0

$message
[1] "CONVERGENCE: NORM OF PROJECTED GRADIENT <= PGTOL"

Для вашего случая , решением будет

x1 = 0.4135589
x2 = 1-x1
x = c(x1,x2)

> x
[1] 0.4135589 0.5864411
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...