Я пытаюсь максимизировать относительную энтропию, которая является нелинейной оптимизацией с линейными ограничениями.
seq(1,10)/sum(seq(1,10)
- это предварительная дискретная вероятность 10 событий.
library(NlcOptim)
objectfunc <- function(x){sum(x*log(x))-sum(x*log(seq(1,10)/sum(seq(1,10)))}
poste2 <- solnl(rep(0.1,10),objectfunc,Aeq = matrix(rep(1, 10), nrow=1),Beq = 1,lb=rep(0,10),ub=rep(1,10))
Оказывается, быть
Error in if (f < 0) { : missing value where TRUE/FALSE needed
In addition: Warning message:
In log(x) : NaNs produced
Тем не менее, небольшое изменение в функции объекта работает
library(NlcOptim)
objectfunc <- function(x){sum(x*log(x))}
poste2 <- solnl(rep(0.1,10),objectfunc,Aeq = matrix(rep(1, 10), nrow=1),Beq = 1,lb=rep(0,10),ub=rep(1,10))
Я просто не могу понять, почему есть ошибка. Буду благодарен за любой совет!