MATLAB.Exponenta
MATLAB и Simulink на русском
Технологии разработки и отладки
		сложных технических систем

Математика\Optimization Toolbox

Список функций Optimization Toolbox

  В оглавление \ К следующему разделу \ К предыдущему разделу

FGOALATTAIN

Решение многокритериальной (векторной)
задачи достижения цели

Найти y при условии, что

где x, weight (вес), goal (цель), b, beq, lb и ub – векторы; A и Aeq – матрицы; с(x), сeq(x), и F(x) есть функции, которые возвращают вектора. F(x),с(x) и сeq(x) могут быть нелинейными функциями.

Синтаксис:

x = fgoalattain(fun,x0,goal,weight)
x = fgoalattain(fun,x0,goal,weight,A,b)
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq)
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub)
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon)
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon,options)
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon,options,P1,P2,...)
[x,fval] = fgoalattain(...)
[x,fval,attainfactor] = fgoalattain(...)
[x,fval,attainfactor,exitflag] = fgoalattain(...)
[x,fval,attainfactor,exitflag,output] = fgoalattain(...)
[x,fval,attainfactor,exitflag,output,lambda] = fgoalattain(...)

Описание:

fgoalattain решает задачу достижения цели, которая является одной из формулировок задач для векторной оптимизации.

  • x = fgoalattain(fun,x0,goal,weight) пытается создать целевую функцию задаваемую как fun и принимающую определенные целевые значения goal путем изменения x, начиная с х0, с весом weight.
  • x = fgoalattain(fun,x0,goal,weight,A,b) решает задачу достижения цели, соответствующую системе линейных неравенств A*x <= b.
  • x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq) решает задачу достижения цели, соответствующую так же системе линейных равенств Aeq*x = beq. Устанавливает определенные A=[] и b=[], если неравенства отсутствуют.
  • x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub) определяет набор нижних и верхних ограничений на конструируемые переменные х, так что бы искомое решение находилось в диапазоне lb <= x <= ub.
  • x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon) подгоняет задачу достижения цели под условия нелинейных неравенств c(x) или нелинейных равенств ceq(x) задаваемых в nonlcon. fgoalattain проводит такую оптимизацию, что c(x) <= 0 и ceq(x) = 0. Устанавливает lb=[] и/или ub=[], если нет ограничений.
  • x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon,... options) проводит минимизацию при параметрах оптимизации, задаваемых в структуре options.
  • x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon,options,P1,P2,...) переводит связанные с задачей параметры P1, P2 и т.д. непосредственно в функции fun и nonlcon. Переводит пустые матрицы в структурные нули для A, b, Aeq, beq, lb, ub, nonlcon и options, если эти переменные не являются необходимыми.
  • [x,fval] = fgoalattain(...) возвращает значения целевых функций, вычисляемых для fun при расчете х.
  • [x,fval,attainfactor] = fgoalattain(...) возвращает коэффициент достижения при расчете х.
  • [x,fval,attainfactor,exitflag] = fgoalattain(...) возвращает значение exitflag, которое характеризует условия задачи fgoalattain.
  • [x,fval,attainfactor,exitflag,output] = fgoalattain(...) возвращает структурный выход, который содержит информацию о процессе оптимизации.
  • [x,fval,attainfactor,exitflag,output,lambda] = fgoalattain(...) возвращает структурную lambda, поля которой содержат множители Лагранжа при расчете х.

Аргументы:

Входные аргументы.
Таблица 4-1, Входные аргументы, содержит общее описание аргументов передаваемых в fgoalattain. Этот раздел определяет детали описания функций fun, goal, nonlcon, options, и weight:

fun
Функция, которую необходимо минимизировать.
fun есть функция, которая принимает вектор х и возвращает вектор F, т.е. целевые функции от х. Функция fun может быть специфицирована как указатель функции
x = fgoalattain(@myfun,x0,goal,weight)
где myfun есть такая функция MATLAB, что
function F = myfun(x)
F = ... % Вычисляет значения функций от x.

fun - так же может быть внутренним объектом.
x = fgoalattain(inline('sin(x.*x)'),x0,goal,weight);

Для того, что бы целевая функция была как можно ближе к значению цели (т.е. не больше чем и не меньше чем), то устанавливают options.GoalsExactAchieve на ряд целей, который должны находиться в окрестности значений goal. Такие цели должны ,быть секционированы в первых элементах вектора F, возвращаемого в fun.

Если градиент целевой функции может быть дополнительно рассчитан и options.GradObj задана как 'on' посредством
options = optimset('GradObj','on')
то тогда функция fun должна возвращать, как второй выходной аргумент, градиентное значение G в виде матрицы от х. Отметим, что путем проверки значения аргумента nargout данная функция может обойти расчет G, т.е. когда fun вызывается только с одним выходным аргументом (это случай когда для оптимизационного алгоритма нужно значения F а не G).

function [F,G] = myfun(x)
F = ... % Вычисляет значения функций от x.
if nargout > 1 % два выходных аргумента
G = ... % Вычисляет значения градиента от x
end

Градиент состоит из частных производных dF/dx для всякой F в в точке х. Если F есть вектор длины m и х имеет длину n, где n есть длина вектора x0, то тогда градиент G для F(x) есть матрица nхm, где G(i,j) есть частные производные от F(j) по x(i), (т.е. j-ая колонка G есть градиент по j целевой функции F(j)).

goal
Вектор текущих значений цели.
Этот вектор имеет ту же самую длину, что и ряд целей F, возвращаемых функцией fun. Fgoalattain пытается оптимизировать значения вектора F для того, что бы достигнуть целевых значений, задаваемых в goal.
nonlcon
Функция, которая вычисляет нелинейные ограничения виде неравенств c(x) <= 0 и нелинейные ограничения виде равенств ceq(x) = 0.
Функция nonlcon принимает вектор х и возвращает два вектора c и ceq. Вектор с содержит нелинейные неравенства при расчете от х и ceq содержит нелинейные равенства при расчете от х. Функция nonlcon может быть определена как описатель функции.

x = fgoalattain(@myfun,x0,goal,weight,A,b,Aeq,beq,...
lb,ub,@mycon)

где mycon есть функция MATLAB, определенная как
function [c,ceq] = mycon(x)
c = ... % вычисляет нелинейные ограничения в виде неравенств от х.
ceq = ... % вычисляет нелинейные ограничения в виде равенств от х.

Если к тому же градиенты ограничений могут быть рассчитаны и опция options.GradConstr равна 'on' посредством
options = optimset('GradConstr','on')
то функция nonlcon так же должна возвращаться как третий и четвертый выходные аргументы, GC – как градиент от c(x) и GCeq как как градиент от ceq(x). Отметим, что посредством контроля значения nargout данная функция может обойти расчет GC и GCeq при этом nonlcon вызывается только с двумя выходными аргументами (в данном случае алгоритм оптимизации нуждается только в значениях c и ceq а не GC и GCeq).

function [c,ceq,GC,GCeq] = mycon(x)
c = ... % Нелинейные неравенства от х
ceq = ... % Нелинейные равенства от х
if nargout > 2 % Nonlcon вызываентся с 4 выходнымизначениями
GC = ... % Градиенты неравенств
GCeq = ... % Градиенты равенств
end

Если nonlcon возвращает вектор с m компонентами и х имеет длину n, где n есть длина x0, в этом случае градиент GC c(x) будет матрица n х m, где GC(i,j) есть частные производные от c(j) по x(i) (т.е. j-ая колонка GC есть градиент j-го ограничения виде неравенств c(j)). Аналогично, если ceq имеет p компонент, то градиент GCeq ceq(x) есть матрица n х p, где GCeq(i,j) будут частные производные от ceq(j) по x(i) (т.е. j-ая колонка GCeq есть градиент j-го ограничения в виде равенств ceq(j)).

options Опции обеспечивают учет специфических деталей функции виде параметров options.
weight
Вектор веса weight используется для контроля относительного недостижения или передостижения цели для fgoalattain.
В том случае когда все значения goal отличны от нуля, то для того что бы обеспечить ту же самую долю не- или передостижения активных целей, следует установить весовую функцию виде abs(goal). (Активные цели есть такой набор целей, которые служит препятствием для дальнейшего улучшения цели в данном решении).

В случае, когда весовая функция weight положительна, то fgoalattain стремится обеспечить цели меньшие, чем значения goal. Для того, что бы обеспечить целевые функции больше, чем значения goal, правильнее будет установить вес отрицательным, чем положительным. Для того, что бы обеспечить целевые функции как можно ближе к значениям goal, следует использовать параметр GoalsExactAchieve и включить цель в качестве первого элемента для возвращаемого посредством fun вектора (см. описание fun и options выше).

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

Таблица 4-2. "Выходные аргументы" содержат общее описание возвращаемых fgoalattain аргументов. В этом разделе приводятся общие специфические детали для величин attainfactor, exitflag, lambda и output:

attainfactor Количество пере- или недостигнутых целей (goals). Если attainfactor – отрицательный то цели передостигнуты, если attainfactor – положительный, то цели недостигнуты.
exitflag Описывает выходные условия.
  • > 0 Данная функция сходится к решению по х.
  • 0 Максимальное число оценки функции или итерации было превышено.
  • < 0 Функция не сходится к некому решению.
lambda Структура, которая содержит множители Лагранжа при решении по х (разделенном по типам условий). Поле структуры:
  • lower Нижние границы lb
  • upper Верхние границы ub
  • ineqlin Линейные неравенства
  • eqlin Линейные равенства
  • ineqnonlin Нелинейные неравенства
  • eqnonlin Нелинейные равенства
output Структура, которая содержит информацию об оптимизации. Поле структуры:
  • iterations Число выполненных итераций
  • funcCount Число оценок функции
  • algorithm Используемый алгоритм

Options

Параметры опций оптимизации, используемые в fgoalattain. Можно использовать optimset, для что бы установить или изменить значения поля параметров опций оптимизации. Для детальной информации смотри Таблицу 4-3. "Параметры опций оптимизации".

DerivativeCheck Сравнение введенных пользователем значением производных (градиенты функции цели или ограничений) с конечно-разностными аналогами производных.
Diagnostics Печать диагностической информации о минимизируемой или решаемой или функции.
DiffMaxChange Максимальное изменение переменных конечноразностных градиентов.
DiffMinChange Минимальное изменение переменных конечноразностных градиентов.
Display Уровень отображения.
'off' – отображение не выводится;
'iter' отображение выводится на каждой итерации;
'final' (по умолчанию) отображение только выходной информации.
GoalsExactAchieve Определяет число целей goals, которые "точно" достигнуты, то есть не включает то, что переопределено или недостигнуто.
GradConstr Градиент для определенных пользователем ограничений. Смотри выше описание nonlcon как определить градиент в nonlcon.
GradObj Градиент для определенных пользователем целевой функции. Смотри выше описание fun как определит градиент в fun. Градиент должен быть включен, для того что бы можно было использовать крупно-масштабный метод. Это не обязательно для средне масштабного метода.
MaxFunEvals Максимальное число допустимых оценок функции.
MaxIter Максимальное число допустимых итераций.
MeritFunction Используется целевая функция полезности достижения/минимакса, если установлено 'multiobj'. Используется функции полезности fmincon, если установлено 'singleobj'.
TolCon Конечное допустимое отклонение по нарушению условий ограничения.
TolFun Конечное допустимое отклонение по значению функции.
TolX Конечное допустимое отклонение по х.

Примеры

Рассмотрим линейную систему дифференциальных уравнений.

Автоматический регулятор по выходу обратной связи, К, сконструирован так, что бы была система с замкнутым контуром

Характеристические значения системы с замкнутым контуром определяются из матриц A, B, C и K по использованию команды eig(A+B*K*C). Характеристические значения замкнутого контура должны быть на реальных осях в комплексной области слева от точек [-5,-3,-1]. Для того, что бы не переполнялись входные значения, ни один из элементов К не может быть больше чем 4 или меньше чем -4.

Система является двух входной, двух выходной, с разомкнутым контуром, неустойчивой системой, матрицы анализа состояний будут

Установка значений цели (goal) для характеристических значений замкнутого контура инициализируется как

goal = [-5,-3,-1];

Для обеспечения одинаковой доли для пере- или недостижения в активных целях в данном решении весовая матрица weight устанавливается как abs(goal).

Начиная с регулятора K = [-1,-1; -1,-1] сперва напишем М-файл eigfun.m.

function F = eigfun(K,A,B,C)
F = sort(eig(A+B*K*C)); % Оценка целей

Далее введем матрицу системы и запустим подпрограмму оптимизации.

A = [-0.5 0 0; 0 -2 10; 0 1 -2];
B = [1 0; -2 2; 0 1];
C = [1 0 0; 0 0 1];
K0 = [-1 -1; -1 -1]; % Инициализирует матрицу регулятора
goal = [-5 -3 -1]; % устанавливает значения goal для характеристических значений
weight = abs(goal) % устанавливает вес по одинаковой доле
lb = -4*ones(size(K0)); % устанавливает нижнюю границу для регулятора
ub = 4*ones(size(K0)); % устанавливает верхнюю границу для регулятора
options = optimset('Display','iter'); % установка параметров отображения
[K,fval,attainfactor] = fgoalattain(@eigfun,K0,...
goal,weight,[],[],[],[],lb,ub,[],options,A,B,C)

Данные пример может быть выполнен при помощи демонстрационной программы goaldemo. После 12 итераций решение будет

Активные условия ограничений:

1
2
4
9
10

K =
-4.0000 -0.2564
-4.0000 -4.0000

fval =
-6.9313
-4.1588
-1.4099

attainfactor = -0.3863

Обсуждение

Коэффициент достижения указывает, что каждая цель достигнута, по крайней мере, с вероятностью свыше 38.63% от исходных расчетных целей (goals). Активные ограничения, в случае 1 и 2, являются такими ограничениями, которые устанавливают барьер дальнейшему улучшению и для которых доля передостижения точно удовлетворена. Три ограничения по нижней границе также являются активными.

В приведенном выше расчете оптимизатор пытается получить цель меньше, чем goal. В наихудшем случае, для задачи, когда цели должны быть как можно ближе goal, задаются опции options.GoalsExactAchieve с учетом числа требуемых целей.

Рассмотрим приведенную задачу так, как если бы нужно было, что бы все характеристические значения были равны значениям целей (goal). Решение данной задачи осуществляется запуском fgoalattain с опцией options.GoalsExactAchieve, равной 3.

options = optimset('GoalsExactAchieve',3);
[K,fval,attainfactor] = fgoalattain(...
@eigfun,K0,goal,weight,[],[],[],[],lb,ub,[],options,A,B,C)

После порядка семи итераций решение будет:

K =
-1.5954 1.2040
-0.4201 -2.9046

fval =
-5.0000
-3.0000
-1.0000

attainfactor = 1.0859e-20

В данном случае оптимизатор пытался подогнать цели к goal. Коэффициент достижения (1.0859e-20) указывает, что цели точно были достигнуты.

Примечания:

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

Алгоритм:

Многокритериальная оптимизация относится к одновременной минимизации некого набора целей.

Одна из формулировок данной задачи, что и реализовано в fgoalattain, есть задача достижения цели по Gembicki [3]. Это положено в основу структуры набора значений цели для целевой функции. Полное обсуждение многокритериальной оптимизации находится в разделе Стандартный Алгоритм.

В данной версии, дополнительная переменная используется как некая фиктивный параметр, для того, что бы одновременно минимизировать вектор цели F(x), а цель (goal) есть такой набор значений, что цели являются достижимыми. В общем случае, до начала оптимизации, не известно достигнуты ли цели goal (недостижение) или будут минимизированы меньше, чем goal (передостижение). Вектор веса (weight) контролирует относительное недостижение или передостижение целей.

Fgoalattain использует метод Последовательного Квадратичного Программирования (SQP), который достаточно подробно описан в разделе Стандартные Алгоритмы. Модификации реализованы для линейного поиска и определителя матрицы Гессе. В случае линейного поиска функция полезности (см. [1] и [4]) используется в сочетании с предложенной в [5], [6] функцией полезности. Линейный поиск заканчивается, если какая либо из функций полезности демонстрирует улучшение. Так же используется модифицированный определитель матрицы Гессе (см. [1] и [4]), что дает преимущества для специальных типов задач. Полное описание используемых модификаций в разделе Метод Достижения Цели "Введения в Алгоритмы". Установка опции options.MeritFunction = 'singleobj' задает использование функции полезности и определителя матрицы Гессе в программе fmincon.

Коэффициент достижения g определяется в данном решении. Отрицательные значения g указывают на передостижение цели (goal). Более детально используемый алгоритм можно посмотреть в разделе Реализация SQP в "Введении в Алгоритмы", а типы процедур распечатываются под заголовком Процедуры при установке опции options.Display = 'iter'.

Ограничения:

Цели должны быть непрерывными. fgoalattain может получать только локальные значения.

Сопутствующие функции: @ (function_handle), fmincon, fminimax, optimset

Ссылки

  1. Brayton, R.K., S.W. Director, G.D. Hachtel, and L.Vidigal, "A New Algorithm for Statistical Circuit Design Based on Quasi-Newton Methods and Function Splitting," IEEE Transactions on Circuits and Systems, Vol. CAS-26, pp. 784-794, Sept. 1979.
  2. Fleming, P.J. and A.P. Pashkevich, Computer Aided Control System Design Using a Multi-Objective Optimisation Approach, Control 1985 Conference, Cambridge, UK, pp. 174-179.
  3. Gembicki, F.W., "Vector Optimization for Control with Performance and Parameter Sensitivity Indices," Ph.D. Dissertation, Case Western Reserve Univ., Cleveland, OH, 1974.
  4. Grace, A.C.W., "Computer-Aided Control System Design Using Optimization Techniques," Ph.D. Thesis, University of Wales, Bangor, Gwynedd, UK, 1989.
  5. Han, S.P., "A Globally Convergent Method For Nonlinear Programming," Journal of Optimization Theory and Applications, Vol. 22, p. 297, 1977.
  6. Powell, M.J.D., "A Fast Algorithm for Nonlineary Constrained Optimization Calculations," Numerical Analysis, ed. G.A. Watson, Lecture Notes in Mathematics, Springer Verlag, Vol. 630, 1978.

  В оглавление \ К следующему разделу \ К предыдущему разделу


Поиск по сайту:

Система Orphus

Яндекс.Метрика