Использование lpsolve для определения ограничения для пропорции по подмножеству переменных решения

Я делаю решение LP, но застрял в определении ограничений.

Предположим, у меня есть 9 переменных решения, {x1,x2...n}

Предположим также, что у меня есть ограничение, которое включает подмножество всех переменных решения:

x1 / (x1+x2+x3) = 40/100

Тогда как я могу написать это для lpsolve, чтобы использовать это?

Я пытался:

add.constraint(model, c(1,0,0,0,0,0,0,0,0), "=", c(.4,.4,.4,0,0,0,0,0,0))

а также

add.constraint(model, c(0.4,0,0,0,0,0,0,0,0), "=", c(1,1,1,0,0,0,0,0,0))

Заранее спасибо.


person JasTonAChair    schedule 21.09.2020    source источник


Ответы (1)


Предполагая, что вы имели в виду (x1 + x2 + x3), мы имеем

x1 / (x1+x2+x3) = 40/100

эквивалентно

x1 = (40/100) (x1+x2+x3)

что эквивалентно

(1-40/100)x1 - (40/100)x2 - (40/100)x3 = 0

Чтобы получить полную задачу, предположите, что цель ones ниже, а также добавьте 9 ограничений x [i] ‹= 1, i = 1, ..., 9, и в этом случае у нас есть следующее для задачи максимизации:

library(lpSolve)

ones <- rep(1, 9)
a <- c(1-40/100, -40/100, -40/100, 0, 0, 0, 0, 0, 0)
A <- rbind(a, diag(9))
lp("max", ones, A, c("=", rep("<=", 9)), c(0, ones))
person G. Grothendieck    schedule 21.09.2020
comment
Да (x1 + x2 + x3) было то, что я имел в виду, я обновлю его для справки - person JasTonAChair; 21.09.2020