Я пытаюсь решить проблему оптимизации с помощью линейного программирования. У меня есть список продуктов, в которых я знаю содержание нескольких питательных веществ. Затем цель состоит в том, чтобы найти комбинацию продуктов, которая дает наиболее близкое решение определенной потребности в питательных веществах. В R я написал сценарий, который может решить эту проблему.
library(lpSolveAPI)
# Required nutrients
nitrogen = 1500
phosphate = 530
# Product properties (sample dataset, this will later be expanded with more products and nutrients)
products <- data.frame(
p1 = c(0.2, 0.1),
p2 = c(0.8, 0),
p3 = c(0.15, 0.2),
p4 = c(0.1, 0.25),
p5 = c(0, 0.4)
)
# Create model
model <- make.lp(nrow = 2, ncol = ncol(products))
# Add the products as decisions
for (p in 1:ncol(products)) {
set.column(model, p, products[, p])
}
# Set the required amount as constraint
set.constr.value(model, rhs = c(nitrogen, phosphate))
set.constr.type(model, types = c(2,2))
# Set the objective function
set.objfn(model, rep(1, ncol(products)))
lp.control(model, sense='min')
solve(model)
get.objective(model)
Однако теперь я хочу добавить ограничение, согласно которому можно использовать не более определенного количества (например, 2) продуктов. Я думал о добавлении двоичного ограничения, но не могу понять, как это реализовать. Единственный вариант, который мне удалось обнаружить, - это установить для переменной решения двоичное значение, но это не дает возможности использовать несколько единиц продукта.
Итак, как я могу добавить ограничение, чтобы не использовать более 2 или 3 продуктов?
U(j)
большую константу? 23.04.2020