The goal package of combinatorics is to algorithm implementation of discrete optimization
You can install combinatorics from github with:
# install.packages("devtools")
devtools::install_github("mbich/combinatorics")
Постановка комбинаторной задачи естественным образом происходит при анализе ситуации, в которой имеются варианты различных мероприятий. Рассмотрим предельно простой пример. Пусть фирма предполагает купить станок. При этом возникают варианты мероприятий, представленные в следующей таблице:
№ Название мероприятия Описание мероприятия Затраты, тыс.руб. Прибыль в год, тыс.руб. 1 Станок - А Покупка станка марки «А» 350 117 2 Станок - Б Покупка станка марки «Б» 420 125 3 Аренда - А Аренда станка марки «А» 330 105 4 Оборудование к А Покупка дополнительного оборудования к станку марки «А» 77 83 5 Оборудование к Б Покупка дополнительного оборудования к станку марки «Б» 75 81Из приведенных вариантов мероприятий проистекает следующий набор логических связей между мероприятиями:
Общая сумма средств на покупку станка и оборудования не должна быть более, чем 700 т.руб. Задача в том, чтобы получить максимальную прибыль.
Загрузим пакет combinatorics
require(combinatorics)
#> Loading required package: combinatorics
#> Loading required package: rJava
Создадим новую модель и заполним её данными. В качестве целевого параметра укажем - "Прибыль", в качестве ограниченного ресурса - "Затраты" и зададим лимит ограниченного ресурса в размере 700.
model <- combinatorics.model(name="Пример")
model <- combinatorics.add.parameter(model, "Затраты", "тыс.руб.", 700)
model <- combinatorics.add.parameter(model, "Прибыль в год", "тыс.руб.")
model <- combinatorics.set.target(model, "Прибыль в год", TRUE)
model <- combinatorics.add.arrangement(model, "Станок - А", c(350.0, 117.0))
model <- combinatorics.add.arrangement(model, "Станок - Б", c(420.0, 125.0))
model <- combinatorics.add.arrangement(model, "Аренда - А", c(330.0, 105.0))
model <- combinatorics.add.arrangement(model, "Оборудование к А", c(77,83))
model <- combinatorics.add.arrangement(model, "Оборудование к Б", c(75,81))
model <- combinatorics.add.logicconnection(model, "[1,2,3]")
model <- combinatorics.add.logicconnection(model, "{1,2,3}")
model <- combinatorics.add.logicconnection(model, "(1)->(4)")
model <- combinatorics.add.logicconnection(model, "(3)->(4)")
model <- combinatorics.add.logicconnection(model, "(2)->(5)")
model
#>
#> Combinatorics model: Пример(Combinatorics)
#> INITIAL DATA
#> Затраты, тыс.руб. Прибыль в год, тыс.руб.
#> Станок - А 350 117
#> Станок - Б 420 125
#> Аренда - А 330 105
#> Оборудование к А 77 83
#> Оборудование к Б 75 81
#>
#> Target parameter: Прибыль в год
#> Limit parameter:
#> value
#> Затраты, тыс.руб. 700
#>
#> Logical connections:
#> [1,2,3]
#> {1,2,3}
#> (1)->(4)
#> (3)->(4)
#> (2)->(5)
Выполним расчёт на максимум
combinatorics.calculate(model)
#>
#> Model: Пример(Combinatorics)
#> Calculate from: maximun
#> Target parameter: Прибыль в год
#> Limit parameter:
#> value
#> Затраты 700
#> Optimal combination of arrangements!
#> Прибыль в год Затраты T/L Arrangements
#> 1 105 330 0.31818 3
#> 2 117 350 0.33429 1
#> 3 188 407 0.46192 3, 4
#> 4 200 427 0.46838 1, 4
#> 5 206 495 0.41616 2, 5
Увеличим значение ограниченного ресурса "Затраты"
до 900 тыс.руб. и повторно выполним расчёт на максимум
model <- combinatorics.set.limit(model, "Затраты", 900)
combinatorics.calculate(model)
#>
#> Model: Пример(Combinatorics)
#> Calculate from: maximun
#> Target parameter: Прибыль в год
#> Limit parameter:
#> value
#> Затраты 900
#> Optimal combination of arrangements!
#> Прибыль в год Затраты T/L Arrangements
#> 1 105 330 0.31818 3
#> 2 117 350 0.33429 1
#> 3 188 407 0.46192 3, 4
#> 4 200 427 0.46838 1, 4
#> 5 206 495 0.41616 2, 5
Для просмотра названий в списке оптимальных мероприятий нужно добавить параметр nameArrangment
out <- combinatorics.calculate(model)
print(out, nameArrangment=TRUE)
#>
#> Model: Пример(Combinatorics)
#> Calculate from: maximun
#> Target parameter: Прибыль в год
#> Limit parameter:
#> value
#> Затраты 900
#> Optimal combination of arrangements!
#> Прибыль в год Затраты T/L Arrangements
#> 1 105 330 0.31818 Аренда - А
#> 2 117 350 0.33429 Станок - А
#> 3 188 407 0.46192 Аренда - А, Оборудование к А
#> 4 200 427 0.46838 Станок - А, Оборудование к А
#> 5 206 495 0.41616 Станок - Б, Оборудование к Б
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.