Contenido principal

Esta página se ha traducido mediante traducción automática. Haga clic aquí para ver la última versión en inglés.

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.

SolverConfiguración de la línea de comandos
ga

options = optimoptions('ga','UseParallel', true, 'UseVectorized', false);

gamultiobj

options = optimoptions('gamultiobj','UseParallel', true, 'UseVectorized', false);

MultiStart

ms = MultiStart('UseParallel', true);

o

ms.UseParallel = true

paretosearch

options = optimoptions('paretosearch','UseParallel',true);

particleswarm

options = optimoptions('particleswarm', 'UseParallel', true, 'UseVectorized', false);

patternsearch

options = optimoptions('patternsearch','UseParallel', true, 'UseCompletePoll', true, 'UseVectorized', false);

surrogateopt

options = optimoptions('surrogateopt','UseParallel',true);

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.

  1. Lleve a cabo una comprobación básica introduciendo este código, donde prof es su perfil de cluster.

    parpool(prof)
  2. 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 y constrfun.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.

  3. Compruebe si un archivo está en la ruta de cada worker.

    pctRunOnAll('which filename')
    Si cualquier worker no cuenta con una ruta al archivo, emite el mensaje
    filename not found.

Configure su solucionador para utilizar procesamiento paralelo.

SolverConfiguración de la línea de comandos
ga

options = optimoptions('ga','UseParallel', true, 'UseVectorized', false);

gamultiobj

options = optimoptions('gamultiobj','UseParallel', true, 'UseVectorized', false);

MultiStart

ms = MultiStart('UseParallel', true);

o

ms.UseParallel = true

paretosearch

options = optimoptions('paretosearch','UseParallel',true);

particleswarm

options = optimoptions('particleswarm', 'UseParallel', true, 'UseVectorized', false);

patternsearch

options = optimoptions('patternsearch','UseParallel', true, 'UseCompletePoll', true, 'UseVectorized', false);

surrogateopt

options = optimoptions('surrogateopt','UseParallel',true);

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.

  1. Configure el procesamiento paralelo como se describe en Procesadores multinúcleo o Red de procesadores.

  2. 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 es true .

  • El método de búsqueda no es @searchneldermead o custom.

  • Si el método de búsqueda es un método de sondeo patternsearch o una búsqueda de hipercubo latino, UseParallel es true. Establezca en la línea de comando con optimoptions:

    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 tiene UseParallel establecido en true. Establezca en la línea de comando con optimoptions:

    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

    1. Crear opciones patternsearch:

      hybridopts = optimoptions('patternsearch','UseParallel',true,...
          'UseCompletePoll',true);
    2. Establezca las opciones ga o simulannealbnd para utilizar patternsearch 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:

    1. Crear opciones fmincon:

      hybridopts = optimoptions(@fmincon,'UseParallel',true,...
          'Algorithm','interior-point');
      % You can use any Algorithm except trust-region-reflective
    2. Establezca las opciones ga o simulannealbnd para utilizar fmincon 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.

  1. 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.

  2. Establezca UseParallel como true y asegúrese de que el pool no paralelo existe introduciendo delete(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 ejecuta parfor en serie, con iteraciones en bucle en orden inverso desde un bucle for. Asegúrese de que la prueba es exitosa (que dé resultados correctos) antes de pasar a la siguiente prueba.

  3. Establezca UseParallel como true y cree un pool paralelo usando parpool. 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.

Consulte también

Temas