Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методы безусловной оптимизации.rtf
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
7 Мб
Скачать
☆

1.2. Метод перебора

Этот метод является простейшим из прямых методов минимизации.

Пусть f(x) – унимодальная на отрезке [a, b] функция. Разобьем отрезок [a, b] на n равных частей точками x0, x1, x2, …, xn, так, что xi = a + ih, i = 0, 1, … , n, h = . Вычислим значения функции f(x) в точках xi и сравнив их, найдем точку xm, для которой f(xm) = f(xi).

За приближение x* примем xm.

Оценим погрешность метода перебора.

В силу выбора точки xm справедливы неравенства

f(xm–1)  f(xm), т.е. x*  [xm–1, b];

f(xm)  f(xm+1), т.е. x*  [a, xm+1].

Следовательно, x*  [xm–1, b] [a, xm+1] = [xm–1, xm+1]. Длина отрезка [xm–1, xm+1] равна , и точка xm является его серединой. Поэтому

xm – x* = n.

Итак, чтобы обеспечить требуемую точность определения минимума функции f(x) методом перебора, нужно число отрезков разбиения n выбрать из условия  , т.е.

n . (1.4)

Пример 1.1.

Найдем минимум функции f(x) = x4 + e –x, x  [0, 1] с точностью до = 0.1.

Число отрезков разбиения найдем из условия (1.4):

n = 10.

Определим величину шага h:

h = = = 0.1.

Вычислим значения функции f(x) в точках xi = a + ih = 0.1 i, i = 0, 1, … , 10. Эти значения представлены в таблице 1.1.

Таблица 1.1

xi

0.0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1.0

f(xi)

1.00

0.90

0.82

0.75

0.70

0.67

0.68

0.74

0.86

1.06

1.37

Из таблицы 1.1 видно, что минимальное из вычисленных значений есть f(0.5) = 0.67. Таким образом, x*  0.5 и f(x*)  0.67.

1.3. Метод поразрядного поиска

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

Изложенная идея реализуется в методе поразрядного поиска следующим образом. Перебор точек отрезка происходит сначала с шагом  = xi+1– xi > до тех пор, пока функция не начнет увеличиваться, т. е. не выполнится условие f(xi+1)  f(xi) или пока очередная точка не совпадет с правым концом отрезка [a, b], на котором ищется минимум функции f(x). После этого шаг уменьшается (обычно в четыре раза) и перебор точек производится в обратном направлении, справа налево, пока значения функции f(x) снова не станут увеличиваться или очередная точка не совпадет с левым концом отрезка и т. д. Процесс завершается, когда перебор в данном направлении закончен, и величина шага не превосходит заданной точности .

Алгоритм 1.1 (Алгоритм метода поразрядного поиска).

Шаг 1. Ввести исходные данные: a, b, .

Шаг 2. Выбрать начальный шаг = . Положить x0 = a. Вычислить f(x0).

Шаг 3. Положить x1 = x0 + . Вычислить f(x1).

Шаг 4. Сравнить f(x0) и f(x1). Если f(x0) > f(x1), то перейти к шагу 5, иначе – к шагу 6.

Шаг 5. Положить x0 = x1 и f(x0) = f(x1). Проверить условие x0  (a, b), т. е. a < x0 < b. Если условие выполнено, перейти к шагу 3, иначе – к шагу 6.

Шаг 6. Проверка на окончание поиска. Если   , то вычисления завершить, положив x*x0, f(x* )  f(x0), иначе – перейти к шагу 7.

Шаг 7. Изменение направления и шага поиска. Положить x0 = x1 и f(x0) = f(x1), = – . Перейти к шагу 3.

Пример 1.2.

Методом поразрядного поиска решим задачу, рассмотренную в примере 1.1: f(x) = x4 + e –xmin, x  [0, 1], = 0.1.

Положим, что начальный шаг = = 0.25.

Вычисляем последовательно f(xi) в точках xi с шагом в направлении слева направо (от 0 к 1). Результаты вычислений представлены в таблице 1.2.

Таблица 1.2

xi

0.00

0.25

0.50

0.75

f(xi)

1.000

0.783

0.669

0.789

Вычисления в данном направлении прекращаются, потому что f(0.50) < f(0.75), причем  > . Продолжаем поиск в противоположном направлении, справа налево (от 0.75 к 0). Величину шага уменьшаем в 4 раза, положив = –0.0625. Результаты вычислений представлены в таблице 1.3.

Таблица 1.3

xi

0.7500

0.6875

0.6250

0.5625

0.5000

0.4375

f(xi)

0.789

0.726

0.688

0.670

0.669

0.682

Так как f(0.5000) < f(0.4375) и  = 0.0625 < , вычисления прекращаются. Таким образом, x*  0.5 и f(x*)  0.669.