fseminf

Найдите минимум полу-бесконечно ограниченной многомерной нелинейной функции

Уравнение

Находит минимум задачи, заданной в

minxf(x) таким , что {Axb,Aeqx=beq,lbxub,c(x)0,ceq(x)=0,Ki(x,wi)0, 1in.

b и beq - векторы, A и Aeq матрицы, c (<reservedrangesplaceholder22>), ceq (<reservedrangesplaceholder20>), и Ki (<reservedrangesplaceholder18>) - функции, которые возвращают векторы, и f (<reservedrangesplaceholder16>) - функция  , которая возвращает скаляр. f (x), c (x) и ceq (x) могут быть нелинейными функциями. Векторы (или матрицы) Ki (x, wi) ≤ 0 являются непрерывными функциями обоих x и дополнительным набором переменных w 1, w 2,..., wn. Переменные w 1, w 2,..., wn являются векторами максимальной длины два.

x, lb и ub могут быть переданы как векторы или матрицы; см. Матричные аргументы.

Синтаксис

x = fseminf(fun,x0,ntheta,seminfcon)
x = fseminf(fun,x0,ntheta,seminfcon,A,b)
x = fseminf(fun,x0,ntheta,seminfcon,A,b,Aeq,beq)
x = fseminf(fun,x0,ntheta,seminfcon,A,b,Aeq,beq,lb,ub)
x = fseminf(fun,x0,ntheta,seminfcon,A,b,Aeq,beq,lb,ub,options)
x = fseminf(problem)
[x,fval] = fseminf(...)
[x,fval,exitflag] = fseminf(...)
[x,fval,exitflag,output] = fseminf(...)
[x,fval,exitflag,output,lambda] = fseminf(...)

Описание

fseminf находит минимум полу-бесконечно ограниченной скалярной функции нескольких переменных, начиная с начальной оценки. Цель состоит в том, чтобы минимизировать f (<reservedrangesplaceholder2>), таким образом, ограничения держатся для всех возможных значений <reservedrangesplaceholder1>  <reservedrangesplaceholder0>1 (или wi 2). Поскольку невозможно вычислить все возможные значения Ki (x,wi), необходимо выбрать область для wi, над которой можно вычислить соответствующим образом выбранный множество значений.

Примечание

Передача дополнительных параметров объясняет, как передать дополнительные параметры целевой функции и нелинейным ограничительным функциям, если это необходимо.

x = fseminf(fun,x0,ntheta,seminfcon) начинается с x0 и находит минимум функции fun ограничены ntheta полуинфинитные ограничения, заданные в seminfcon.

x = fseminf(fun,x0,ntheta,seminfcon,A,b) также пытается удовлетворить линейным неравенствам   A*x ≤ b.

x = fseminf(fun,x0,ntheta,seminfcon,A,b,Aeq,beq) минимизирует зависимости от линейных равенств   Aeq*x = beq также. Задайте   A = [] и   b = [] если неравенства не существует.

x = fseminf(fun,x0,ntheta,seminfcon,A,b,Aeq,beq,lb,ub) задает набор нижних и верхних границ переменных проектов в x, так что решение всегда находится в области значений lb  x  ub.

x = fseminf(fun,x0,ntheta,seminfcon,A,b,Aeq,beq,lb,ub,options) минимизирует с опциями оптимизации, указанными в options. Использовать optimoptions чтобы задать эти опции.

x = fseminf(problem) находит минимум для problem, где problem - структура, описанная в Входные Параметры.

[x,fval] = fseminf(...) возвращает значение целевой функции fun в решении x.

[x,fval,exitflag] = fseminf(...) возвращает значение exitflag который описывает условие выхода.

[x,fval,exitflag,output] = fseminf(...) возвращает структуру output который содержит информацию об оптимизации.

[x,fval,exitflag,output,lambda] = fseminf(...) возвращает структуру lambda поля которого содержат множители Лагранжа в решении x.

Примечание

Если заданные входные ограничения для задачи несогласованны, выход x является x0 и выходные fval является [].

Входные параметры

Входные аргументы функции содержат общие описания аргументов, переданных в fseminf. В этом разделе приведены подробные сведения о функциях для fun, ntheta, options, seminfcon, и problem:

fun

Функция, которая будет минимизирована. fun является функцией, которая принимает вектор x и возвращает скалярное f, целевая функция, оцененная как x. Функция fun может быть задан как указатель на функцию для файла

x = fseminf(@myfun,x0,ntheta,seminfcon)

где myfun является MATLAB® функция, такая как

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

fun может также быть указателем на функцию для анонимной функции.

fun = @(x)sin(x''*x);

Если градиент fun можно также вычислить и SpecifyObjectiveGradient опция true, как установлено

options = optimoptions('fseminf','SpecifyObjectiveGradient',true)

затем функция fun должен вернуть во втором выходном аргументе значение градиента g, вектор, в x.

ntheta

Количество полунепрерывных ограничений.

options

Опции содержат подробные сведения о функции для options значения.

seminfcon

Функция, которая вычисляет вектор нелинейных ограничений неравенства, c, вектор нелинейных ограничений равенства, ceq, и ntheta полуинфинитные ограничения (векторы или матрицы) K1, K2,..., Kntheta вычисляется за интервал S в точке x. Функция seminfcon может быть задан как указатель на функцию.

x = fseminf(@myfun,x0,ntheta,@myinfcon)

где myinfcon является функцией MATLAB, такой как

function [c,ceq,K1,K2,...,Kntheta,S] = myinfcon(x,S)
% Initial sampling interval
if isnan(S(1,1)),
   S = ...% S has ntheta rows and 2 columns
end
w1 = ...% Compute sample set
w2 = ...% Compute sample set 
...
wntheta = ... % Compute sample set
K1 = ... % 1st semi-infinite constraint at x and w
K2 = ... % 2nd semi-infinite constraint at x and w
...
Kntheta = ...% Last semi-infinite constraint at x and w
c = ...      % Compute nonlinear inequalities at x
ceq = ...    % Compute the nonlinear equalities at x

S - рекомендуемый интервал дискретизации, который может использоваться или не использоваться. Возврат [] для c и ceq если таких ограничений не существует.

Векторы или матрицы K1, K2, ..., Kntheta содержат полунепрерывные ограничения, рассчитанные для выборочного множества значений для независимых переменных w1, w2, ..., wntheta, соответственно. Двухколоночная матрица, S, содержит рекомендуемый интервал выборки для значений w1, w2, ..., wntheta, которые используются для оценки K1, K2, ..., Kntheta. The iпервая строка S содержит рекомендуемый интервал дискретизации для оценки Ki. Когда Ki является вектором, используется только S(i,1) (второй столбец может быть все нули). Когда Ki является матрицей, S(i,2) используется для дискретизации строк в Ki, S(i,1) используется для интервала дискретизации столбцов Ki (см. «Двумерное полумасштабное ограничение»). На первой итерации S является NaN, так что некоторый начальный интервал дискретизации должен быть определен seminfcon.

Примечание

Потому что функции Optimization Toolbox™ принимают только входы типа double, поставляемые пользователем целевые и нелинейные функции ограничения должны возвращать выходы типа double.

Передача дополнительных параметров объясняет, как параметризировать seminfcon, при необходимости. Пример создания точек выборки содержит пример как одно-, так и двумерных точек выборки.

problem

objective

Целевая функция

x0

Начальная точка для x
nthetaКоличество полунепрерывных ограничений
seminfconПолуинфинитная функция ограничения

Aineq

Матрица для линейных ограничений неравенства

bineq

Вектор для линейных ограничений неравенства

Aeq

Матрица для линейных ограничений равенства

beq

Вектор для линейных ограничений равенства
lbВектор нижних границ
ubВектор верхних границ

solver

'fseminf'

options

Опции, созданные с optimoptions

Выходные аргументы

Входные аргументы функции содержат общие описания аргументов, возвращаемых fseminf. В этом разделе приведены подробные сведения о функциях для exitflag, lambda, и output:

exitflag

Целое число, идентифицирующее причину завершения алгоритма. Ниже списки значения exitflag и соответствующие причины, по которым алгоритм остановился.

1

Функция сходится к решению x.

4

Величина направления поиска была меньше заданного допуска, а нарушение ограничений было меньше options.ConstraintTolerance.

5

Величина производной по направлению была меньше заданного допуска, а нарушение ограничений было меньше options.ConstraintTolerance.

0

Превышено количество итераций options.MaxIterations или превышено количество вычислений функции options.MaxFunctionEvaluations.

-1

Алгоритм был остановлен выходной функцией.

-2

Допустимая точка не найдена.

lambda

Структура, содержащая множители Лагранжа в решении x (разделяется типом ограничения). Поля структуры:

lower

Нижние границы lb

upper

Верхние границы ub

ineqlin

Линейное неравенство

eqlin

Линейные равенства

ineqnonlin

Нелинейные неравенства

eqnonlin

Нелинейные равенства

output

Структура, содержащая информацию об оптимизации. Поля структуры:

iterations

Количество проделанных итераций

funcCount

Количество вычислений функции

lssteplength

Размер линии шага поиска относительно направления поиска

stepsize

Окончательное перемещение в x

algorithm

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

constrviolation

Максимум ограничительных функций

firstorderopt

Мера оптимальности первого порядка

message

Выходное сообщение

Опции

Опции оптимизации, используемые fseminf. Использовать optimoptions для установки или изменения options. Подробную информацию см. в Ссылке по опциям оптимизации.

Некоторые опции отсутствуют в optimoptions отображение. Эти опции выделены курсивом в следующей таблице. Для получения дополнительной информации см. раздел «Опции представления».

CheckGradients

Сравните поставляемые пользователем производные (градиенты цели или ограничения) с конечными дифференцирующими производными. Выбор следующий true или значение по умолчанию false.

Для optimset, имя DerivativeCheck и значения 'on' или 'off'. См. «Текущие и устаревшие имена опций».

ConstraintTolerance

Допуск завершения на нарушение ограничений, положительную скалярную величину. Значение по умолчанию является 1e-6. См. «Допуски и критерий остановки».

Для optimset, имя TolCon. См. «Текущие и устаревшие имена опций».

Диагностика

Отобразите диагностическую информацию о функции, которая будет минимизирована или решена. Выбор следующий 'on' или значение по умолчанию 'off'.

DiffMaxChange

Максимальное изменение переменных для градиентов конечных различий (a положительной скалярной величины). Значение по умолчанию является Inf.

DiffMinChange

Минимальное изменение переменных для градиентов с конечной разностью (a положительной скалярной величины). Значение по умолчанию является 0.

Display

Level of display (см. Итеративное отображение):

  • 'off' или 'none' не отображает выход.

  • 'iter' отображает выход при каждой итерации и выдает выходное сообщение по умолчанию.

  • 'iter-detailed' отображает выход при каждой итерации и выдает техническое выходное сообщение.

  • 'notify' отображает вывод только, если функция не сходится, и выдает выходное сообщение по умолчанию.

  • 'notify-detailed' отображает вывод только, если функция не сходится, и выдает техническое выходное сообщение.

  • 'final' (по умолчанию) отображает только окончательный выход и выдает выходное сообщение по умолчанию.

  • 'final-detailed' отображает только окончательный выход и выдает техническое выходное сообщение.

FiniteDifferenceStepSize

Скаляр или векторный коэффициент размера для конечных различий. Когда вы задаете FiniteDifferenceStepSize в вектор v, прямые конечные различия delta являются

delta = v.*sign′(x).*max(abs(x),TypicalX);

где sign′(x) = sign(x) кроме sign′(0) = 1. Центральные конечные различия

delta = v.*max(abs(x),TypicalX);

Скалярные FiniteDifferenceStepSize расширяется до вектора. Значение по умолчанию является sqrt(eps) для прямых конечных различий и eps^(1/3) для центральных конечных различий.

Для optimset, имя FinDiffRelStep. См. «Текущие и устаревшие имена опций».

FiniteDifferenceType

Конечные различия, используемые для оценки градиентов, либо 'forward' (по умолчанию), или 'central' (с центром). 'central' принимает в два раза больше вычислений функции, но должен быть более точным.

Алгоритм осторожен, чтобы подчиниться границам при оценке обоих типов конечных различий. Так, например, это может занять различие назад, а не вперед, чтобы избежать оценки в точке вне границ.

Для optimset, имя FinDiffType. См. «Текущие и устаревшие имена опций».

FunctionTolerance

Отклонение завершения функции от значения, a положительной скалярной величины. Значение по умолчанию является 1e-4. См. «Допуски и критерий остановки».

Для optimset, имя TolFun. См. «Текущие и устаревшие имена опций».

FunValCheck

Проверьте, действительны ли целевая функция и значения ограничений. 'on' отображает ошибку, когда целевая функция или ограничения возвращают значение, которое complex, Inf, или NaN. Значение по умолчанию 'off' не отображает ошибок.

MaxFunctionEvaluations

Максимально допустимое количество вычислений функции, положительное целое число. Значение по умолчанию является 100*numberOfVariables. См. Допуски и критерий остановки и итерации и счетчики функций.

Для optimset, имя MaxFunEvals. См. «Текущие и устаревшие имена опций».

MaxIterations

Максимально допустимое количество итераций, положительное целое число. Значение по умолчанию является 400. См. Допуски и критерий остановки и итерации и счетчики функций.

Для optimset, имя MaxIter. См. «Текущие и устаревшие имена опций».

MaxSQPIter

Максимально допустимое количество итераций SQP, положительное целое число. Значение по умолчанию является 10*max(numberOfVariables, numberOfInequalities + numberOfBounds).

OptimalityTolerance

Допуск завершения по оптимальности первого порядка (a положительной скалярной величины). Значение по умолчанию является 1e-6. См. «Мера оптимальности первого порядка».

Для optimset, имя TolFun. См. «Текущие и устаревшие имена опций».

OutputFcn

Задайте одну или несколько пользовательских функций, которые вызываются функциями оптимизации при каждой итерации. Передайте указатель на функцию или cell-массив указателей на функцию. Значением по умолчанию является none ([]). Смотрите Выходные функции и Синтаксис функции построения графика.

PlotFcn

Строит графики различных показателей прогресса во время выполнения алгоритма; выберите из предопределенных графиков или напишите свои собственные. Передайте имя, указатель на функцию или массив ячеек с именами или указатели на функцию. Для пользовательских функций построения графика передайте указатели на функцию. Значением по умолчанию является none ([]):

  • 'optimplotx' строит графики текущей точки.

  • 'optimplotfunccount' строит график счетчика функций.

  • 'optimplotfval' строит график значения функции.

  • 'optimplotfvalconstr' Строит графики наилучшего допустимого значения целевой функции, найденного как линейный график. График показывает недопустимые точки как красные, а допустимые - как синие, используя допустимый допуск 1e-6.

  • 'optimplotconstrviolation' строит график максимального нарушения ограничений.

  • 'optimplotstepsize' строит графики размера шага.

  • 'optimplotfirstorderopt' строит графики меры оптимальности первого порядка.

Пользовательские функции построения графика используют тот же синтаксис, что и выходные функции. Смотрите Выходные функции для Optimization Toolbox™ и синтаксиса выходной функции и функции построения графика.

Для optimset, имя PlotFcns. См. «Текущие и устаревшие имена опций».

RelLineSrchBnd

Относительная граница (действительное неотрицательное скалярное значение) в длине шага поиска линии такой, что общее перемещение в x удовлетворяет | Δ <reservedrangesplaceholder6>   (<reservedrangesplaceholder5>) | ≤ relLineSrchBnd · макс. (| x (<reservedrangesplaceholder3>) |, | typicalx (<reservedrangesplaceholder1>) |). Эта опция обеспечивает управление величиной перемещений в x для случаев, в которых решатель делает шаги, которые fseminf считает слишком большим. По умолчанию нет границ ([]).

RelLineSrchBndDuration

Количество итераций, для которых граница задана в RelLineSrchBnd должен быть активным (по умолчанию это 1)

SpecifyObjectiveGradient

Градиент для целевой функции, заданный пользователем. См. предыдущее описание fun чтобы увидеть, как задать градиент в fun. Установите значение true иметь fseminf использовать пользовательский градиент целевой функции. Значение по умолчанию false причины fseminf для оценки градиентов с помощью конечных различий.

Для optimset, имя GradObj и значения 'on' или 'off'. См. «Текущие и устаревшие имена опций».

StepTolerance

Допуск завершения на x, а положительная скалярная величина. Значение по умолчанию 1e-4. См. «Допуски и критерий остановки».

Для optimset, имя TolX. См. «Текущие и устаревшие имена опций».

TolConSQP

Допуск завершения внутренней итерации SQP нарушения ограничений, a положительной скалярной величины. Значение по умолчанию является 1e-6.

TypicalX

Типичные x значения. Количество элементов в TypicalX равно количеству элементов в x0, а начальная точка. Значение по умолчанию ones(numberofvariables,1). fseminf использует TypicalX для масштабирования конечных различий для оценки градиента.

Примечания

Оптимизация стандартной программы fseminf может варьировать рекомендуемый интервал дискретизации, S, установить в seminfconво время расчета, потому что значения, отличные от рекомендуемого интервала, могут быть более подходящими для эффективности или робастности. Кроме того, wi конечной области, над которыми вычисляется Ki (x, wi), допускается изменяться во время оптимизации, при условии, что это не приводит к значительным изменениям числа локальных минимумов в Ki (x, wi).

Примеры

свернуть все

Этот пример минимизирует функцию

(x-1)2,

удовлетворяющее ограничениям

0x2

g(x,t)=(x-1/2)-(t-1/2)20 для всех 0t1.

Без ограничений целевая функция минимизируется x = 1. Однако ограничение

g(x, t)  0 для всех 0  t  1

подразумевает x  1/2. Заметьте, что (t  1/2)2  0, так

maxt g(x,t)=x-1/2.

Поэтому,

maxt g(x,t)  0 когда x  1/2.

Чтобы решить эту проблему с помощью fseminf, запишите целевую функцию как анонимную функцию.

objfun = @(x)(x-1)^2;

Запишите полунепрерывную функцию ограничения seminfcon, который включает нелинейные ограничения ([] в этом случае), начальный интервал дискретизации для t (от 0 до 1 с шагом 0,01 в этом случае) и полунепрерывной функцией ограничения g(x, t). Код для seminfcon функция появится в конце этого примера.

Установите начальную точку x0 = 0.2.

x0 = 0.2;

Задайте одно полубесконечное ограничение.

ntheta = 1;

Решите проблему, позвонив fseminf и просмотрите результат.

x = fseminf(objfun,x0,ntheta,@seminfcon)
Local minimum found that satisfies the constraints.

Optimization completed because the objective function is non-decreasing in 
feasible directions, to within the value of the optimality tolerance,
and constraints are satisfied to within the  value of the constraint tolerance.
x = 0.5000

Следующий код создает seminfcon функция.

function [c, ceq, K1, s] = seminfcon(x,s)

% No finite nonlinear inequality and equality constraints
c = [];
ceq = [];

% Sample set
if isnan(s)
    % Initial sampling interval
    s = [0.01 0];
end
t = 0:s(1):1;

% Evaluate the semi-infinite constraint
K1 = (x - 0.5) - (t - 0.5).^2;
end

Ограничения

Функция, которая будет минимизирована, ограничения и полубесконечные ограничения должны быть непрерывными функциями x и w. fseminf может дать только локальные решения.

Когда задача невозможна, fseminf пытается минимизировать максимальное значение ограничения.

Алгоритмы

fseminf использует кубические и квадратичные методы интерполяции, чтобы оценить пиковые значения в полубесконечных ограничениях. Пиковые значения используются, чтобы сформировать набор ограничений, которые передаются в метод SQP, как в fmincon функция. Когда количество ограничений изменяется, множители Лагранжа перераспределяются на новый набор ограничений.

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

Для получения дополнительной информации об используемом алгоритме и типах процедур, отображаемых под Procedures курс, когда Display для опции задано значение 'iter' с optimoptions, см. также «Реализация SQP». Для получения дополнительной информации о fseminf алгоритм, см. Fseminf Формулировка задачи и алгоритм.

Представлено до R2006a