Суррогатная оптимизация в Simulink Design Optimization

В этом примере показано, как использовать суррогатную оптимизацию в Simulink Design Optimization™, чтобы оптимизировать проект гидравлического цилиндра.

Этот пример требует программного обеспечения Parallel Computing Toolbox™.

Суррогатная оптимизация

Решение задач оптимизации включает использующие различные значения переменных проекта и выполнения целевой функции многократно, особенно если целевая функция достаточно несглаженна таким образом, что основанный на производной решатель не подходит. В таких случаях вы можете должны быть использовать решатель без производных, такой как patternsearch, но эти решатели имеют тенденцию требовать выполнения целевой функции намного больше раз. Используя такой решатель может быть трудоемким, если целевая функция является в вычислительном отношении дорогой, чтобы оценить. Одним способом преодолеть эту проблему является суррогатная оптимизация. Этот подход создает суррогат дорогой целевой функции. Суррогат может быть оценен быстро и дает результаты, очень похожие на исходную целевую функцию. Суррогатная оптимизация также пробует много начальных точек, который помогает найти глобальный оптимум, вместо того, чтобы сходиться на решении, которое, в то время как локально оптимальный, не может быть глобальным оптимумом.

Модель гидроцилиндра

В этом примере показано, как использовать суррогатную оптимизацию, чтобы оптимизировать ответ гидравлического цилиндра. Откройте модель.

open_system('sdoHydraulicCylinder')

Модель гидроцилиндра основана на модели Simulink sldemo_hydcyl. Модель включает:

  • Pump и Cylinder Assembly подсистемы. Для получения дополнительной информации о подсистемах смотрите Симуляцию одиночного гидравлического цилиндра.

  • Ступенчатое изменение применилось к цилиндрической площади постоянного отверстия распределительного клапана, которая заставляет положение поршня гидроцилиндра изменяться.

Задайте переменные проекта

Теперь задайте переменные проекта, чтобы настроиться: цилиндрическая площадь поперечного сечения Ac и поршневой коэффициент упругости K.

DesignVars = sdo.getParameterFromModel('sdoHydraulicCylinder',{'Ac','K'});
DesignVars(1).Value = 1e-3;
DesignVars(1).Minimum = 0.0003;
DesignVars(1).Maximum = 0.0013;
DesignVars(1).Scale = 0.001;

DesignVars(2).Value = 50000;
DesignVars(2).Minimum = 10000;
DesignVars(2).Maximum = 100000;
DesignVars(2).Scale = 1;

Задайте конструктивные требования

Затем задайте конструктивные требования, чтобы удовлетворить следующим условиям во время оптимизации:

  • Давление остается менее чем 1 750 000 Н/м.

  • Переходной процесс положения поршня удовлетворяет времени нарастания 0,04 секунд и времени урегулирования 0,05 секунд.

Requirements = struct;
Requirements.MaxPressure = sdo.requirements.SignalBound(...
    'BoundMagnitudes', [1750000 1750000], ...
    'BoundTimes', [0 0.1]);
Requirements.PistonResponse = sdo.requirements.StepResponseEnvelope(...
    'FinalValue', 0.04, ...
    'PercentSettling', 1, ...
    'RiseTime', 0.04, ...
    'SettlingTime', 0.05);

Логгирование сигнала

Затем задайте сигналы модели регистрировать во время симуляции модели. Эти сигналы необходимы, чтобы оценить конструктивные требования, то есть, определить, удовлетворяют ли им.

Simulator = sdo.SimulationTest('sdoHydraulicCylinder');

PistonPosition_Info = Simulink.SimulationData.SignalLoggingInfo;
PistonPosition_Info.BlockPath = 'sdoHydraulicCylinder/Cylinder Assembly';
PistonPosition_Info.OutputPortIndex = 2;
PistonPosition_Info.LoggingInfo.LoggingName = 'PistonPosition';
PistonPosition_Info.LoggingInfo.NameMode = 1;

Pressures_Info = Simulink.SimulationData.SignalLoggingInfo;
Pressures_Info.BlockPath = 'sdoHydraulicCylinder/Cylinder Assembly';
Pressures_Info.LoggingInfo.LoggingName = 'Pressures';
Pressures_Info.LoggingInfo.NameMode = 1;

Simulator.LoggingInfo.Signals = [...
    PistonPosition_Info; ...
    Pressures_Info];

Создайте целевую функцию оптимизации

Создайте функцию, которая вызвана в каждой итерации оптимизации, чтобы оценить конструктивные требования. Используйте анонимную функцию с одним аргументом, который вызывает sdoHydraulicCylinder_optFcn.

optimfcn = @(P) sdoHydraulicCylinder_optFcn(P,Simulator,Requirements);

sdoHydraulicCylinder_optFcn функционируйте использует средство моделирования, и требования возражает, чтобы оценить проект. Введите edit sdoHydraulicCylinder_optFcn исследовать функцию более подробно.

Оптимизация Используя основанный на производной решатель

Теперь попытайтесь решить эту задачу оптимизации с помощью основанного на производной решателя. Задайте опции оптимизации.

Options = sdo.OptimizeOptions;
Options.Method = 'fmincon';
Options.UseParallel = true;
Options.OptimizedModel = Simulator;

Запустите оптимизацию путем вызова sdo.optimize с указателем целевой функции, параметры, чтобы оптимизировать, и опции.

[Optimized_DesignVars,Info] = sdo.optimize(optimfcn,DesignVars,Options);
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 6).
Configuring parallel workers for optimization...
Analyzing and transferring files to the workers ...done.
Parallel workers configured for optimization.

 Optimization started 15-Jul-2021 11:36:33

                               max                     First-order 
 Iter F-count        f(x)   constraint    Step-size    optimality
    0      5        0.001       0.3033
    1     10   0.00123343       0.3726        0.233          100
    2     20   0.00117522       0.3545       0.0582          100
    3     28   0.00121802       0.3678       0.0428          100
    4     39   0.00117879       0.3556       0.0392          100
    5     48   0.00120789       0.3646       0.0291          100
    6     60   0.00119077       0.3593       0.0171          100
    7     72   0.00119977       0.3621      0.00901          100
    8     80   0.00119977       0.3621      0.00089          100
Converged to an infeasible point.

fmincon stopped because the size of the current step is less than
the value of the step size tolerance but constraints are not
satisfied to within the value of the constraint tolerance.
Removing data from parallel workers...
Data removed from parallel workers.

В конце итераций оптимизации, "max constraint"столбец все еще положителен, указывая, что основанный на производной решатель не удовлетворяет всем требованиям.

Опции оптимизации Используя суррогатный решатель

Поскольку основанный на производной решатель не удовлетворяет всем требованиям, попробуйте surrogateopt как решатель без производных. Задайте опции оптимизации.

Options = sdo.OptimizeOptions;
Options.Method = 'surrogateopt';
Options.MethodOptions.MaxFunctionEvaluations = 100;
Options.UseParallel = true;
Options.OptimizedModel = Simulator;

Запустите оптимизацию путем вызова sdo.optimize с указателем целевой функции, параметры, чтобы оптимизировать, и опции.

[Optimized_DesignVars,Info] = sdo.optimize(optimfcn,DesignVars,Options);
Configuring parallel workers for optimization...
Analyzing and transferring files to the workers ...done.
Parallel workers configured for optimization.

 Optimization started 15-Jul-2021 11:37:23

                                                          Current            Current 
 F-count               f(x)     max constraint               f(x)     max constraint     Trial type
       1              0.001           0.303264              0.001           0.303264     initial
       2              0.001           0.303264             0.0003            0.41283     random
       3              0.001           0.303264             0.0008           0.982707     random
       4              0.001           0.303264            0.00055           0.573642     random
       5              0.001           0.303264            0.00105            1.25679     random
       6              0.001           0.303264                NaN                Inf     random
       7              0.001           0.303264           0.001175            2.14476     random
       8              0.001           0.303264                NaN                Inf     random
       9           0.000925           0.252177           0.000925           0.252177     random
      10           0.000925           0.252177                NaN                Inf     random
      11           0.000925           0.252177          0.0011125           0.333109     random
      12           0.000925           0.252177                NaN                Inf     random
      13           0.000925           0.252177          0.0008625           0.724191     random
      14           0.000925           0.252177                NaN                Inf     random
      15           0.000925           0.252177          0.0009875            1.46276     random
      16           0.000925           0.252177          0.0007375            4.26818     random
      17           0.000925           0.252177          0.0012375           0.399354     random
      18           0.000925           0.252177         0.00076875           0.985955     random
      19           0.000925           0.252177         0.00126875            1.39122     random
      20           0.000925           0.252177         0.00051875           0.477584     random
      21           0.000925           0.252177         0.00101875            1.23392     random
      22           0.000925           0.252177                NaN                Inf     random
      23         0.00089375           0.226608         0.00089375           0.226608     random
      24         0.00089375           0.226608                NaN                Inf     random
      25         0.00089375           0.226608         0.00114375            3.56038     random
      26         0.00089375           0.226608                NaN                Inf     random
      27         0.00089375           0.226608         0.00095625            8.44124     random
      28         0.00089375           0.226608                NaN                Inf     random
      29         0.00089375           0.226608         0.00120625           0.325598     random
      30         0.00058125          0.0293624         0.00058125          0.0293624     random
      31         0.00058125          0.0293624                NaN                Inf     adaptive
      32         0.00058125          0.0293624                NaN                Inf     adaptive
      33         0.00058125          0.0293624                NaN                Inf     adaptive
      34         0.00058125          0.0293624                NaN                Inf     adaptive
      35         0.00058125          0.0293624                NaN                Inf     adaptive
      36         0.00058125          0.0293624                NaN                Inf     adaptive
      37         0.00058125          0.0293624        0.000373093            0.20491     adaptive
      38         0.00058125          0.0293624                NaN                Inf     adaptive
      39         0.00058125          0.0293624                NaN                Inf     adaptive
      40         0.00058125          0.0293624                NaN                Inf     adaptive
      41         0.00058125          0.0293624                NaN                Inf     adaptive
      42         0.00058125          0.0293624        0.000405619           0.394347     adaptive
      43         0.00058125          0.0293624                NaN                Inf     adaptive
      44         0.00058125          0.0293624        0.000439948           0.442546     adaptive
      45         0.00058125          0.0293624        0.000654805            0.13009     adaptive
      46         0.00058125          0.0293624        0.000545924          0.0716494     adaptive
      47         0.00058125          0.0293624        0.000507695           0.209479     adaptive
      48         0.00058125          0.0293624        0.000615123           0.368681     adaptive
      49         0.00058125          0.0293624        0.000648997            1.79744     adaptive
      50         0.00058125          0.0290879         0.00058125          0.0290879     adaptive

                                                          Current            Current 
 F-count               f(x)     max constraint               f(x)     max constraint     Trial type
      51         0.00058125          0.0290879        0.000581445          0.0291836     adaptive
      52         0.00058125          0.0290879        0.000581152          0.0291773     adaptive
      53         0.00058125          0.0290879         0.00058125          0.0292252     adaptive
      54         0.00058125          0.0290879        0.000581348           0.029273     adaptive
      55         0.00058125          0.0290879         0.00108125           0.821321     random
      56         0.00058125          0.0290879                NaN                Inf     random
      57         0.00058125          0.0290879         0.00083125            2.51611     random
      58         0.00058125          0.0290879                NaN                Inf     random
      59         0.00058125          0.0290879         0.00106562           0.768714     random
      60         0.00058125          0.0290879                NaN                Inf     random
      61         0.00058125          0.0290879        0.000815625           0.725618     random
      62         0.00058125          0.0290879        0.000440625           0.067243     random
      63         0.00058125          0.0290879        0.000940625           0.901158     random
      64         0.00058125          0.0290879        0.000690625           0.475563     random
      65         0.00058125          0.0290879         0.00119062            1.14814     random
      66         0.00058125          0.0290879                NaN                Inf     random
      67         0.00058125          0.0290879        0.000878125            1.83347     random
      68         0.00058125          0.0290879        0.000628125            7.48485     random
      69         0.00058125          0.0290879         0.00112812           0.359996     random
      70         0.00058125          0.0290879                NaN                Inf     random
      71         0.00058125          0.0290879         0.00125312           0.367383     random
      72         0.00058125          0.0290879                NaN                Inf     random
      73         0.00058125          0.0290879         0.00100312            2.73758     random
      74         0.00058125          0.0290879                NaN                Inf     random
      75        0.000398826            0.01138        0.000398826            0.01138     adaptive
      76        0.000398826            0.01138        0.000398501          0.0121406     adaptive
      77        0.000398826            0.01138        0.000342896          0.0664043     adaptive
      78        0.000398826            0.01138        0.000419212          0.0337089     adaptive
      79        0.000398826            0.01138                NaN                Inf     adaptive
      80        0.000398826            0.01138                NaN                Inf     adaptive
      81        0.000398826            0.01138                NaN                Inf     adaptive
      82        0.000398826            0.01138                NaN                Inf     adaptive
      83        0.000398826            0.01138                NaN                Inf     adaptive
      84        0.000398826            0.01138                NaN                Inf     adaptive
      85        0.000398826            0.01138        0.000379602          0.0552041     adaptive
      86        0.000398826            0.01138                NaN                Inf     adaptive
      87        0.000398826            0.01138        0.000381455          0.0919141     adaptive
      88        0.000398984         0.00300044        0.000398984         0.00300044     adaptive
      89        0.000405043        0.000165085        0.000405043        0.000165085     adaptive
      90        0.000400538        0.000170854        0.000400538        0.000170854     adaptive
      91        0.000400538        0.000170854        0.000399682         0.00578883     adaptive
      92        0.000400538        0.000170854        0.000401935         0.00574052     adaptive
      93        0.000400538        0.000170854        0.000398905         0.00720515     adaptive
      94        0.000397413        -0.00044187        0.000397413        -0.00044187     adaptive
      95        0.000397413        -0.00044187        0.000398976       -0.000446158     adaptive
      96        0.000397413        -0.00044187        0.000400538        0.000265697     adaptive
The current solution is feasible. surrogateopt stopped because it exceeded the function evaluation limit set by 'options.MethodOptions.MaxFunctionEvaluations'.
Increasing the function evaluation limit may result in an improved solution.
Removing data from parallel workers...
Data removed from parallel workers.

Используя surrogateopt, всем конструктивным требованиям удовлетворяют, как обозначено отрицательной величиной в "max constraint"столбец.

Обновите модель с оптимизированными значениями параметров.

sdo.setValueInModel('sdoHydraulicCylinder',Optimized_DesignVars);

В этом примере, решатель с помощью суррогатов, успешных на задаче оптимизации, где основанный на производной решатель неудачен. surrogateopt решатель является глобальным решателем, который пробует много начальных точек. При помощи суррогата модели, surrogateopt потребности запустить модель только умеренное число раз.

Смотрите также

|

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте