Tải bản đầy đủ (.doc) (110 trang)

tối ưu hoá hàm nhiều biến không có ràng buộc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (463.13 KB, 110 trang )

Lời mở đầu
Ngày nay cùng với sự phát triển không ngừng của khoa học máy tính
thì việc ứng dụng nó vào các ngành khoa học khác cũng đạt được những
hiệu quả hết sức to lớn.
Một ứng dụng cụ thể của máy tính vào cơ học đó là tối ưu hoá các hệ
cơ học. Với các modul tối ưu có sẵn trên máy thì ta có thể dễ dàng triển
khai chúng vào một modul riêng biệt trong quá trình giải trọn vẹn một
hệ cơ học.
Mục đích chính của đồ án này là xây dựng các modul tối ưu để gắn
vào một chương trình hoàn chỉnh giải một hệ cơ học. Do phạm vi để sử
dụng như vậy nên trong đồ án này tôi chỉ trình bày những phương pháp
tối ưu mà có thể dễ dàng ứng dụng để đạt được mục đích trên, mặc dù
còn nhiều phương pháp nhanh và chính xác hơn nhưng việc áp dụng
chúng vào dạng bài toán như trên thì nó trở nên phức tạp hơn.
Những phương pháp tối ưu được trình bày sau đây là những phương
pháp tối ưu trực tiếp không có sử dụng đạo hàm, còn những phương
pháp có sử dụng đạo hàm không được nói đến do việc gắn nó vào các
modul khác mà tính đến đạo hàm thì chương trình rất khó thực hiện do
hàm mục tiêu được xác định trong quá trình tính toán từ các modul khác
nên khó xác định được đạo hàm của chúng và các ràng buộc.
Chương I giới thiệu sơ qua các khái niệm về tối ưu và bài toán cơ
học đặt ra. Chương II, III, IV trình bày cụ thể các phương pháp tối ưu.
Chương V là sử dụng các modul xây dựng từ các phương pháp đã giới
thiệu để giải một vài bài toán cụ thể.
Tôi xin chân thành cảm ơn sự hướng dẫn tận tình của thầy giáo Đinh
Văn Phong, cảm ơn sự giúp đỡ tham khảo của thầy Nguyễn Nhật Lệ và
thầy Phan Mạnh Dần.
1
Chương I.
bài toán tối ưu trong cơ học
I. Bài toán tối ưu tổng quát


1. Phát biểu bài toán.
“Tìm trạng thái tối ưu của một hệ thống bị ràng buộc sao cho đạt
được mục tiêu mong muốn về chất lượng theo một nghĩa nào đó.”
Các yếu tố của một bài toán tối ưu hoá:
- Trạng thái: mô tả trạng thái của hệ thống cần tối ưu hoá.
- Mục tiêu: đặc trưng cho tiêu chuẩn hoặc hiệu quả mong muốn
(như hiệu suất cao nhất, trọng lượng nhỏ nhất, độ cứng nhỏ nhất,
gia tốc nhỏ nhất, thời gian ngắn nhất).
- Ràng buộc: Thể hiện các điều kiện kỹ thuật mà hệ thống phải thoả
mãn.
2. Phân loại các bài toán tối ưu.
Có các loại bài toán tối ưu sau:
- Bài toán quy hoạch tuyến tính.
- Bài toán quy hoạch phi tuyến.
- Bài toán cực trị phiếm hàm.
- Bài toán điều khiển tối ưu.
Tuy nhiên do phạm vi ứng dụng ở đây là trong các bài toán cơ học
nên ta chỉ xét đến bài toán tối ưu phi tuyến.
Một bài toán tối ưu phi tuyến được phát biểu như sau:
Tìm giá trị nhỏ nhất (hoặc lớn nhất) của hàm:
f(x) với x

E
n
sao cho thoả mãn các ràng buộc:
h
i
(x)=0 với i=1,2,…,m
g
i

(x)

0 với i=m+1,…,p
2
Hàm f(x) ở đây được gọi là hàm mục tiêu, x

E
n
là biến trạng thái.
Nếu x

E thì ta nói f(x) là hàm một biến (n=1), còn với n>1 thì f(x) là
hàm nhiều biến. Trong các hàm đó thì phải có ít nhất một hàm là phi
tuyến.
II. Một số Bài toán cơ học
Bây giờ ta sẽ đi xét một số ví dụ dùng để minh hoạ cho việc sử dụng
các modul tối ưu. Với mỗi hệ cơ học sẽ chỉ đặt ra bài toán tối ưu, còn ta
sẽ xem xét cụ thể vào chương V của đồ án này.
1. Bài toán 1: Tối ưu tần số
(Xem [5]).
Hình II-1. Hệ dao động n bậc tự do
Với hệ cho trên hình II-1, bài toán đặt ra là tìm các giá trị m
i
, c
i
, b
i
sao cho hàm:
F=


=

n
1i
2
ibii
)λλ(ω


min
Trong đó:
i
ω
là trọng số.
ib
λ
là giá trị của các trị riêng mong muốn
i
λ
là giá trị các trị riêng của cơ hệ
3
Đây là bài toán tối ưu bằng phương pháp số, các biến đầu vào là m
i
,
c
i
, b
i
, hàm mục tiêu ở đây là hàm của các trị riêng, các trị riêng ở đây
được tính từ m

i
, c
i
, b
i
bằng một modul tính toán khác.
2. Bài toán 2: Tối ưu biên độ
Hình II-2
Với mô hình cơ học như trên thì bài toán đặt ra là xác định các khối
lượng m
i
, độ cứng c
i
, giảm chấn b
2
sao cho biên độ dao động của vật 1
và 2 là nhỏ nhất.
Nếu ta đưa vào các kí hiệu:
x
0
=
1
0
c
F
: di chuyển tĩnh của m
1
dưới tác dụng của lực F
0
.

(0)
1
ω
=
1
1
m
c
: tần số riêng của hệ (m
1
, c
1
)
(0)
2
ω
=
2
2
m
c
: tần số riêng của hệ (m
2
, c
2
)
η
=
(0)
1

ω

: tần số kích động
μ
=
1
2
m
m
;
ξ
=
(0)
1
(0)
2
ω
ω
;
4
D=
(0)
12
ω2m
b
Thì giải hệ trên ta được các hàm khuếch đại như sau:
V
1
=
0

1
x
x
=
22222222222
22222
)μηη(1η4D]ημξ)η)(ξη[(1
η4D)η(ξ
−−+−−−
+−
(2.2.7)
V
2
=
0
2
x
x
=
22222222222
222
)μηη(1η4D]ημξ)η)(ξη[(1
η4Dξ
−−+−−−
+
(2.2.7)
Biên độ dao động của vật 1 và 2 bây giờ là V
1
và V
2

tương ứng. Có 2
bài toán tối ưu biên độ đặt ra như sau:
Bài toán 2.1:
Tìm: f(x) = V
1
(D,
ξ
,
η
)

min
Thoả mãn các ràng buộc:


η)ξ,(D,V
η)ξ,(D,Vη)ξ,(D,V
1
12
Q
max
D
min


D

D
max
ξ

min


ξ

ξ
max
Bài toán 2.2: (Bài toán minimax)
Tìm: f(x) =
ba
max
≤≤
η
[V
1
(D,
ξ
,
η
)]

min
Thoả mãn các ràng buộc:
ba
max
≤≤
η


η)ξ,(D,V

η)ξ,(D,Vη)ξ,(D,V
1
12
Q
max
D
min


D

D
max
ξ
min


ξ

ξ
max
Để có thể sử dụng được các modul tối ưu trên ta phải tiến hành gián
đoạn hoá tần số kích động
η
. Giới hạn trên của hàm mục tiêu trong
đoạn a

η

b được coi là biến thiết kế giả tạo – kí hiệu là d.

5
Gọi giá trị của
η
tại các điểm gián đoạn trong [a,b] là
η
i
với i=1 m.
Khi đó bài toán dẫn về:
Tìm: f(x) = d

min
Thoả mãn các ràng buộc:
V
1
(D,
ξ
,
η
i
)

d i=1 m
ba
max
≤≤
η


)ηξ,(D,V
)ηξ,(D,V)ηξ,(D,V

i1
i1i2
Q
max
i=1 m
D
min


D

D
max
ξ
min


ξ

ξ
max
Như vậy là có 2m+4 ràng buộc bất đẳng thức.
6
Chương II.
Tối ưu hoá hàm một biến
I. Giới thiệu
Phần này ta chỉ xét hàm mục tiêu chỉ có một biến:
y=f(x) với x

R

n
Việc tìm lời giải tối ưu cho hàm một biến có thể rất ít được ứng dụng
trực tiếp trong các bài toán thường gặp trong thực tế, nhưng ở đây tôi
trình bày để được áp dụng vào các phần sau của đồ án. Trong các bài
toán tối ưu hàm nhiều biến, có những phương pháp phải sử dụng thuật
toán tối ưu lần lượt theo từng phương, khi đó ta sẽ phải sử dụng đến
thuật toán tối ưu hoá hàm một biến.
Do phạm vi ứng dụng trong các bài toán như vậy nên ở phần này tôi
chỉ trình bày chủ yếu vào phương pháp tìm kiếm không sử dụng đạo
hàm, tức là tìm trực tiếp, và thuật toán được trình bày cụ thể để sử dụng
trong đồ án này là thuật toán Fibonacci và còn được phát triển thành
phương pháp “golden section” (mặt cắt vàng).
II. Tối ưu với hàm mục tiêu không có giới hạn
Là hàm mục tiêu mà không có giới hạn cho biến x. Để tìm được lời
giải tối ưu cho những hàm này ta phải đi xác định khoảng mà chứa giá
trị tối ưu, do đó nó chuyển thành bài toán với hàm mục tiêu có giới hạn.
a. Xác định khoảng tối ưu
7
Trong bước tìm kiếm trực tiếp nào đó, hai giá trị của hàm mục tiêu
có thể được dùng để loại trừ một miền không chứa giá trị tối ưu. Theo
đó, nếu ta tìm max: với x
1
> x
0
và f(x
1
) > f(x
0
) thì ta có thể kết luận giá
trị max không nằm trong miền x < x

0
. Ta sẽ luôn luôn có kết quả giá trị
tối ưu nằm trong hai khoảng, ở đây đó là [x
0
; x
1
] và (x
1
;+

).
Gọi x
0
là điểm xuất phát để tìm kiếm, s là giá trị độ dài khởi tạo. Đặt:
x
1
=x
0
+s và tính f(x
1
), f(x
0
). Có 3 trường hợp sau:
- Nếu f(x
1
) = f(x
0
) thì max nằm trong khoảng x
0
< x < x

1
.
- Nếu f(x
1
) > f(x
0
) thì max nằm trong khoảng x>x
0
, ta phải tìm theo
trục x theo hướng tăng theo s. Phương pháp của Swann yêu cầu tính giá
trị hàm mục tiêu tại dãy các điểm: x
0
; x
1
=x
0
+s; x
2
=x
1
+2s; …; x
k
=x
k-1
+2
k-
1
s, ở đây x
k
là điểm đầu tiên trong dãy trên làm cho hàm mục tiêu giảm:

f(x
0
)< f(x
1
) <f(x
2
)<…< f(x
k-1
) và f(x
k-1
)

f(x
k
)
d/2=x
k-1
-x
k-2
=2
k-2
s (2.1.1)
Do đó giá trị max của hàm mục tiêu sẽ nằm trong khoảng (x
k-2
;x
k
) và
độ dài khoảng này là:
x
k

-x
k-2
= x
k-1
+2
k-1
s- x
k-2
=x
k-2
+2
k-2
s+2
k-1
s- x
k-2
=3.2
k-2
s=3d/2. (2.1.2)
- Nếu f(x
1
) < f(x
0
), ta loại khoảng x>x
1
và tìm kiếm theo các giá trị
giảm dần của x. Cũng tương tự trường hợp thứ 2 ở trên nhưng ta thay
s=-s và giá trị max của hàm mục tiêu sẽ nằm trong khoảng (x
k
;x

k-2
).
Đến đây đã xác định được khoảng tối ưu, việc tìm giá trị tối ưu cho
hàm mục tiêu sẽ chuyển thành tìm giá trị tối ưu cho hàm mục tiêu có
giới hạn.
b. Chọn độ dài khởi tạo s
Bài toán đặt ra đầu tiên trong bất kì việc tìm kiếm giá trị tối ưu là
chọn dộ dài khởi tạo s, trong phương pháp số trên máy tính thì nó quyết
định số lượng tính toán nhiều hay ít. Trong phần trước, tổng khoảng
cách dịch chuyển trong quá trình tìm kiếm giá trị max của hàm mục tiêu
8
đến bước thứ k-1 là tổng của


=
1
0
s2
k
i
i
, đến bước k hàm mục tiêu sẽ giảm.
Ta có:
x
*
-x
0
< x
k
-x

0
=


=
1
0
s2
k
i
i
=(2
k
-1)s (2.2.1)
hay: k >
2ln
]/)(1ln[
0
*
sxx
−+
(2.2.2)
với k là số bước dịch chuyển, nhưng có k+1 giá trị của hàm mục tiêu
được tính vì nó bắt đầu từ x
0
. Đặt N=k+1 lần tính để định nghĩa một
miền cuối cùng của độ dài 3d/2 chứa giá trị tối ưu mong muốn. Độ dài
đó là: (3/2).d(k)=3.2
k-2
s theo (2.1.2) và với k tính theo (2.2.2).

c. ước lượng gần đúng giá trị tối ưu
Từ 3 điểm (x
k-2
, x
k-1
, x
k
) đã tính được với 3 giá trị của hàm mục tiêu
tương ứng, hàm f(x) có thể được tính xấp xỉ thành hàm bậc 2 như sau:
f(x)=
0
β
+
1
β
(x-x
k-2
)+
11
β
(x-x
k-2
) (x-x
k-1
) (2.3.1)
Với:
0
β
= f(x
k-2

) (2.3.2)
1
β
=
2-k1-k
2-k1-k
x-x
)f(x-)f(x
(2.3.3)
11
β
=
1-kk
2-k1-k
2-k1-k
2-kk
2-kk
x-x
x-x
)f(x-)f(x
x-x
)f(x-)f(x

(2.3.4)
Do đó bài toán tối ưu bây giờ trở thành bài toán tìm cực trị của hàm
bậc hai một biến. Ta chỉ cần giải phương trình f’(x)=0, kết quả cho như
sau:
x
*
=(x

k-2
+x
k-1
-
1
β
/
11
β
)/2
III. tối ưu với hàm mục tiêu có giới hạn
9
Trong phần này ta sẽ tìm giá trị tối ưu cho hàm mục tiêu có giới hạn:
a

x

b. Phương pháp được trình bày chủ yếu ở đây là phương pháp
Fibonacci.
1. Phương pháp Fibonacci
a. Cơ sở tìm kiếm trên dãy số Fibonacci
Để dễ dàng, ta xét một miền được giới hạn bởi đoạn AB có độ dài L
j
.
Hai điểm dùng để thử có thể được thêm vào là C và D như hình vẽ dưới
với các độ dài tương ứng: l
j
=AC và l
j


=DB.
AA
C
D E B
l
j
L
j
l
j
'=l
j
l
j+1
L
j+1
Hình III-1. Hai bước liên tiếp của phương pháp Fibonacci
Điểm tối ưu sẽ nằm trong đoạn CB có độ dài L
j
-l
j
, hoặc đoạn AD có
độ dài L
j
-l
j
’, do đó để thu được những đoạn bằng nhau ta nên đặt l
j
=l
j

’.
Bước tiếp theo là ta thay đoạn AB bằng đoạn CB hoặc AD bằng cách
loại trừ một trong hai đoạn. Giả sử ta thu được đoạn CB và nó có chứa
điểm D, do đó ta chỉ việc thêm vào điểm E và quan hệ về độ dài là:
CD=EB=l
j+1
Nếu ta đặt:
j
σ
=
j
j
L
l
(3.1.1)
10
thì ở vòng thứ j+1 ta có:
1j
σ
+
=
1
1
L
l
+
+
j
j
Do đó: CD=L

j+1
-l
j
=l
j+1
=
1j
σ
+
L
j+1
hay: L
j+1
(1-
1j
σ
+
)=l
j
Thay: L
j+1
=L
j
-l
j
=L
j
-
j
σ

L
j
=L
j
(1-
j
σ
) và l
j
=
j
σ
L
j
Ta có: L
j
(1-
j
σ
)(1-
1j
σ
+
)=
j
σ
L
j
Rút ra:
j

σ
=
1
1
σ2
σ1
+
+


j
j
(3.1.2)
Nếu ta viết:
j
σ
=
j
j
γ
β
với
j
β

j
γ
là hai số nguyên thì biểu thức
(3.1.2) trở thành:
j

j
γ
β
=
11
11
β2γ
β-γ
++
++

jj
jj
(3.1.3)
Điều đó được thoả mãn khi:
j
β
=
1
γ
+
j
-
1
β
+
j
j
γ
=2

1
γ
+
j
-
1
β
+
j
Khử
j
γ

1
γ
+
j
giữa hai biểu thức trên ta thu được:
j
β
=
1
β
+
j
+
2
β
+
j

(3.1.4a)
1
β
−N
=
2
β

N
=1 (3.1.4b)
Bây giờ ta hãy chú ý tới dãy số nguyên Fibonacci:
F
0
=F
1
=1 (3.1.5a)
Và với n>1:
F
n
=F
n-1
+F
n-2
(3.1.5b)
Ta thấy mỗi số trong dãy trên là tổng của hai số trước nó.
Nếu ta viết:
j
β
=F
N-(j+1)

thì:
j
γ
=
j
β
+
1
β

j
= F
N-(j+1)
+F
N-j
=F
N-(j-1)
Do đó:
j
σ
=
)1(
)1(
F
F
−−
+−
jN
jN
với j=1,2,…,N-1

11
Đến đây ta đã có tất cả những thành phần cần thiết cho phương pháp
tìm kiếm Fibonacci.
b. Phương pháp tìm kiếm Fibonacci
Trong phương pháp này, đoạn đầu tiên ta phải tính 2 giá trị (bước 1)
để chia đoạn đó thành 3 đoạn, sau đó chọn 2 đoạn để thực hiện việc tìm
kiếm tiếp theo. ở bước tiếp theo ta chỉ việc tính thêm 1 giá tri do giá trị
thứ 2 trùng với 1 trong 2 giá trị ở bước trước. Do đó từ bước thứ 2 trở đi
ta chỉ phải tính thêm 1 giá trị để thử.
Có thể tóm tắt các bước của phương pháp như sau:
- Bước 1: Thay hai giá trị đầu tiên.
Với đoạn a
1


x

b
1
có độ dài L
1
=b
1
-a
1
. Hai vị trí được thêm vào
đoạn [a
1
,b
1

] để thử là x
1
và x
2
(x
2
> x
1
). Trước hết ta tính độ dài:
l
1
=x
1
-a
1
=
N
N
F
F
2−
L
1
(3.1.6)
Ta có:
x
1
= a
1
+l

1
x
2
= b
1
-l
1
=a
1
+L
1
-
N
N
F
F
2−
L
1
=a
1
+
N
N
F
F
1

L
1

Bằng cách so sánh f(x
1
) và f(x
2
) mà ta sẽ loại được đoạn (a
1
,x
1
) hoặc
đoạn (x
2
,b
1
) (cả hai đoạn đều có độ dài là l
1
). Cuối cùng ta có thể chọn
được đoạn mới nhỏ hơn chứa giá trị tối ưu.
- Bước 2: Tìm kiếm trên đoạn mới.
Đoạn mới có độ dài: L
2
=L
1
-l
1
=b
1
-x
1
(hoặc x
2

-a
1
)
Thay l
1
ở (3.1.6) vào ta có:
L
2
=L
1
-
N
N
F
F
2−
L
1
=L
1
(1-
N
N
F
F
2−
)=L
1
N
N

F
F
1

Do F
N
=F
N-1
+F
N-2
.
Tổng quát hơn ta có:
12
l
k
=
)1(
)1(
F
F
−−
+−
kN
kN
L
k
(3.1.7)
- Bước 3: Hai điểm để thử trong đoạn thứ hai.
Trên đoạn L
2

ta sẽ thêm vào 2 điểm x
3
’và x
3
’’
. Ta có:
l
2
=
1
3
F
F


N
N
L
2
Đến đây ta phải xét tới 2 trường hợp:
+ Trường hợp thứ nhất: đoạn (a
1
,x
1
) bị loại trừ còn lại đoạn
(x
1
,b
1
), giá trị tối ưu sẽ nằm trong đoạn (x

1
,b
1
):
x
3
’=x
1
+l
2
=x
1
+
1
3
F
F


N
N
L
2
=(a
1
+ L
1
N
N
F

F
2−
)+
1
3
F
F


N
N
( L
1
N
N
F
F
1

)
=a
1
+ L
1
N
N
F
F
1



x
2
Như vậy x
3
’ trùng với điểm đã được tính là x
2
, từ l
2
là khoảng
cách giữa x
1
và x
2
ta có:
x
3
’’
=b
1
-l
2
=x
1
+L
2
-
1
3
F

F


N
N
L
2
=(a
1
+ L
1
N
N
F
F
2−
)+
1
31
F
F-F

−−
N
NN
( L
1
N
N
F

F
1

)
=x
1
+ L
1
N
N
F
F
2−

x
3
.
Như vậy ở bước này ta chỉ phải tính một giá trị x
3
.
+ Trường hợp thứ hai: đoạn (x
2
,b
1
) bị loại trừ còn lại đoạn (a
1
,x
2
),
giá trị tối ưu sẽ nằm trong đoạn (a

1
,x
2
): cũng tương tự như trường
hợp trên, chỉ phải tính một giá trị x
3
.
Tổng quát cho bước lặp thứ m ta có:
L
m
=
N
mN
F
F
)1( −−
L
1
(3.1.8)
Cuối cùng để xác định N ta tính đến sai số của thuật toán:
13
e=
1
L
L
N
=
N
F
1



F
N
=1/e
Trong dãy số Fibonacci ta có thể xác định được số N nhỏ nhất
thoả mãn điều kiện trên.
2. Phương pháp Fibonacci cải tiến
Từ biểu thức (3.1.7) ta đặt: j=N-(k-1) ta có
l
k
=
)1(
)1(
F
F
−−
+−
kN
kN
L
k
=
j
j
F
F
2

L

k
Khi j là giá trị lớn thì tỉ số F
j-2
/F
j
sẽ dần đến 0.3820.
Khi đó: l
k
=0.3820L
k
.
Ta sẽ áp dụng kết quả này để xây dựng một thuật toán cụ thể để áp
dụng cho các phần sau.
IV. Tổng kết
Cuối cùng chúng ta có thể viết cụ thể giải thuật của phương pháp
Fibonacci theo các bước như sau:
Tìm min f(x) với x

R.
Bước 1: Xác định hướng tối ưu
Chọn trước x
0
và s > 0, sai số e, hằng số Fibonacci p=0,3820.
a. x
t
=x
0
+s
Nếu f(x
t

) > f(x
0
) thì s = -s và x
t
=x
0
+s (Đổi hướng)
Nếu f(x
t
) > f(x
0
) thì s = -s/2 và x
t
=x
0
(Quay về điểm ban đầu)
b. Nếu f(x
t
) > f(x
0
) và s>e thì quay lại a.
Bước 2: Xác định khoảng tối ưu
a. Gán: x
t
=x
0
+s và s=2s.
b. Nếu f(x
t
) < f(x

0
) thì quay lại a.
Bước 3: Thuật toán Fibonacci
14
a. Gán:
a= x
0
+(x
t
- x
0
)p
b= x
t
-(x
t
- x
0
)p
Nếu f(a) < f(b) thì gán: x
t
=b
Ngược lại thì gán: x
0
=a
b. Kiểm tra nếu x
t
-x
0
> e thì quay lại a. Ngược lại thì kết thúc.

Giá trị tối ưu là f(x
0
) tại x
0
.
Chú ý: ở trên ta phải dùng dấu trị tuyệt đối để kiểm tra điều kiện
dừng của chương trình do ở bước 1 xác định hướng tối ưu s có thể âm
nên x
t
-x
0
có thể mang giá trị âm, trường hợp đó có thể dẫn tới việc
chương trình kết thúc khi x
t
chưa dần tới x
0
(x
t
< x
0
).
Thuật toán Fibonacci có tốc độ hội tụ rất nhanh so với việc chia
khoảng tối ưu thành nhiều điểm bằng nhau đồng thời số lượng tính toán
ít do ở mỗi vòng lặp chỉ phải thực hiện một phép tính.
Thủ tục tính toán được viết bằng ngôn ngữ C++ ứng dụng trong
thuật toán Powell trong tệp “Powell.cpp” trong phần phụ lục.
15
Chương III.
Tối ưu hoá hàm Nhiều biến không có ràng
buộc

I. Giới thiệu
Hàm mục tiêu nhiều biến là hàm mà biến trạng thái x

R
n
với n>1.
Phương pháp Fibonacci cho hàm một biến không thể áp dụng được
cho hàm nhiều biến, ta sẽ phải tìm ra các phương pháp khác phù hợp để
tìm lời giải tối ưu.
Ta có thể phân loại thành hai phương pháp chính cho lời giải bài
toán tối ưu: đó là phương pháp có sử dụng đạo hàm và phương pháp
không sử dụng đạo hàm.
Phương pháp có sử dụng đạo hàm có ưu điểm là hội tụ nhanh và
chính xác nhưng yêu cầu phải tính đạo hàm của hàm mục tiêu. Còn
phương pháp không sử dụng đạo hàm thì không phải tính đạo hàm mà
chỉ cần tính giá trị của hàm mục tiêu và so sánh các giá trị với nhau tùy
theo từng phương pháp tìm kiếm.
Tuy nhiên trong ứng dụng các phương pháp vào từng lớp bài toán cụ
thể thì phương pháp sử dụng đạo hàm gặp phải hai trở ngại lớn khi triển
khai.
16
Thứ nhất đó là khi gặp phải bài toán có số lượng lớn các biến (n lớn),
việc phân tích hàm mục tiêu để tính các giá trị đạo hàm đó rất nặng nề
và không dễ dàng để thực hiện, nhất là khi phải tính đạo hàm bậc hai
với phương pháp gradient cấp hai. Ngay cả khi việc xác định giá trị các
đạo hàm được thay thế bằng phương pháp tính xấp xỉ thì cũng gặp phải
lỗi khi triển khai trên máy tính số, cụ thể đó là lỗi khi giá trị các biến
dần đến lân cận của vô cùng hoặc tính đến điểm đạo hàm không xác
định, việc tính xấp xỉ không còn đúng nữa. Về nguyên tắc thì việc thay
thế đó hoàn toàn có thể, nhưng phương pháp này vẫn yêu cầu một số

lượng biến đổi đáng kể trước khi nó trở thành công cụ có thể tính toán.
Cũng với trường hợp trên thì phương pháp không sử dụng đạo hàm lại
không yêu cầu hàm mục tiêu phải liên tục và đều hay tồn tại đạo hàm
hay không mà vẫn có thể thực hiện việc tìm lời giải tối ưu.
Trở ngại thứ hai đó là người dùng phải nhập trực tiếp biểu thức của
đạo hàm vào trước khi phải tính đến giá trị của hàm mục tiêu trong thuật
toán, nhất là khi số biến lớn hoặc có nhiều ràng buộc thì việc nhập rất
khó khăn.
Một vấn đề nữa cũng cần phải cân nhắc khi sử dụng phương pháp tối
ưu nào, đó là khi sử dụng thuật toán tối ưu như một modul tính toán cho
toàn bộ một đề án, khi đó hàm mục tiêu được tính qua các modul
chương trình khác trên máy tính số, việc xác định được đạo hàm của nó
trong trường hợp này là vô cùng khó khăn.
Với những yếu tố trên và phạm vi ứng dụng của đồ án này như một
modul riêng như đã nói thì trong đồ án này tôi chỉ nói sơ qua phương
pháp có sử dụng đạo hàm để có thể so sánh chứ không có ý định ứng
dụng, còn phương pháp được trình bày chính là không sử dụng đạo
hàm.
Trong chương này ta sẽ xét đến các hàm mục tiêu không có các ràng
buộc. Việc tối ưu các hàm mục tiêu có ràng buộc ta sẽ nói đến ở chương
17
sau, nhưng về cơ bản vẫn phải sử dụng đến các phương pháp sẽ trình
bày ở chương này.
II. Phương pháp tối ưu của hook và jeeves
Theo khái niệm thì đây là phương pháp đơn giản nhất, nó được thực
hiện như sau: tại một thời điểm chỉ thay đổi một biến trong khi giữ
nguyên giá trị của các biến còn lại cho tới khi tìm được giá trị tối ưu.
Lấy một ví dụ để minh hoạ: với hàm mục tiêu f(x
1
,x

2
) ban đầu giữ
nguyên x
2
và thay đổi x
1
cho tới khi tìm được giá trị tối ưu ứng với x
1
.
Sau đó giữ nguyên giá trị x
1
tìm được ở trên rồi cho x
2
thay đổi để tìm
giá trị tối ưu ứng với nó. Tuy nhiên quá trình này sẽ không chính xác
nếu có sự ảnh hưởng lẫn nhau giữa x
1
và x
2
, đó là nếu trong quan hệ ảnh
hưởng bao gồm kết quả của x
1
và x
2
tìm thấy trong hàm mục tiêu. Do đó
phương pháp này không thể được thực hiện trừ khi hàm mục tiêu có sự
ảnh hưởng lẫn nhau là vô nghĩa.
Hook và Jeeves đã đưa ra một chiến lược đơn giản hợp lý của
phương pháp tối ưu trực tiếp. Đó là sử dụng những điểm đã tính thử rồi
loại bỏ sự không cần thiết về tính chất của hàm mục tiêu trong không

gian E
n
trong hình học tô pô (là ngành hình học nghiên cứu các tính chất
không bị ảnh hưởng của sự thay đổi hình dáng và kích thước). Nó đã
được Wood bổ sung thêm, thuật toán gồm hai bước chính: đầu tiên là tối
ưu quanh điểm cơ sở rồi tối ưu theo hướng đã chọn (hay còn gọi tối ưu
theo mẫu hình). Hình II-1 dưới đây là sơ đồ thuật toán của phương pháp
đó (Trong trường hợp tìm min của f(x)).
18
19
Bắt đầu
Cho điểm khởi tạo cơ sở
x
0
Tính f(x
0
)
Thực hiện tối ưu lần I, thu
được x.
Kiểm tra: f(x) < f(x
0
)
Nếu s < e
Kết
thúc
Giảm s
Lấy x làm điểm cơ sở
mới
x
0

=x
Tối ưu theo mẫu
hình
Thực hiện tối ưu lần II, thu
được x.
Kiểm tra: f(x) < f(x
0
)
Sai Đún
g
Sai
Đún
g
Đún
g
Sai
Hình II-1. Sơ đồ thuật toán tối ưu của Hook Jeeves
Thuật toán tối ưu trực tiếp được thực hiện theo các bước như sau:
- Cho trước các giá trị khởi tạo:
x
0
(0)
=( x
1
(0)
,x
2
(0)
,…, x
n

(0)
), s=(s
1
(0)
, s
2
(0)
,…, s
n
(0)
)
(Cho sai số e)
Tính f(x
0
(0)
)
- Tối ưu lần I:
Thay đổi lần lượt các thành phần của x=x
0
(0)
là x
i
(0)
với i=1 n, khi
f(x) giảm thì giữ lại thành phần đã thay đổi của x. Để chỉ rõ hơn ta
xét như sau:
x
1
(0)
được thay đổi bởi s

1
(0)
: x
1
(1)
= x
1
(0)
+s
1
(0)
.
Nếu f(x) giảm thì giữ nguyên thành phần x
1
(0)
.
Nếu f(x) không giảm thì thay x
1
(1)
= x
1
(0)
-s
1
(0)
. Nếu f(x) giảm thì ta
chấp nhận thành phần x
1
(1)
. Còn nếu f(x) không giảm thì giữ nguyên

x
1
(0)
: x
1
(1)
= x
1
(0)
.
Sau khi tối ưu xong x
1
(0)
thì chuyển sang thành phần tiếp theo là
x
2
(0)
tương tự.
Tiếp tục cho đến thành phần thứ n của x được thay đổi thì bước
tối ưu lần I kết thúc.
Như vậy trong mỗi lần tối ưu theo một hướng độc lập thì giá trị
của hàm mục tiêu được so sánh với giá trị ngay trước nó, nếu tốt hơn
thì chấp nhận hướng đó và giá trị của hàm mục tiêu cũ được thay
bằng giá trị mới vừa tính được, còn không thì giữ nguyên giá trị cũ.
- Tối ưu theo mẫu hình được thực hiện nếu bước trên thành công:
Sau khi tối ưu theo n hướng ở trên thì ta thực hiện tối ưu theo
mẫu hình. Từ các hướng tối ưu thành công ở trên (là các hướng mà
tối ưu thu được giá trị hàm mục tiêu tốt hơn giá trị trước khi thực
20
hiện) ta định nghĩa một vector trong không gian R

n
thể hiện hướng
tối ưu thành công. Gọi m là số lần tối ưu thành công thì thực hiện tối
ưu theo mẫu hình theo công thức sau:
x
(k+1)
=m.x
(k)
-x
(0)
(i=1 n)
x
(0)
là điểm cơ sở để thực hiện bước tối ưu thứ nhất.
Việc tối ưu theo mẫu hình có thành công hay không ta chưa thể
kết luận ngay được mà còn phải thực hiện tối ưu lần II xong mới kết
luận được.
- Tối ưu lần II:
Sau khi tối ưu theo mẫu hình kết thúc thì ta thực hiện tối ưu lần
II, các bước cũng tương tự như lần I.
Nếu f(x) không giảm sau khi tối ưu lần II thì ta kết luận việc tối
ưu theo mẫu hình là thất bại, quay lại tối ưu từ lần I để tìm hướng tối
ưu thành công mới.
- Kiểm tra điều kiện dừng:
Nếu việc tối ưu ngay từ lần I đã thất bại, hướng tối ưu mới không
được tìm thấy thì ta giảm dần các thành phần của s (là một vector)
cho tới khi tìm được hướng tối ưu mới hoặc tất cả các thành phần
của nó bằng không (trong máy tính số thì nhỏ hơn sai số e) thì thuật
toán kết thúc.
Việc thất bại trong việc làm giảm giá trị của f(x) ứng với các thành

phần của s cho thấy f(x) chính là giá trị tối ưu địa phương. Ba bước
kiểm tra cơ sở phải được thoả mãn cho các bước tối ưu kết thúc:
- Bước kiểm tra đầu tiên được thực hiện sau mỗi lần tối ưu I và tối
ưu theo mẫu hình: Độ lớn của sự thay đổi hàm mục tiêu được so sánh
với một giá trị nhỏ cho trước. Nếu tổng số thay đổi của hàm mục tiêu kể
từ giá trị cơ sở của nó không lớn hơn giá trị nhỏ cho trước thì bước tối
ưu lần I hoặc tối ưu theo mẫu hình coi như thất bại. Khi không thực hiện
việc kiểm tra như trên thì thực hiện kiểm tra theo cách khác là xác định
xem hàm mục tiêu tăng (thất bại) hay giảm (thành công).
21
- Bước kiểm tra thứ hai bảo đảm rằng giá trị của hàm mục tiêu luôn
tốt hơn (trong trường hợp tối ưu này là giảm).
- Bước kiểm tra thứ ba thực hiên sau khi tối ưu lần I thất bại theo
các hướng thành phần của s. Thuật toán có thể kết thúc nếu các thành
phần của s nhỏ hơn sai số e cho trước.
III. Phương pháp tối ưu của nelder và mead
1. Cơ sở lý thuyết
Nelder và Mead đã đưa ra một phương pháp có phần hơi phức tạp so
với phương pháp tối ưu trực tiếp nhưng nó đã chứng tỏ là một phương
pháp có hiệu quả tốt và dễ dàng thực hiện trên máy tính số.
Để hiểu rõ hơn về phương pháp ta hãy xem xét vắn tắt một phương
pháp gọi là tối ưu bằng đơn hình do Spendley, Hext và Himsworth nghĩ
ra khi thống kê các lần tính thử bằng tay. Các khối đa diện đều trong
không gian E
n
được gọi là những đơn hình. Ví dụ với hàm mục tiêu hai
biến (biến trạng thái thuộc không gian E
n
) thì một đơn hình đều sẽ là
một tam giác đều (3 đỉnh), với hàm 3 biến thì là một khối tứ diện đều (4

đỉnh) (hai trường hợp này được minh họa bằng hình III-1 ở dưới),…,
tương tự với hàm mục tiêu n biến thì đơn hình là khối đa diện (n+1)
đỉnh.
Hình III-1. Đơn hình đều với 2 và 3 biến độc lập
Trong quá trình tối ưu hàm mục tiêu f(x), vector x dùng để thử có thể
được chọn tại các điểm trong không gian E
n
xác định các đỉnh của đơn
hình như đã giới thiệu ở trên do Spendley, Hext và Himsworth. Từ
những phân tích hình học như trên ta có thể chỉ ra toạ độ của các điểm
của đơn hình đều được cho bởi ma trận D, trong đó các cột biểu diễn
22
Träng t©m
Träng t©m
A
B
A
B
1
2
3
2
3
4
các thành phần của các đỉnh được đánh số từ 1 đến (n+1) và các hàng
biểu diễn các toạ độ được đánh số từ 1 đến n:
D =
1)(nn
d dd0


d dd0
d dd0
d dd0
122
222
212
221


















Trong đó:
d
1
=
2n

t
(
1n
+
+n-1)
d
2
=
2n
t
(
1n
+
-1)
t : khoảng cách giữa hai đỉnh.
Hàm mục tiêu có thể được tính tại mỗi đỉnh của đơn hình, một phép
chiếu được thực hiện từ đỉnh mà hàm mục tiêu có giá trị lớn nhất qua
trọng tâm của đơn hình, trong hình III-1 thì đó là đỉnh A và B là đỉnh
tạo thành sau phép chiếu. Thông thường thì ta thực hiện phép chiếu là
phép ánh xạ hệ số bằng 1, tức là phép lấy đối xứng. Đơn hình mới được
tạo nên sau khi bỏ đi đỉnh A và thêm một đỉnh mới là B. Tiếp tục với
thủ tục này ta luôn luôn loại được đỉnh mà hàm mục tiêu có giá trị lớn
nhất, đồng thời thêm vào quy tắc giảm kích thước của đơn hình sau mỗi
lần thực hiện để tránh dẫn tới giá trị vô hạn. Chúng ta thừa nhận rằng
phương pháp tối ưu bằng đạo hàm thì ở một vòng lặp nào đó độ dài
dùng để tối ưu là cố định nhưng hướng tối ưu đã chọn lại thay đổi.
Một vài khó khăn trong thủ tục đơn hình đều là hội tụ chậm (do phải
tính đến nhiều hơn (n+1) giá trị và so sánh trong một lần tính) và khi
thực hiên với những hàm mục tiêu lồi hoặc lõm, từ đó dẫn đến một vài
phương pháp cải tiến để xử lí những khó khăn đó. Trong phần này

chúng ta sẽ nói đến phương pháp của Nelder và Mead, trong đó đơn
23
hình được thay đổi hình dáng không phải là đơn hình đều nữa, việc đó
không làm phương pháp lâu hơn là giữ nguyên đơn hình đều, do đó
chúng ta gọi là phương pháp “khối đa diện linh hoạt” (flexible
polyhedron).
Phương pháp của Nelder và Mead để tìm giá trị nhỏ nhất của hàm
mục tiêu có n biến độc lập sử dụng (n+1) đỉnh của khối đa diện linh
hoạt trong không gian E
n
. Mỗi đỉnh được xác định bằng một vector x.
Đỉnh mà giá trị hàm mục tiêu có giá trị lớn nhất được lấy đối xứng qua
trọng tâm của các đỉnh còn lại của khối đa diện. Thay đỉnh mà hàm mục
tiêu có giá trị lớn nhất đó bằng đỉnh có giá trị nhỏ hơn qua các phép
chiếu cho tới khi kích thước của khối đa diện xấp xỉ không thì tìm thấy
giá trị nhỏ nhất.
2. Xây dựng thuật toán
Từ những cơ sở lý thuyết như trên ta sẽ đi xây dựng một thuật toán
cụ thể để dễ dàng thực hiện trên máy tính.
Kí hiệu: x
i
(k)
=[x
i1
(k)
, x
i2
(k)
,…, x
in

(k)
]
T
là đỉnh thứ i của khối đa diện tại
bước tính thứ k. Thuật toán Nelder và Mead là thực hiện trên khối đa
diện (n+1) đỉnh bất kì nên ta phải cho trước toạ độ của (n+1) đỉnh, tức là
phải nhập trên máy tính n
×
(n+1) giá trị khởi tạo ban đầu. Để thuận tiện
và đơn giản ta xây dựng luôn khối đa diện ban đầu là một đơn hình đều
như đã trình bày ở trên, khi đó ta chỉ phải cho trước một đỉnh, tức là chỉ
phải nhập vào máy n giá trị, điều đó đơn giản hơn rất nhiều và bảo đảm
khối đa diện ban đầu luôn thoả mãn để tính toán không phải kiểm tra.
Thuật toán được trình bày cụ thể như sau:
- Bước 1: Cho trước đỉnh khởi tạo: x
0
(0)
rồi xây dựng khối đa diện
ban đầu là một đơn hình đều với kích thước t cho trước như phần
trình bày ma trận D ở trên:
x
1
(0)
= x
0
(0)
24
d
1
=

2n
t
(
1n
+
+n-1)
d
2
=
2n
t
(
1n
+
-1)
x
ij
(0)
= x
1j
(0)
+d
1
nếu: j=i+1
x
ij
(0)
= x
1j
(0)

+d
2
nếu: j

i+1
với: i=2,3,…,n+1 và j=1,2,…,n.
Sau đó tính giá trị của hàm mục tiêu tại các đỉnh vừa tính được:
f(x
i
(0)
)
- Bước 2: Bắt đầu từ k=0.
Tìm:
f(x
h
(k)
)=max{ f(x
1
(k)
), f(x
2
(k)
),…, f(x
n+1
(k)
)}
tương ứng với x
h
(k)
f(x

l
(k)
)=min{ f(x
1
(k)
), f(x
2
(k)
),…, f(x
n+1
(k)
)}
tương ứng với x
l
(k)
.
f(x
g
(k)
)=max{ f(x
1
(k)
), f(x
2
(k)
),…, f(x
n+1
(k)
)} (với g


h)
tương ứng với x
g
(k)
.
Tính giá trị các thành phần của trọng tâm khi bỏ x
h
(k)
đi:
)(
,2
x
k
jn+
=














+

=
)(
1
1
)(
xx
n
1
k
hj
n
i
k
ij
(3.1)
với: j =1,2,…,n là chỉ số các trục tọa độ.
- Bước 3: Thực hiện phép ánh xạ hệ số
α
> 0:
)(
3
x
k
n
+
=
)(
2
x
k

n
+
+
α
(
)(
2
x
k
n
+
-
)(
x
k
h
) (3.2)
Trong đó
)(
2
x
k
n
+
là trọng tâm được tính theo (3.1),
)(
x
k
h
là đỉnh mà

tại đó hàm mục tiêu đạt giá trị lớn nhất trong (n+1) giá trị ở vòng lặp
thứ k.
- Bước 4: Kiểm tra nếu f(
)(
3
x
k
n
+
)

f(
)(
x
k
l
):
giãn vector (
)(
3
x
k
n
+
-
)(
2
x
k
n

+
) theo công thức:
25

×