Contenu principal

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

GlobalSearch

Description

Un objet GlobalSearch contient des propriétés (options) qui affectent la manière dont run exécute à plusieurs reprises un solveur local pour générer un objet GlobalOptimSolution. Lorsqu'il est exécuté, le solveur tente de localiser une solution qui a la valeur de fonction objectif la plus basse.

Création

Description

gs = GlobalSearch crée gs, un solveur GlobalSearch avec ses propriétés définies par défaut.

exemple

gs = GlobalSearch(Name,Value) définit les propriétés à l'aide de paires nom-valeur.

exemple

gs = GlobalSearch(oldGS,Name,Value) crée une copie du solveur oldGS GlobalSearch et définit les propriétés à l'aide de paires nom-valeur.

exemple

gs = GlobalSearch(ms) crée gs, un solveur GlobalSearch, avec des valeurs de propriétés communes du solveur ms MultiStart.

exemple

Propriétés

développer tout

Facteur de diminution du rayon du bassin, spécifié sous la forme d'un scalaire de 0 à 1. Le rayon d'un bassin diminue lorsque MaxWaitCycle points de départ consécutifs se trouvent dans le bassin. Le rayon du bassin diminue d’un facteur 1 – BasinRadiusFactor.

Définissez BasinRadiusFactor sur 0 pour désactiver les mises à jour du rayon du bassin.

Exemple : 0.5

Types de données : double

Niveau d'affichage dans la fenêtre de commande, spécifié comme l'un des vecteurs de caractères ou chaînes de caractères suivants :

  • 'final' – Rapport récapitulatif des résultats une fois run terminé.

  • 'iter' – Rapport des résultats après l'exécution initiale fmincon, après l'étape 1, après chaque 200 points de départ et après chaque exécution de fmincon, en plus du résumé final.

  • 'off' – Pas d’affichage.

Exemple : 'iter'

Types de données : char | string

Multiplicateur permettant de déterminer si un point d'essai se trouve dans un bassin d'attraction existant, spécifié comme un scalaire non négatif. Pour plus de détails, voir Examine Stage 2 Trial Point to See if fmincon Runs.

Exemple : 0.5

Types de données : double

Tolérance sur les valeurs de fonction pour considérer les solutions comme égales, spécifiée comme un scalaire non négatif. Les solveurs considèrent deux solutions identiques si elles sont à une distance relative de XTolerance l'une de l'autre et si leurs valeurs de fonction objectif sont à une différence relative de FunctionTolerance l'une de l'autre. Si les deux conditions ne sont pas remplies, les solveurs signalent les solutions comme distinctes. Définissez FunctionTolerance sur 0 pour obtenir les résultats de chaque exécution du solveur local. Définissez FunctionTolerance sur une valeur plus grande pour avoir moins de résultats. Pour plus de détails sur GlobalSearch, voir Update Solution Set dans When fmincon Runs. Pour plus de détails sur MultiStart, voir Create GlobalOptimSolution Object.

Exemple : 1e-4

Types de données : double

Durée maximale en secondes pendant laquelle GlobalSearch s'exécute, spécifiée sous la forme d'un scalaire positif. GlobalSearch et ses solveurs locaux s'arrêtent lorsque MaxTime secondes se sont écoulées depuis le début de l'exécution, comme mesuré par tic et toc.

MaxTime n'interrompt pas les solveurs locaux pendant une exécution, donc le temps total peut dépasser MaxTime.

Exemple : 180 arrête le solveur la première fois qu'un appel de solveur local se termine après 180 secondes.

Types de données : double

Paramètre de contrôle de l'algorithme, spécifié sous la forme d'un entier positif.

  • Si la fonction de pénalité observée de MaxWaitCycle points d'essai consécutifs est au moins égale au seuil de pénalité, augmentez alors le seuil de pénalité (voir PenaltyThresholdFactor).

  • Si MaxWaitCycle points d'essai consécutifs se trouvent dans un bassin, mettez à jour le rayon de ce bassin (voir BasinRadiusFactor).

Exemple : 40

Types de données : double

Nombre de points de l'étape 1, spécifié sous la forme d'un entier positif. Pour plus de détails, voir Obtain Stage 1 Start Point, Run.

Exemple : 1000

Types de données : double

Nombre de points de départ potentiels, spécifié sous la forme d'un entier positif.

Exemple : 3e4

Types de données : double

Rapport sur la progression du solveur ou arrêt du solveur, spécifié sous la forme d'un handle de fonction ou d'un cell array de handles de fonction. Les fonctions de sortie s'exécutent après chaque appel du solveur local. Ils s'exécutent également lorsque le solveur global démarre et se termine. Écrivez les fonctions de sortie en utilisant la syntaxe décrite dans OutputFcn. Voir Custom GlobalSearch Output Function.

La fonction de sortie @savelocalsolutions intégrée enregistre toutes les solutions locales dans la variable localSolTable dans l'espace de travail de base. Cette fonction de sortie enregistre les solutions locales irréalisables ainsi que les solutions locales réalisables. Pour un exemple, voir Collect All Local Solutions.

Types de données : cell | function_handle

Augmentation du seuil de pénalité, spécifié comme un scalaire positif. Pour plus de détails, voir Réagir aux valeurs de compteur élevées.

Exemple : 0.4

Types de données : double

Tracer la progression du solveur, spécifiée sous la forme d'un handle de fonction ou d'un cell array de handles de fonction. Les fonctions de tracé s'exécutent après chaque appel du solveur local. Ils s'exécutent également lorsque le solveur global démarre et se termine. Écrivez des fonctions de tracé en utilisant la syntaxe décrite dans OutputFcn.

Il existe deux fonctions de tracé intégrées :

  • @gsplotbestf trace la meilleure valeur de fonction objectif.

  • @gsplotfunccount trace le nombre d'évaluations de fonctions.

Voir MultiStart Plot Function.

Exemple : @gsplotbestf

Types de données : cell | function_handle

Points de départ à exécuter, spécifiés comme :

  • 'all' — Exécutez tous les points de départ.

  • 'bounds' — Exécutez uniquement les points de départ qui satisfont les limites.

  • 'bounds-ineqs' — Exécutez uniquement les points de départ qui satisfont aux contraintes de limites et d’inégalité.

GlobalSearch vérifie la propriété StartPointsToRun uniquement pendant l'étape 2 de l'algorithme GlobalSearch (la boucle principale). Pour plus d'informations, voir GlobalSearch Algorithm.

Exemple : 'bounds' exécute uniquement les points qui satisfont toutes les limites.

Types de données : char | string

Tolérance sur la distance pour considérer les solutions comme égales, spécifiée comme un scalaire non négatif. Les solveurs considèrent deux solutions identiques si elles sont à une distance relative de XTolerance l'une de l'autre et si leurs valeurs de fonction objectif sont à une différence relative de FunctionTolerance l'une de l'autre. Si les deux conditions ne sont pas remplies, les solveurs signalent les solutions comme distinctes. Définissez XTolerance sur 0 pour obtenir les résultats de chaque exécution du solveur local. Définissez XTolerance sur une valeur plus grande pour avoir moins de résultats. Pour plus de détails sur GlobalSearch, voir Update Solution Set dans When fmincon Runs. Pour plus de détails sur MultiStart, voir Create GlobalOptimSolution Object.

Exemple : 2e-4

Types de données : double

Fonctions d'objet

runRun multiple-start solver

Exemples

réduire tout

Créez un problème d’optimisation comportant plusieurs minima locaux et essayez de trouver le minimum global à l’aide de GlobalSearch. L'objectif est le problème du dos de chameau à six bosses (voir Run the Solver).

rng default % For reproducibility
gs = GlobalSearch;
sixmin = @(x)(4*x(1)^2 - 2.1*x(1)^4 + x(1)^6/3 ...
    + x(1)*x(2) - 4*x(2)^2 + 4*x(2)^4);
problem = createOptimProblem('fmincon','x0',[-1,2],...
    'objective',sixmin,'lb',[-3,-3],'ub',[3,3]);
x = run(gs,problem)
GlobalSearch stopped because it analyzed all the trial points.

All 8 local solver runs converged with a positive local solver exit flag.
x = 1×2

   -0.0898    0.7127

Vous pouvez demander la valeur de la fonction objectif à x lorsque vous appelez run en utilisant la syntaxe suivante :

[x,fval] = run(gs,problem)

Cependant, si vous avez oublié de demander fval, vous pouvez toujours calculer la valeur de la fonction objectif à x.

fval = sixmin(x)
fval = 
-1.0316

Considérons une fonction avec plusieurs minima locaux.

fun = @(x) x.^2 + 4*sin(5*x);
fplot(fun,[-5,5])

Figure contains an axes object. The axes object contains an object of type functionline.

Pour rechercher le minimum global, exécutez GlobalSearch en utilisant l'algorithme fmincon 'sqp'.

rng default % For reproducibility
opts = optimoptions(@fmincon,'Algorithm','sqp');
problem = createOptimProblem('fmincon','objective',...
    fun,'x0',3,'lb',-5,'ub',5,'options',opts);
gs = GlobalSearch;
[x,f] = run(gs,problem)
GlobalSearch stopped because it analyzed all the trial points.

All 23 local solver runs converged with a positive local solver exit flag.
x = 
-0.3080
f = 
-3.9032

Créez un objet MultiStart sans utiliser les valeurs de tolérance par défaut.

ms = MultiStart('FunctionTolerance',2e-4,'UseParallel',true)
ms = 
  MultiStart with properties:

          UseParallel: 1
              Display: 'final'
    FunctionTolerance: 2.0000e-04
              MaxTime: Inf
            OutputFcn: []
              PlotFcn: []
     StartPointsToRun: 'all'
           XTolerance: 1.0000e-06

Créez un objet GlobalSearch qui utilise les propriétés disponibles à partir de ms.

gs = GlobalSearch(ms)
gs = 
  GlobalSearch with properties:

             NumTrialPoints: 1000
          BasinRadiusFactor: 0.2000
    DistanceThresholdFactor: 0.7500
               MaxWaitCycle: 20
          NumStageOnePoints: 200
     PenaltyThresholdFactor: 0.2000
                    Display: 'final'
          FunctionTolerance: 2.0000e-04
                    MaxTime: Inf
                  OutputFcn: []
                    PlotFcn: []
           StartPointsToRun: 'all'
                 XTolerance: 1.0000e-06

gs a la même valeur personnalisée (pas celle par défaut) de FunctionTolerance que ms. Mais gs n'utilise pas la propriété UseParallel.

Créez un objet GlobalSearch avec une FunctionTolerance de 1e-4.

gs = GlobalSearch('FunctionTolerance',1e-4)
gs = 
  GlobalSearch with properties:

             NumTrialPoints: 1000
          BasinRadiusFactor: 0.2000
    DistanceThresholdFactor: 0.7500
               MaxWaitCycle: 20
          NumStageOnePoints: 200
     PenaltyThresholdFactor: 0.2000
                    Display: 'final'
          FunctionTolerance: 1.0000e-04
                    MaxTime: Inf
                  OutputFcn: []
                    PlotFcn: []
           StartPointsToRun: 'all'
                 XTolerance: 1.0000e-06

Mettez à jour la propriété XTolerance en 1e-3 et la propriété StartPointsToRun en 'bounds'.

gs = GlobalSearch(gs,'XTolerance',1e-3,'StartPointsToRun','bounds')
gs = 
  GlobalSearch with properties:

             NumTrialPoints: 1000
          BasinRadiusFactor: 0.2000
    DistanceThresholdFactor: 0.7500
               MaxWaitCycle: 20
          NumStageOnePoints: 200
     PenaltyThresholdFactor: 0.2000
                    Display: 'final'
          FunctionTolerance: 1.0000e-04
                    MaxTime: Inf
                  OutputFcn: []
                    PlotFcn: []
           StartPointsToRun: 'bounds'
                 XTolerance: 1.0000e-03

Vous pouvez également mettre à jour les propriétés une par une en utilisant la notation par points.

gs.MaxTime = 1800
gs = 
  GlobalSearch with properties:

             NumTrialPoints: 1000
          BasinRadiusFactor: 0.2000
    DistanceThresholdFactor: 0.7500
               MaxWaitCycle: 20
          NumStageOnePoints: 200
     PenaltyThresholdFactor: 0.2000
                    Display: 'final'
          FunctionTolerance: 1.0000e-04
                    MaxTime: 1800
                  OutputFcn: []
                    PlotFcn: []
           StartPointsToRun: 'bounds'
                 XTolerance: 1.0000e-03

Algorithmes

Pour une description détaillée de l'algorithme, voir GlobalSearch Algorithm. Ugray et al. [1] décrivent à la fois l'algorithme et la méthode de recherche par dispersion pour générer des points d'essai.

Références

[1] Ugray, Zsolt, Leon Lasdon, John Plummer, Fred Glover, James Kelly, and Rafael Martí. Scatter Search and Local NLP Solvers: A Multistart Framework for Global Optimization. INFORMS Journal on Computing, Vol. 19, No. 3, 2007, pp. 328–340.

Historique des versions

Introduit dans R2010a

développer tout