Contenu principal

Cette page a été traduite par traduction automatique. Cliquez ici pour voir la dernière version en anglais.

simulannealbnd

Trouver le minimum de fonction en utilisant l'algorithme de recuit simulé

Description

x = simulannealbnd(fun,x0) trouve un minimum local, x, pour la fonction handle fun qui calcule les valeurs de la fonction objectif. x0 est un point initial pour l'algorithme de recuit simulé, un vecteur réel.

Remarque

Passing Extra Parameters explique comment passer des paramètres supplémentaires à la fonction objectif, si nécessaire.

exemple

x = simulannealbnd(fun,x0,lb,ub) définit un ensemble de limites inférieures et supérieures sur les variables de conception dans x, de sorte que la solution soit toujours dans la plage lb x ub. Si x(i) n'est pas borné en dessous, définissez lb(i) = -Inf, et si x(i) n'est pas borné au dessus, définissez ub(i) = Inf.

exemple

x = simulannealbnd(fun,x0,lb,ub,options) minimise avec les options d'optimisation spécifiées dans options. Créez options en utilisant optimoptions. S'il n'existe aucune limite, définissez lb = [] et/ou ub = [].

exemple

x = simulannealbnd(problem) trouve le minimum pour problem, une structure décrite dans problem.

[x,fval] = simulannealbnd(___), quelle que soit la syntaxe, renvoie la valeur de la fonction objectif fun à la solution x.

[x,fval,exitflag,output] = simulannealbnd(___) renvoie également une valeur exitflag qui décrit la condition de sortie de simulannealbnd et une structure output avec des informations sur le processus d'optimisation.

exemple

Exemples

réduire tout

Minimiser la cinquième fonction de De Jong, une fonction bidimensionnelle avec de nombreux minima locaux. Cette fonction est disponible lorsque vous exécutez cet exemple.

Tracez la cinquième fonction de De Jong.

dejong5fcn

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

Minimisez la cinquième fonction de De Jong en utilisant simulannealbnd à partir du point [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

L'algorithme simulannealbnd utilise le flux de nombres aléatoires MATLAB ®, vous pourriez donc obtenir un résultat différent.

Minimiser la cinquième fonction de De Jong dans une région délimitée. Cette fonction est disponible lorsque vous exécutez cet exemple.

Tracez la cinquième fonction de De Jong.

dejong5fcn

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

Démarrez simulannealbnd à partir du point [0,0] et définissez des limites inférieures de -64 et des limites supérieures de 64 sur chaque composant.

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

L'algorithme simulannealbnd utilise le flux de nombres aléatoires MATLAB ®, vous pourriez donc obtenir un résultat différent.

Observez la progression de simulannealbnd en définissant des options pour utiliser certaines fonctions de tracé.

Définissez les options de recuit simulé pour utiliser plusieurs fonctions de tracé.

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

Démarrez simulannealbnd à partir du point [0,0] et définissez des limites inférieures de -64 et des limites supérieures de 64 sur chaque composant. Minimisez le dejong5fcn, qui est disponible lorsque vous exécutez cet exemple.

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

Obtenir toutes les sorties d’une minimisation de recuit simulé.

Tracez la cinquième fonction de De Jong, qui est disponible lorsque vous exécutez cet exemple.

dejong5fcn

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

Démarrez simulannealbnd à partir du point [0,0] et définissez des limites inférieures de -64 et des limites supérieures de 64 sur chaque composant.

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

L'algorithme simulannealbnd utilise le flux de nombres aléatoires MATLAB ®, vous pourriez donc obtenir un résultat différent.

Arguments d'entrée

réduire tout

Fonction à minimiser, spécifiée comme un handle de fonction ou un nom de fonction. fun est une fonction qui accepte un vecteur x et renvoie un scalaire réel f, la fonction objectif évaluée à x.

fun peut être spécifié comme un handle de fonction pour un fichier :

x = simulannealbnd(@myfun,x0)

myfun est une fonction MATLAB® telle que

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

fun peut également être un handle de fonction pour une fonction anonyme :

x = simulannealbnd(@(x)norm(x)^2,x0,lb,ub);

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

Types de données : char | function_handle | string

Point initial, spécifié comme un vecteur réel. simulannealbnd utilise le nombre d'éléments dans x0 pour déterminer le nombre de variables que fun accepte.

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

Types de données : double

Limites inférieures, spécifiées sous forme de vecteur réel ou de tableau réel. Si le nombre d'éléments dans x0 est égal à celui de lb, alors lb spécifie que

x(i) >= lb(i) pour tous les i.

Si numel(lb) < numel(x0), alors lb spécifie que

x(i) >= lb(i) pour 1 <= i <= numel(lb).

Dans ce cas, les solveurs émettent un avertissement.

Exemple : Pour spécifier que toutes les variables de contrôle sont positives, lb = zeros(size(x0))

Types de données : double

Limites supérieures, spécifiées sous forme de vecteur réel ou de tableau réel. Si le nombre d'éléments dans x0 est égal à celui de ub, alors ub spécifie que

x(i) <= ub(i) pour tous les i.

Si numel(ub) < numel(x0), alors ub spécifie que

x(i) <= ub(i) pour 1 <= i <= numel(ub).

Dans ce cas, les solveurs émettent un avertissement.

Exemple : Pour spécifier que toutes les variables de contrôle sont inférieures à un, ub = ones(size(x0))

Types de données : double

Options d'optimisation, spécifiées sous la forme d'un objet renvoyé par optimoptions ou d'une structure. Pour plus de détails, voir Simulated Annealing Options.

optimoptions masque les options listées en italique; voir Options that optimoptions Hides.

{} désigne la valeur par défaut. Voir les détails de l'option dans Simulated Annealing Options.

OptionDescriptionValeurs

AcceptanceFcn

Fonction utilisée par l'algorithme pour déterminer si un nouveau point est accepté. Spécifiez comme 'acceptancesa' ou un handle de fonction.

Handle de fonction | {'acceptancesa'}

AnnealingFcn

Fonction utilisée par l'algorithme pour générer de nouveaux points. Spécifiez comme nom d'une fonction de recuit intégrée ou d'un handle de fonction.

Handle de fonction | nom de fonction | 'annealingboltz' | {'annealingfast'}

DataType

Type de variable de décision

'custom' | {'double'}

Display

Niveau d'affichage

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

DisplayInterval

Intervalle pour l'affichage itératif

Entier positif | {10}

FunctionTolerance

Tolérance de terminaison sur la valeur de la fonction

Pour une structure d'options, utilisez TolFun.

Scalaire non négatif | {1e-6}

HybridFcn

Exécutez automatiquement HybridFcn (une autre fonction d'optimisation) pendant ou à la fin des itérations du solveur. Spécifier comme un nom ou un handle de fonction.

Voir Quand utiliser une fonction hybride.

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

ou

cell array 1 par 2 | {@solver, hybridoptions}, où solver = fminsearch, patternsearch, fminunc ou fmincon {[]}

HybridInterval

Intervalle (si ce n'est pas 'end' ou 'never') auquel HybridFcn est appelé

Entier positif | 'never' | {'end'}

InitialTemperature

Valeur initiale de la température

Scalaire non négatif | vecteur positif | {100}

MaxFunctionEvaluations

Nombre maximal d'évaluations de fonctions objectif autorisées

Pour une structure d'options, utilisez MaxFunEvals.

Entier non négatif | {3000*numberOfVariables}

MaxIterations

Nombre maximal d'itérations autorisées

Pour une structure d'options, utilisez MaxIter.

Entier non négatif | {Inf}

MaxStallIterations

Nombre d'itérations pour lesquelles la variation moyenne de la valeur de la fonction fitness au point actuel est inférieure à options.FunctionTolerance

Pour une structure d'options, utilisez StallIterLimit.

Entier non négatif | {500*numberOfVariables}

MaxTime

L'algorithme s'arrête après avoir fonctionné pendant MaxTime secondes

Pour une structure d'options, utilisez TimeLimit.

Scalaire non négatif | {Inf}

ObjectiveLimit

Valeur minimale de la fonction objectif souhaitée

Scalaire | {-Inf}

OutputFcn

La ou les fonctions obtiennent des données itératives et peuvent modifier les options au moment de l'exécution

Pour une structure d'options, utilisez OutputFcns.

Handle de fonction | cell array de handles de fonction | {[]}

PlotFcn

Fonction(s) de tracé appelée(s) pendant les itérations

Pour une structure d'options, utilisez PlotFcns.

Handle de fonction | nom de fonction de tracé intégrée | cell array de handles de fonction | cell array de noms de fonctions de tracé intégrées | 'saplotbestf' | 'saplotbestx' | 'saplotf' | 'saplotstopping' | 'saplottemperature' | {[]}

PlotInterval

Les fonctions de tracé sont appelées à chaque intervalle

Entier positif | {1}

ReannealInterval

Intervalle de recuit

Entier non négatif | {100}

TemperatureFcn

Fonction utilisée pour mettre à jour le programme de température

Handle de fonction | nom de la fonction de température intégrée | 'temperatureboltz' | 'temperaturefast' | {'temperatureexp'}

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

Types de données : struct

Structure du problème, spécifiée comme une structure avec les champs suivants :

  • objective — Fonction objectif

  • x0 — Point de départ

  • lb — Borne inférieure pour x

  • ub — Borne supérieure pour x

  • solver'simulannealbnd'

  • options — Options créées avec optimoptions ou une structure d'options

  • rngstate — Champ facultatif pour réinitialiser l'état du générateur de nombres aléatoires

Note

problem doit contenir tous les champs spécifiés ci-dessus.

Types de données : struct

Arguments de sortie

réduire tout

Solution, renvoyée sous forme de vecteur réel. La taille de x est la même que la taille de x0. En règle générale, x est une solution locale au problème lorsque exitflag est positif.

Valeur de la fonction objectif à la solution, renvoyée sous forme de nombre réel. Généralement, fval = fun(x).

Raison de l'arrêt simulannealbnd, renvoyée sous forme d'entier.

Exit FlagSignification
1

La variation moyenne de la valeur de la fonction objectif sur options.MaxStallIterations itérations est inférieure à options.FunctionTolerance.

5

La valeur de la fonction objectif est inférieure à options.ObjectiveLimit.

0

Nombre maximal d'évaluations ou d'itérations de fonctions atteint.

-1

Optimisation terminée par une fonction de sortie ou une fonction de tracé.

-2

Aucun point possible n'a été trouvé.

-5

Délai de temps dépassé.

Informations sur le processus d'optimisation, renvoyées sous forme de structure avec des champs :

  • problemtype — Type de problème : sans contrainte ou avec contrainte liée.

  • iterations — Le nombre d’itérations calculées.

  • funccount — Le nombre d’évaluations de la fonction objectif.

  • message — La raison pour laquelle l’algorithme s’est terminé.

  • temperature — Température à la fin du solveur.

  • totaltime — Temps total d’exécution du solveur.

  • rngstate — État du générateur de nombres aléatoires MATLAB, juste avant le démarrage de l'algorithme. Vous pouvez utiliser les valeurs de rngstate pour reproduire la sortie de simulannealbnd. Voir Reproduce Your Results.

Fonctionnalités alternatives

Application

La tâche Optimize du Live Editor fournit une interface visuelle pour simulannealbnd.

Historique des versions

Introduit dans R2007a