Как максимизировать продажи, используя lpSolve с ограничениями - PullRequest
0 голосов
/ 09 мая 2019

Допустим, я пытаюсь максимизировать продажи и у меня есть две переменные, сумма, потраченная на два типа рекламы, ads и ads2 в долларах, которые влияют на sales.

ПослеПри расчете линейной модели влияния продаж я извлекаю коэффициенты, чтобы получить формулу для прогнозируемых продаж.Затем я пытаюсь максимизировать прогнозируемые продажи, оптимизируя количество объявлений.

Проблема в том, что должен быть бюджет для типов рекламы.Без этого ограничения весь рекламный бюджет был бы потрачен на ads, а не на ads2.

. Это приводит к тому, что объем продаж составляет около 140 долларов, но небольшая часть продаж может быть принесена в жертву, чтобы выполнить это ограничение..

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

library(tibble)
library(dplyr)
library(lpSolve)

data <- tribble(~"ads", ~"ads2", ~"sales",
                 100,    120,      100,
                 50,     90,       40,
                 20,     10,       10,
                 150,    110,      130,
                 190,    90,       160,
                 180,    300,     250,
                 110,    200,      100,
                 80,     70,       20,
                 50,     20,       10,
                 30,     100,      200,
                 100,    190,      40,
                 100,    200,     100,
                 40,     90,       80,
                 60,     80,       60,
                 200,    20,       100,
                 20,     200,      80,
                 30,     10,       30,
                 40,     90,       100,
                 80,     20,       80,
                 200,    150,      100,
                 80,     80,       40,
                 100,    10,       300,
                 150,    100,      60,
                 10,     100,      10
)

forecast <- lm(sales ~ ads + ads2, data = data)

coef <- forecast$coefficients

obj <- coef[2:3] # coefficients
const <- matrix(c(1, 1,  # ads
                  1, 1), # ads2
                nrow = 2)

min_items <- 250 # minimum total budget
max_items <- 300 # maximum total budget

rhs <- c(min_items, max_items)

direction  <- c(">", "<")

optimum <-  lp(direction = "max", obj, const, direction,  rhs)

optimum$solution # budget spent on ads and ads2
optimum$objval + coef[1] # forecasted sales by using this budget

optimum$solution не должен быть равен 0 ни для одного из типов объявлений, этодолжен вернуть, например, 50 100 вместо 300 0 или 0 300.

1 Ответ

0 голосов
/ 10 мая 2019

Проблема была решена путем добавления нового ограничения max_ads и установки для него максимального значения нужной вам рекламы. Также матрицу ограничений пришлось изменить, установив ноль в соответствующее ограничение для ads2. Также знак для направления должен был быть изменен.

const <- matrix(c(1, 1,  # ads
                  0, 1), # ads2
                nrow = 2)

max_ads <- 100 # maximum ads budget
max_items <- 300 # maximum total budget

rhs <- c(max_ads, max_items)

direction  <- c("<", "<")
...