knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.path = "README-" )
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)
Создадим новую модель и заполним её данными. В качестве целевого параметра укажем - "Прибыль", в качестве ограниченного ресурса - "Затраты" и зададим лимит ограниченного ресурса в размере 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)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.