2008-12-11 37 views
7

¿Alguien sabe de algún paquete de optimización para R (similar a NUOPT para S +)?Paquetes de optimización para R

+8

downvote para 'esta pregunta no muestra ningún esfuerzo de investigación' – Spacedman

+1

"Podría haber hecho una pregunta larga sobre los detalles de lo que necesitaba y cómo había investigado linprog y lo había encontrado deficiente. O podría hacer una pregunta muy simple. Estoy de acuerdo con esa decisión. Por cierto, aunque no estoy de acuerdo con tus razones para vencerme, al menos tuviste la decencia de dar una razón. Gracias por tu cortesia. – wcm

+2

Si nos hubiera dicho dónde había mirado, eso habría mostrado algún esfuerzo de investigación, incluso un simple "busqué en Google o Cran para 'optimización'" hubiera sido útil. No deberíamos tener que apuntar a las personas a las vistas de tareas de Cran ... Y si hubieras encontrado que linprog quería, ¿por qué aceptas la respuesta que dice "He usado linprog"? – Spacedman

Respuesta

2

He usado linprog para problemas lineales en el pasado.

+0

+1 y muchas gracias. No he tocado ningún material de optimización desde mis días de TurboPascal. Había muchos otros paquetes de optimización listados en la página de paquetes (http://cran.r-project.org/web/packages/). – wcm

5

Linprog, mencionado por Galwegian, se centra en la programación lineal a través del algoritmo simplex. Además, puede estar interesado en fPortfolio si está optimizando su cartera.

14

R tiene muchos, muchos paquetes para la optimización; verifique la vista de Tarea CRAN sobre Optimización: http://cran.r-project.org/web/views/Optimization.html. Por supuesto, para los programas no lineales, existe optim(), que es estándar e incluye el algoritmo de Broyden-Fletcher-Goldfarb-Shanno y Nelder-Mead. Es un buen comienzo.

4

Trate lpSolve con R.

Un ejemplo sencillo:

# 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 
5

también debe tratar el paquete Rglpk resolver problemas de PL con GLPK (GNU Linear Programming Kit).

Un ejemplo:

## 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) 

salida R:.
(Tenga en cuenta que $status un número entero con información de estado acerca de la solución volvió Si el canonicalize_status parámetro de control se establece (el valor predeterminado), entonces se volverá 0 para la solución óptima que se encuentra, y no es cero de lo contrario. Si el parámetro de control se establece en FALSO, devolverá los códigos de estado GLPK).

$optimum 
[1] 76.66667 

$solution 
[1] 0.000000 6.666667 16.666667 

$status 
[1] 0 
Cuestiones relacionadas