Cómo utilizar el procesamiento paralelo en Global Optimization Toolbox
Procesadores multinúcleo
Si tiene un procesador multinúcleo, puede aumentar la velocidad de procesamiento usando el procesamiento paralelo. Puede establecer un pool paralelo de varios workers con una licencia de Parallel Computing Toolbox™. Para obtener una descripción del software Parallel Computing Toolbox, consulte Comience con Parallel Computing Toolbox (Parallel Computing Toolbox).
Suponga que tiene un procesador de dos núcleos y quiere usar la computación paralela. Introduzca este código en la línea de comandos.
parpool
MATLAB® inicia un pool de workers usando el procesador multinúcleo. Si establece previamente un perfil de cluster no predeterminado, puede aplicar la computación multinúcleo (local) introduciendo este código.
parpool('local')Nota
En función de sus preferencias, MATLAB puede iniciar un pool paralelo de forma automática. Para habilitar esta función, seleccione Parallel > Parallel Preferences en el grupo Environment de la pestaña Home y luego seleccione Automatically create a parallel pool.
Configure su solucionador para utilizar procesamiento paralelo.
| Solver | Configuración de la línea de comandos |
|---|---|
ga |
|
gamultiobj |
|
MultiStart |
o
|
paretosearch |
|
particleswarm |
|
patternsearch |
|
surrogateopt |
|
A partir de R2019a, cuando se configura la opción UseParallel en true, patternsearch anula internamente la configuración UseCompletePoll en true para que la función sondee en paralelo.
Cuando ejecuta un solver aplicable con options, los solvers aplicables utilizan de forma automática la computación paralela.
Para detener las optimizaciones de computación en paralelo, establezca UseParallel como false. Para detener toda la computación paralela, introduzca este código.
delete(gcp)
Nota
La documentación recomienda no utilizar parfor o parfeval cuando se llame a Simulink®. Consulte Using sim Function Within parfor (Simulink). Por lo tanto, es posible que encuentre problemas al optimizar una simulación de Simulink en paralelo usando una funcionalidad en paralelo integrada del solver. Para ver un ejemplo que muestra cómo optimizar un modelo Simulink con varios solucionadores Global Optimization Toolbox, consulte Optimize Simulink Model in Parallel.
Red de procesadores
Si tiene múltiples procesadores en una red, utilice las funciones de Parallel Computing Toolbox y el software Parallel Server™ de MATLAB para establecer la computación paralela.
Asegúrese de que su sistema esté configurado correctamente para la computación paralela. Póngase en contacto con su administrador de sistemas o consulte la documentación de Parallel Computing Toolbox.
Lleve a cabo una comprobación básica introduciendo este código, donde
profes su perfil de cluster.parpool(prof)
Los workers deben poder acceder a su archivo de función objetivo y, si es aplicable, su archivo de función de restricción. Complete uno de los pasos siguientes para asegurar el acceso:
Distribuya los archivos a los workers usando el argumento
parpool(Parallel Computing Toolbox)AttachedFiles. En este ejemplo,objfun.mes su archivo de función objetivo yconstrfun.mes su archivo de función de restricción no lineal.parpool('AttachedFiles',{'objfun.m','constrfun.m'});
Los workers acceden a sus propias copias de los archivos.
Proporcione una ruta de archivos de red a sus archivos de función objetivo o de restricción.
pctRunOnAll('addpath network_file_path')Los workers acceden a los archivos de función a través de la red.
Compruebe si un archivo está en la ruta de cada worker.
Si cualquier worker no cuenta con una ruta al archivo, emite el mensajepctRunOnAll('which filename')filename not found.
Configure su solucionador para utilizar procesamiento paralelo.
| Solver | Configuración de la línea de comandos |
|---|---|
ga |
|
gamultiobj |
|
MultiStart |
o
|
paretosearch |
|
particleswarm |
|
patternsearch |
|
surrogateopt |
|
A partir de R2019a, cuando se configura la opción UseParallel en true, patternsearch anula internamente la configuración UseCompletePoll en true para que la función sondee en paralelo.
Una vez que haya establecido su entorno de computación paralela, los solvers aplicables utilizan automáticamente la computación paralela en el momento en el que los llama con options.
Para detener las optimizaciones de computación en paralelo, establezca UseParallel como false. Para detener toda la computación paralela, introduzca este código.
delete(gcp)
Nota
La documentación recomienda no utilizar parfor o parfeval cuando se llame a Simulink. Consulte Using sim Function Within parfor (Simulink). Por lo tanto, es posible que encuentre problemas al optimizar una simulación de Simulink en paralelo usando una funcionalidad en paralelo integrada del solver. Para ver un ejemplo que muestra cómo optimizar un modelo Simulink con varios solucionadores Global Optimization Toolbox, consulte Optimize Simulink Model in Parallel.
Funciones de búsqueda paralelas o funciones híbridas
Para ejecutar una función de búsqueda patternsearch en paralelo, o una función híbrida para ga o simulannealbnd en paralelo, haga lo siguiente.
Configure el procesamiento paralelo como se describe en Procesadores multinúcleo o Red de procesadores.
Asegúrese de que su función de búsqueda o función híbrida tenga las condiciones descritas en estas secciones:
Función de búsqueda patternsearch
patternsearch utiliza una función de búsqueda paralela en las siguientes condiciones:
UseCompleteSearchestrue.El método de búsqueda no es
@searchneldermeadocustom.Si el método de búsqueda es un método de sondeo
patternsearcho una búsqueda de hipercubo latino,UseParallelestrue. Establezca en la línea de comando conoptimoptions:options = optimoptions('patternsearch','UseParallel',true,... 'UseCompleteSearch',true,'SearchFcn',@GPSPositiveBasis2N);
Si el método de búsqueda es
ga, la opción del método de búsqueda tieneUseParallelestablecido entrue. Establezca en la línea de comando conoptimoptions:iterlim = 1; % iteration limit, specifies # ga runs gaopt = optimoptions('ga','UseParallel',true); options = optimoptions('patternsearch','SearchFcn',... {@searchga,iterlim,gaopt});
Para obtener más información sobre las opciones de búsqueda, consulte Search Options . Para ver un ejemplo, consulte Search and Poll.
Funciones híbridas paralelas
ga, particleswarm y simulannealbnd pueden tener otros solucionadores ejecutándose después o intercalados con sus iteraciones. Estos otros solucionadores se llaman funciones híbridas. Para obtener información sobre el uso de una función híbrida con gamultiobj, consulte Parallel Computing with gamultiobj. Tanto patternsearch como fmincon pueden ser funciones híbridas. Puede configurar opciones para que patternsearch se ejecute en paralelo o que fmincon calcule gradientes en paralelo.
Configure las opciones para la función híbrida como se describe en Hybrid Function Options para ga, Hybrid Function para particleswarm o Hybrid Function Options para simulannealbnd. Para resumir:
Si su función híbrida es
patternsearchCrear opciones
patternsearch:hybridopts = optimoptions('patternsearch','UseParallel',true,... 'UseCompletePoll',true);
Establezca las opciones
gaosimulannealbndpara utilizarpatternsearchcomo una función híbrida:options = optimoptions('ga','UseParallel',true); % for ga options = optimoptions('ga',options,... 'HybridFcn',{@patternsearch,hybridopts}); % or, for simulannealbnd: options = optimoptions(@simulannealbnd,'HybridFcn',{@patternsearch,hybridopts});
Para obtener más información sobre
patternsearchparalelo, consulte Pattern Search.Si su función híbrida es
fmincon:Crear opciones
fmincon:hybridopts = optimoptions(@fmincon,'UseParallel',true,... 'Algorithm','interior-point'); % You can use any Algorithm except trust-region-reflective
Establezca las opciones
gaosimulannealbndpara utilizarfminconcomo una función híbrida:options = optimoptions('ga','UseParallel',true); options = optimoptions('ga',options,'HybridFcn',{@fmincon,hybridopts}); % or, for simulannealbnd: options = optimoptions(@simulannealbnd,'HybridFcn',{@fmincon,hybridopts});
Para obtener más información sobre
fminconparalelo, consulte Computación paralela.
Prueba de optimización paralela
Siga estos pasos para probar si su problema se ejecuta correctamente en paralelo.
Pruebe su problema sin computación paralela para asegurar que se ejecute en serie. Asegúrese de que la prueba es exitosa (que dé resultados correctos) antes de pasar a la siguiente prueba.
Establezca
UseParallelcomotruey asegúrese de que el pool no paralelo existe introduciendodelete(gcp). Para asegurarse de que MATLAB no cree un grupo paralelo, seleccione Parallel > Parallel Preferences en el grupo Environment de la pestaña Home y luego desactive Automatically create a parallel pool. Su problema ejecutaparforen serie, con iteraciones en bucle en orden inverso desde un buclefor. Asegúrese de que la prueba es exitosa (que dé resultados correctos) antes de pasar a la siguiente prueba.Establezca
UseParallelcomotruey cree un pool paralelo usandoparpool. Si no tiene un procesador multinúcleo o una red configurada, esta prueba no aumenta la velocidad de procesamiento. Esta prueba está destinada únicamente a verificar el correcto funcionamiento de los cálculos.
Recuerde llamar a su solver usando un argumento options para probar o usar la funcionalidad paralela.