#r #constraints #linear-programming
#r #ограничения #линейное программирование
Вопрос:
u <- runif(8,min=1,max=7)
prob <- runif(8)
prob <- prob/sum(prob)
U <- prob%*%u
Выше U представляет собой взвешенную сумму из 8 значений u (все от 1 до 7). Я хотел бы написать простой lp (), который поддерживает решение для весов, где все веса ненулевые. Это будут начальные значения для весов кандидатов.
Пока у меня есть следующее (которое просто находит веса, большинство из которых равно 0, поскольку это самое простое решение):
obj.fun <- rep(1,8)
constr <- rbind(q,rep(1,8))
constr.dir <- c("==","==")
rhs <- c(Q,1)
p.start <- lp("max",obj.fun,constr,constr.dir,rhs)$sol
Как я могу добавить другое ограничение, согласно которому я хочу, чтобы все веса были ненулевыми?
Комментарии:
1. Добавить нижнюю границу для каждого веса?
2. Да, это именно то, чего я хочу достичь, но я не смог заставить код работать. Я добавил «>» в constr.dir и 0s в constr, но это не работает…
3. Хотя lpsolve поддерживает границы, этот R-пакет этого не делает. Это означает, что вам нужно указать
x(i) >= lo
как явное ограничение. Итак, вам нужно добавить идентификационную матрицу вconstr
4. Ага, хорошо! Я попробую! Спасибо за вашу помощь 🙂
5. @ErwinKalvelagen это близко к тому, что мне нужно? Пока не работает…
obj.fun <- rep(1,8)
<br/>constr <- rbind(q,rep(1,8),rep(1,8))
<br/>constr.dir <- c("==","==",">=")
<br/>rhs <- c(Q,1,0)
<br/> <br/>p.start <- lp("max",obj.fun,constr,constr.dir,rhs)$sol