README.md

combinatorics

The goal package of combinatorics is to algorithm implementation of discrete optimization

Installation

You can install combinatorics from github with:

# install.packages("devtools")
devtools::install_github("mbich/combinatorics")

Example

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

№ Название мероприятия Описание мероприятия Затраты, тыс.руб. Прибыль в год, тыс.руб. 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  Станок - Б, Оборудование к Б


mbich/combinatorics documentation built on May 22, 2019, 12:42 p.m.