Creo que hay varias maneras de abordar tus problemas.
En primer lugar, mencionaste que realizas varias optimizaciones. Una solución que me viene a la mente en lugar de acelerar la optimización en sí es realizar las optimizaciones de forma paralela, por lo que podrías mirar la Caja de herramientas de Cómputo Paralelo de Mathworks.
En segundo lugar, proporcionar al optimizador una buena suposición inicial reduce el tiempo de ejecución, en qué medida depende del problema. En este caso, los pesos óptimos del día anterior pueden ser una buena suposición.
En tercer lugar, si deseas acelerar la optimización, básicamente tienes dos enfoques.
O bien puedes usar el mismo método pero con un paquete que esté implementado de una manera más óptima, y podrías mirar paquetes como el de NAG.
De lo contrario, crees que hay otro método que sería mejor para encontrar una solución. He visto que las personas utilizan la Optimización cónica para este tipo de problemas y sé que MOSEK tiene un paquete de MATLAB para ese método. También puedes mirar su documento técnico para más detalles sobre este enfoque.
Para más teoría sobre optimizaciones numéricas como la programación cuadrática, podrías echar un vistazo a Optimización Numérica de Nocedal y Wright.
0 votos
¿Cuánto tiempo se tarda ahora en optimizar? Para el rebalanceo diario de media-varianza, supongo que no necesitarías más que el optimizador estándar, incluso con 100 activos. En resumen, define mejor tu problema (el tamaño de tu conjunto de restricciones y el método de optimización que utilizas, ...), tal vez podamos ayudarte desde ahí ya.
0 votos
La optimización en sí misma es muy simple, simplemente una optimización estándar de media-varianza con restricciones estándar de no negatividad e inversión total. El único problema es que necesito hacer esto diariamente para, digamos, 30 carteras diferentes cada una con 100 activos. Por lo que podría llevar horas en total. He estado usando quadprog en Matlab con el algoritmo interior-point-convex. Es muy posible que no haya nada que pueda hacer para acelerar esto, pero pensé en probar suerte preguntando aquí.
1 votos
Entiendo que quieres hacer una prueba retrospectiva que revise los últimos n años utilizando 30 estrategias diferentes. Es posible que desees considerar el procesamiento en paralelo. Eso tiende a funcionar bien en este tipo de situaciones.
0 votos
Olvidé mencionar que ya estaba utilizando el procesamiento en paralelo. Ejecuté el perfilador en mi código y quadprog es el que más tiempo está tomando simplemente porque se llama tantas veces. Así que cualquier cosa para acelerarlo será muy valiosa.
0 votos
¿Cuánto tiempo tarda una sola ejecución de varianza media en Matlab en 100 activos?
0 votos
Podrías considerar concentrarte en los cálculos de la función objetivo. Matlab es bueno para vectorizar cosas, pero a veces un bucle ineficiente se esconde en algún lugar. Tu problema es lo suficientemente fácil como para ponerlo en C, solo para asegurarte.