Main Content

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

patternsearch

Encuentre el mínimo de una función mediante la búsqueda de patrones

Descripción

x = patternsearch(fun,x0) encuentra un mínimo local, x, para el identificador de función fun que calcula los valores de la función objetivo. x0 es un vector real que especifica un punto inicial para el algoritmo de búsqueda de patrones.

Nota

En Pasar parámetros adicionales se explica cómo pasar parámetros adicionales a la función objetivo y a las funciones de restricción no lineales, si fuera necesario.

ejemplo

x = patternsearch(fun,x0,A,b) minimiza fun sujeto a las desigualdades lineales A*xb . Consulte Restricciones de desigualdad lineales.

ejemplo

x = patternsearch(fun,x0,A,b,Aeq,beq) minimiza fun sujeto a las igualdades lineales Aeq*x = beq y A*xb . Si no existen desigualdades lineales, establezca A = [] y b = [].

x = patternsearch(fun,x0,A,b,Aeq,beq,lb,ub) define un conjunto de límites inferiores y superiores en las variables de diseño de x, de modo que la solución siempre se encuentra en el rango lb x ub. Si no existen igualdades lineales, establezca Aeq = [] y beq = []. Si x(i) no tiene límite inferior, establezca lb(i) = -Inf. Si x(i) no tiene límite superior, establezca ub(i) = Inf.

ejemplo

x = patternsearch(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon) somete la minimización a las desigualdades no lineales c(x) o igualdades ceq(x) definidas en nonlcon . patternsearch optimiza fun de modo que c(x) ≤ 0 y ceq(x) = 0 . Si no existen límites, establezca lb = [], ub = [] o ambos.

ejemplo

x = patternsearch(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options) minimiza fun con las opciones de optimización especificadas en options. Utilice optimoptions para configurar estas opciones. Si no hay restricciones de igualdad o desigualdad no lineales, establezca nonlcon = [].

ejemplo

x = patternsearch(problem) encuentra el mínimo para problem, una estructura descrita en problem.

[x,fval] = patternsearch(___), para cualquier sintaxis, devuelve el valor de la función objetivo fun en la solución x.

ejemplo

[x,fval,exitflag,output] = patternsearch(___) además devuelve exitflag, un valor que describe la condición de salida de patternsearch, y una estructura output con información sobre el proceso de optimización.

ejemplo

Ejemplos

contraer todo

Minimizar un problema sin restricciones utilizando el solucionador patternsearch.

Cree la siguiente función objetivo de dos variables. En su ruta MATLAB®, guarde el siguiente código en un archivo llamado psobj.m .

function y = psobj(x)

y = exp(-x(1)^2-x(2)^2)*(1+5*x(1) + 6*x(2) + 12*x(1)*cos(x(2)));

Establezca la función objetivo en @psobj .

fun = @psobj;

Encuentra el mínimo, comenzando en el punto [0,0] .

x0 = [0,0];
x = patternsearch(fun,x0)
patternsearch stopped because the mesh size was less than options.MeshTolerance.

x =

   -0.7037   -0.1860

Minimizar una función sujeta a algunas restricciones de desigualdad lineales.

Cree la siguiente función objetivo de dos variables. En su ruta MATLAB®, guarde el siguiente código en un archivo llamado psobj.m .

function y = psobj(x)

y = exp(-x(1)^2-x(2)^2)*(1+5*x(1) + 6*x(2) + 12*x(1)*cos(x(2)));

Establezca la función objetivo en @psobj .

fun = @psobj;

Establezca las dos restricciones de desigualdad lineales.

A = [-3,-2;
    -4,-7];
b = [-1;-8];

Encuentra el mínimo, comenzando en el punto [0.5,-0.5] .

x0 = [0.5,-0.5];
x = patternsearch(fun,x0,A,b)
patternsearch stopped because the mesh size was less than options.MeshTolerance.

x =

    5.2827   -1.8758

Encuentra el mínimo de una función que solo tiene restricciones acotadas.

Cree la siguiente función objetivo de dos variables. En su ruta MATLAB®, guarde el siguiente código en un archivo llamado psobj.m .

function y = psobj(x)

y = exp(-x(1)^2-x(2)^2)*(1+5*x(1) + 6*x(2) + 12*x(1)*cos(x(2)));

Establezca la función objetivo en @psobj .

fun = @psobj;

Encuentra el mínimo cuando $0 \le x(1) \le\infty$ y $-\infty \le x(2) \le -3$ .

lb = [0,-Inf];
ub = [Inf,-3];
A = [];
b = [];
Aeq = [];
beq = [];

Encuentra el mínimo, comenzando en el punto [1,-5] .

x0 = [1,-5];
x = patternsearch(fun,x0,A,b,Aeq,beq,lb,ub)
patternsearch stopped because the mesh size was less than options.MeshTolerance.

x =

    0.1880   -3.0000

Encuentra el mínimo de una función sujeta a una restricción de desigualdad no lineal.

Cree la siguiente función objetivo de dos variables. En su ruta MATLAB®, guarde el siguiente código en un archivo llamado psobj.m .

function y = psobj(x)

y = exp(-x(1)^2-x(2)^2)*(1+5*x(1) + 6*x(2) + 12*x(1)*cos(x(2)));

Establezca la función objetivo en @psobj .

fun = @psobj;

Crear la restricción no lineal

$$ \frac{{xy}}{2} + {\left( {x + 2} \right)^2} + \frac{{{{\left( {y - 2}
\right)}^2}}}{2} \le 2. $$

Para hacerlo, en su ruta de MATLAB, guarde el siguiente código en un archivo llamado ellipsetilt.m.

function [c,ceq] = ellipsetilt(x)
ceq = [];
c = x(1)*x(2)/2 + (x(1)+2)^2 + (x(2)-2)^2/2 - 2;

Comienza patternsearch desde el punto inicial [-2,-2].

x0 = [-2,-2];
A = [];
b = [];
Aeq = [];
beq = [];
lb = [];
ub = [];
nonlcon = @ellipsetilt;
x = patternsearch(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
Optimization finished: mesh size less than options.MeshTolerance 
and constraint violation is less than options.ConstraintTolerance.

x =

   -1.5144    0.0875

A veces, los diferentes algoritmos patternsearch tienen un comportamiento notablemente diferente. Si bien puede ser difícil predecir qué algoritmo funciona mejor para un problema, puedes probar fácilmente diferentes algoritmos. Para este ejemplo, utilice la función objetivo sawtoothxy, que está disponible cuando ejecuta este ejemplo, y que se describe y grafica en Find Global or Multiple Local Minima.

type sawtoothxy
function f = sawtoothxy(x,y)
[t r] = cart2pol(x,y); % change to polar coordinates
h = cos(2*t - 1/2)/2 + cos(t) + 2;
g = (sin(r) - sin(2*r)/2 + sin(3*r)/3 - sin(4*r)/4 + 4) ...
    .*r.^2./(r+1);
f = g.*h;
end

Para ver el comportamiento de los diferentes algoritmos al minimizar esta función objetivo, establezca algunos límites asimétricos. Establezca también un punto inicial x0 que esté lejos de la solución verdadera sol = [0 0], donde sawtoothxy(0,0) = 0.

rng default
x0 = 12*randn(1,2);
lb = [-15,-26];
ub = [26,15];
fun = @(x)sawtoothxy(x(1),x(2));

Minimiza la función sawtoothxy utilizando el algoritmo "classic" patternsearch.

optsc = optimoptions("patternsearch",Algorithm="classic");
[sol,fval,eflag,output] = patternsearch(fun,...
    x0,[],[],[],[],lb,ub,[],optsc)
patternsearch stopped because the mesh size was less than options.MeshTolerance.
sol = 1×2
10-5 ×

    0.9825         0

fval = 
1.3278e-09
eflag = 
1
output = struct with fields:
         function: @(x)sawtoothxy(x(1),x(2))
      problemtype: 'boundconstraints'
       pollmethod: 'gpspositivebasis2n'
    maxconstraint: 0
     searchmethod: []
       iterations: 52
        funccount: 168
         meshsize: 9.5367e-07
         rngstate: [1x1 struct]
          message: 'patternsearch stopped because the mesh size was less than options.MeshTolerance.'

El algoritmo "classic" alcanza la solución global en 52 iteraciones y 168 evaluaciones de funciones.

Pruebe el algoritmo "nups".

rng default % For reproducibility
optsn = optimoptions("patternsearch",Algorithm="nups");
[sol,fval,eflag,output] = patternsearch(fun,...
    x0,[],[],[],[],lb,ub,[],optsn)
patternsearch stopped because the mesh size was less than options.MeshTolerance.
sol = 1×2

    6.3204   15.0000

fval = 
85.9256
eflag = 
1
output = struct with fields:
         function: @(x)sawtoothxy(x(1),x(2))
      problemtype: 'boundconstraints'
       pollmethod: 'nups'
    maxconstraint: 0
     searchmethod: []
       iterations: 29
        funccount: 88
         meshsize: 7.1526e-07
         rngstate: [1x1 struct]
          message: 'patternsearch stopped because the mesh size was less than options.MeshTolerance.'

Esta vez, el solucionador llega a una solución local en solo 29 iteraciones y 88 evaluaciones de función, pero la solución no es la solución global.

Intente utilizar el algoritmo "nups-mads", que no realiza ningún paso en las direcciones de las coordenadas.

rng default % For reproducibility
optsm = optimoptions("patternsearch",Algorithm="nups-mads");
[sol,fval,eflag,output] = patternsearch(fun,...
    x0,[],[],[],[],lb,ub,[],optsm)
patternsearch stopped because the mesh size was less than options.MeshTolerance.
sol = 1×2
10-4 ×

   -0.5275    0.0806

fval = 
1.5477e-08
eflag = 
1
output = struct with fields:
         function: @(x)sawtoothxy(x(1),x(2))
      problemtype: 'boundconstraints'
       pollmethod: 'nups-mads'
    maxconstraint: 0
     searchmethod: []
       iterations: 55
        funccount: 189
         meshsize: 9.5367e-07
         rngstate: [1x1 struct]
          message: 'patternsearch stopped because the mesh size was less than options.MeshTolerance.'

Esta vez, el solucionador llega a la solución global en 55 iteraciones y 189 evaluaciones de funciones, lo que es similar al algoritmo 'classic'.

Establezca opciones para observar el progreso del proceso de solución patternsearch.

Cree la siguiente función objetivo de dos variables. En su ruta MATLAB®, guarde el siguiente código en un archivo llamado psobj.m.

function y = psobj(x)

y = exp(-x(1)^2-x(2)^2)*(1+5*x(1) + 6*x(2) + 12*x(1)*cos(x(2)));

Establezca la función objetivo en @psobj .

fun = @psobj;

Establezca options para proporcionar una visualización iterativa y representar la función objetivo en cada iteración.

options = optimoptions('patternsearch','Display','iter','PlotFcn',@psplotbestf);

Encuentra el mínimo sin restricciones del objetivo a partir del punto [0,0].

x0 = [0,0];
A = [];
b = [];
Aeq = [];
beq = [];
lb = [];
ub = [];
nonlcon = [];
x = patternsearch(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

Iter     f-count          f(x)      MeshSize     Method
    0        1              1             1      
    1        4       -5.88607             2     Successful Poll
    2        8       -5.88607             1     Refine Mesh
    3       12       -5.88607           0.5     Refine Mesh
    4       16       -5.88607          0.25     Refine Mesh

(output trimmed)

   63      218       -7.02545     1.907e-06     Refine Mesh
   64      221       -7.02545     3.815e-06     Successful Poll
   65      225       -7.02545     1.907e-06     Refine Mesh
   66      229       -7.02545     9.537e-07     Refine Mesh
Optimization terminated: mesh size less than options.MeshTolerance.

x =

   -0.7037   -0.1860

Encuentre un valor mínimo de una función e informe tanto la ubicación como el valor del mínimo.

Cree la siguiente función objetivo de dos variables. En su ruta MATLAB®, guarde el siguiente código en un archivo llamado psobj.m .

function y = psobj(x)

y = exp(-x(1)^2-x(2)^2)*(1+5*x(1) + 6*x(2) + 12*x(1)*cos(x(2)));

Establezca la función objetivo en @psobj .

fun = @psobj;

Encuentra el mínimo sin restricciones del objetivo, comenzando desde el punto [0,0]. Devuelve tanto la ubicación del mínimo, x, como el valor de fun(x).

x0 = [0,0];
[x,fval] = patternsearch(fun,x0)
patternsearch stopped because the mesh size was less than options.MeshTolerance.

x =

   -0.7037   -0.1860


fval =

   -7.0254

Para examinar el proceso de solución patternsearch, obtenga todos los resultados.

Cree la siguiente función objetivo de dos variables. En su ruta MATLAB®, guarde el siguiente código en un archivo llamado psobj.m .

function y = psobj(x)

y = exp(-x(1)^2-x(2)^2)*(1+5*x(1) + 6*x(2) + 12*x(1)*cos(x(2)));

Establezca la función objetivo en @psobj .

fun = @psobj;

Encuentra el mínimo sin restricciones del objetivo, comenzando desde el punto [0,0]. Devuelve la solución, x, el valor de la función objetivo en la solución, fun(x), el indicador de salida y la estructura de salida.

x0 = [0,0];
[x,fval,exitflag,output] = patternsearch(fun,x0)
patternsearch stopped because the mesh size was less than options.MeshTolerance.

x =

   -0.7037   -0.1860


fval =

   -7.0254


exitflag =

     1


output = 

  struct with fields:

         function: @psobj
      problemtype: 'unconstrained'
       pollmethod: 'gpspositivebasis2n'
    maxconstraint: []
     searchmethod: []
       iterations: 66
        funccount: 229
         meshsize: 9.5367e-07
         rngstate: [1x1 struct]
          message: 'patternsearch stopped because the mesh size was less than options.MeshTolerance.'

exitflag es 1, lo que indica convergencia a un mínimo local.

La estructura output incluye información como cuántas iteraciones tomó patternsearch y cuántas evaluaciones de función. Compare esta estructura de salida con los resultados de Búsqueda de patrones con opciones no predeterminadas. En ese ejemplo, obtiene parte de esta información, pero no obtiene, por ejemplo, el número de evaluaciones de funciones.

Argumentos de entrada

contraer todo

Función que se minimizará, especificada como un identificador de función o un nombre de función. La función fun acepta un vector x y devuelve un escalar real f, que es la función objetivo evaluada en x.

Puede especificar fun como un identificador de función para un archivo

x = patternsearch(@myfun,x0)

Aquí, myfun es una función MATLAB como

function f = myfun(x)
f = ...            % Compute function value at x

fun también puede ser un identificador de función para una función anónima

x = patternsearch(@(x)norm(x)^2,x0,A,b);

Ejemplo: fun = @(x)sin(x(1))*cos(x(2))

Tipos de datos: char | function_handle | string

Punto inicial, especificado como un vector real. patternsearch utiliza el número de elementos en x0 para determinar el número de variables que fun acepta.

Ejemplo: x0 = [1,2,3,4]

Tipos de datos: double

Restricciones de desigualdad lineales, especificadas como una matriz real. A es una matriz M por nvars, donde M es el número de desigualdades.

A codifica las M desigualdades lineales

A*x <= b,

donde x es el vector columna de nvars variables x(:) y b es un vector columna con M elementos.

Por ejemplo, para especificar

x1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30,

Dar estas restricciones:

A = [1,2;3,4;5,6];
b = [10;20;30];

Ejemplo: Para especificar que las variables de control suman 1 o menos, proporcione las restricciones A = ones(1,N) y b = 1.

Tipos de datos: double

Restricciones de desigualdad lineales, especificadas como un vector real. b es un vector de M elementos relacionado con la matriz A. Si pasa b como un vector fila, los solvers convierten internamente b en el vector columna b(:).

b codifica las M desigualdades lineales

A*x <= b,

donde x es el vector columna de N variables x(:) y A es una matriz de tamaño M por N.

Por ejemplo, para especificar

x1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30,

Dar estas restricciones:

A = [1,2;3,4;5,6];
b = [10;20;30];

Ejemplo: Para especificar que las variables de control suman 1 o menos, proporcione las restricciones A = ones(1,N) y b = 1.

Tipos de datos: double

Restricciones de igualdad lineales, especificadas como una matriz real. Aeq es una matriz Me por nvars, donde Me es el número de igualdades.

Aeq codifica las Me igualdades lineales

Aeq*x = beq,

donde x es el vector columna de N variables x(:) y beq es un vector columna con Me elementos.

Por ejemplo, para especificar

x1 + 2 x2 + 3 x3 = 10
2 x1 + 4 x2 + x3 = 20,

Dar estas restricciones:

Aeq = [1,2,3;2,4,1];
beq = [10;20];

Ejemplo: Para especificar que las variables de control suman 1, proporcione las restricciones Aeq = ones(1,N) y beq = 1.

Tipos de datos: double

Restricciones de igualdad lineales, especificadas como un vector real. beq es un vector de Me elementos relacionado con la matriz Aeq. Si pasa beq como un vector fila, los solvers convierten internamente beq en el vector columna beq(:).

beq codifica las Me igualdades lineales

Aeq*x = beq,

donde x es el vector columna de N variables x(:) y Aeq es una matriz de tamaño Meq por N.

Por ejemplo, para especificar

x1 + 2 x2 + 3 x3 = 10
2 x1 + 4 x2 + x3 = 20,

Dar estas restricciones:

Aeq = [1,2,3;2,4,1];
beq = [10;20];

Ejemplo: Para especificar que las variables de control suman 1, proporcione las restricciones Aeq = ones(1,N) y beq = 1.

Tipos de datos: double

Límites inferiores, especificados como un vector real o un arreglo real. Si el número de elementos en x0 es igual al de lb, entonces lb especifica que

x(i) >= lb(i)

para todos los i .

Si numel(lb) < numel(x0), entonces lb especifica que

x(i) >= lb(i)

para

1 <= i <= numel(lb)

En este caso, los solvers emiten una advertencia.

Ejemplo: Para especificar que todas las variables de control son positivas, lb = zeros(size(x0))

Tipos de datos: double

Límites superiores, especificados como un vector real o un arreglo real. Si el número de elementos en x0 es igual al de ub, entonces ub especifica que

x(i) <= ub(i)

para todos los i .

Si numel(ub) < numel(x0), entonces ub especifica que

x(i) <= ub(i)

para

1 <= i <= numel(ub)

En este caso, los solvers emiten una advertencia.

Ejemplo: Para especificar que todas las variables de control son menores que uno, ub = ones(size(x0))

Tipos de datos: double

Límites no lineales, especificados como un identificador de función o un nombre de función. nonlcon es una función que acepta un vector o arreglo x y devuelve dos arreglos, c(x) y ceq(x).

  • c(x) es el arreglo de restricciones de desigualdad no lineales de x. patternsearch intenta satisfacer

    c(x) <= 0

    para todas las entradas de c .

  • ceq(x) es el arreglo de restricciones de igualdad no lineales de x. patternsearch intenta satisfacer

    ceq(x) = 0

    para todas las entradas de ceq .

Por ejemplo:

x = patternsearch(@myfun,x0,A,b,Aeq,beq,lb,ub,@mycon)

donde mycon es una función de MATLAB como

function [c,ceq] = mycon(x)
c = ...     % Compute nonlinear inequalities at x.
ceq = ...   % Compute nonlinear equalities at x.
Para obtener más información, consulte Restricciones no lineales.

Tipos de datos: char | function_handle | string

Opciones de optimización, especificadas como un objeto devuelto por optimoptions (recomendado) o una estructura.

La siguiente tabla describe las opciones de optimización. optimoptions oculta las opciones que se muestran en cursiva; consulte Options that optimoptions Hides. {} denota el valor predeterminado. Vea los detalles de la opción en Pattern Search Options .

Opciones para patternsearch

OpciónDescripciónValores
Algorithm

Algoritmo utilizado por patternsearch . La configuración Algorithm afecta las opciones disponibles. Para obtener detalles del algoritmo, consulte How Pattern Search Polling Works y Nonuniform Pattern Search (NUPS) Algorithm.

Para ver ejemplos de efectos de algoritmo, consulte Explore patternsearch Algorithms y Explore patternsearch Algorithms in Optimize Live Editor Task.

{"classic"} | "nups" | "nups-gps" | "nups-mads"
Cache

Con Cache establecido en "on", patternsearch mantiene un historial de los puntos de malla que sondea. En iteraciones posteriores, patternsearch no sondea puntos cercanos a los ya sondeados. Utilice esta opción si patternsearch se ejecuta lentamente mientras calcula la función objetivo. Si la función objetivo es estocástica, no utilice esta opción.

Nota

Cache no funciona cuando se ejecuta el solucionador en paralelo.

"on" | {"off"}

CacheSize

Tamaño de la historia.

Escalar no negativo | {1e4}

CacheTol

Distancia más grande desde el punto de malla actual a cualquier punto en el historial para que patternsearch evite sondear el punto actual. Úselo si la opción Cache está establecida en "on".

Escalar no negativo | {eps}

ConstraintTolerance

Tolerancia a las restricciones.

Para una estructura de opciones, utilice TolCon .

Escalar positivo | {1e-6}

Display

Nivel de visualización, es decir, cuánta información patternsearch devuelve a la línea de comandos durante el proceso de solución.

"off" | "iter" | "diagnose" | {"final"}
FunctionTolerance

Tolerancia en la función. Las iteraciones se detienen si el cambio en el valor de la función es menor que FunctionTolerance y el tamaño de la malla es menor que StepTolerance. Esta opción no se aplica al sondeo MADS (búsqueda directa adaptativa de malla).

Para una estructura de opciones, utilice TolFun .

Escalar no negativo | {1e-6}

InitialMeshSize

Tamaño de malla inicial para el algoritmo. Consulte How Pattern Search Polling Works.

Escalar positivo | {1.0}

InitialPenalty

Valor inicial del parámetro de penalización. Consulte Nonlinear Constraint Solver Algorithm for Pattern Search.

Escalar positivo | {10}

MaxFunctionEvaluations

Número máximo de evaluaciones de la función objetivo.

Para una estructura de opciones, utilice MaxFunEvals .

Entero no negativo | {"2000*numberOfVariables"}, donde numberOfVariables es el número de variables del problema

MaxIterations

Número máximo de iteraciones.

Para una estructura de opciones, utilice MaxIter .

Entero no negativo | {"100*numberOfVariables"}, donde numberOfVariables es el número de variables del problema

MaxMeshSize

Tamaño máximo de malla utilizado en un paso de sondeo o búsqueda. Consulte How Pattern Search Polling Works.

Escalar no negativo | {Inf}

MaxTime

Tiempo total (en segundos) permitido para la optimización.

Para una estructura de opciones, utilice TimeLimit .

Escalar no negativo | {Inf}

MeshContractionFactor

Factor de contracción de malla para una iteración fallida.

Esta opción sólo se aplica cuando Algorithm es "classic".

Para una estructura de opciones, utilice MeshContraction .

Escalar positivo | {0.5}

MeshExpansionFactor

Factor de expansión de malla para una iteración exitosa.

Esta opción sólo se aplica cuando Algorithm es "classic".

Para una estructura de opciones, utilice MeshExpansion .

Escalar positivo | {2.0}

MeshRotate

Indicador para rotar el patrón antes de declarar que un punto es óptimo. Consulte Mesh Options.

Esta opción sólo se aplica cuando Algorithm es "classic".

"off" | {"on"}

MeshTolerance

Tolerancia en el tamaño de la malla.

Para una estructura de opciones, utilice TolMesh .

Escalar no negativo | {1e-6}

OutputFcn

Función llamada por una función de optimización en cada iteración. Especifique como un identificador de función o un arreglo de celdas de identificadores de función.

Para una estructura de opciones, utilice OutputFcns .

Identificador de función o arreglo de celdas de identificadores de función | {[]}

PenaltyFactor

Parámetro de actualización de penalización. Consulte Nonlinear Constraint Solver Algorithm for Pattern Search.

Escalar positivo | {100}

PlotFcn

Gráficos de salida de la búsqueda de patrones. Especifique como nombre de una función de gráfico integrada, un identificador de función o un arreglo de celdas los nombres de funciones de gráfico integradas o identificadores de función.

Para una estructura de opciones, utilice PlotFcns .

{[]} | "psplotbestf" | "psplotfuncount" | "psplotmeshsize" | "psplotbestx" | "psplotmaxconstr" | función de gráfico personalizada

PlotInterval

Número de iteraciones para gráficos. 1 significa graficar cada iteración, 2 significa graficar cada dos iteraciones, y así sucesivamente.

entero positivo | {1}

PollMethod

Estrategia de sondeo utilizada en la búsqueda de patrones.

Esta opción sólo se aplica cuando Algorithm es "classic".

Nota

No se puede utilizar el sondeo MADS cuando el problema tiene restricciones de igualdad lineales.

{"GPSPositiveBasis2N"} | "GPSPositiveBasisNp1" | "GSSPositiveBasis2N" | "GSSPositiveBasisNp1" | "MADSPositiveBasis2N" | "MADSPositiveBasisNp1"

PollOrderAlgorithm

Orden de las direcciones de la encuesta en la búsqueda de patrones.

Esta opción sólo se aplica cuando Algorithm es "classic".

Para una estructura de opciones, utilice PollingOrder .

"Random" | "Success" | {"Consecutive"}

ScaleMesh

Escalado automático de variables.

Para una estructura de opciones, utilice ScaleMesh = "on" o "off" .

{true}| false

SearchFcn

Tipo de búsqueda utilizado en la búsqueda de patrones. Especifique como un nombre o un identificador de función.

Para una estructura de opciones, utilice SearchMethod .

"GPSPositiveBasis2N" | "GPSPositiveBasisNp1" | "GSSPositiveBasis2N" | "GSSPositiveBasisNp1" | "MADSPositiveBasis2N" | "MADSPositiveBasisNp1" | "searchga" | "searchlhs" | "searchneldermead" | "rbfsurrogate" | {[]} | función de búsqueda personalizada

StepTolerance

Tolerancia sobre la variable. Las iteraciones se detienen si tanto el cambio de posición como el tamaño de la malla son menores que StepTolerance. Esta opción no se aplica al sondeo MADS.

Para una estructura de opciones, utilice TolX .

Escalar no negativo | {1e-6}

TolBind

Tolerancia vinculante. Consulte Constraint Parameters.

Escalar no negativo | {1e-3}

UseCompletePoll

Indicador para completar la encuesta alrededor del punto actual. Consulte How Pattern Search Polling Works.

Esta opción sólo se aplica cuando Algorithm es "classic".

Nota

Para el algoritmo "classic", debe establecer UseCompletePoll en true para el sondeo vectorizado o paralelo. De manera similar, configure UseCompleteSearch en true para realizar búsquedas vectorizadas o paralelas.

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.

Para una estructura de opciones, utilice CompletePoll = "on" o "off" .

true | {false}

UseCompleteSearch

Indicador para completar la búsqueda alrededor del punto actual cuando el método de búsqueda es un método de sondeo. Consulte Searching and Polling.

Esta opción sólo se aplica cuando Algorithm es "classic".

Nota

Para el algoritmo "classic", debe establecer UseCompleteSearch en true para la búsqueda vectorizada o paralela.

Para una estructura de opciones, utilice CompleteSearch = "on" o "off" .

true | {false}

UseParallel

Indicador para calcular funciones de restricción objetivas y no lineales en paralelo. Consulte Vectorized and Parallel Options y Cómo utilizar el procesamiento paralelo en Global Optimization Toolbox.

Nota

Para el algoritmo "classic", debe establecer UseCompletePoll en true para el sondeo vectorizado o paralelo. De manera similar, configure UseCompleteSearch en true para realizar búsquedas vectorizadas o paralelas.

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.

Nota

Cache no funciona cuando se ejecuta el solucionador en paralelo.

true | {false}

UseVectorized

Especifica si las funciones están vectorizadas. Consulte Vectorized and Parallel Options y Vectorize the Objective and Constraint Functions.

Nota

Para el algoritmo "classic", debe establecer UseCompletePoll en true para el sondeo vectorizado o paralelo. De manera similar, configure UseCompleteSearch en true para realizar búsquedas vectorizadas o paralelas.

Para una estructura de opciones, utilice Vectorized = "on" o "off" .

true | {false}

Ejemplo: options = optimoptions("patternsearch",MaxIterations=150,MeshTolerance=1e-4)

Estructura de problema, especificada como una estructura con los siguientes campos:

  • objective — Función objetivo

  • x0 — Punto de partida

  • Aineq — Matriz para restricciones de desigualdad lineales

  • bineq — Vector para restricciones de desigualdad lineales

  • Aeq — Matriz para restricciones de igualdad lineales

  • beq — Vector para restricciones de igualdad lineales

  • lb — Límite inferior para x

  • ub — Límite superior para x

  • nonlcon — Función de restricción no lineal

  • solver'patternsearch'

  • options — Opciones creadas con optimoptions o una estructura

  • rngstate — Campo opcional para restablecer el estado del generador de números aleatorios

Nota

Todos los campos en problem son obligatorios excepto rngstate.

Tipos de datos: struct

Argumentos de salida

contraer todo

Solución, devuelta como un vector real. El tamaño de x es el mismo que el tamaño de x0. Cuando exitflag es positivo, x suele ser una solución local al problema.

Valor de la función objetivo en la solución, devuelto como un número real. Por lo general, fval = fun(x).

Razón por la que patternsearch se ha detenido, devuelta como un entero.

Indicador de salidaSignificado

1

Sin restricciones no lineales: la magnitud del tamaño de malla es inferior a la tolerancia especificada y la vulneración de restricciones es inferior a ConstraintTolerance.

Con restricciones no lineales: la magnitud de la medida de complementariedad (definida después de esta tabla) es inferior a sqrt(ConstraintTolerance), el subproblema se resuelve utilizando una malla más fina que MeshTolerance y la vulneración de restricciones es inferior a ConstraintTolerance.

2

Tanto el cambio en x como el tamaño de malla son inferiores a la tolerancia especificada y la vulneración de restricciones inferior a ConstraintTolerance.

3

Tanto el cambio en fval como el tamaño de malla son inferiores a la tolerancia especificada y la vulneración de restricciones inferior a ConstraintTolerance.

4

La magnitud del paso es inferior a la precisión de máquina y la vulneración de restricciones es inferior a ConstraintTolerance.

0

Se ha alcanzado el número máximo de evaluaciones de función o de iteraciones.

-1

Optimización terminada por una función de salida o una función de gráfica.

-2

No se ha encontrado ningún punto factible.

En el solver de restricción no lineal, la medida de complementariedad es la norma del vector cuyos elementos son ciλi, donde ci es la vulneración de la restricción de desigualdad no lineal y λi es el correspondiente multiplicador de Lagrange.

Información sobre el proceso de optimización, devuelta como estructura con estos campos:

  • function — Función objetivo.

  • problemtype — Tipo de problema, uno de los siguientes:

    • 'unconstrained'

    • 'boundconstraints'

    • 'linearconstraints'

    • 'nonlinearconstr'

  • pollmethod — Técnica de sondeo.

  • searchmethod — Técnica de búsqueda utilizada, si hay alguna.

  • iterations — Número total de iteraciones.

  • funccount — Número total de evaluaciones de funciones.

  • meshsize — Tamaño de malla en x .

  • maxconstraint — Infracción de restricción máxima, si la hay.

  • rngstate — Estado del generador de números aleatorios MATLAB, justo antes de que comenzara el algoritmo. Puede utilizar los valores en rngstate para reproducir la salida cuando utiliza un método de búsqueda aleatoria o un método de sondeo aleatorio. Consulte Reproduce Results, que analiza la técnica idéntica para ga.

  • message — Razón por la cual finalizó el algoritmo.

Algoritmos

De forma predeterminada y en ausencia de restricciones lineales, patternsearch busca un mínimo basado en una malla adaptativa que esté alineada con las direcciones de coordenadas. Consulte What Is Direct Search? y How Pattern Search Polling Works.

Cuando establece la opción Algorithm en "nups" o una de sus variantes, patternsearch utiliza el algoritmo descrito en Nonuniform Pattern Search (NUPS) Algorithm. Este algoritmo es diferente del algoritmo predeterminado en varios aspectos; por ejemplo, tiene menos opciones para configurar.

Funcionalidad alternativa

App

La tarea Optimize de Live Editor proporciona una interfaz visual para patternsearch.

Referencias

[1] Audet, Charles, and J. E. Dennis Jr. “Analysis of Generalized Pattern Searches.” SIAM Journal on Optimization. Volume 13, Number 3, 2003, pp. 889–903.

[2] Conn, A. R., N. I. M. Gould, and Ph. L. Toint. “A Globally Convergent Augmented Lagrangian Barrier Algorithm for Optimization with General Inequality Constraints and Simple Bounds.” Mathematics of Computation. Volume 66, Number 217, 1997, pp. 261–288.

[3] Abramson, Mark A. Pattern Search Filter Algorithms for Mixed Variable General Constrained Optimization Problems. Ph.D. Thesis, Department of Computational and Applied Mathematics, Rice University, August 2002.

[4] Abramson, Mark A., Charles Audet, J. E. Dennis, Jr., and Sebastien Le Digabel. “ORTHOMADS: A deterministic MADS instance with orthogonal directions.” SIAM Journal on Optimization. Volume 20, Number 2, 2009, pp. 948–966.

[5] Kolda, Tamara G., Robert Michael Lewis, and Virginia Torczon. “Optimization by direct search: new perspectives on some classical and modern methods.” SIAM Review. Volume 45, Issue 3, 2003, pp. 385–482.

[6] Kolda, Tamara G., Robert Michael Lewis, and Virginia Torczon. “A generating set direct search augmented Lagrangian algorithm for optimization with a combination of general and linear constraints.” Technical Report SAND2006-5315, Sandia National Laboratories, August 2006.

[7] Lewis, Robert Michael, Anne Shepherd, and Virginia Torczon. “Implementing generating set search methods for linearly constrained minimization.” SIAM Journal on Scientific Computing. Volume 29, Issue 6, 2007, pp. 2507–2530.

Capacidades ampliadas

Historial de versiones

Introducido antes de R2006a