Contenu principal

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

MultiStart

Trouver plusieurs minima locaux

Description

Un objet MultiStart 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 trouver plusieurs solutions locales à un problème en partant de différents points.

Création

Description

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

exemple

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

exemple

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

exemple

ms = MultiStart(gs) crée ms, un solveur MultiStart, avec des valeurs de paramètres communes du solveur gs GlobalSearch.

exemple

Propriétés

développer tout

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

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 MultiStart s'exécute, spécifiée sous la forme d'un scalaire positif. MultiStart 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

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

Progression du solveur de tracé, 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é.

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

Types de données : char | string

Distribuez les appels du solveur local à plusieurs processeurs, spécifiés comme false ou true.

  • false — Ne pas exécuter en parallèle.

  • true — Distribuez les appels du solveur local à plusieurs processeurs.

Exemple : true

Types de données : logical

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

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 MultiStart sur 20 instances du problème à l'aide de 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);
ms = MultiStart;
[x,f] = run(ms,problem,20)
MultiStart completed the runs from all start points. 

All 20 local solver runs converged with a positive local solver exitflag.
x = 
-0.3080
f = 
-3.9032

Créez un objet MultiStart avec des propriétés par défaut.

ms = MultiStart
ms = 
  MultiStart with properties:

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

Créez un objet MultiStart avec des tolérances plus lâches que celles par défaut, afin que le solveur renvoie moins de solutions proches les unes des autres. De plus, faites en sorte que MultiStart exécute uniquement les points initiaux qui sont réalisables par rapport aux limites et aux contraintes d’inégalité.

ms = MultiStart('FunctionTolerance',2e-4,'XTolerance',5e-3,...
    'StartPointsToRun','bounds-ineqs')
ms = 
  MultiStart with properties:

          UseParallel: 0
              Display: 'final'
    FunctionTolerance: 2.0000e-04
              MaxTime: Inf
            OutputFcn: []
              PlotFcn: []
     StartPointsToRun: 'bounds-ineqs'
           XTolerance: 0.0050

Créez un objet GlobalSearch sans utiliser les valeurs par défaut.

gs = GlobalSearch('FunctionTolerance',2e-4,'NumTrialPoints',2000)
gs = 
  GlobalSearch with properties:

             NumTrialPoints: 2000
          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

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

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

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

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

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

ms = MultiStart('FunctionTolerance',1e-4)
ms = 
  MultiStart with properties:

          UseParallel: 0
              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'.

ms = MultiStart(ms,'XTolerance',1e-3,'StartPointsToRun','bounds')
ms = 
  MultiStart with properties:

          UseParallel: 0
              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.

ms.MaxTime = 1800
ms = 
  MultiStart with properties:

          UseParallel: 0
              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 MultiStart Algorithm.

Capacités étendues

développer tout

Historique des versions

Introduit dans R2010a

développer tout