patternsearch
Этот раздел представляет пример выполнения поиска шаблона на ограниченной проблеме минимизации. Пример минимизирует функцию
где
удовлетворяющее ограничениям
где
Чтобы выполнить поиск шаблона на примере, сначала войдите
optimtool('patternsearch')
optimtool
и затем выберите patternsearch
в меню Solver. Затем введите следующую функцию в поле Objective function:@lincontest7
lincontest7
файл, включенный в программное обеспечение Global Optimization Toolbox, которое вычисляет целевую функцию для примера. Поскольку матрицы и векторы, задающие начальную точку и ограничения, являются большими, более удобно установить их значения как переменные в рабочей области MATLAB® сначала и затем ввести имена переменных в приложение Оптимизации. Для этого войдитеx0 = [2 1 0 9 1 0]; Aineq = [-8 7 3 -4 9 0]; bineq = 7; Aeq = [7 1 8 3 3 3; 5 0 -5 1 -5 8; -2 -6 7 1 1 9; 1 -1 2 -2 3 -3]; beq = [84 62 65 1];
Затем введите следующее в приложение Оптимизации:
Установите Start point на x0
.
Установите следующий Linear inequalities:
Установите A на Aineq
.
Установите b на bineq
.
Установите Aeq на Aeq
.
Установите beq на beq
.
Следующий рисунок показывает эти настройки в приложении Оптимизации.
Поскольку это - линейно ограниченная проблема, установите Poll method на GSS Positive basis 2N
. Для получения дополнительной информации о КПД методов поиска GSS для линейно ограниченных проблем, смотрите, Сравнивают КПД Опций Опроса.
Затем нажмите Start, чтобы запустить поиск шаблона. Когда поиск закончен, результаты отображены в панели Run solver and view results как показано в следующем рисунке.
Запускать эту проблему с помощью функций командной строки:
x0 = [2 1 0 9 1 0]; Aineq = [-8 7 3 -4 9 0]; bineq = 7; Aeq = [7 1 8 3 3 3; 5 0 -5 1 -5 8; -2 -6 7 1 1 9; 1 -1 2 -2 3 -3]; beq = [84 62 65 1]; options = optimoptions('patternsearch',... 'PollMethod','GSSPositiveBasis2N'); [x,fval,exitflag,output] = patternsearch(@lincontest7,x0,... Aineq,bineq,Aeq,beq,[],[],[],options);
Просмотрите решение, значение целевой функции и количество вычислений функции во время процесса решения.
x,fval,output.funccount
x = 8.5165 -6.1094 4.0989 1.2877 -4.2348 2.1812 fval = 1.9195e+03 ans = 758
Предположим, что вы хотите минимизировать простую целевую функцию двух переменных x1
и x2
,
подвергните следующим нелинейным ограничениям неравенства и границам
Начните путем создания ограничительных функций и цели. Во-первых, создайте файл с именем simple_objective.m
можно следующим образом:
function y = simple_objective(x) y = (4 - 2.1*x(1)^2 + x(1)^4/3)*x(1)^2 + x(1)*x(2) + (-4 + 4*x(2)^2)*x(2)^2;
Решатель поиска шаблона принимает, что целевая функция возьмет один вход x
где x
имеет столько же элементов сколько количество переменных в проблеме. Целевая функция вычисляет значение функции и возвращает то скалярное значение в его одном возвращаемом аргументе y
.
Затем создайте файл с именем simple_constraint.m
содержа ограничения:
function [c, ceq] = simple_constraint(x) c = [1.5 + x(1)*x(2) + x(1) - x(2); -x(1)*x(2) + 10]; ceq = [];
Решатель поиска шаблона принимает, что ограничительная функция возьмет один вход x
, где x
имеет столько же элементов сколько количество переменных в проблеме. Ограничительная функция вычисляет значения всех ограничений неравенства и ограничений равенства и возвращает два вектора, c
и ceq
, соответственно.
Затем минимизировать целевую функцию с помощью patternsearch
функция, необходимо передать в указателе на функцию целевой функции, а также определению стартовой точки в качестве второго аргумента. Нижние и верхние границы обеспечиваются как LB
и UB
соответственно. Кроме того, также необходимо передать указатель на функцию нелинейной ограничительной функции.
ObjectiveFunction = @simple_objective; X0 = [0 0]; % Starting point LB = [0 0]; % Lower bound UB = [1 13]; % Upper bound ConstraintFunction = @simple_constraint; [x,fval] = patternsearch(ObjectiveFunction,X0,[],[],[],[],... LB,UB,ConstraintFunction)
Optimization terminated: mesh size less than options.MeshTolerance and constraint violation is less than options.ConstraintTolerance. x = 0.8122 12.3122 fval = 9.1324e+004
Затем постройте результаты. Создайте опции с помощью optimoptions
это выбирает две функции построения графика. Первая функция построения графика psplotbestf
строит лучшее значение целевой функции в каждой итерации. Вторая функция построения графика psplotmaxconstr
строит максимальное нарушение ограничений в каждой итерации.
Можно также визуализировать прогресс алгоритма путем отображения информации к Командному окну с помощью 'Display'
опция.
options = optimoptions('patternsearch','PlotFcn',{@psplotbestf,@psplotmaxconstr},'Display','iter'); [x,fval] = patternsearch(ObjectiveFunction,X0,[],[],[],[],LB,UB,ConstraintFunction,options)
Max Iter Func-count f(x) Constraint MeshSize Method 0 1 0 10 0.8919 1 28 113580 0 0.001 Increase penalty 2 105 91324 1.782e-07 1e-05 Increase penalty 3 192 91324 1.188e-11 1e-07 Increase penalty Optimization terminated: mesh size less than options.MeshTolerance and constraint violation is less than options.ConstraintTolerance. x = 0.8122 12.3122 fval = 9.1324e+04
Лучшее значение целевой функции и максимальное нарушение ограничений в каждой итерации