有没有人知道R的任何优化包(类似于S +的NUOPT)?
答案 0 :(得分:16)
R有许多优化包;检查优化的CRAN任务视图:http://cran.r-project.org/web/views/Optimization.html。当然,对于非线性程序,有optim()
,它是标准的,包括Broyden-Fletcher-Goldfarb-Shanno算法和Nelder-Mead。这是一个很好的开始。
答案 1 :(得分:6)
你还应该尝试用Rglpk解决LP问题GLPK (GNU Linear Programming Kit)。
一个例子:
## Simple linear program.
## maximize: 2 x_1 + 4 x_2 + 3 x_3
## subject to: 3 x_1 + 4 x_2 + 2 x_3 <= 60
## 2 x_1 + x_2 + x_3 <= 40
## x_1 + 3 x_2 + 2 x_3 <= 80
## x_1, x_2, x_3 are non-negative real numbers
obj <- c(2, 4, 3)
mat <- matrix(c(3, 2, 1, 4, 1, 3, 2, 2, 2), nrow = 3)
dir <- c("<=", "<=", "<=")
rhs <- c(60, 40, 80)
max <- TRUE
Rglpk_solve_LP(obj, mat, dir, rhs, max = max)
R输出:
(注意$status
一个整数,其中包含有关解决方案的状态信息。如果设置了控制参数canonicalize_status(默认值),那么对于找到的最优解,它将返回0,否则返回非零。参数设置为FALSE它将返回GLPK状态代码)。
$optimum
[1] 76.66667
$solution
[1] 0.000000 6.666667 16.666667
$status
[1] 0
答案 2 :(得分:5)
Galwegian提到的Linprog专注于通过单纯形算法进行线性编程。此外,如果您正在进行投资组合优化,您可能会对fPortfolio感兴趣。
答案 3 :(得分:4)
使用R.
尝试lpSolve一个简单的例子:
# Maximize
# x1 + 9 x2 + x3
# Subject to:
# x1 + 2 x2 + 3 x3 <= 9
# 3 x1 + 2 x2 + 2 x3 <= 15
f.obj <- c(1, 9, 3)
f.con <- matrix(c(1, 2, 3, 3, 2, 2), nrow = 2, byrow = TRUE)
f.dir <- c("<=", "<=")
f.rhs <- c(9, 15)
lp("max", f.obj, f.con, f.dir, f.rhs)
lp("max", f.obj, f.con, f.dir, f.rhs)$solution
答案 4 :(得分:3)
我过去曾使用linprog来解决线性问题。
答案 5 :(得分:1)
我喜欢Gurobi。许可证的价格非常昂贵,但可以通过许多大学获得。见http://www.gurobi.com/products/modeling-languages/r
答案 6 :(得分:0)
看看NLoptr 软件包。它有大量的文档,其中包含示例和大量算法供您选择,具体取决于您要解决的问题(例如线性,非线性,约束)