Почему в этом нелинейном программировании оптимизации есть ошибка? / проблема максимизации энтропии - PullRequest
1 голос
/ 11 марта 2020

Я пытаюсь максимизировать относительную энтропию, которая является нелинейной оптимизацией с линейными ограничениями.

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))

Я просто не могу понять, почему есть ошибка. Буду благодарен за любой совет!

...