microbik.ru
  1 ... 5 6 7 8 9

2.7. Численное решение оптимизационных задач

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

, (2.10)

где х1, х2, … , хп – проектные параметры.

Можно выделить 2 типа задач оптимизации – безусловные и условные. Безусловная задача оптимизации состоит в отыскании максимума или минимума функции (2.10) от п действительных переменных и определении соответствующих значений аргументов на некотором множестве G n-мерного пространства. Обычно рассматриваются задачи минимизации; к ним легко сводятся и задачи на поиск максимума путем замены знака целевой функции на противоположный. Условные задачи оптимизации – это такие, при формулировке которых задаются некоторые условия (ограничения) на множестве G. Здесь рассмотрим только безусловные задачи оптимизации.

Поиск минимума функции одной переменной.

Для решения этой задачи используются методы золотого сечения или параболической интерполяции (в зависимости от формы задания функции), реализованные в программе fminbnd.

Пример 8. Найти и вывести на печать минимальное значение функции

f(x) = 24 – 2x /3 + x2/ 30 на [5; 20].

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

Протокол программы

>> x = 5.0 : 0.001 : 20.0 ; y = 24 – 2* x/3 + x.^2/30 ;

>> рlot(x, y) ; grid on

Появляется окно с графиком этой функции (рис. 2.5), где отмечаем наличие минимума.




Рис. 2.5
Далее, для точного определения координаты и значения минимума привлекаем программу fminbnd.

>> [x, y] = fminbnd (  (24.0 – 2* x/3 + x.^2/30) , 5.0, 20.0)

Результат поиска

х =

10.0000

у =

20.6667


Варианты заданий. Найти и вывести на печать координату и минимальное значение функции f(x) на [a; b]. Данные взять из таблицы 2.8.

Таблица 2.8

№ п/п

Функция f(x)

Отрезок [a; b]

1



[1.2; 4]

2



[0; /2]

3



[-2; 2]

4



[-2; 2]

5



[1; 3]

6



[; 3/2]

7



[0; 1]

8



[0; 2]

9



[-0.5; 1.5]

10



[0,1; 1.0]

11



[-0.5; 0,5]

12



[-1.0; 0]

13



[-0.5; 0.5]

14



[0.5; 1.5]

15



[1.6; 2.2]

16



[1; 2]

17



[1.1; 1.6]

18



[0; /3]

19



[0.5; 1.2]

20



[-1.5; -0.5]

21



[-2.0; -1.0]

22



[-2.0; -1.0]

23



[0.1; 1.0]

24



[-0,05; -0.2]

25



[-0.5; 0.5]

26



[; 3/2]

27



[1.0; 2.0]

28



[0.1; 0.5]

29



[; 2]

30



[2.0; 3.0]



Поиск минимума функций нескольких переменных

Данная задача значительно сложнее первой. Рассмотрим ее решение на примере функции двух переменных. Алгоритм может быть распространен на функции большего числа переменных. Для минимизации функций нескольких переменных MATLAB использует симплекс – метод Нелдера-Мида. Данный метод является одним из лучших методов поиска минимума функций многих переменных, где не вычисляются производные или градиент функции. Он сводится к построению симплекса в п-мерном пространстве, заданного п + 1 вершиной. В двухмерном пространстве симплекс является треугольником, а в трехмерном – пирамидой. На каждом шаге итераций выбирается новая точка решения внутри или вблизи симплекса. Она сравнивается с одной из вершин симплекса. Ближайшая к этой точке вершина симплекса заменяется этой точкой. Таким образом, симплекс перестраивается и позволяет найти новое, более точное положение точки решения. Алгоритм поиска повторяется, пока размеры симплекса по всем переменным не станет меньше заданной погрешности решения. Программу, реализующую симплекс-методы Нелдера-Мида, удобно использовать в следующей записи

[x, min f] = f min search ( … ),

где х – вектор координат локального минимума;

min f – значение целевой функции в точке минимума.

Саму целевую функцию удобно представить с помощью дескриптора @ в М-файле.
Пример 9. Найти и вывести на печать координаты и значение минимума функции двух переменных f(x, y) = (x2 + y2 – 3)2 + (x2 + y2 – 2x – 3)2 + 1, если начальная точка поиска имеет координаты М0 (1; 1). Анализ функции показывает, что min f = 1 x = 0, .

Строим трехмерный график этой функции, чтобы убедиться в наличии минимума. Возьмем интервал х є [-1; 1]; y є [1; 3].
Протокол программы

>> [X,Y] = mesh grid ( [-1 : 1, 1 : 3] ) ;

>> Z = (X.^2 + Y.^2 – 3).^2 + (X.^2 + Y.^2 – 2*X – 3).^2 + 1 ;

>> рlot 3 (X,Y,Z)

После построения трехмерного графика выполняем поиск минимума. В М-файле программируем целевую функцию

function f = F xy(x)

f = (x(1) ^ 2 + x(2) ^ 2 –3)^2 – 3)^2 + (x(1) ^ 2 + x(2) ^ 2 –2* x(1) – 3)^2 + 1;

Решаем поставленную задачу в окне команд

>> [xmin, mi f] = fminsearch ( @ Fxy, [1; 1] )

Результаты поиска

xmin =

- 0.0000 1.7320

minf =

1.0000

Как видно, результаты решения задачи точные.

Варианты заданий. Найти и вывести на печать координаты и минимальное значение функции двух переменных. Поиск начать с точки М0 (х0, у0). Данные взять из таблицы 2.9.

Таблица 2.9

№ п/п

Функция f(x, у)

Координаты начальной точки М0 (х0, у0).

1

2

3

1



(1; 1)

2



(2; 2)

3



(2; 2)

4



(2; 2)

5



(2; 2)

6



(2; 2)

7



(2; 2)

8



(2; 2)

9



(2; 2)


<< предыдущая страница   следующая страница >>