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.

simulannealbnd

Encontrar el mínimo de una función utilizando el algoritmo de recocido simulado

Descripción

x = simulannealbnd(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 punto inicial para el algoritmo de recocido simulado, un vector real.

Nota

Pasar parámetros adicionales explica cómo pasar parámetros adicionales a la función objetivo, si es necesario.

ejemplo

x = simulannealbnd(fun,x0,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 x(i) está desacotado por abajo, establezca lb(i) = -Inf, y si x(i) está desacotado por arriba, establezca ub(i) = Inf.

ejemplo

x = simulannealbnd(fun,x0,lb,ub,options) minimiza con las opciones de optimización especificadas en options. Cree options utilizando optimoptions. Si no existen límites, establezca lb = [] y ub = [].

ejemplo

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

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

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

ejemplo

Ejemplos

contraer todo

Minimizar la quinta función de De Jong, una función bidimensional con muchos mínimos locales. Esta función está disponible cuando ejecuta este ejemplo.

Gráfica de la quinta función de De Jong.

dejong5fcn

Figure contains an axes object. The axes object contains 2 objects of type surface, contour.

Minimiza la quinta función de De Jong usando simulannealbnd comenzando desde el punto [0,0].

fun = @dejong5fcn;
x0 = [0 0];
x = simulannealbnd(fun,x0)
simulannealbnd stopped because the change in best function value is less than options.FunctionTolerance.
x = 1×2

  -32.0285   -0.1280

El algoritmo simulannealbnd utiliza el flujo de números aleatorios MATLAB®, por lo que es posible que obtenga un resultado diferente.

Minimizar la quinta función de De Jong dentro de una región acotada. Esta función está disponible cuando ejecuta este ejemplo.

Gráfica de la quinta función de De Jong.

dejong5fcn

Figure contains an axes object. The axes object contains 2 objects of type surface, contour.

Inicie simulannealbnd desde el punto [0,0] y establezca límites inferiores de -64 y límites superiores de 64 en cada componente.

fun = @dejong5fcn;
x0 = [0 0];
lb = [-64 -64];
ub = [64 64];
x = simulannealbnd(fun,x0,lb,ub)
simulannealbnd stopped because the change in best function value is less than options.FunctionTolerance.
x = 1×2

  -15.9790  -31.9593

El algoritmo simulannealbnd utiliza el flujo de números aleatorios MATLAB®, por lo que es posible que obtenga un resultado diferente.

Observe el progreso de simulannealbnd configurando opciones para usar algunas funciones de gráfico.

Establezca opciones de recocido simulado para utilizar varias funciones de gráfico.

options = optimoptions('simulannealbnd','PlotFcns',...
          {@saplotbestx,@saplotbestf,@saplotx,@saplotf});

Inicie simulannealbnd desde el punto [0,0] y establezca límites inferiores de -64 y límites superiores de 64 en cada componente. Minimice dejong5fcn, que está disponible cuando ejecuta este ejemplo.

rng default % For reproducibility
fun = @dejong5fcn;
x0 = [0,0];
lb = [-64,-64];
ub = [64,64];
x = simulannealbnd(fun,x0,lb,ub,options)

Figure Simulated Annealing contains 4 axes objects. Axes object 1 with title Best Point, xlabel Variable number, ylabel Best point contains an object of type bar. Axes object 2 with title Best Function Value: 1.99203, xlabel Iteration, ylabel Function value contains an object of type scatter. Axes object 3 with title Current Point, xlabel Variable number, ylabel Current point contains an object of type bar. Axes object 4 with title Current Function Value: 1.99203, xlabel Iteration, ylabel Function value contains an object of type scatter.

simulannealbnd stopped because the change in best function value is less than options.FunctionTolerance.
x = 1×2

  -15.9790  -31.9593

Obtenga todas las salidas de una minimización de recocido simulado.

Grafique la quinta función de De Jong, que está disponible cuando ejecuta este ejemplo.

dejong5fcn

Figure contains an axes object. The axes object contains 2 objects of type surface, contour.

Inicie simulannealbnd desde el punto [0,0] y establezca límites inferiores de -64 y límites superiores de 64 en cada componente.

fun = @dejong5fcn;
x0 = [0,0];
lb = [-64,-64];
ub = [64,64];
[x,fval,exitflag,output] = simulannealbnd(fun,x0,lb,ub)
simulannealbnd stopped because the change in best function value is less than options.FunctionTolerance.
x = 1×2

  -15.9790  -31.9593

fval = 
1.9920
exitflag = 
1
output = struct with fields:
     iterations: 1762
      funccount: 1779
        message: 'simulannealbnd stopped because the change in best function value is less than options.FunctionTolerance.'
       rngstate: [1x1 struct]
    problemtype: 'boundconstraints'
    temperature: [2x1 double]
      totaltime: 0.9367

El algoritmo simulannealbnd utiliza el flujo de números aleatorios MATLAB®, por lo que es posible que obtenga un resultado diferente.

Argumentos de entrada

contraer todo

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

fun se puede especificar como un identificador de función para un archivo:

x = simulannealbnd(@myfun,x0)

donde myfun es una función de 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 = simulannealbnd(@(x)norm(x)^2,x0,lb,ub);

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

Tipos de datos: char | function_handle | string

Punto inicial, especificado como un vector real. simulannealbnd 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

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 todo 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 todo 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

Opciones de optimización, especificadas como un objeto devuelto por optimoptions o una estructura. Para obtener más detalles, consulte Simulated Annealing Options.

optimoptions oculta las opciones enumeradas en cursiva; consulte Options that optimoptions Hides .

{} denota el valor predeterminado. Vea los detalles de la opción en Simulated Annealing Options .

OpciónDescripciónValores

AcceptanceFcn

Función que utiliza el algoritmo para determinar si se acepta un nuevo punto. Especifique como 'acceptancesa' o un identificador de función.

Identificador de función | {'acceptancesa'}

AnnealingFcn

Función que utiliza el algoritmo para generar nuevos puntos. Especifique como nombre de una función de recocido incorporada o un identificador de función.

Identificador de la función | nombre de la función | 'annealingboltz' | {'annealingfast'}

DataType

Tipo de variable de decisión

'custom' | {'double'}

Display

Nivel de visualización

'off' | 'iter' | 'diagnose' | {'final'}

DisplayInterval

Intervalo para visualización iterativa

Entero positivo | {10}

FunctionTolerance

Tolerancia de terminación en el valor de la función

Para una estructura de opciones, utilice TolFun .

Escalar no negativo | {1e-6}

HybridFcn

Ejecutar automáticamente HybridFcn (otra función de optimización) durante o al final de las iteraciones del solucionador. Especifique como un nombre o un identificador de función.

Consulte Cuándo utilizar una función híbrida.

'fminsearch' | 'patternsearch' | 'fminunc' | 'fmincon' | {[]}

o

Arreglo de celdas de 1 por 2 | {@solver, hybridoptions}, donde solver = fminsearch, patternsearch, fminunc o fmincon {[]}.

HybridInterval

Intervalo (si no es 'end' o 'never') en el que se llama a HybridFcn

Entero positivo | 'never' | {'end'}

InitialTemperature

Valor inicial de la temperatura

Escalar no negativo | vector positivo | {100}

MaxFunctionEvaluations

Número máximo de evaluaciones de funciones objetivas permitidas

Para una estructura de opciones, utilice MaxFunEvals .

Número entero no negativo | {3000*numberOfVariables}

MaxIterations

Número máximo de iteraciones permitidas

Para una estructura de opciones, utilice MaxIter .

Número entero no negativo | {Inf}

MaxStallIterations

Número de iteraciones en las que el cambio promedio en el valor de la función de aptitud en el punto actual es menor que options.FunctionTolerance

Para una estructura de opciones, utilice StallIterLimit .

Número entero no negativo | {500*numberOfVariables}

MaxTime

El algoritmo se detiene después de ejecutarse durante MaxTime segundos

Para una estructura de opciones, utilice TimeLimit .

Escalar no negativo | {Inf}

ObjectiveLimit

Valor mínimo de la función objetivo deseado

Escalar | {-Inf}

OutputFcn

Las funciones obtienen datos iterativos y pueden cambiar opciones en tiempo de ejecución

Para una estructura de opciones, utilice OutputFcns .

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

PlotFcn

Función(es) de gráfico llamadas durante las iteraciones

Para una estructura de opciones, utilice PlotFcns .

Identificador de función | nombre de función gráfica integrada | arreglo de celdas de identificadores de función | arreglo de celdas de nombres de funciones gráficas integradas | 'saplotbestf' | 'saplotbestx' | 'saplotf' | 'saplotstopping' | 'saplottemperature' | {[]}

PlotInterval

Las funciones de representación se llaman en cada intervalo

Entero positivo | {1}

ReannealInterval

Intervalo de recocido

Número entero no negativo | {100}

TemperatureFcn

Función utilizada para actualizar el cronograma de temperaturas

Identificador de función | Nombre de la función de temperatura incorporada | 'temperatureboltz' | 'temperaturefast' | {'temperatureexp'}

Ejemplo: options = optimoptions(@simulannealbnd,'MaxIterations',150)

Tipos de datos: struct

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

  • objective — Función objetivo

  • x0 — Punto de partida

  • lb — Límite inferior para x

  • ub — Límite superior para x

  • solver'simulannealbnd'

  • options — Opciones creadas con optimoptions o una estructura de opciones

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

Nota

problem debe tener todos los campos especificados anteriormente.

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. Habitualmente, x es una solución local al problema cuando exitflag es positivo.

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 simulannealbnd se ha detenido, devuelta como un entero.

Indicador de salidaSignificado
1

El cambio promedio en el valor de la función objetivo a lo largo de options.MaxStallIterations iteraciones es inferior a options.FunctionTolerance.

5

El valor de la función objetivo es inferior a options.ObjectiveLimit.

0

Se alcanzó el número máximo de evaluaciones o iteraciones de funciones.

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

-5

Se ha sobrepasado el límite de tiempo.

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

  • problemtype — Tipo de problema: sin restricciones o con restricciones limitadas.

  • iterations — El número de iteraciones calculadas.

  • funccount — El número de evaluaciones de la función objetivo.

  • message — La razón por la que finalizó el algoritmo.

  • temperature — Temperatura cuando finalizó el solucionador.

  • totaltime — Tiempo total que tarda el solucionador en ejecutarse.

  • 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 de simulannealbnd. Consulte Reproduce Your Results.

Funcionalidad alternativa

App

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

Historial de versiones

Introducido en R2007a