knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  fig.path = "README-"
)

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)

Создадим новую модель и заполним её данными. В качестве целевого параметра укажем - "Прибыль", в качестве ограниченного ресурса - "Затраты" и зададим лимит ограниченного ресурса в размере 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.calculate(model)

Увеличим значение ограниченного ресурса "Затраты" до 900 тыс.руб. и повторно выполним расчёт на максимум

model <- combinatorics.set.limit(model, "Затраты", 900)
combinatorics.calculate(model)

Для просмотра названий в списке оптимальных мероприятий нужно добавить параметр nameArrangment

out <- combinatorics.calculate(model) 
print(out, nameArrangment=TRUE)


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