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
prof
es 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.m
es su archivo de función objetivo yconstrfun.m
es 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:
UseCompleteSearch
estrue
.El método de búsqueda no es
@searchneldermead
ocustom
.Si el método de búsqueda es un método de sondeo
patternsearch
o una búsqueda de hipercubo latino,UseParallel
estrue
. 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 tieneUseParallel
establecido 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
patternsearch
Crear opciones
patternsearch
:hybridopts = optimoptions('patternsearch','UseParallel',true,... 'UseCompletePoll',true);
Establezca las opciones
ga
osimulannealbnd
para utilizarpatternsearch
como 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
patternsearch
paralelo, 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
ga
osimulannealbnd
para utilizarfmincon
como 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
fmincon
paralelo, 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
UseParallel
comotrue
y 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 ejecutaparfor
en 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
UseParallel
comotrue
y 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.