2010-09-21 24 views
9

This question llegó en el momento adecuado, ya que estoy luchando con la optimización también. Soy consciente de las diferentes rutinas de optimización "normales" en R, y conozco paquetes paralelos como nieve, nevadas, Rmpi ​​y similares. Sin embargo, no logré obtener una optimización en paralelo en mi computadora.optimización paralela en R

Algunos código de juguete para ilustrar:

f <- function(x) sum((x-1:length(x))^2) 
a <- 1:5 
optim(a,f) 
nlm(f,a) 

Lo que yo quiero hacer, es poner en paralelo la función Optim() (o la función de la NLM(), que hace básicamente lo mismo). Mi función real f() es mucho más complicada, y una ronda de optimización dura aproximadamente media hora. Si quiero ejecutar una simulación de 100 muestras, esa toma años. Me gustaría evitar escribir mi propio algoritmo de Newton-como para la computación en paralelo, por lo que espero que alguien me podría dar algunas pistas sobre el uso de la computación en paralelo para problemas de optimización complejos en R.


Creo que este el problema es de una naturaleza diferente a la de la pregunta relacionada. Mi solicitud está dirigida específicamente a la computación paralela, no una alternativa más rápida para optim.

+1

Si su función es mucho más complicada, ¿podría paralelizarla en lugar de 'optim'? –

+0

@Joshua: thx, de hecho hay un poco de paralelización posible. Sin embargo, me gustaría usar algún método de enjambre para la optimización también, ya que tengo que aumentar la velocidad al menos otras diez veces para que el modelo sea viable en simulaciones. –

Respuesta

3

para responder a mi propia pregunta:

Hay un paquete de desarrollo que parece prometedor. Tiene métodos de optimización de enjambre de partículas y se basa en el paquete Rmpi ​​para computación paralela. Se puede encontrar en Rforge:

http://www.rforge.net/ppso/index.html

Es todavía en fase beta que yo sepa, pero parece prometedor. Voy a echar un vistazo más adelante, informaré cuando sepa más. Aún así, dejo la pregunta abierta, así que si alguien más tiene otra opción ...

+0

Si está considerando PSO, ¿ha pensado en la evolución diferencial (a través del paquete DEoptim)? El soporte de cómputo paralelo está en la lista de tareas pendientes del paquete y no debería tomar más que unas pocas horas de trabajo (para mí, no usted :-). –

+0

@Joshua Thx por la propina, aún no sabía DEoptim. Parece prometedor, pero para el problema en el que estoy trabajando ahora, en realidad es bastante más lento que nlm(). Tengo 13 parámetros y no hay límites claros inferiores y superiores, así que tengo que configurarlos bastante grandes para evitar perder un parámetro ... –

+0

Probé la beta y parece que funciona. En mi problema, todavía no proporciona la misma mejora que la paralelización de la función en sí. Sin embargo, puedo ver que en otros casos esto realmente sería una herramienta útil. Estoy esperando la primera versión estable. –

0

Sprint podría ser de su interés. No sé nada al respecto, pero lo encontré recientemente.

+0

Thx para el puntero, pero ya lo sabía. Existen más marcos para computación paralela en R, según los protocolos que desee utilizar. Sin embargo, no pude encontrar una función de optimización no-beta que use el poder de la computación paralela. –