全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 LATEX论坛
1786 2
2016-12-27

OMPR (Optimization Modelling Package) is a DSL to model and solve Mixed Integer Linear Programs. It is inspired by the excellent Jump project in Julia.

Here are some problems you could solve with this package:

  • What is the cost minimal way to visit a set of clients and return home afterwards?
  • What is the optimal conference time table subject to certain constraints (e.g. availability of a projector)?
  • Sudokus

The Wikipedia article gives a good starting point if you would like to learn more about the topic.

This is a beta version. Currently working towards a first stable version for CRAN. At the moment not recommended for production systems / important analyses. Although most obvious bugs should be gone. Happy to get bug reports or feedback.

Supported problem classesObjective types
  • Linear

Constraint types
  • Linear

Variable types
  • Continuous
  • Integer-valued


Install

To install the current development version use devtools:

devtools::install_github("dirkschumacher/ompr")devtools::install_github("dirkschumacher/ompr.roi")

Available solver bindings[td]

Package

Description

Build Linux

Build Windows

Test coverage

ompr.roiBindings to ROI (GLPK, Symphony, CPLEX etc.)

A simple example:
复制代码



API

These functions currently form the public API. More detailed docs can be found in the package function docs or on the website

DSL
Solver

Solvers are in different packages. ompr.ROI uses the ROI package which offers support for all kinds of solvers.

  • with_ROI(solver = "glpk") solve the model with GLPK. Install ROI.plugin.glpk
  • with_ROI(solver = "symphony") solve the model with Symphony. Install ROI.plugin.symphony
  • with_ROI(solver = "cplex") solve the model with CPLEX. Install ROI.plugin.cplex
  • … See the ROI package for more plugins.


Further Examples

Please take a look at the docs for bigger examples.

Knapsacklibrary(dplyr)library(ROI)library(ROI.plugin.glpk)library(ompr)library(ompr.roi)max_capacity <- 5n <- 10weights <- runif(n, max = max_capacity)MIPModel() %>%  add_variable(x, i = 1:n, type = "binary") %>%  set_objective(sum_expr(weights * x, i = 1:n), "max") %>%  add_constraint(sum_expr(weights * x, i = 1:n) <= max_capacity) %>%  solve_model(with_ROI(solver = "glpk")) %>%   get_solution(x) %>%   filter(value > 0)

Bin Packing

An example of a more difficult model solved by symphony.

library(dplyr)library(ROI)library(ROI.plugin.symphony)library(ompr)library(ompr.roi)max_bins <- 10bin_size <- 3n <- 10weights <- runif(n, max = bin_size)MIPModel() %>%  add_variable(y, i = 1:max_bins, type = "binary") %>%  add_variable(x[i, j], i = 1:max_bins, j = 1:n, type = "binary") %>%  set_objective(sum_expr(y, i = 1:max_bins), "min") %>%  add_constraint(sum_expr(weights[j] * x[i, j], j = 1:n) <= y * bin_size, i = 1:max_bins) %>%  add_constraint(sum_expr(x[i, j], i = 1:max_bins) == 1, j = 1:n) %>%  solve_model(with_ROI(solver = "symphony", verbosity = 1)) %>%   get_solution(x[i, j]) %>%  filter(value > 0) %>%  arrange(i)


License

Currently GPL.


Contributing

As long as the package is under initial development please post an issue first before sending a PR.

Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms




二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2016-12-31 14:14:59
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-1-5 15:30:44
thanks for sharing
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群