Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методы оптимизации - Харчистов Б.Ф.

.pdf
Скачиваний:
137
Добавлен:
24.05.2014
Размер:
931 Кб
Скачать
☆

41

Метод Фибоначчи

Метод Фибоначчи является наилучшим (в смысле максимального уменьшения длины отрезка локализации) среди активных методов поиска.

Согласно методу Фибоначчи, на первом шаге (первой итерации) проводятся два вычисления значений f(x) в точках x1(1) и x2(1) (причем x1(1) < x2(1) ), расположенных симметрично относительно середины отрезка ∆0 = [a, b]. По результатам вычислений одна из частей отрезка ([a, x1(1) ] либо [x2(1) , b] ) отбрасывается, при этом одна из точек (соответственно x2(1) либо x1(1) ) уже проведен-

ных вычислений остается внутри отрезка ∆2 ≡ ∆(1) . На каждом

последующем шаге (последующей итерации) точка очередного вычисления выбирается симметрично оставшейся точки. Таким образом, на первой итерации проводятся два вычисления значений f(x), на каждой последующей − одно вычисление. Поэтому при заданном количестве вычислений N будет выполнено N −1 шагов (итераций).

При вычислении

x( j )

и

x( j ) , j =

1, N −1

, используются

 

1

 

2

 

 

числа Фибоначчи, определяемые следующим образом:

F0 = F1 = 1, Fk = Fk −1 + Fk − 2 , k = 2,3,....

Условием окончания вычислений является выполнение заданного количества вычислений N.

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

1. Задается N, определяются числа Фибоначчи Fk, k = 0, N +1, выбирается ε из условия

ε< b − a .

FN +1

Полагается j=1.

42

2. На j-й итерации вычисляются

x( j) = a( j−1)

 

FN − j−1

 

(b( j−1) − a( j−1) ) −

(−1)N − j+1

 

+

 

 

 

 

ε ,

 

 

 

 

 

 

1

 

 

FN − j+1

 

 

 

 

FN − j+1

 

 

 

 

 

 

 

 

 

x2( j) = a( j−1) +

FN − j

 

(b( j−1) − a( j−1) ) +

(−1)N − j+1 ε,

 

FN − j+1

 

 

 

 

 

 

 

 

 

FN − j+1

 

 

f ( j) = f (x

( j ) ),

f ( j )

= f (x( j) ).

 

 

 

 

1

 

1

2

2

 

 

 

 

Если

f ( j) ≤ f

( j) , то a

( j) = a( j −1) , b( j) = x( j) ,

x( j +1)

= x( j)

 

1

2

 

 

 

 

 

2

2

 

1

Если

f ( j ) > f

( j) , то a

( j) = x( j) ,

b( j) = b( j −1) ,

x( j +1) = x( j)

 

1

2

 

 

 

1

 

 

1

 

2

3. Проверяется условие окончания вычислений j = N −1.

.

.

Если оно выполняется, то определяются итоговый отрезок локализации, оценки точки минимума x и величины минимума

f * = f (x*) и вычисления завершаются.

Если условие не выполняется, то полагается j=j+1 и осуществляется переход к п.2.

Примечание. На j-й, j>1, итерации вычисляется только та точка xi( j ) , i = 1,2, которая не была определена на предыдущей итерации.

Отметим, что оценкой точки минимума x* является та из точек xi( N −1) , i = 1,2, которая осталась внутри итогового отрезка

локализации ∆N .

Пример. Определить методом Фибоначчи минимум функции f (x) = x4 − 6x2 +10 , заданной на отрезке ∆=[1,3], при N=4.

Решение.

В данном случае будут выполнены N −1 = 3 итерации.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

43

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Определяем числа Фибоначчи Fk , k =

 

:

 

 

 

 

 

 

 

 

 

1,5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

F0 = F1 =1, F2 = 2, F3 = 3, F4 = 5, F5 = 8.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ε <

b − a

=

 

3 −1 = 0,25.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

F

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Выбираем ε=0,1.

 

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Первая итерация

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x(1) = a(0)

 

 

F

 

 

 

 

 

(0) − a(0) ) −

 

(−1)N

 

 

 

 

 

 

 

F

 

 

 

 

+

 

 

 

 

N −2

(b

 

 

 

ε = 1+

 

2

 

(3 −1) −

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

FN

 

 

 

 

 

 

FN

 

 

 

 

 

 

 

F4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

−

(−1)4

0,1 =

1+ 2 2 − 0,1 =1+ 0,78 =1,78,

 

 

F

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x2(1) = a(0)

+

 

 

F

N −1

(b(0)

− a(0) )

+

 

(−1)N

ε = 1+

 

F

(3 −1) +

 

 

 

 

 

 

 

 

 

 

 

3

 

 

 

 

 

 

 

 

 

 

 

 

FN

 

F4

 

 

 

 

 

 

 

 

 

 

 

FN

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

+

 

(−1)4

0,1 = 1

+ 3 2 + 0,1 = 1+1,22 = 2,22.

 

 

 

F

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Вторая итерация

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x(2) = a(1)

 

 

F

 

 

 

 

 

 

 

(b(1)

− a(1) ) −

(−1)N −1

 

 

 

 

F

 

 

 

 

+

 

 

N −3

 

 

 

 

ε = 1+

 

 

 

1

(2,22 −1) −

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

FN −1

 

 

 

FN −1

 

 

 

 

F3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

−

(−1)3

 

 

0,1 = 1+ 1 1,22 + 0,1 = 1+ 0,44 = 1,44.

 

 

 

 

 

 

 

 

 

F

 

 

 

 

 

 

 

 

 

 

 

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Третья итерация

 

 

 

(−1)N −2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x2(3) = a(2)

+

 

F

N −3

(b(2)

− a(2) ) +

ε = 1,44

+

 

F

−

 

 

 

 

 

 

 

1

(2,22

 

 

 

 

 

FN −2

 

 

 

 

 

 

 

 

FN −2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

F2

 

−1,44) +

(−1)2

 

 

0,1 = 1,44 + 1 0,78 + 0,1 = 1,44 + 0,44 = 1,88.

 

 

 

 

 

 

F

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Результаты вычислений заносим в табл. 4.4.

44

Таблица 4.4

Номер

x1( j )

x2( j )

f1( j)

≤

f2( j)

a( j)

b( j)

итерации

 

 

 

>

 

 

 

0

—

—

—

 

—

1

3

1

1,78*

2,22*

1,028

<

4,719

1

2,22

2

1,44*

1,78

1,858

>

1,028

1,44

2,22

3

1,78

1,88*

1,028

<

1,286

1,44

1,88

Примечание. Знаком * помечаем точки xi( j ) , i=1,2, вычис-

ляемые на j-й итерации.

Поскольку j=N−1=3, то вычисления завершаются.

Точка минимума локализована на отрезке ∆4 = [1,44; 1,88],

x* x(3)

= 1,78,

f * f (x(3) ) = 1,028 .

1

 

1

Ответ: ∆4

= [1,44; 1,88], x* 1,78, f * 1,028 .

Метод золотого сечения

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

A C B

45

ACAB = CBAC .

При таком делении используются две дроби Фибоначчи

Ф = 3 − 5

0,382,

Ф

2

=

5 −1 0,618,

1

2

 

 

 

2

 

 

 

 

 

удовлетворяющие условиям

 

 

 

 

 

Ф + Ф = 1,

Ф =

(Ф )2.

 

1

2

1

 

2

В случае метода золотого сечения используются два условия окончания вычислений:

а) выполнение заданного количества вычислений N,

б) достижение заданной величины δ уменьшения отрезка локализации.

Итак, алгоритм поиска минимума унимодальной функции методом золотого сечения заключается в следующем.

1. Задается N (либо δ), полагается j=1. 2. На j-й итерации вычисляются

 

 

x( j ) = a( j −1)

+ Ф

(b( j −1) − a( j −1) ),

 

 

 

1

 

 

1

 

 

 

 

 

 

 

x( j) = a( j −1)

+ Ф

(b( j −1) − a( j −1) ),

 

 

 

2

 

 

2

 

 

 

 

 

 

 

f

( j) = f (x( j) ),

f ( j) = f (x( j) ).

 

 

 

 

1

1

 

2

2

 

 

Если

f ( j) ≤ f ( j)

, то a( j)

= a( j −1) , b( j) = x( j) ,

x( j +1) = x( j)

 

1

2

 

 

 

 

2

2

1

Если

f ( j ) > f ( j)

, то a( j)

= x( j)

, b( j )

= b( j −1) ,

x( j +1) = x( j)

 

1

2

 

 

1

 

 

 

1

2

3. Проверяется условие окончания вычислений:

 

 

 

а)

j = N −1

либо б)

Lj +1

≤ δ .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

L

 

 

 

 

 

 

 

 

 

0

 

 

 

.

.

Если оно выполняется, то определяются итоговый отрезок локализации, оценки точки минимума x и величины минимума

f * и вычисления завершаются.

Если условие не выполняется, то полагается j=j+1 и осуществляется переход к п.2.

Пример. Определить методом золотого сечения минимум

46

функции f (x) = x4 − 6x2 +10 , заданной на отрезке ∆=[1,3], при

N=4.

Решение.

В данном случае будут выполнены N −1 = 3 итерации. Результаты вычислений заносим в табл. 4.5.

Таблица 4.5

Номер

x1( j )

x2( j )

f1( j)

≤

f2( j)

a( j)

b( j)

итера-

ции

 

 

 

>

 

 

 

 

 

 

 

 

 

 

0

—

—

—

 

—

1

3

1

1,764*

2,236*

1,012

<

4,999

1

2,236

2

1,472*

1,764

1,694

>

1,012

1,472

2,236

3

1,764

1,944*

1,012

<

1,607

1,472

1,944

 

 

Поскольку

j = N −1 = 3 , то вычисления завершаются.

 

 

Точка

минимума

локализована

на

отрезке

∆

4

= [1,472; 1,944] , x* x(3) = 1,764, f f (x(3) ) = 1,012.

 

 

 

1

 

1

 

 

 

 

Ответ: ∆4

= [1,472; 1,944] , x* 1,764,

f * 1,012 .

 

 

 

Задачи

 

 

 

 

 

 

 

1. Определить с помощью пассивного поиска минимум

функции f (x) = x2 −3x + 2, заданной на отрезке

∆ = [0, 4]: а) при

N=8, ε = 0,1; б) при N=9.

 

 

 

 

 

 

2. Определить методом

дихотомии

минимум

функции

f (x) = x2 −3x + 2, заданной на отрезке ∆ = [0, 4] , при N=8, ε = 0,1. 3. Определить методом Фибоначчи минимум функции f (x) = x2 −3x + 2, заданной на отрезке ∆ = [0, 4], при N=4, ε = 0,2 . 4. Определить методом золотого сечения минимум функ-

ции f (x) = x2 −3x + 2, заданной на отрезке ∆ = [0, 4] , при N=4.

47

5. ЧИСЛЕННЫЕ МЕТОДЫ ОПТИМИЗАЦИИ МНОГОЭКСТРЕМАЛЬНЫХ ФУНКЦИЙ

На практическом занятии рассматриваются методы отыскания глобального минимума функций одной переменной. Предполагается, что заданы исходный отрезок ∆ = [a, b] и коли-

чество вычислений N значений функции f (x) . Требуется опре-

делить оценки точки глобального минимума x* и величины минимума f * = f (x*) .

Простейшим методом глобальной оптимизации является так называемое сканирование (метод перебора), которое состоит в

последовательном переборе точек xi ∆, i = 1, N . В простейшем случае точки выбираются равномерно. При этом исходный отре-

зок

∆ разбивается на N интервалов длины

h =

b − a

,

средними

 

 

 

 

 

 

 

 

 

 

 

 

N

 

точками которых и являются xi . Таким образом,

 

 

 

x = a + (i −1)h +

h

= a +

b − a

(2i −1),

 

 

 

(5.1)

 

 

i =1, N.

 

 

 

 

 

 

i

2

 

2N

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

При записи алгоритмов и решении задач используются

следующие обозначения:

 

 

 

 

 

 

 

 

 

x*

и

f * , i=1,2,…, −

соответственно оценки точки глобального

i

 

i

 

 

 

 

 

 

 

 

 

 

 

минимума и величины глобального минимума, полученные после

iвычислений;

α− любое число, не принадлежащее исходному отрезку [a,b],

т.е. α [a,b] ;

β− число, заведомо большее f * , т.е. β > f * .

Алгоритм поиска глобального минимума методом сканирования заключается в следующем.

1. Задаются N, α и β ; полагается x0* = α, f0* = β, i = 1.

2.Вычисляются xi и f (xi ) .

3.Полагается

 

 

 

 

 

 

 

48

 

 

 

 

 

 

x

 

, если f (x ) < f * ,

 

 

xi* =

 

*

 

 

i

 

*

 

 

 

i

 

 

 

i −1

 

 

 

 

x

 

 

1

, если f (x )

≥ f

 

1

;

 

 

i −

i

 

 

 

 

 

 

 

 

i −

 

 

fi*

f (x

), если f (x ) < f * ,

=

 

 

 

 

i

i

 

 

i −1

 

 

 

 

 

 

 

 

 

f *

 

, если f (x ) ≥ f

*

.

 

 

i

 

1

 

i

 

 

1

 

 

 

 

−

 

 

i −

 

 

4. Проверяется условие окончания вычислений i=N.

Если оно выполняется, то полагается x* x*N , f * fN* и

вычисления завершаются.

Если условие не выполняется, то полагается i=i+1 и осуществляется переход к п.2.

Пример. Определить с помощью сканирования минимум

функции

f (x) = 2x4 − 8x3 + 8x2 − x ,

заданной на

отрезке

∆ = [−1,4] , при N=10.

 

 

 

 

 

 

 

 

 

 

 

 

Решение.

 

 

 

 

 

 

 

 

 

 

 

 

Задаем α=10, β=1000.

 

 

 

 

 

 

 

 

 

 

Определяем xi

с помощью соотношения (5.1):

 

 

 

 

xi = −1+

4 +1

 

 

 

 

 

 

 

 

 

 

(2i −1) = −1,25 + 0,5i, i = 1, 10.

 

 

 

 

 

 

 

 

 

 

20

 

 

 

 

 

 

 

 

 

 

 

Результаты вычислений заносим в табл. 5.1.

 

 

 

 

 

 

 

 

 

 

 

 

 

Таблица 5.1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Номер

xi

 

f (x )

≥

 

f

*

 

 

 

*

 

 

отсчета

 

 

 

 

i

<

 

i−1

 

 

x

 

 

 

 

 

 

 

 

 

 

i−1

 

 

1

−0,75

 

9,26

<

 

1000

 

 

10

 

 

2

−0,25

 

0,883

<

 

9,26

 

 

 

−0,75

 

 

3

0,25

 

 

0,133

<

 

0,883

 

 

−0,25

 

 

4

0,75

 

 

1,01

>

 

0,133

 

 

0,25

 

 

5

1,25

 

 

0,508

>

 

0,133

 

 

0,25

 

 

6

1,75

 

 

−1,37

<

 

0,133

 

 

0,25

 

 

7

2,25

 

 

−1,62

<

 

−1,37

 

1,75

 

 

 

 

49

 

 

 

 

 

 

 

Окончание табл. 5.1

 

 

 

 

 

 

 

8

2,75

5,76

>

−1,62

2,25

 

9

3,25

29,8

>

−1,62

2,25

 

10

3,75

82,4

>

−1,62

2,25

 

 

 

 

 

−1,62

2,25

 

Поскольку i=10=N, то вычисления завершаются.

Ответ: x* 2,25, f * −1,62 .

Модификацией сканирования с целью уменьшения коли-

чества вычислений является поиск (сканирование) с уточнением.

В этом случае процедура равномерного сканирования выполняется n раз.

На 1-м этапе осуществляется сканирование во всей зоне поиска (на всем отрезке) ∆(0) = [a(0) ≡ a, b(0) ≡ b] . При этом вы-

полняется N1 вычислений, т.е. исходный отрезок разбивается на

N

1

отрезков длины

h(1) =

b − a

,

в средних точках

x(1)

которых

 

 

 

 

 

N1

 

i

 

 

 

 

 

 

f (x) . В результате определяют-

вычисляются значения функции

ся оценки x*N(1) и

fN*(1) .

 

 

 

 

 

1

1

 

 

 

 

 

 

 

 

На 2-м этапе

осуществляется сканирование

на

отрезке

∆(1) = [a(1) , b(1) ] , границы которого определяются следующим об-

разом.

x*(1)

= x(1) , k {1,2,", N }, тогда

Пусть

 

N1

 

k

 

 

 

1

 

 

 

 

a(1) = x(1)

, b(1) = x(1)

,

 

 

 

 

k −1

 

 

k +1

 

здесь принято, что

x(1) ≡ a(0)

, x(1)

 

≡ b(0) .

 

 

 

0

 

N1 +1

 

 

Отметим, что

x*(2) = x*(1) ,

f *(2) = f

*(1) . На 2-м этапе вы-

 

 

 

0

N1

 

 

0

N1

полняется N2 вычислений,

в результате которых определяются

оценки x*(2) и

f *(2) .

 

 

 

 

 

 

N2

N 2

 

 

 

 

 

 

 

50

Затем выполняются 3-й, 4-й, …, n-й этапы. Поскольку общее количество вычислений равно N, то N j , j = 1, n , должны удовлетворять условию

n

∑ N j = N.

j =1

Итоговыми оценками точки глобального минимума x*

величины глобального минимума f * являются величины x*(n)

Nn

f *(n) , т.е.

N n

и

и

x* x*(n)

N n

, f * f *(n) .

N n

Пример. Определить с помощью поиска с уточнением минимум функции f (x) = 2x4 − 8x3 + 8x2 − x , заданной на отрезке

∆ = [−2, 4] , при N=10, n=2, N1 =6, N2 =4.

Решение.

Первый этап

Задаем α=10, β=1000.

Определяем xi(1) с помощью следующего соотношения:

 

xi(1) = a +

b − a

(2i −1), i =

 

.

 

 

 

 

 

1, N1

 

 

 

2N1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

В итоге получаем

 

 

 

 

 

 

 

 

 

 

xi(1) = −2 +

4 + 2

(2i −1) = −2,5 + i,

 

 

 

 

 

 

i = 1,6.

 

 

 

 

 

 

 

 

 

12

 

 

 

 

 

 

 

 

 

 

 

Результаты вычислений заносим в табл. 5.2.

Таблица 5.2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Номер

xi(1)

 

f (xi(1) )

≥

 

fi*−1(1)

xi*−(11)

 

отсчета

 

<

 

 

 

1

−1,5

 

56,6

<

 

 

1000

 

10

 

2

−0,5

 

3,63

<

 

 

56,6

 

−1,5

 

3

0,5

 

0,625

<

 

 

3,63

 

−0,5

 

Соседние файлы в предмете Экономика