TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN KHOA CÔNG NGHỆ THÔNG TIN BỘ MÔN CÔNG NGHỆ TRI THỨC NGUYỄN THANH BÌNH XÂY DỰNG HỆ THỐNG ĐIỀU KHIỂN TRỰC THĂNG
KHÔNG NGƯỜI LÁI GIẢ LẬP BẰNG
MÔ HÌNH KẾT HỢP GA – FL
KHOÁ LUẬN CỬ NHÂN TIN HỌC
TP. HCM, NĂM 2005
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN KHOA CÔNG NGHỆ THÔNG TIN BỘ MÔN CÔNG NGHỆ TRI THỨC
NGUYỄN THANH BÌNH - 0112174 XÂY DỰNG HỆ THỐNG ĐIỀU KHIỂN TRỰC THĂNG
KHÔNG NGƯỜI LÁI GIẢ LẬP BẰNG
MÔ HÌNH KẾT HỢP GA – FL
KHÓA LUẬN CỬ NHÂN TIN HỌC
GIÁO VIÊN HƯỚNG DẪN TS. LÊ HOÀNG THÁI
NIÊN KHÓA 2001 - 2005
Lời cảm ơn ----------------------------------------------------------------------------------------------
LỜI CẢM ƠN ---oOo---
Em xin gởi lời cảm ơn chân thành đến tất cả Thầy Cô trong khoa Công
nghệ Thông tin trường Đại học Khoa học Tự nhiên, những người đã tận tâm
truyền dạy những kiến thức quý báu cho chúng em.
Đặc biệt, em xin chân thành cảm ơn Thầy Lê Hoàng Thái, người đã tận
tình hướng dẫn, giúp đỡ và động viên em trong suốt thời gian qua. Những lời
chỉ dẫn, những tài liệu và sự khích lệ của Thầy đã giúp em rất nhiều để hoàn
thiện luận văn này.
Xin cảm ơn bác Nguyễn Đình Sáo – Căn cứ trưởng ga trực thăng sân
bay Tân Sơn Nhất thuộc Công ty bay dịch vụ Miền Nam – đã giúp cháu rất
nhiều trong việc tìm kiếm tài liệu, kiến thức về máy bay trực thăng.
Xin gởi lời cảm ơn rất nhiều đến toàn thể gia đình, bạn bè.
Thành phố Hồ Chí Minh, ngày 30 tháng 06 năm 2005
Nguyễn Thanh Bình
----------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN .............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
Giáo viên hướng dẫn
TS. Lê Hoàng Thái
----------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------
NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN .............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
Giáo viên phản biện
ThS. Đinh Nguyễn Anh Dũng
----------------------------------------------------------------------------------------------
Mục lục ----------------------------------------------------------------------------------------------
MỤC LỤC
---oOo---
Lời cảm ơn
Đề cương chi tiết
Mục lục
Danh sách hình, bảng, từ viết tắt
Tóm tắt luận văn
Mở đầu
Chương 1. Mô hình kết hợp Thuật giải di truyền – Logic mờ ............................................1
1.1.Giới thiệu…………………………………………….…………………………….…2
1.2. Kết hợp Thuật giải di truyền và Logic mờ trong thực tế………………………….…2
Kết hợp GA và FL trong việc điều khiển trực thăng không người lái.............................3
Sơ đồ giải quyết bài toán…………………………….………………………………....4
1.3. Kết luận chương 1........................................................................................................4
Chương 2. Tổng quan về hệ thống điều khiển trực thăng không người lái………………...5
2.1. Giới thiệu……………………………………………………………..……………....6
2.2. Các vấn đề trong việc điều khiển trực thăng .………………………………………..8
2.3. Biến trạng thái (state variables)……………………………………………………..11
2.4. Sơ đồ hệ thống điều khiển ………………………………………………………….14
2.4.1. Sơ đồ tổng quát của hệ thống điều khiển máy bay trực thăng ………………….14
2.4.2. Sơ đồ cấu trúc bộ điều khiển logic mờ …...…………………………….………14
2.5. Kết luận chương 2......................................................................................................15
Chương 3. Điều khiển bay tự động bằng bộ luật logic mờ ……………………... ………16
3.1. Giới thiệu……………………………………………………………………………17
3.2. Cấu trúc bộ điều khiển logic mờ …………………………………………………...17
3.2.1. Bộ điều khiển mờ cổ điển và bộ điều khiển mờ phân tán ……………………17
3.2.2. Ứng dụng bộ điều khiển phân tán để thiết kế bộ điều khiển logic mờ ................18
3.2.3. Biến đầu vào và đầu ra của bộ điều khiển logic mờ ……………………………22
----------------------------------------------------------------------------------------------
Mục lục ----------------------------------------------------------------------------------------------
3.2.4. Bộ luật tổng quát ..…….......……………………………………………………24
3.3. Thiết kế bộ luật tổng quát …..……………………………………………………...25
3.4. Kết luận chương 3......................................................................................................26
Chương 4. Phương pháp mở rộng bộ luật điều khiển bằng Thuật giải di truyền………....27
4.1. Giới thiệu …………………………………………………………….……………..28
4.2. Sự mã hoá biến và xây dựng hàm thích nghi…..……………….…………………..29
4.2.1. Mã hoá biến……………………………………………………………………..29
4.2.2. Xây dựng hàm thích nghi……………………………………………………….29
4.3 Kết luận chương 4.......................................................................................................30
Chương 5. Giải quyết bài toán.……………………..…………………....……………….31
5.1. Giới thiệu………………………………………………………...…………………32
5.2. Xây dựng bộ luật cơ bản ...……....…………………………………………………32
5.2.1. Sơ đồ thuật toán...........…………………………………………………………32
5.2.2. Mô tả sơ đồ.….……..…………………………………….….……..…………..32
5.2.3. Xây dựng bộ luật cơ bản………………………….….…………………………32
5.3. Mở rộng bộ luật cơ bản………………………….….………………………………34
5.3.1. Sơ đồ thuật toán…………….….…………….….…………….….…………….34
5.3.2. Xây dựng bộ luật cơ bản…………….….…………….….…………….….……34
5.4. Quá trình ra quyết định của bộ điều khiển …………….….…………….….………36
5.5. Kết quả thử nghiệm.….………………………….….…………………………........40
5.5.1 Xây dựng bộ luật cơ bản…..….…………………………………………………40
5.5.2. Mở rộng bộ luật cơ bản........................................ ……………………………...40
5.5.3. Điều khiển trực thăng .......... …………………………………………………...41
5.6. Kết luận chương 5......................................................................................................45
Kết luận và hướng phát triển………..………………………………………………….46
Kết luận…………………………….……..……………………………..………………46
Hướng phát triển……………………….…..……………………………………………46
Tài liệu tham khảo ………………………………………………………………………47
----------------------------------------------------------------------------------------------
Mục lục ----------------------------------------------------------------------------------------------
Phụ lục A. Thuật giải di truyền. . . . . .. . .. . . …………………………………………….48
Phụ lục B. Logic mờ............................................................................................................58
Phụ lục C. Các màn hình giao diện……………………………………………………….62
Phụ lục D. Thiết kế luật cho từng khối...............................................................................68
Phụ lục E. Bộ luật tổng quát (414 luật) trong điều khiển trực thăng….…...……………..81
Phụ lục F. Một số đoạn code chính trong chương trình……………………….………….89
----------------------------------------------------------------------------------------------
Danh sách hình, bảng, từ viết tắt ----------------------------------------------------------------------------------------------
• DANH SÁCH HÌNH
Hình 1.1. Sơ đồ giải quyết bài toán....................................................................................................4
Hình 2.1. Lực không khí sản sinh quanh máy bay trực thăng............................................................9
Hình 2.2.a. Cấu trúc điều khiển của máy bay trực thăng...................................................................9
Hình 2.2.b. Ba bộ phận điều khiển chính trong khoang lái của trực thăng.......................................10
Hình 2.3. Góc nghiêng (pitch)...........................................................................................................13
Hình 2.4. Góc lệch (yaw)..................................................................................................................13
Hình 2.5. Góc lộn vòng (roll)............................................................................................................14
Hình 3.1. Bộ điều khiển mờ cổ điển và bộ điều khiển phân tán.......................................................17
Hình 3.2. Vùng điều khiển cần gạt theo chiều ngang của bộ điều khiển mờ....................................19
Hình 3.3. Vùng điều khiển cần gạt theo chiều dọc của bộ điều khiển mờ........................................19
Hình 3.4. Vùng điều khiển bàn đạp của bộ điều khiển mờ...............................................................19
Hình 3.5. Vùng điều khiển cần nâng của bộ điều khiển mờ.............................................................19
Hình 5.1. Các bước tạo bộ luật cơ bản..............................................................................................32
Hình 5.2. Dùng GA tạo bộ luật mở rộng...........................................................................................34
• DANH SÁCH BẢNG
Bảng 3.1. Mô tả đầu vào của mỗi khối điều khiển mờ......................................................................23
Bảng 3.2. Mô tả đầu ra và tổng số luật của mỗi khối điều khiển mờ................................................24
• DANH SÁCH TỪ VIẾT TẮT
GA : Genetic Algorithms ( Thuật giải di truyền )
FL : Fuzzy Logic ( Logic mờ )
N : Negative
St : Stable
P : Postive
Sm : Small
M : Medium
NB : Negative Big
NM : Negative Medium
NS : Neagative Small
Z : Zero
PS : Positive Small
PM : Positive Medium
PB : Positive Big
----------------------------------------------------------------------------------------------
Tóm tắt luận văn ----------------------------------------------------------------------------------------------
TÓM TẮT LUẬN VĂN
Thông tin chung về đề tài:
Tên đề tài: Xây dựng hệ thống điều khiển trực thăng không người lái giả lập bằng mô hình kết hợp GA – FL
GVHD: TS. Lê Hoàng Thái Sinh viên thực hiện: MSSV: 0112174 Họ và tên: Nguyễn Thanh Bình
Tóm tắt nội dung luận văn: - Tìm hiểu lý thuyết về Thuật giải di truyền và Logic mờ. - Nghiên cứu các vấn đề trong điều khiển máy bay trực thăng. - Thiết kế cấu trúc bộ điều khiển logic mờ cho máy bay trực thăng. - Ứng dụng Logic mờ để xây dựng bộ luật điều khiển cho máy bay trực thăng. - Mở rộng bộ luật điều khiển bằng Thuật giải di truyền. - Xây dựng chương trình giả lập trực thăng bay không người lái trên môi trường Visual C++ 6.0
Một số từ khóa chính liên quan đến nội dung đề tài: Fuzzy Logic, Genetic Algorithms, Helicopter, Flight Control.
Lĩnh vực áp dụng: Điều khiển tự động
Các thuật toán, phương pháp, quy trình chính được nghiên cứu, ứng dụng trong đề tài - Fuzzy Logic - Genetic Algorithms
Các công cụ, công nghệ chính được nghiên cứu, ứng dụng trong đề tài Thư viện OpenGL.
Xác nhận của GVHD
TS. Lê Hoàng Thái
----------------------------------------------------------------------------------------------
Mở đầu ----------------------------------------------------------------------------------------------
MỞ ĐẦU
---o0o---
Thuật giải di truyền (Genetic Algorithms_GA) và Logic mờ (Fuzzy
Logic_FL) là những kỹ thuật rất được chú ý trong lĩnh vực trí tuệ nhân tạo. Sự kết
hợp hai kỹ thuật này rất được ưa chuộng trong điều khiển tự động, đóng góp cho
nhân loại những ứng dụng hữu ích, có thể thay thế cho con người thực hiện các
công việc khó khăn, nguy hiểm.
Trong khuôn khổ luận văn này, chúng tôi tìm hiểu, nghiên cứu về Thuật giải
di truyền, Logic mờ và ứng dụng sự kết hợp của hai kỹ thuật này cho bài toán : Xây
dựng hệ thống điều khiển trực thăng không người lái giả lập bằng mô hình kết hợp
GA - FL.
Xét về bố cục, luận văn được tổ chức như sau :
- Chương 1: Trình bày sự kết hợp của hai kỹ thuật này trong thực tế và trong bài
toán điều khiển trực thăng không người lái.
- Chương 2: Giới thiệu hệ thống điều khiển và các vấn đề liên quan đến điều khiển
trực thăng.
- Chương 3: Giới thiệu cấu trúc bộ điều khiển logic mờ và thiết kế bộ luật điều
khiển tổng quát cho máy bay trực thăng.
- Chương 4: Trình bày phương pháp mở rộng bộ luật cơ bản thành bộ luật mở rộng.
- Chương 5: Ứng dụng hai kỹ thuật vào giải quyết bài toán.
Tính khoa học của mô hình kết hợp GA-FL được chỉ ra thông qua các thuật
toán đề xuất trong luận văn (tạo bộ luật cơ bản bằng FL, mở rộng bộ luật cơ bản
bằng GA…)
Tính khả thi của mô hình đề xuất trong luận văn thể hiện qua ứng dụng:
chương trình giả lập điều khiển trực thăng không người lái.
----------------------------------------------------------------------------------------------
Chương 1 ----------------------------------------------------------------------------------------------
CHƯƠNG 1
MÔ HÌNH KẾT HỢP
THUẬT GIẢI DI TRUYỀN - LOGIC MỜ
1.1. Giới thiệu
1.2. Kết hợp Thuật giải di truyền và Logic mờ trong thực tế
1.3. Kết luận
---------------------------------------------------------------------------------------------- 1
Chương 1 : Mô hình kết hợp Thuật giải di truyền – Logic mờ ----------------------------------------------------------------------------------------------
1.1. Giới thiệu :
Thuật giải di truyền và Logic mờ đóng vai trò rất quan trọng trong lĩnh
vực Trí tuệ Nhân tạo. Những kỹ thuật này được phát triển vào gần cuối thế kỷ
20, và thành công của nó trong khoa học khiến con người luôn nghiên cứu
phát triển và tìm cách kết hợp chúng lại. Tổng quan về Thuật giải di truyền
Logic mờ tham khảo ở phần phục lục A và B.
Chương 1 sẽ giới thiệu về sự kết hợp của hai kỹ thuật này trong thực tế,
mục đích của luận văn và sơ đồ giải quyết bài toán.
1.2. Kết hợp Thuật giải di truyền và Logic mờ trong thực tế :[2]
Do Logic mờ dựa trên kinh nghiệm để tạo luật, do đó việc chọn lựa các
luật thích nghi cho vấn đề rất là nan giải. Logic mờ đã được bổ túc với những
phương pháp truy tìm và chọn lựa giải pháp tối ưu của GA.
Chuck Karr, thuộc cơ quan khai mỏ của Hoa Kỳ (U.S. Bureau of
Mines), là một trong những người tiên phong khai thác ưu điểm của hai kỹ
thuật GA và Logic mờ. Khởi đầu bằng luận án tiến sĩ về đề tài sử dụng GA và
Logic mờ để điều khiển các dụng cụ điện tử trong lĩnh vực khai thác quặng
mỏ, sau đó Chuck Karr đã dùng những hiểu biết này để điều khiển phi thuyền
đáp tại các trạm trên không gian. Cách xa nhau hàng triệu dặm, trung tâm
điều khiển tại địa cầu không thể nào theo dõi và điều khiển các phi thuyền, do
đó các phi thuyền phải dựa vào Logic mờ và Thuật giải di truyền để nhận
định tình hình và tìm ra giải pháp tối ưu để tồn tại trong không gian đầy
những chuyển biến bất thường.
Trong lĩnh vực thương mại, tiền tệ người ta đã dùng các chương trình
tin học kết hợp Logic mờ và GA cho các công việc đầu tư hay tiếp thị.
Và trong luận văn này, chúng tôi đã dùng sự kết hợp này cho việc xây
dựng hệ thống điều khiển máy bay không người lái (giả lập).
---------------------------------------------------------------------------------------------- 2
Chương 1 : Mô hình kết hợp Thuật giải di truyền – Logic mờ ----------------------------------------------------------------------------------------------
* Kết hợp GA và FL trong việc điều khiển trực thăng không người lái:
Để điều khiển máy bay một cách tự động, thì ta cần có bộ điều khiển
logic mờ (fuzzy logic controller). Bộ điều khiển thường rất phức tạp do việc
lái máy bay một cách tự động là rất khó. Trên thực tế, các nhiệm vụ điều
khiển được chia ra thành những bộ phận điều khiển riêng lẻ, mỗi bộ phận có
những luật riêng và gắn liền với những hàm thành viên.Vì bộ điều khiển logic
mờ rất rộng, và cả những luật thi hành trong những bộ phận điều khiển riêng
lẻ cũng không cần đến người phi công, nên rất cần có một kỹ thuật hiệu quả
trong việc viết ra những luật hữu dụng. GA được dùng để khám phá những
luật và cung cấp chúng cho bộ điều khiển của máy bay trực thăng. Như vậy,
GA đã chứng minh khả năng tìm kiếm hiệu quả trong việc xác định luật cho
bộ điều khiển logic mờ.
Luận văn này mô tả cấu trúc bộ điều khiển logic mờ của máy bay
trực thăng, cung cấp chi tiết việc xây dựng bộ luật điều khiển, áp dụng GA để
tìm kiếm luật, và kết quả là chương trình giả lập điều khiển máy bay không
người lái (thử nghiệm).
---------------------------------------------------------------------------------------------- 3
Chương 1 : Mô hình kết hợp Thuật giải di truyền – Logic mờ ----------------------------------------------------------------------------------------------
* Sơ đồ giải quyết bài toán:
Bộ luật tổng quát
Lựa chọn luật
Mờ hoá
Dữ liệu ban đầu (dữ liệu thử nghiệm đã biết)
Bộ luật cơ bản
GA
Bộ luật mở rộng
FL
Dữ liệu nhập
Điều khiển hoạt động trực thăng
Hình 1.1
. Sơ đồ giải quyết bài toán
1.3. Kết luận chương 1 :
Chương 1 giới thiệu mô hình kết hợp Thuật giải di truyền – Logic mờ
trong thực tế, tiến tới áp dụng mô hình này cho bài toán xây dựng hệ thống
điều khiển trực thăng không người lái.
---------------------------------------------------------------------------------------------- 4
Chương 2 ----------------------------------------------------------------------------------------------
CHƯƠNG 2
TỔNG QUAN VỀ HỆ THỐNG ĐIỀU KHIỂN
TRỰC THĂNG KHÔNG NGƯỜI LÁI
2.1. Giới thiệu
2.2. Các vấn đề trong việc điều khiển trực thăng
2.3. Biến trạng thái (state variables)
2.4. Sơ đồ hệ thống điều khiển
2.5. Kết luận
---------------------------------------------------------------------------------------------- 5
Chương 2 : Tổng quan về hệ thống điều khiển trực thăng không người lái ----------------------------------------------------------------------------------------------
2.1. Giới thiệu: [1]
Trên thực tế, có những chuyến bay (cả trong quân sự lẫn thương mại)
đặt người phi công và máy bay vào tình trạng nguy hiểm như việc kiểm tra
khả năng bay lượn của một loại máy bay mới sáng chế, kiểm tra tốc độ tối đa
khi máy bay lao đi với vận tốc nhanh hơn vận tốc âm thanh,…. Trong những
trường hợp như vậy, chúng ta nên có một hệ thống điều khiển tự động lái thay
cho người phi công.
Có rất nhiều thuật giải được sử dụng cho việc điều khiển máy bay trực
thăng. Tuy nhiên, những thuật giải này chỉ có thể dùng cho mỗi loại máy bay
riêng biệt; chúng hoàn toàn phải thiết kế lại cho mỗi loại trực thăng mà chúng
được sử dụng. Việc cài đặt một thuật giải điều khiển bay có thể dễ dàng thích
ứng với nhiều loại trực thăng sẽ tiết kiệm cho ngành công nghiệp máy bay
trực thăng, các nhà sản xuất vũ khí, và quân đội một khoản tiền lớn. Đồng
thời đánh dấu một bước ngoặc trong lĩnh vực điều khiển bay tự động của máy
bay trực thăng.
Hệ thống điều khiển mờ (fuzzy control system), hay bộ điều khiển logic
mờ (fuzzy logic controller) ngày càng trở nên phổ biến vào những năm cuối
thế kỷ 20. Những hệ thống này đã được sử dụng nhiều trong các lĩnh vực
khác nhau như: hoá học, khai khoáng mỏ, và công nghệ vũ trụ, …. Gần đây,
nhiều thuật toán đã ra đời và phát triển trợ giúp việc tự động thích ứng của bộ
điều khiển logic mờ với những biến đổi khác nhau. Procyk và Mamdani là
những người tiên phong trong việc xây dựng bộ điều khiển logic mờ có khả
năng tự thích nghi. Tiếp sau, Karr và cộng sự của ông đã thành công trong
việc sử dụng Thuật giải di truyền để xây dựng những bộ điều khiển logic mờ
tự thích nghi trong những điều kiện thực tế.
Bộ điều khiển logic mờ là giải pháp mở, nó có thể ứng dụng rộng rãi
trên nhiều loại máy bay khác nhau. Dữ liệu cho việc thiết kế bộ điều khiển
---------------------------------------------------------------------------------------------- 6
Chương 2 : Tổng quan về hệ thống điều khiển trực thăng không người lái ----------------------------------------------------------------------------------------------
logic mờ được lấy từ việc phỏng vấn những phi công có kinh nghiệm. Những
thông tin và kiến thức thu được từ người phi công được chuyển đổi về định
dạng luật quyết định áp dụng trong hệ điều khiển mờ. Tương lai bộ điều khiển
logic mờ dần dần sẽ thay thế người phi công trong những nhiệm vụ bay nguy
hiểm, và có khả năng áp dụng cho nhiều loại máy bay khác nhau.
Việc điều khiển máy bay được chia nhỏ thành các nhiệm vụ cho từng
bộ điều khiển riêng biệt. Những bộ điều khiển logic mờ riêng biệt này được
hình thành với 4 tiêu chí liên quan đến lái máy bay : (1) bay hướng ngang,
(2) bay hướng thẳng đứng, (3) bay hướng xuống, (4) bay hướng lên. Việc chia
nhỏ các chức năng giúp ta giảm bớt kích cỡ của tập luật. Tuy nhiên, việc chia
nhỏ này không làm giảm kích cỡ bộ luật tới mức những luật đều thực sự rõ
ràng. Vì thế rất cần kỹ thuật để xác định những luật thích hợp.
GA đã được sử dụng thành công trong việc xác định những luật quyết
định hiệu quả cho bộ điều khiển logic mờ. GA là thuật giải tìm kiếm dựa trên
cơ chế tiến hoá tự nhiên. Chúng tìm kiếm lời giải trong không gian lớn mà
không cần đến thông tin phát sinh. Tính tiện dụng đó làm chúng rất có hiệu
quả trong việc tìm kiếm luật cho bộ điều khiển trực thăng. Đồng thời, hàm
thích nghi đã hướng dẫn GA tìm kiếm đúng hướng, làm tối ưu cả thời gian lẫn
năng lượng cùng một lúc. Khả năng này không phải lúc nào cũng có trong đa
số các thuật giải điều khiển tối ưu.
Luật văn đề cập việc xây dựng bộ điều khiển logic mờ cho trực thăng
UH-1H. Mặc dù hệ thống điều khiển chưa thích ứng với những máy bay khác,
nhưng cấu trúc thì đủ linh hoạt và có khả năng thích ứng với nhiều loại trực
thăng khác. Sau đây sẽ nói về các vấn đề thường gặp trong việc điều khiển
trực thăng (mục 2.2), những biến trạng thái của máy bay trực thăng (mục 2.3),
và cuối cùng là sơ đồ hệ thống điều khiển (mục 2.4).
---------------------------------------------------------------------------------------------- 7
Chương 2 : Tổng quan về hệ thống điều khiển trực thăng không người lái ----------------------------------------------------------------------------------------------
2.2. Các vấn đề trong việc điều khiển trực thăng: [1]
Bộ điều khiển máy bay được sử dụng trong những tình huống nguy
hiểm, cả quân sự lẫn thương mại, là niềm khát khao để giúp cho người phi
công tránh được những rủi ro. Đã nhiều năm, chiếc máy bay có cánh cố định
“Drones” (máy bay không người lái) đã thi hành vai trò này, đặc biệt trong
lĩnh vực quân sự. Tuy nhiên, trong trường hợp cần có một loại máy bay thực
hiện thao diễn trong một phạm vi hẹp, hay duy trì bay tại một vị trí chỉ định
trong một khoảng thời gian dài thì một trực thăng không người lái là phù hợp
hơn cả. Tuy nhiên điều khiển trực thăng thì khó hơn nhiều so với điều khiển
máy bay (có cánh cố định).
Khó khăn lớn nhất trong việc xây dựng bộ điều khiển cho trực thăng là
loại bỏ sự mất ổn định và các ngẫu lực vốn có của trực thăng. Nếu người phi
công buông thả việc điều khiển máy bay có cánh cố định, thì máy bay sẽ dần
dần đạt đến trạng thái bay ổn định sau đó. Nhưng điều này thì không đúng với
máy bay trực thăng. Nếu không có những điều khiển chính xác, trực thăng sẽ
đi ra khỏi trạng thái ổn định. Động lực bay của trực thăng là những cặp ngẫu
lực và nó khác nhau từ máy bay này sang máy bay khác cũng như từ vùng bay
này sang vùng bay khác. Ngẫu lực một phần là do mômen hồi chuyển lớn
được tạo ra bởi cánh quạt chính. Bất cứ một chuyển động bay xuống về phía
trước nào (bay “chúi mũi”) đều khiến trực thăng quay tròn sang bên phải. Sự
điều khiển như vậy gây ra những hiệu ứng khí động lực học, sản sinh ra ngẫu
lực.
---------------------------------------------------------------------------------------------- 8
Chương 2 : Tổng quan về hệ thống điều khiển trực thăng không người lái ----------------------------------------------------------------------------------------------
Hình 2.1. Lực không khí sản sinh quanh máy bay trực thăng.
Trong cấu hình trực thăng đơn giản như Hình 2.1, thân trực thăng được nâng
lên nhờ cánh quạt chính (main rotor) cung cấp lực nâng. Cánh quạt đuôi được
thiết kế để chống lại lực xoắn do sự phản hồi của không khí với cánh quạt
chính.
Hình 2.2
. a) Cấu trúc điều khiển của máy bay trực thăng. [10]
---------------------------------------------------------------------------------------------- 9
Chương 2 : Tổng quan về hệ thống điều khiển trực thăng không người lái ----------------------------------------------------------------------------------------------
Hình 2.2.b) Ba bộ phận điều khiển chính trong khoang lái của trực thăng [10]
Trong khoang lái (cockpit), phi công sử dụng 3 bộ phận điều khiển để
lái trực thăng (Hình 2.2 b) : (1) cần nâng (collective) được sử dụng để điều
chỉnh độ nghiêng (pitch) của cánh quạt chính để tăng hay giảm lực nâng, (2)
bàn đạp (pedals) được sử dụng để điều chỉnh độ nghiêng (pitch) của cánh quạt
đuôi, làm lực xoắn sản sinh ra nhiều hoặc ít hơn , và (3) cần gạt (cyclic) dùng
để xác định hướng của cánh quạt chính. Cánh quạt chính được xem như một
đĩa ảo sản sinh ra lực nâng. Khi cần gạt được đẩy về phía trước, chiếc đĩa
nghiêng về phía trước cùng với thân máy bay, gây ra gia tốc hướng trước. Khi
cần gạt được đẩy sang phải, chiếc đĩa nghiêng về bên phải, gây ra gia tốc
hướng phải. Mỗi điều khiển kích động máy móc theo nhiều trục. Và sự kết
hợp giữa những điều khiển cực kỳ khó, do đó việc lái trực thăng là không dễ
chút nào.
Để biết rõ hơn về sự kết hợp giữa những điều khiển, ta xem xét một
thao diễn : phi công sẽ bay từ trạng thái lơ lửng hiện tại đến vị trí có độ cao
được xác định trước. Để bay lên, người phi công phải tăng lực nâng từ phía
---------------------------------------------------------------------------------------------- 10
Chương 2 : Tổng quan về hệ thống điều khiển trực thăng không người lái ----------------------------------------------------------------------------------------------
cánh quạt chính, do đó phi công kéo cần nâng (collective) hướng lên trên.
Điều này làm tăng độ nghiêng (pitch) của cánh quạt chính, sản sinh ra lực lớn
hơn lực cản không khí. Nhưng lực xoắn theo chiều đối lập từ phía cánh quạt
đuôi đã ngăn cản sự bay lên này, vì thế bàn đạp (pedals) phải được điều chỉnh
để thay đổi độ nghiêng của cánh quạt đuôi, cung cấp lực xoắn đối lập chính
xác cho vị trí cần nâng mới. Không may là lực xoắn đó không có tác dụng với
trục thẳng đứng của trực thăng. Trong đa số các trường hợp, cánh quạt đuôi
chỉ ảnh hưởng lực xoắn lên trục nằm ngang và gây ra sự lộn vòng (roll). Sự
lộn vòng này sẽ làm thay đổi hướng bay của trực thăng. Mỗi điều khiển gây ra
nhiều ảnh hưởng lên chuyển động bay của trực thăng. Do đó cần phải kết hợp
tỉ mỉ các điều khiển trực thăng ngay cả trong những thao diễn đơn giản nhất.
2.3. Biến trạng thái (state variables): [1]
Các vận tốc, gia tốc của trực thăng được gọi chung là những biến trạng
thái. Những biến này được định nghĩa trong hệ toạ độ có tâm nằm ở thân máy
bay, trục x hướng tới mũi, trục y hướng sang phải và trục z hướng xuống dưới.
Theo quy ước này, ta có 17 biến trạng thái gồm :
( m / sec) Vận tốc hướng trước (Forward velocity) u = dx dt
( m / sec) Vận tốc hướng phải (Rightward velocity) v = dy dt
2
w m ( / sec) Vận tốc hướng xuống (Downward velocity) = dz dt
2
u_dot ( m / sec ) Gia tốc hướng trước (Forward acceleration) = du dt
---------------------------------------------------------------------------------------------- 11
v_dot ( m / sec ) Gia tốc hướng phải (Rightward acceleration) = dv dt
Chương 2 : Tổng quan về hệ thống điều khiển trực thăng không người lái ----------------------------------------------------------------------------------------------
2
w_dot ( m / sec ) Gia tốc hướng xuống (Downward acceleration) = dw dt
p (deg/sec) Vận tốc góc (angular velocity) quanh trục x
q (deg/sec) Vận tốc góc quanh trục y
r (deg/sec) Vận tốc góc quanh trục z
Ru (m/sec) Vận tốc trước mong đợi (Reference forward velocity)
Rv (m/sec) Vận tốc phải mong đợi (Reference rightward velocity)
w
R (m/sec) Vận tốc xuống mong đợi (Reference downrward velocity)
ψ
R (deg) Góc lệch mong đợi (Reference heading)
Ngoài những biến được định nghĩa ở trên, còn có những góc Euler và
độ cao. Các góc yaw (góc lệch), pitch (góc nghiêng), roll (góc lộn vòng) được
gọi là những góc Euler :
ψ
(deg) Góc lệch (yaw) (còn được viết là psi)
φ (deg) Góc lộn vòng (roll) (còn được viết là phi)
θ (deg) Góc nghiêng (pitch) (còn được viết là theta)
h (m) Độ cao (altitude)
* Chú ý là khoảng cách được đo bằng mét (m), góc đo bằng độ (deg), và thời
gian đo bằng giây (sec).
---------------------------------------------------------------------------------------------- 12
Chương 2 : Tổng quan về hệ thống điều khiển trực thăng không người lái ----------------------------------------------------------------------------------------------
* Các góc Euler được xác định như sau :
---------------------------------------------------------------------------------------------- 13
Chương 2 : Tổng quan về hệ thống điều khiển trực thăng không người lái ----------------------------------------------------------------------------------------------
2.4. Sơ đồ hệ thống điều khiển: [1]
2.4.1. Sơ đồ tổng quát cấu trúc của hệ thống điều khiển máy bay trực thăng
Biến trạng thái
Điều khiển hoạt động
Bộ điều khiển logic mờ
2.4.2. Sơ đồ cấu trúc bộ điều khiển logic mờ :
Cấu trúc bộ điều khiển logic mờ được chia thành 4 vùng điều khiển
IAS
Eu
u_dot
riêng biệt (chi tiết sẽ được trình bày trong Chương 3) dưới đây :
lonδ
Vùng điều khiển cần gạt theo chiều dọc
θ q q_dot
---------------------------------------------------------------------------------------------- 14
Chương 2 : Tổng quan về hệ thống điều khiển trực thăng không người lái ----------------------------------------------------------------------------------------------
IAS
Ev
v_dot
ψE
latδ
dot _ψ
Vùng điều khiển cần gạt theo chiều ngang
φ
u
q
q_dot
IAS
Ev
Vùng điều khiển bàn đạp
trδ
v_dot ψE r
r_dot
IAS
Eh
Vùng điều khiển cần nâng
colδ
h_dot
Ở đây, IAS là tốc độ báo hiệu (Indicated Airspeed).
2.5. Kết luận chương 2 :
Chương 2 tìm hiểu về hệ thống điều khiển trực thăng không người lái,
các tiêu chí bay và các vấn đề liên quan đến điều khiển trực thăng. Cấu trúc
bộ điều khiển và việc sử dụng logic mờ để xây dựng bộ luật điều khiển bay sẽ
được trình bày trong Chương 3.
---------------------------------------------------------------------------------------------- 15
Chương 3 ----------------------------------------------------------------------------------------------
CHƯƠNG 3
ĐIỀU KHIỂN BAY TỰ ĐỘNG BẰNG
BỘ LUẬT LOGIC MỜ
3.1. Giới thiệu
3.2. Cấu trúc bộ điều khiển logic mờ
3.3. Thiết kế bộ luật tổng quát
3.4. Kết luận
---------------------------------------------------------------------------------------------- 16
Chương 3 : Điều khiển bay tự động bằng bộ luật logic mờ ----------------------------------------------------------------------------------------------
3.1. Giới thiệu :
Bộ điều khiển phải được thiết kế sao cho có thể điều khiển trực thăng
từ trạng thái bay ổn định này sang trạng thái bay ổn định khác một cách êm ái
và nhanh chóng. Nó phải điều khiển được các thao tác đơn giản như tăng tốc,
giảm tốc, quay một cách tương đối chính xác. Do đó phải có những luật điều
khiển tương đối chính xác giúp cho bộ điều khiển logic mờ dựa vào đó để ra
quyết định. Chương 3 sẽ nói về cấu trúc bộ điều khiển logic mờ (mục 3.2),
sau đó là việc thiết kế bộ luật điều khiển tổng quát (mục 3.3).
3.2. Cấu trúc bộ điều khiển logic mờ (Fuzzy Logic Controller Architecture):
3.2.1. Bộ điều khiển mờ cổ điển và bộ điều khiển mờ phân tán : [1]
Bộ điều khiển mờ cổ điển thường chứa một khối mờ. Khối mờ này có
i
j)
một đầu vào là biến trạng thái (x ) và một đầu ra là điều khiển hoạt động (y
như hình 31.a. Mỗi đầu vào liên kết với các đầu vào khác thông qua những
luật trong bộ luật cơ sở. Tuy nhiên, đối với những bài toán lớn, dùng phương
pháp cổ điển này để xây dựng hệ thống mờ là không thực tế bởi vì số lượng
luật sẽ tăng theo luỹ thừa số lượng đầu vào. Ví dụ, có 17 biến sử dụng trong
6 luật.
bộ điều khiển trực thăng, mỗi biến có 3 hàm thành viên, như vậy kích cỡ bộ luật sẽ là 317 , xấp xỉ 129 × 10
Hình 3.1. Bộ điều khiển mờ cổ điển (a) có thể được thay bằng bộ điều
khiển phân tán (b) .
---------------------------------------------------------------------------------------------- 17
Chương 3 : Điều khiển bay tự động bằng bộ luật logic mờ ----------------------------------------------------------------------------------------------
Một cấu trúc phân tán, như hình 3.1b, là một thay thế cho bộ điều khiển
mờ khối đơn cổ điển trên. Chúng ta sẽ dùng những kiến thức về động lực học
máy bay để phân chia nhiệm vụ điều khiển cho từng khối riêng lẻ, như vậy số
2 + 3 +
lượng luật sẽ giảm đi rất nhiều so với bộ điều khiển mờ cổ điển. Ví dụ, với
mỗi đầu vào có 3 hàm thành viên, bộ điều khiển cổ điển trong hình 3a cần 34=81 luật, còn với bộ điều khiển phân tán trong hình 3b chỉ cần 32 32= 27 luật.
Việc xác định một cấu trúc phù hợp thường rất khó. Khi muốn phát
sinh ra một bộ điều khiển với số lượng luật nhỏ, điều cần thiết là phải biết
được mối liên hệ giữa những biến trạng thái. Một bộ điều khiển là hiệu quả
khi nó gồm có một số lượng luật nhỏ, và mối liên hệ rõ ràng của những biến
trạng thái.
3.2.2. Ứng dụng bộ điều khiển phân tán để thiết kế bộ điều khiển logic
mờ cho máy bay trực thăng : [1]
Việc thiết kế cấu trúc điều khiển trực thăng là quá trình “thử và sai” để
đạt được yêu cầu của các nhà chuyên môn. Sau nhiều lần thiết kế lặp đi lặp
lại, cấu hình từ hình 3.2 đến hình 3.5 đã được chấp nhận. Bộ điều khiển gồm
4 vùng, mỗi vùng điều khiển các chức năng riêng biệt :
+ Vùng điều khiển cần gạt theo chiều dọc (δlon), hình 3.2 : điều khiển trực
thăng bay lên, bay xuống và bay tới.
+ Vùng điều khiển cần gạt theo chiều ngang (δlat), hình 3.3 : điều khiển trực
thăng bay rẽ trái, rẽ phải.
+ Vùng điều khiển bàn đạp (δtr), hình 3.4 : điều khiển cánh quạt đuôi khi
quay.
+ Vùng điều khiển cần nâng (δcol), hình 3.5 : điều khiển cánh quạt chính tạo
lực nâng.
---------------------------------------------------------------------------------------------- 18
Chương 3 : Điều khiển bay tự động bằng bộ luật logic mờ ----------------------------------------------------------------------------------------------
x
x
x
Trong đó : Rx : giá trị mong ước của biến x (Reference value of x) E : sai số giữa giá trị mong ước và giá trị hiện tại của biến x (Error in x) : E = R – x IAS : tốc độ báo hiệu ( Indicated Airspeed) x_dot : + gia tốc ( nếu x là các vận tốc : u, v, q, p, r) + giá trị biến thiên (nếu x là : h, ψ)
---------------------------------------------------------------------------------------------- 19
Chương 3 : Điều khiển bay tự động bằng bộ luật logic mờ ----------------------------------------------------------------------------------------------
Điều khiển cần gạt chuyển động theo chiều dọc được xác định bởi khối
mờ có nhãn là Longitudinal Attitude (hình 3.2). Khi biết giá trị của Eθ (sai
số của góc nghiêng), q, q_dot, khối Longitudinal Attitude sẽ suy luận sự thay
đổi của cần gạt theo chiều dọc. Khối chuyển đổi Longitudinal Switch sẽ chọn
lựa một trong hai kết quả đầu ra của 2 khối Longitudinal Acceleration,
Longitudinal Hold dựa vào Eu (sai số của vận tốc hướng trước). Nếu |Eu| lớn
(vận tốc hướng trước (u) của trực thăng cách xa vận tốc mong đợi (Ru)), Eθ
sẽ do khối Longitudinal Acceleration xác định. Ngược lại, nếu |Eu| nhỏ, Eθ
sẽ do khối Longitudinal Hold xác định. Cần chú ý là khối Longitudinal
Acceleration đưa ra kết quả là góc nghiêng mong ước (Rθ), còn khối
Longitudinal Hold cho ra kết quả là sai số của góc nghiêng (Eθ). Sự sắp đặt
này tuy hơi phức tạp, nhưng ta có thể tưởng tượng đến mô hình người phi
công điều khiển trực thăng như sau : khi phi công đang điều khiển trực thăng
bay với vận tốc gần vận tốc trước mong đợi (|Eu| nhỏ), anh ta sẽ đạt đến vận
tốc mong đợi đó bằng cách chỉ cần điều chỉnh cần gạt một chút thay đổi độ
nghiêng của máy bay. Còn khi vận tốc của trực thăng cách xa với vận tốc
mong đợi (|Eu| lớn), người phi công sẽ phải điều khiển trực thăng đạt tới góc
nghiêng mong đợi (Rθ) và sau đó mới quyết định tăng hay giảm tốc độ của
máy bay. Trong cả 2 khối Longitudinal Acceleration và Longitudinal Hold,
đầu vào đều là tốc độ hiện thời (IAS), sai số của vận tốc trước (Eu), và gia
tốc hướng trước (u_dot).
---------------------------------------------------------------------------------------------- 20
Chương 3 : Điều khiển bay tự động bằng bộ luật logic mờ ----------------------------------------------------------------------------------------------
Điều khiển cần gạt theo chiều ngang được chia làm 2 nhánh điều khiển
(hình 3.3), mỗi nhánh có cấu trúc giống với vùng điều khiển cần gạt theo
chiều dọc. Hai nhánh này tượng trưng cho 2 chức năng khác nhau : khi trực
thăng bay lượn (hover) hay bay thẳng (forward flight). Khi bay lượn, cần gạt
sẽ xác định vận tốc hướng sang bên của trực thăng. Khi bay thẳng, vận tốc
hướng sang bên mong ước luôn bằng zero. Trong trường hợp này, cần gạt sẽ
điều khiển trực thăng quay lộn vòng để đạt được hướng bay khác. Trong hình
3.3, nhánh ở trên dùng vận tốc hướng sang bên (Ev) để điều khiển trực thăng
khi bay lượn, còn nhánh ở dưới dùng thông tin về hướng (Eψ) để điều khiển
hướng bay khi trực thăng bay thẳng.
Điều khiển cánh quạt đuôi do bàn đạp đảm nhận (hình 3.4). Khi bay
lượn, khối Hover Heading điều khiển cánh quạt đuôi, còn khi bay thẳng, khối
Lateral Trim điều khiển cánh quạt đuôi. Trong tình trạng nửa lượn nửa bay
thẳng, hoạt động của 2 khối điều khiển này được kết hợp một cách tuyến tính.
Mục đích của khối Lateral Trim là điều chỉnh cánh quạt đuôi để trực thăng
tránh trượt qua một bên khi đang bay thẳng.
Cuối cùng là việc điều khiển cần nâng (hình 3.5). Vùng điều khiển này
là vùng đơn giản nhất và có ảnh hưởng lên toàn bộ các vùng khác.
Những bộ chuyển đổi mờ (fuzzy switches) được sử dụng trong bộ điều
khiển để quy định quyền điều khiển đặc trưng cho từng vùng bay khác nhau.
Ví dụ, với bộ chuyển đổi Forward Flight/ Hover Taxi trong bộ điều khiển cần
gạt theo chiều ngang (hình 3.3), nếu vận tốc hướng trước (u) của trực thăng
nhỏ hơn 6 m/s thì kết quả của nhánh ở trên sẽ được truyền qua bộ chuyển đổi,
nếu u lớn hơn 12 m/s thì kết quả của nhánh ở dưới sẽ được truyền qua bộ
chuyển đổi, khi u lớn hơn 6 m/s và nhỏ hơn 12 m/s, tổ hợp tuyến tính giữa hai
kết quả của 2 nhánh sẽ là đầu ra của bộ chuyển đổi. Như vậy, bộ chuyển đổi
---------------------------------------------------------------------------------------------- 21
Chương 3 : Điều khiển bay tự động bằng bộ luật logic mờ ----------------------------------------------------------------------------------------------
mờ là cố định, những luật trong bộ chuyển đổi được xác định từ trước, không
phải được tìm ra bởi thuật giải tìm kiếm.
3.2.3. Biến đầu vào và đầu ra của bộ điều khiển logic mờ : [1]
Chỉ xét những khối mờ trong bộ điều khiển trực thăng, không tính
những bộ chuyển đổi mờ, ta có tất cả là 12 khối. Mỗi khối có nhiều đầu vào,
mỗi đầu vào có nhiều hàm thành viên. Những đầu vào này có giá trị được quy
định nằm trong miền [Min, Max]. Bảng 3.1 sẽ liệt kê chi tiết về những biến
đầu vào. Những bộ chuyển đổi mờ không được liệt kê, mỗi bộ có 3 đầu vào.
Đầu vào đầu tiên là giá trị tiêu chuẩn của bộ chuyển đổi, hai đầu vào còn lại là
những giá trị mà một trong chúng sẽ là đầu ra của bộ chuyển đổi.
---------------------------------------------------------------------------------------------- 22
Chương 3 : Điều khiển bay tự động bằng bộ luật logic mờ ----------------------------------------------------------------------------------------------
Khối Đầu vào Min Max
Longitudinal Acceleration
Longitudinal Hold
Longitudinal Attitude
IAS Eu u_dot IAS Eu u_dot Eθ q q_dot Ev v_dot
Lateral Acceleration Lateral Hold Ev
Lateral Attitude
Số hàm thành viên 3 3 3 3 3 3 5 3 3 3 3 5 3 5 3 3 6 -30 -1 6 -6 -1 -6 -10 -10 -6 -1 -6 -1 -6 -10 -10 30 30 1 30 6 1 6 10 10 6 1 6 1 6 10 10 v_dot Eφ p p_dot
Bank Hold
Heading Hold Bank Attitude
Hover Heading
Lateral Trim
Climb Rate
IAS E ψ Eψ _dot ψ Eφ p p_dot IAS E ψ r r_dot IAS Ev v_dot IAS Eh h_dot 2 3 5 3 7 3 3 2 7 3 3 2 3 3 2 3 3 30 -20 -10 -3 -10 -10 -10 6 -30 -60 -30 6 -6 -1 6 -3 -3 60 20 10 3 10 10 10 12 30 60 30 12 6 1 12 3 3
Bảng 3.1. Mô tả đầu vào của mỗi khối điều khiển mờ
---------------------------------------------------------------------------------------------- 23
Chương 3 : Điều khiển bay tự động bằng bộ luật logic mờ ----------------------------------------------------------------------------------------------
Đầu ra của mỗi khối cũng được giới hạn vào miền [Min; Max], bảng
3.2 cho biết chi tiết đầu ra của 12 khối, và tổng số luật của mỗi khối.
Khối Đầu ra Số lượng luật Min Max
Longitudinal Acceleration 27 -20 20 Rθ
lon
δ
Longitudinal Hold 27 -6 6 Eθ
Longitudinal Attitude 45 -2 2
Rφ Lateral Acceleration 9 -6 6
Lateral Hold 15 -6 6 Eφ
δlat1
Lateral Attitude 45 -2 2
Bank Hold 6 -20 20 Rφ
Heading Hold 15 -10 10 Eφ
δlat2
Bank Attitude 63 -2 2
δtr1
Hover Heading 126 -2 2
δtr2
δcol
Lateral Trim 18 -0.2 0.2
Climb Rate 18 -2 2
Bảng 3.2. Mô tả đầu ra và tổng số luật của mỗi khối điều khiển mờ
3.2.4. Bộ luật tổng quát: [1]
Bộ luật được xây dựng dựa trên kinh nghiệm và kiến thức của người
phi công hoặc các nhà chuyên gia. Số lượng luật sản sinh ra bằng với số lần
hoán vị có thể có của các hàm thành viên của biến tham gia trong hệ đầu vào.
Độ tin cậy của một luật (strength of rule) là giá trị tối thiểu của các tiền
đề đúng trong luật đó. Luật có độ tin cậy cao nhất sẽ được chọn làm kết quả
của hệ đầu ra.
Bộ luật điều khiển được chia ra cho mỗi khối. Mỗi khối có những luật
riêng và điều khiển những vị trí khác nhau. Có tất cả là 414 luật.
---------------------------------------------------------------------------------------------- 24
Chương 3 : Điều khiển bay tự động bằng bộ luật logic mờ ----------------------------------------------------------------------------------------------
3.3. Thiết kế bộ luật tổng quát : [6]
Bộ luật tổng quát bao gồm tổng số luật của 12 khối mờ. Sau đây là ví
dụ việc thiết kế luật cho khối Bank Hold, các khối còn lại được liệt kê trong
phần Phụ lục B.
Khối Bank Hold :
Gồm 2 đầu vào (IAS, Epsi) và 1 đầu ra (Rphi).
IAS có tập mờ là {Small, Big}
E_psi có tập mờ là {Negative, Stable, Positive}
R_phi có tập mờ là {Negative, Stable, Positive}
Các biến được biểu diễn với các hàm thành viên như sau :
- Đầu vào :
Biến IAS với 2 hàm thành viên : “Small”, “Big”
Biến E_psi với 3 hàm thành viên : “Negative”, “Stable”, “Positive”
- Đầu ra :
Biến R_phi với 3 hàm thành viên: “Negative”, “Stable”, “Positive”
---------------------------------------------------------------------------------------------- 25
Chương 3 : Điều khiển bay tự động bằng bộ luật logic mờ ----------------------------------------------------------------------------------------------
if(IAS = Small & E_psi = Negative) then R_phi = Negative
if(IAS = Small & E_psi = Stable) then R_phi = Negative
if(IAS = Small & E_psi = Positive) then R_phi = Zero
if(IAS = Big & E_psi = Negative) then R_phi = Zero
if(IAS = Big & E_psi = Stable) then R_phi = Positive
if(IAS = Big & E_psi = Positive) then R_phi = Positive
Khối này có tổng cộng 2 × 3 = 6 luật
3.4. Kết luận chương 3 :
Chương 3 giới thiệu về cấu trúc hai bộ điều khiển mờ: cổ điển và phân
tán. Tiến tới, ứng dụng bộ điều khiển mờ phân tán cho việc thiết kế bộ điều
khiển logic mờ trong điều khiển trực thăng không người lái, xây dựng bộ luật
điều khiển tổng quát dựa trên kinh nghiệm các chuyên gia. Phương pháp xác
định những luật cần thiết cho điều khiển bay tự động bằng GA sẽ được trình
bày trong Chương 4.
---------------------------------------------------------------------------------------------- 26
Chương 4 ----------------------------------------------------------------------------------------------
CHƯƠNG 4
PHƯƠNG PHÁP MỞ RỘNG BỘ LUẬT ĐIỀU KHIỂN
BẰNG THUẬT GIẢI DI TRUYỀN
4.1. Giới thiệu
4.2. Sự mã hoá biến và xây dựng hàm thích nghi
4.3. Kết luận
---------------------------------------------------------------------------------------------- 27
Chương 4 : Phương pháp mở rộng bộ luật điều khiển bằng Thuật giải di truyền ----------------------------------------------------------------------------------------------
4.1. Giới thiệu :
Trong thực tế, không phải luật nào trong bộ luật tổng quát (414 luật)
cũng đúng và được sử dụng. Có những luật được sử dụng thường xuyên (gọi
là bộ luật cơ bản) và có những luật không bao giờ được sử dụng (gọi là bộ
luật bổ sung).
Bộ luật cơ bản được xác định bằng cách cho trực thăng bay thử
nghiệm nhiều lần. Sau mỗi cuộc thử nghiệm, chúng ta giữ lại các sai số Eu
(sai số trong vận tốc hướng trước), Ev (sai số trong vận tốc hướng bên phải),
Eψ (sai số về góc lệch) làm dữ liệu cho việc xác định luật. Qua nhiều lần thử
nghiệm với những điều kiện và mục đích khác nhau, ta thu được nhiều bộ giá
trị Eu, Ev, Epsi, từ đó việc xác định luật cho bộ luật cơ bản càng dễ dàng và
có thể điều khiển trực thăng bay trong nhiều tình huống.
Các luật không được sử dụng một phần là do tính không hợp lý của nó
và một phần là do thiếu sót trong các lần bay thử nghiệm. Nói cách khác,
trong các lần bay thử nghiệm, không thể tính toán được hết các trường hợp
xảy ra (sự thay đổi trong vận tốc, gia tốc, độ cao, góc lệch, góc nghiêng, …),
và các luật trong bộ luật cơ bản không thể điều khiển trực thăng trong các
trường hợp này. Do đó cần sử dụng một số luật trong bộ luật bổ sung để điều
khiển trực thăng.
Thuật giải di truyền được sử dụng để tìm ra những luật bổ sung cho bộ
luật cơ bản. Việc mở rộng bộ luật cơ bản là rất cần thiết, giúp ta có thể điều
khiển trực thăng trong những tình huống xảy ra bất ngờ.
Chương 4 sẽ giới thiệu về cách dùng Thuật giải di truyền để tìm kiếm
luật cho việc mở rộng bộ luật điều khiển cơ bản : cách mã hoá biến và xây
dựng hàm thích nghi (mục 4.2).
---------------------------------------------------------------------------------------------- 28
Chương 4 : Phương pháp mở rộng bộ luật điều khiển bằng Thuật giải di truyền ----------------------------------------------------------------------------------------------
4.2. Sự mã hoá biến và xây dựng hàm thích nghi : [1]
Để sử dụng Thuật giải di truyền như là một kỹ thuật tìm kiếm, hai vấn
đề chính mà chúng ta cần quan tâm là : (1) mã hoá biến, và (2) xây dựng hàm
thích nghi.
4.2.1. Mã hoá biến :
Những biến sử dụng trong bài toán này là những luật mờ. Những luật
này được mã hoá thành một chuỗi bit. Mỗi luật được ánh xạ với 4 bit
(0000 → 1111) trong chuỗi bit mã hoá. Do có 414 luật, mỗi luật ánh xạ với 4
498 = 3.2 × 10 trường hợp.
bit, do đó chuỗi bit mã hoá có chiều dài là : 4 × 414 = 1656 bit, tương đương với không gian tìm kiếm là 21656
VD:
1101|1001|0000|………………………………….|1010|1000
L1 L2 L3 L1655 L1656 (L : luật)
Trong luận văn, chúng tôi mã hoá 414 luật thành một chuỗi dài 1656
bit, với 4 bit biểu diễn cho một luật. Việc xác định chuỗi bit này dựa trên các
sai số Eu, Ev, Eψ tìm được qua những lần thử nghiệm.
4.2.2. Xây dựng hàm thích nghi :
Hàm thích nghi sẽ hướng dẫn Thuật giải di truyền tìm kiếm luật một
cách nhanh chóng và chính xác. Các luật mới này không phải là những luật
ngẫu nhiên, chúng phải có tính chất tương tự như những luật đã biết.
Hàm thích nghi được xây dựng dựa trên Eu, Ev, Eψ. Mục đích sử
dụng các sai số này là để Thuật giải di truyền tìm ra các luật điều khiển tương
tự như những luật đã được sử dụng, không tìm tràn lan các luật không cần
thiết khác trong bộ luật.
---------------------------------------------------------------------------------------------- 29
Chương 4 : Phương pháp mở rộng bộ luật điều khiển bằng Thuật giải di truyền ----------------------------------------------------------------------------------------------
fitness
E
E
=
+
+
u
v
ψ ) E
1 N
N ∑ ( 1 n =
Hàm thích nghi cho N lần thử nghiệm là :
Với Eu, Ev, và Eψ là các sai số trong lần thử nghiệm thứ n. (n = 1..N)
4.3. Kết luận chương 4:
Chương 4 đề xuất phương pháp sử dụng GA để mở rộng bộ luật cơ bản
với hy vọng bộ luật mới có thể điều khiển tốt trực thăng trong những điều
kiện phát sinh khác bên ngoài những điều kiện đã thử nghiệm. Quá trình xây
dựng bộ luật cơ bản và mở rộng nó để hình thành bộ luật mở rộng, cũng như
việc mô phỏng quá trình điều khiển bay không người lái bằng luật mới xây
dựng sẽ được trình bày trong Chương 5.
---------------------------------------------------------------------------------------------- 30
Chương 5 ----------------------------------------------------------------------------------------------
CHƯƠNG 5
GIẢI QUYẾT BÀI TOÁN
5.1. Giới thiệu
5.2. Xây dựng bộ luật cơ bản
5.3. Mở rộng bộ luật cơ bản
5.4. Quá trình ra quyết định của bộ điều khiển
5.5. Kết quả thử nghiệm
5.6. Kết luận
---------------------------------------------------------------------------------------------- 31
Chương 5 : Giải quyết bài toán ----------------------------------------------------------------------------------------------
5.1. Giới thiệu
Chương 5 sẽ trình bày quá trình giải quyết bài toán và kết quả thử
nghiệm của chương trình.
5.2. Xây dựng bộ luật cơ bản :
5.2.1. Sơ đồ thuật toán :
Bộ luật tổng quát
Lựa chọn luật Mờ hoá Dữ liệu ban đầu (dữ liệu thử nghiệm đã biết)
Bộ luật cơ bản
Hình 5.1. Các bước tạo bộ luật cơ bản
Các khái niệm về bộ luật tổng quát, bộ luật cơ bản, bộ luật mở rộng đã
được nêu ở phần đầu Chương 4.
5.2.2. Mô tả sơ đồ :
Dữ liệu ban đầu là các sai số Eu, Ev, Epsi được lưu trữ qua nhiều cuộc
thử nghiệm. Các sai số này sẽ là tiêu chuẩn cho sự lựa chọn luật. Các luật
trong bộ luật tổng quát được lựa chọn là những luật có giá trị sai số tương
đương với các sai số ban đầu. Những luật được lựa chọn tạo thành bộ luật cơ
bản.
5.2.3. Xây dựng bộ luật cơ bản :
Được thực hiện theo các bước sau :
B0: Tính tỉ lệ co giãn theo công thức ở Phụ lục A với Umax = 1,Umin = 0,
---------------------------------------------------------------------------------------------- 32
Chương 5 : Giải quyết bài toán ----------------------------------------------------------------------------------------------
L = 4 :
g = (1- 0)/(24 – 1) = 1/15;
B1: Xác định dữ liệu ban đầu : các sai số Eu, Ev, Epsi trong các lần thử
nghiệm trước.
Để đơn giản, chỉ xét 1 lần thử nghiệm :
eu = -20.5; ev = -5.5, epsi = 5;
B2: Từ các dữ liệu này, ta thực hiện mờ hoá và xây dựng chuỗi bit, lựa chọn
các luật cơ bản :
_ Khởi tạo chuỗi bit với mỗi luật là 0000.
(mỗi luật là 4 bit, 4 bit thứ i là luật thứ i trong 414 luật của bộ luật tổng quát)
chuoi_bit = “0000|0000|0000|0000|0000|….|0000|0000”
_ Với mỗi khối, khối nào có biến là 1 trong 3 biến Eu, Ev, Epsi thì tiến hành
mờ hoá, sau đó thay 4 bit trong chuoi_bit bằng giá trị mới ứng với luật thứ i
trong chuoi_bit . Khối nào không có thì giữ nguyên (4 bit của luật đó là 0000
trong chuoi_bit)
VD: khối Longitudinal Acceleration có biến Eu nên được mã hoá.
+ Lấy vùng thứ nhất (vùng N) của biến Eu: r = Eu[“N”];
+ Tìm chuỗi bit tương ứng với eu.
Mờ hoá giá trị của eu về khoảng [0; 1] ứng với vùng r.
Với : eu = -20.5 ta tính được : value01 = 1
Chia value01 cho tỉ lệ co giãn g : value = value01/g = 1/(1/15) = 15.
Ánh xạ value sang chuỗi binary là “1111”.
---------------------------------------------------------------------------------------------- 33
Chương 5 : Giải quyết bài toán ----------------------------------------------------------------------------------------------
+ Với mỗi luật trong bộ luật của khối Longitudinal Acceleration, luật thứ i
nào có “if(Eu = Negative) …” thì thay 4 bit “0000” thứ i trong chuoi_bit bằng
chuỗi bit mới “1111”.
+ Tương tự cho các vùng St, P của biến Eu và các khối còn lại.
Sau khi thực hiện xong việc mã hoá, ta thu được chuoi_bit khác với
chuỗi ban đầu rất nhiều. Chuoi_bit này giúp ta xác định bộ luật cơ bản. Cứ 4
bit thứ i nào trong chuoi_bit khác “0000” thì luật thứ i đó là luật cơ bản.
Nếu xét trường hợp có nhiều lần thử nghiệm, ta sẽ thu được nhiều
chuoi_bit khác nhau, hợp các chuoi_bit này lại (dùng phép OR theo từng bit),
ta sẽ thu được chuoi_bit tổng hợp, từ đó ta xác định được bộ luật cơ bản.
5.3. Mở rộng bộ luật cơ bản :
5.3.1. Sơ đồ thuật toán :
Dữ liệu ban đầu (dữ liệu thử nghiệm đã biết)
GA Bộ luật cơ bản Bộ luật mở rộng
Bộ luật tổng quát
Hình 5.2. Dùng GA tạo bộ luật mở rộng
5.3.2. Xây dựng bộ luật mở rộng
Việc mở rộng bộ luật cơ bản tương đương với việc tìm ra những chuỗi
bit gần giống với chuoi_bit ban đầu. Được tiến hành theo các bước :
B0: Từ các dữ liệu ban đầu (các sai số Eu, Ev, Epsi ) ta tính Etb = (Eu + Ev +
Epsi)/N (N là số lần thử nghiệm) như sau : với lần thử nghiệm thứ i (i = 1..N),
---------------------------------------------------------------------------------------------- 34
Chương 5 : Giải quyết bài toán ----------------------------------------------------------------------------------------------
N
Ei
tiến hành mờ hoá và xây dựng chuỗi bit (tương tự phần 5.2.3), tính giá trị Ei
1 của chuỗi bit này, suy ra Etb = ∑ N 1 i =
. Sau đó, tìm những chuỗi (được khởi
tạo ngẫu nhiên) có etb gần bằng với Etb nhất.
VD: chuoi_khoi_tao = “1011|1001|1000|…..|0000”.
Ứng với 4 bit thứ i, nếu luật thứ i trong 414 luật có 1 trong 3 sai số Eu, Ev,
Epsi thì ta tính giá trị vật lý (là sai số eu_i hoặc ev_i hoặc epsi_i) của 4 bit
này. Kết quả là ta thu được nhiều giá trị eu_n, ev_n, epsi_n. Từ đó tính được
etb = (eu_n + ev_n + epsi_n)/n.
“if(IAS = Small & Eu = Negative & u_dot = Negative) then R_theta = Negative Big”
Ví dụ luật thứ nhất trong bộ luật là :
Luật này có biến sai số Eu nên được chọn.
4 bit trong chuoi_khoi_tao của luật thứ nhất là “1011”, ta sẽ tính giá trị vật lý
cho biến Eu :
_ decimal(“1011”) = 11, nhân giá trị này với giá trị co giãn g để tính giá trị
mờ value01 = 11*1/15 = 0.7, từ giá trị value01 này ta sẽ tính được giá trị vật
lý của Eu ứng với “Negative” là -7.
B1: Kết hợp những chuỗi vừa tìm được với những chuoi_bit ban đầu, tiến
hành lai ghép, đột biến để tìm ra những chuỗi có sai số với Etb là nhỏ nhất.
Hợp các chuỗi bit vừa tìm lại được. Cuối cùng là lựa chọn những luật trong
bộ luật tổng quát để bổ sung cho bộ luật cơ bản những luật chưa có.
---------------------------------------------------------------------------------------------- 35
Chương 5 : Giải quyết bài toán ----------------------------------------------------------------------------------------------
Để điều khiển trực thăng một cách chắc chắn, chương trình sẽ dùng m luật cơ
bản cố định (m <= 414). Các luật này được chọn lựa dựa trên việc tính điểm
trong nhiều vòng lặp.
5.4. Quá trình ra quyết định của bộ điều khiển : [5], [9]
Để điều khiển trực thăng, bộ điều khiển logic mờ sẽ phân các dữ liệu
vào cho các vùng điều khiển. Trong mỗi vùng, dữ liệu sẽ đi qua từng khối
mờ, các khối này sẽ cho ra kết quả cuối cùng hoặc là đầu vào của khối mờ
khác. Từng vùng sẽ gửi kết quả đến bộ điều khiển. Bộ điều khiển dựa vào đó
để điều khiển trực thăng.
Ví dụ dưới đây sẽ đề cập đến quá trình ra quyết định (kết luận) của một
khối mờ, sử dụng phương pháp điểm trung tâm (centroid).
VD: khối Longitudinal Acceleration với đầu vào là
IAS = 13
Eu = 7
u_dot = 0.4
và đầu ra là Rtheta.
Với các đầu vào, tiến hành mờ hoá :
---------------------------------------------------------------------------------------------- 36
Chương 5 : Giải quyết bài toán ----------------------------------------------------------------------------------------------
IAS ["Small"]: 0.666667 IAS ["Medium"]: 0.333333 IAS ["Big"]: 0.000000 Eu ["Negative"]: 0.000000 Eu ["Stable"]: 0.125000 Eu ["Positive"]: 0.875000 u_dot ["Negative"]: 0.000000 u_dot ["Stable"]: 0.200000 u_dot ["Positive"]: 0.800000
Các luật sử dụng trong bộ luật mở rộng (số đứng đầu là luật thứ i trong bộ
5. if(IAS = Small & Eu = Stable & u_dot = Stable) then R_theta = Zero
6. if(IAS = Small & Eu = Stable & u_dot = Positive) then R_theta = Zero
8. if(IAS = Small & Eu = Positive & u_dot = Stable) then R_theta = Positive Small
9. if(IAS = Small & Eu = Positive & u_dot = Positive) then R_theta = Positive Small
14. if(IAS = Medium & Eu = Stable & u_dot = Stable) then R_theta = Positive Small
15. if(IAS = Medium & Eu = Stable & u_dot = Positive) then R_theta = Positive Small
17. if(IAS = Medium & Eu = Positive & u_dot = Stable) then R_theta = Positive Small
18. if(IAS = Medium & Eu = Positive & u_dot = Positive) then R_theta = Positive Small
luật tổng quát):
---------------------------------------------------------------------------------------------- 37
Chương 5 : Giải quyết bài toán ----------------------------------------------------------------------------------------------
Để tính độ tin cậy (strength of rule) của luật, ta dùng phép AND giá trị logic
các biến đầu vào.
Ví dụ độ tin cậy của luật 5
= (IAS ["Small"] AND Eu[“Stable”] AND u_dot[“Stable”])
= 0.666667 AND 0.125000 AND 0.200000 = 0.125
Độ tin cậy của từng luật được liệt kê như sau :
Luật Độ tin cậy
5 0.125
6 0.125
8 0.2
9 0.666667
14 0.125
15 0.125
17 0.2
18 0.333333
Tiếp theo là suy luận giá trị của biến đầu ra Rtheta từ những luật trên.
Ta thấy có nhiều luật cùng cho ra một kết luận giống nhau. Do đó giá trị giới
hạn của mỗi tập mờ của hệ đầu ra sẽ được quyết định bởi luật có độ tin cậy
cao nhất. Luật 5 và 6 cùng cho ra Rtheta = “Zero” với cùng độ tin cậy 0.125,
do đó giá trị giới hạn của tập mờ “Zero” là 0.125. Còn luật 8, 9, 14, 15, 17 và
18 cùng cho ra Rtheta = “Positive Small”, luật 9 có độ tin cậy cao nhất nên
giá trị giới hạn của tập mờ “Positive Small” là 0.666667. Tóm lại các giá trị
giới hạn của mỗi tập mờ của hệ đầu ra được liệt kê như sau :
---------------------------------------------------------------------------------------------- 38
Chương 5 : Giải quyết bài toán ----------------------------------------------------------------------------------------------
Negative Big Negative Small Zero Positive Small Positive Big
0 0.125 0.666667 0 0
Từ những giá trị giới hạn này, tiến hành xác định vùng (area) và điểm
trung tâm (centroid) tương ứng của mỗi hàm thành viên của hệ đầu ra :
Như vậy ta có :
Negative Negative Positive Positive Zero Big Small Small Big
area 0 0 0.468 5.111 0
centroid -13.8 -4.38 0 4.38 13.8
Giá trị cuối cùng của hệ đầu ra được tính bởi :
Tổng (area × centroid)/ Tổng (area)
Từ đó tính được giá trị của Rtheta như sau :
value = (0.468 × 0 + 5.111× 4.38)/ (0.468 + 5.111) = 4.01
Kết luận : Khối Longitudinal Acceleration cho ra quyết định : Rtheta =
“Positive Small”, value = 4.01.
---------------------------------------------------------------------------------------------- 39
Chương 5 : Giải quyết bài toán ----------------------------------------------------------------------------------------------
5.5. Kết quả thử nghiệm :
5.5.1. Xây dựng bộ luật cơ bản :
Dữ liệu vào là các sai số Eu, Ev, Eψ (hay Epsi) được lấy từ các lần bay
thử nghiệm trước : số lần thử nghiệm N = 10
Eu[0] = -1; Eu[1] = -2.5; Eu[2] = -3; Eu[3] = 0.5; Eu[4] = 20; Eu[5] = 2; Eu[6] = 2.5; Eu[7] = 10; Eu[8] = -19; Eu[9] = -0.5; Ev[0] = -1; Ev[1] = -2.5; Ev[2] = -3; Ev[3] = 0.5; Ev[4] = 3; Ev[5] = 2; Ev[6] = 2.5; Ev[7] = 0; Ev[8] = -5; Ev[9] = 5; Epsi[0] = -1; Epsi[1] = -3.5; Epsi[2] = -5; Epsi[3] = 0.5; Epsi[4] = 2; Epsi[5] = 20; Epsi[6] = 2.5; Epsi[7] = 10; Epsi[8] = -29; Epsi[9] = -0.5;
N
Ei
Từ đó tiến hành mờ hoá và xây dựng N chuỗi bit. Tính giá trị Ei của N chuỗi
1 bit này. Suy ra Etb = ∑ N 1 i =
= -24.378336.
Sau đó, thực hiện mã hoá được N chuỗi bit, mỗi chuỗi có chiều dài
4×414=1656 bit.
Hợp các bit của N chuỗi lại, tính được có 207 luật cơ bản được dùng.
5.5.2. Mở rộng bộ luật cơ bản :
Lặp cho đến khi thoả số vòng lặp
Khởi tạo 5 chuỗi bit ngẫu nhiên bằng Thuật giải di truyền với :
Xác suất lai ghép : Pcross = 0.85
Xác suất đột biến : Pmu = 0.15
---------------------------------------------------------------------------------------------- 40
Chương 5 : Giải quyết bài toán ----------------------------------------------------------------------------------------------
Kích cỡ quần thể : popsize = 5
Số vòng lặp : gen = 4
Hàm thích nghi : fitness = Etb;
Tổng cộng có 15 chuỗi bit, từ 15 chuỗi này áp dụng Thuật giải di truyền để
tìm ra những chuỗi tối ưu nhất :
Xác suất lai ghép : Pcross = 0.85
Xác suất đột biến : Pmu = 0.05
Kích cỡ quần thể : popsize = 15
Số vòng lặp : gen = 4
Hàm thích nghi : fitness = Etb;
Sau khi tìm được những chuỗi tối ưu, kết hợp với N chuỗi ban đầu, hợp
(dùng phép OR) lại theo từng bit để xác định những luật cơ bản, chấm điểm
cho từng luật.
Hết lặp
Tạo bộ luật mở rộng cho bộ điều khiển logic mờ bằng cách chọn m luật có
điểm cao nhất trong 414 luật đó. Trong chương trình chọn m = 250 luật và số
vòng lặp là 5.
5.5.3. Điều khiển trực thăng:
Sau khi xác định bộ luật mở rộng, bộ điều khiển sẽ dùng những luật
này để điều khiển trực thăng bay. Việc điều khiển trực thăng cơ bản là điều
khiển trực thăng bay đến tốc độ (IAS) mong ước, góc nghiêng (pitch) mong
ước, góc lệch (yaw) mong ước và góc quay (roll) mong ước.
5.5.3.1. Điều khiển trực thăng theo từng vùng điều khiển :
Mục này sẽ nêu cách điều khiển trực thăng bay của 4 vùng điều khiển.
---------------------------------------------------------------------------------------------- 41
Chương 5 : Giải quyết bài toán ----------------------------------------------------------------------------------------------
Điều khiển trực thăng bay theo hướng dọc (longitudinal control):
Điều khiển trực thăng theo hướng dọc là điều khiển trực thăng bay lên,
bay xuống, hoặc bay tới. Điều khiển này do vùng điều khiển trực thăng theo
lonδ
hướng dọc đảm nhiệm.
Với thử nghiệm là trực thăng bay với tốc độ 13 m/s, sai số vận tốc trước 7 m/s, gia tốc trước 0.4 m/s2, vận tốc góc quanh trục y 0.4 deg/s, gia tốc góc quanh trục y 1 deg/s2, góc nghiêng 0 deg:
IAS = 13
Eu = 7
u_dot = 0.4
q = 1.5
q_dot = 1
Theta = 0
Vùng điều khiển trực thăng theo hướng dọc cho ra kết luận : góc nghiêng
mong ước Rtheta = 4.016275 (cách tính toán được trình bày ở mục 5.4), giá
lonδ dương (Positive) 1.094118 (cách tính tương tự mục 5.4), tức là phải
trị
tăng từ từ góc Theta bằng với góc Rtheta.
Điều khiển trực thăng bay theo hướng ngang (lateral control):
Điều khiển trực thăng theo hướng ngang là điều khiển trực thăng bay rẽ
trái, rẽ phải. Điều khiển này do vùng điều khiển trực thăng theo hướng ngang
latδ
đảm nhiệm.
Với các dữ liệu đầu vào (thử nghiệm):
IAS = 43
Ev = 1.5
v_dot = 0.5
Epsi = 3
---------------------------------------------------------------------------------------------- 42
Chương 5 : Giải quyết bài toán ----------------------------------------------------------------------------------------------
psi_dot = 0.5
p = 1.5
p_dot = 1
u = 3
Phi = 0
Vùng điều khiển trực thăng theo hướng ngang cho ra kết luận : góc
latδ dương (Positive) 1.094118,
nghiêng mong ước Rphi = 3.763474, giá trị
tức là phải tăng từ từ góc Phi bằng với góc Rphi.
Điều khiển cánh quạt đuôi (tail rotor control):
Cánh quạt đuôi dùng để giữ thăng bằng và điều khiển hướng khi trực
thăng bay rẽ trái hoặc rẽ phải. Điều khiển cánh quạt đuôi do vùng điều khiển
trδ
bàn đạp đảm nhiệm.
Với dữ liệu đầu vào (thử nghiệm):
IAS = 8.5
Epsi = 6
r = 10
r_dot = 5
Ev = 1.5
v_dot = 0.5
trδ dương (Positive)
Vùng điều khiển bàn đạp cho ra kết luận : giá trị
1.195469, tức là phải đạp bàn đạp bên phải để cánh quạt đuôi tạo lực cho trực
thăng rẽ sang phải.
Điều khiển cần nâng (collective control):
Cần nâng có nhiệm vụ điều khiển cánh quạt chính quay để tạo lực nâng
δcol
cho trực thăng. Điều khiển này do vùng điều khiển cần nâng đảm nhiệm.
---------------------------------------------------------------------------------------------- 43
Chương 5 : Giải quyết bài toán ----------------------------------------------------------------------------------------------
Với dữ liệu đầu vào (thử nghiệm):
IAS = 7
Eh = 1.5
h_dot = 1.5
Vùng điều khiển cần nâng cho ra kết luận : giá trị δcol dương
(Positive) 1.094118, tức là phải kéo cần nâng lên để tăng tốc độ quay của
cánh quạt chính tạo lực nâng lớn hơn nữa cho trực thăng bay lên.
5.5.3.2. Kết hợp các vùng điều khiển cho việc điều khiển trực thăng bay
trong những vị trí định sẵn :
Bằng cách kết hợp 4 vùng điều khiển, ta sẽ điều khiển toàn bộ hoạt
động bay của máy bay trực thăng. Để điều khiển trực thăng bay trong những
vị trí định trước, cần phải cung cấp các dữ liệu đầu vào cũng như toạ độ tại
mỗi vị trí. Các dữ liệu đầu vào phải được tính toán chính xác, phù hợp với
miền giới hạn của bộ điều khiển. Bộ điều khiển sẽ tổng hợp các kết quả của 4
vùng điều khiển để đưa ra quyết định cuối cùng.
-1.5 0 0.25 IAS=12 Eu=7 udot=0.4 q=1.5 qdot=1 theta=0 Ev=4 vdot=0.5 p=4 pdot=2
Epsi=7 psidot=1.5 u=4
-1.24 0.02 0.26 IAS=43 Eu=7 udot=0.4 q=1.5 qdot=1 Ev=1.5 vdot=0.5 p=1.5 pdot=1
Epsi=3 psidot=0.5 u=14 phi=0
-0.7 0.02 0.28 IAS=30 Eu=28 udot=0.6 q=5 qdot=5 theta=11 Ev=15 vdot=0.5 p=1.5
pdot=1 Epsi=3 psidot=0.5 u=14 phi=0
0.06 0.19 0.28 IAS=45 Ev=1.5 vdot=0.5 p=6 pdot=5 Epsi=20 psidot=3 u=15 phi=2
0.67 0.2 0.37 IAS=30 Eu=28 udot=0.6 q=5 qdot=5 theta=11
1.36 0.36 0.38 IAS=30 Ev=1.5 vdot=0.5 p=6 pdot=5 Epsi=-20 psidot=-3 u=15 phi=-2
1.87 0.37 0.29 IAS=6 Eu=-28 udot=-0.6 q=5 qdot=5 theta=-8
2.1 0.32 .29 IAS=45 Ev=1.5 vdot=0.5 p=6 pdot=5 Epsi=20 psidot=3 u=15 phi=2
2.62 0.31 .36 IAS=45 Ev=1.5 vdot=0.5 p=6 pdot=5 Epsi=20 psidot=3 u=15 phi=2
Ví dụ :
---------------------------------------------------------------------------------------------- 44
Chương 5 : Giải quyết bài toán ----------------------------------------------------------------------------------------------
Với 3 số đầu là toạ độ (x,y,z) hiện tại của trực thăng với hệ toạ độ định
sẵn, mỗi dòng là dữ liệu đầu vào tại mỗi vị trí định trước.
5.6. Kết luận chương 5 :
Chương 5 trình bày việc sử dụng mô hình GA- FL để tạo ra bộ luật
điều khiển máy bay không người lái và áp dụng bộ luật này cho chương trình
giả lập điều khiển trực thăng không người lái cũng như các kết quả thử
nghiệm đạt được.
---------------------------------------------------------------------------------------------- 45
Kết luận và hướng phát triển ----------------------------------------------------------------------------------------------
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
Kết luận :
Luận văn đạt được một số kết quả sau :
- Tìm hiểu về hai kỹ thuật tính toán mềm : Logic mờ và Thuật giải di truyền.
- Tìm hiểu về hệ thống điều khiển trực thăng không người lái. Tiến tới xây
dựng bộ luật điều khiển bay tự động bằng mô hình kết hợp giữa Logic mờ và
Thuật giải di truyền. Cụ thể :
+ Xây dựng bộ luật cơ bản bằng Logic mờ.
+ Mở rộng bộ luật cơ bản hình thành bộ luật mở rộng bằng Thuật giải
di truyền.
- Ứng dụng bộ luật điều khiển được xây dựng cho chương trình giả lập : điều
khiển tự động trực thăng bay không người lái.
-Tính khả thi của mô hình kết hợp GA – FL thông qua các kết quả thử
nghiệm.
Hướng phát triển :
- Tiếp tục nghiên cứu, phát triển mô hình xây dựng sao cho có thể ứng dụng
rộng rãi cho việc điều khiển bay tự động trong nhiều điều kiện giả lập khác :
khí hậu, gió, mưa,…
- Phát triển mô hình xây dựng để chỉ ra tính khoa học của nó với mục tiêu
hướng tới những ứng dụng khác bên ngoài điều khiển bay tự động.
---------------------------------------------------------------------------------------------- 46
Tài liệu tham khảo ----------------------------------------------------------------------------------------------
TÀI LIỆU THAM KHẢO [1] C. Phillips, C.L. Karr, and G. Walker. Helicopter flight control with fuzzy
logic and genetic algorithms. Engineering Applications of Artificial
Intelligence, 9(2) : 175 – 184, April 1996.
[2] Hoàng Kiếm, Lê Hoàng Thái. Thuật giải di truyền, cách giải tự nhiên các
bài toán trên máy tính. Nhà xuất bản Giáo Dục, 2000.
[3] Nguyễn Đình Thúc. Trí tuệ nhân tạo, Lập trình tiến hoá, Cấu trúc dữ liệu
+ Thuật giải di truyền = Chương trình tiến hoá. MK.PUB Nhà xuất bản Giáo
Dục, 2001.
[4] Foundations of Fuzzy Logic, Mathlab - The Language of Technical
[5] John A.R. Tucker, Phillip E. Fraley, and Lawrence P. Swanson, 1994:
Computing, Fuzzy Logic Toolbox.
Fuzzy Logic in C: An Update, Dr. Dobb's Journal, April 1994.
[6] L.Doitsidis, K.P. Valavanis, N.C. Tsourveloudis, M. Kontitsis. A
Framework for Fuzzy Logic Based UAV Navigation and Control. Proceeding
of the 2004 IEEE, International Conference on Robotics & Automation, New
Orieans, LA – April 2004.
[7] D.K.Kahaner. Fuzzy helicopter control. Asian Technology Information
Program (ATIP), 12 April 1993, Japan.
[8] D.K.Kahaner. Fuzzy logic. Asian Technology Information Program
(ATIP), 24 August 1990, Japan.
[9] Jim Murtha, 1995: Applications of fuzzy logic in operational meteorology,
Scientific Services and Professional Development Newsletter, Canadian
Forces Weather Service, 42-54.
[10] Flight Directional Controls. http://www.thaitechnics.com
---------------------------------------------------------------------------------------------- 47
Phụ lục A : Thuật giải di truyền ----------------------------------------------------------------------------------------------
PHỤ LỤC A. Thuật giải di truyền :[2], [3]
+ Đại cương :
Quá trình tiến hoá tự nhiên là quá trình hoàn hảo nhất, hợp lý nhất và tự
nó đã mang tính tối ưu. Quan niệm này có thể được xem như một tiên đề
đúng, không chứng minh được, nhưng phù hợp với thực tế khách quan. Quá
trình tiến hoá thể hiện tính tối ưu ở chỗ : thế hệ sau bao giờ cũng tốt hơn
(phát triển hơn, hoàn thiện hơn) thế hệ trước. Tiến hoá tự nhiên được duy trì
nhờ hai quá trình cơ bản : sinh sản và chọn lọc tự nhiên. Xuyên suốt quá trình
tiến hoá tự nhiên, các thế hệ mới luôn được sinh ra để bổ sung thay thế thế hệ
cũ. Cá thể nào phát triển hơn, thích ứng hơn với môi trường sẽ tồn tại. Cá thể
nào không thích ứng được với môi trường sẽ bị đào thải. Sự thay đổi môi
trường là động lực thúc đẩy quá trình tiến hoá. Ngược lại, tiến hoá cũng tác
động trở lại góp phần làm thay đổi môi trường.
Quá trình tiến hoá này đã được John Henry Holland ứng dụng vào việc
giải quyết vấn đề với máy vi tính. Ông đã đề xướng ra Thuật giải di truyền
(Genetic Algorithms _ GA) vào năm 1975.
GA là kỹ thuật giúp giải quyết vấn đề bắt chước theo sự tiến hoá của
con người hay của sinh vật nói chung, trong điều kiện quy định sẵn của môi
trường.
GA giúp tìm ra giải pháp tối ưu hay tốt nhất trong điền kiện thời gian
và không gian cho phép.
GA không giống như những phương pháp giải tích dựa trên các công
thức toán học hay phương thức suy luận dựa trên kinh nghiệm của các chuyên
gia mà GA xét đến toàn bộ các giải pháp, bằng cách xét trước nhất một số giải
---------------------------------------------------------------------------------------------- 48
Phụ lục A : Thuật giải di truyền ----------------------------------------------------------------------------------------------
pháp, sau đó loại bỏ những thành phần không thích hợp và chọn những thành
phần thích nghi hơn để tạo sinh và biến hoá nhằm mục đích tạo ra nhiều giải
pháp mới có hệ số thích nghi ngày càng cao.
Như vậy, GA là một hình thức tìm kiếm có tính ngẫu nhiên nhưng được
hướng dẫn bởi hàm số thích nghi. GA không thể luôn luôn tìm ra giải pháp tối
ưu, nhưng chắc chắn sẽ cung cấp những giải pháp tương đối tốt trên nền tảng
vững chắc và trong thời gian nhanh nhất.
+ Tính chất đặc thù của Thuật giải di truyền :
_GA lập luận mang tính chất ngẫu nhiên, thay vì xác định như toán học giải
tích.
_GA duyệt xét toàn bộ các giải pháp, sau đó chọn lấy giải pháp tương đối tốt
nhất dựa trên hệ số thích nghi.
_GA không để ý đến chi tiết vấn đề, trái lại chỉ chú ý đến giải pháp, đặc biệt
là dãy số tượng trưng cho giải pháp.
_GA rất thích hợp cho việc tìm kiếm giải đáp cho vấn đề, hay tìm điều kiện
tối ưu cho việc điều hành, và phân nhóm những giải pháp có được.
+ Các bước quan trọng trong việc áp dụng Thuật giải di truyền :
Bước 1: Chọn mô hình cho giải pháp của vấn đề : chọn một số tượng trưng
cho toàn bộ các giải pháp có thể có cho vấn đề.
Bước 2: Chỉ định cho mỗi giải pháp một ký hiệu . Ký hiệu có thể là dãy số hệ
nhị phân, hay dãy số thập phân, dãy của chữ hay hỗn hợp chữ và số.Trong
giai đoạn mới làm quen với GA, chỉ nên dùng hệ nhị phân để làm ký hiệu cho
giải pháp.
Bước 3: Tìm hàm số thích nghi cho vấn đề và tính hệ số thích nghi cho từng
giải pháp.
---------------------------------------------------------------------------------------------- 49
Phụ lục A : Thuật giải di truyền ----------------------------------------------------------------------------------------------
Bước 4: Dựa trên hệ số thích nghi của các giải pháp để thực hiện sự tạo sinh
(reproduction) và biến hoá các giải pháp. Các phương thức biến hoá gồm: lai
ghép (crossover), đột biến (mutation).
Bước 5: Tính các hệ số thích nghi cho các giải pháp mới và loại bỏ những giải
pháp kém nhất để chỉ còn giữ lại một số nhất định các giải pháp.
Bước 6: Nếu chưa tìm được giải pháp tối ưu hay tương đối khá nhất hay chưa
hết hạn kỳ ấn định, trở lại bước 4 để tìm giải pháp mới.
Bước 7: Tìm được giải pháp tối ưu hoặc nếu thời gian cho phép đã chấm dứt
thì báo cáo kết quả tính được.
+ Sự mã hoá và các toán tử di truyền :
Mã hoá :
Bước đầu tiên trong Thuật giải di truyền là mã hoá, ánh xạ các biến một
xâu với chiều dài hữu hạn sang các tham biến của bài toán tối ưu.
Tham biến x thuộc [Umin; Umax] sẽ được biểu diễn bởi chuỗi nhị phân có chiều dài L. L bit mã hoá x ứng với giá trị trong miền [0; 2L] sẽ được ánh
xạ lên các giá trị thuộc miền xác định [Umin; Umax]. Theo cách này chúng ta
có thể kiểm soát miền giá trị của các biến và tính chính xác của chúng. Tỷ lệ
min
U
g
=
max U − L 1 2 −
co giãn của ánh xạ này được cho bởi:
Ta thấy giá trị x tương ứng với mã string2 sẽ được xác định theo công thức:
x = Umin + decimal(string2)*g
trong đó decimal(string2) biểu diễn giá trị thập phân của chuỗi nhị phân
string2, g là tỷ lệ co giãn được xác định ở trên.
VD:
decimal(0001) = 1; decimal(0011) = 3
---------------------------------------------------------------------------------------------- 50
Phụ lục A : Thuật giải di truyền ----------------------------------------------------------------------------------------------
Để mã hoá tập các biến, ta ghép nối mã các biến riêng lẻ lại với nhau. Mỗi mã
tương ứng với một chiều dài các bit riêng và xác định một giá trị tương ứng
của nó nằm trong miền [Umin; Umax].
VD:
Mã hoá cho 4 biến được cho bởi:
0001|0110|1010|1111
U1 | U2 | U3 | U4
Trong đó thành tố thứ nhất (4 bit đầu tiên) tương ứng với biểu diễn của
biến thứ nhất, thành tố cuối cùng ( 4 bit cuối cùng) tương ứng với biểu diễn
của biến cuối cùng.
Các toán tử di truyền :
Trong quá trình tiến hoá, các cá thể mới sinh ra nhờ sự lai ghép ở thế hệ
cha-mẹ. Một cá thể mới có thể mang những tính trạng của cha mẹ (di truyền),
cũng có thể mang tính trạng hoàn toàn mới (đột biến). Di truyền và đột biến là
hai cơ chế có vai trò quan trọng như nhau trong tiến trình tiến hoá, dù rằng
đột biến xảy ra với xác suất nhỏ hơn nhiều so với hiện tượng di truyền. Các
thuật toán tiến hoá tuy có những điểm khác biệt, nhưng đều mô phỏng bốn
quá trình cơ bản : lai ghép, đột biến, sinh sản và chọn lọc tự nhiên. Tương ứng
với bốn quá trình vừa nêu, trong Thuật giải di truyền ta có: toán tử lai ghép,
toán tử đột biến, toán tử tạo sinh, và toán tử chọn lọc.
Toán tử lai ghép (crossover) :
Toán tử tác động trên các cá thể cha mẹ để tạo ra những con lai tốt
bằng cách ghép một hay nhiều đoạn gen của hai (hay nhiều) nhiễm sắc thể
cha-mẹ với nhau. Chúng được áp dụng lên cặp cha mẹ được chọn lựa với xác
suất lai ghép ký hiệu bởi Pcross . Xác suất này cho chúng ta số lượng
(Pcross*pop_size) nhiễm sắc thể được dùng cho hoạt động lai ghép, ở đây
pop_size là kích thước của quần thể được tạo lai.
---------------------------------------------------------------------------------------------- 51
Phụ lục A : Thuật giải di truyền ----------------------------------------------------------------------------------------------
• Phát sinh một số ngẫu nhiên r trong miền [0;1]
Với mỗi nhiễm sắc thể trong quần thể:
• Nếu r < P
cross
, chọn nhiễm sắc thể đó để lai ghép.
Sau đó, ta kết hợp các nhiễm sắc thể được chọn một cách ngẫu nhiên:
Mỗi cặp nhiễm sắc thể, chúng ta có thể phát sinh một số ngẫu nhiên pos từ
miền[1; L] (L là tổng số bit trong nhiễm sắc thể ). Số pos báo hiệu vị trí của
điểm lai ghép. Hai nhiễm sắc thể :
L
(b1b2……..bposbpos+1…….b ) và
(c1c2……..cposcpos+1…….c ) L
được thay thế bởi cặp con cháu:
L
(b1b2……..bposcpos+1…….c ) và
(c1c2……..cposbpos+1…….b ) L
Như vậy xử lý này sản xuất ra hai chuỗi mới, mỗi chuỗi đều được thừa
hưởng những đặc tính lấy từ cha và mẹ của chúng. Lai ghép cho phép Thuật
giải di truyền sử dụng những thông tin đã có để tìm kiếm trực tiếp trên những
vùng tốt hơn.
Toán tử đột biến (mutation) :
Đột biến là hiện tượng cá thể con mang một số tính trạng không có
trong mã di truyền của cha mẹ. Toán tử đột biến nhằm tạo ra những thông tin
mới trong quần thể lai tạo tại các vị trí bit (gen) nào đó (quần thể được xem
xét có pop_size cá thể, mỗi cá thể được biểu thị qua L bit/gen). Đột biến được
mu
cross .Số
áp dụng với xác suất P , nhỏ hơn rất nhiều so với xác suất lai P
lượng bit đột biến là Pmu*L*pop_size bit. Mỗi bit có cơ hội đột biến như nhau
và được thay đổi từ 0 thành 1 hay ngược lại. Có thể xử lý theo cách sau:
• Phát sinh một số ngẫu nhiên r trong miền [0; 1]
Với mỗi nhiễm sắc thể trong quần thể và mỗi bit trong nhiễm sắc thể :
---------------------------------------------------------------------------------------------- 52
Phụ lục A : Thuật giải di truyền ----------------------------------------------------------------------------------------------
• Nếu r < P , tiến hành đột biến tại bit đó.
mu
Các thao tác xử lý này được áp dụng lặp đi lặp lại cho tới khi các cá thể
con cháu của chúng tăng trưởng tới kích cỡ mong muốn của quần thể.
Toán tử chọn các thể (selection) :
Toán tử chọn lọc là thao tác xử lý trong đó mỗi cá thể được bảo lưu cho
vòng tạo sinh tiếp sau tuỳ thuộc vào giá trị thích nghi của nó. Toán tử này là
một phiên bản mô phỏng của quá trình chọn lọc tự nhiên. Giá trị thích nghi
F(i) được xác định đối với mỗi cá thể trong quần thể. Giá trị này càng lớn thì
cá thể được coi là hợp lý. Hàm thích nghi có thể là hàm không liên tục, hàm
dương hay phi tuyến. Xử lý chọn lọc các cá thể cha mẹ được hình thành theo
mô hình tái tạo quay trên vòng tròn (roulette weel). Vòng quay của chúng có
kích cỡ khác nhau ứng với những giá trị hợp lý của các cá thể. Kỹ thuật này
được gọi là lựa chọn cha mẹ trên vòng tròn quay (roulette weel parent
selection). Mỗi khi cần tạo ra một con cháu, sẽ thực hiện một lần quay trên
vòng tròn trọng số nhằm sinh ra ứng cử viên cho việc tái sản xuất.
Toán tử chọn lọc nhằm tìm ra những cá thể tồn tại tốt nhất và không tạo
ra những cá thể mới.
• Tính tổng giá trị thích nghi của tất cả thành viên quần thể và gọi nó là
Kỹ thuật này có thể thực hiện theo các bước:
• Phát sinh một số n là số ngẫu nhiên trong miền [0; F ].
t
• Trả lại thành viên quần thể đầu tiên mà giá trị thích nghi của nó cộng
tổng thích nghi F (total fitness). t
với giá trị thích nghi của các thành viên quần thể trước đấy lớn hơn
hoặc bằng n.
---------------------------------------------------------------------------------------------- 53
Phụ lục A : Thuật giải di truyền ----------------------------------------------------------------------------------------------
Toán tử tạo sinh (generation) :
Hàm tạo sinh đóng vai trò rất quan trọng trong Thuật giải di truyền.
Dựa vào giá trị thích nghi của từng cá thể (fitness) trong quần thể, tổng giá trị
thích nghi (total fitness) của quần thể, ứng dụng các toán tử di truyền (chọn
lọc, đột biến, lai ghép) lên quần thể để sản sinh ra quần thể mới gồm các cá
thể có tính trạng tốt hơn quần thể ban đầu.
• Chọn lọc các cá thể tốt trong quần thể.
• Lai ghép và đột biến các cá thể này để tạo ra các cá thể mới tốt hơn cho
Hàm này có thể thực hiện như sau:
quần thể mới.
+ Hàm thích nghi (Fitness):
Là hàm xác định giá trị thích nghi (fitness value) của từng cá thể trong quần
thể. Giá trị thích nghi càng cao thì cá thể sẽ được chọn lựa cho lần sinh sản
mới, ngược lại cá thể sẽ bị đào thải.
Ánh xạ giá trị hàm mục tiêu sang giá trị thích nghi:
Vì hàm thích nghi phải nhận giá trị không âm, do đó cần phải xây dựng
ánh xạ hàm mục tiêu đang xét trong bài toán sang hàm thích nghi thông qua
một hoặc nhiều lần ánh xạ. Nếu bài toán tối ưu là cực tiểu một hàm đánh giá
g
(x)
−
g(x), việc chuyển từ hàm đánh giá sang hàm thích nghi để sử dụng với GA là:
xf )(
=
khi g(x) < Cmax
Cmax ⎧ ⎨ 0 ⎩
trong các trường hợp khác
Ở đây, Cmax là một tham số đầu vào. Ví dụ, có thể lấy Cmax là giá trị
g lớn nhất trong quần thể hiện tại, hoặc lớn nhất sau k vòng lặp. Nói chung
Cmax khác nhau tuỳ thuộc vào giá trị các biến của quần thể.
---------------------------------------------------------------------------------------------- 54
Phụ lục A : Thuật giải di truyền ----------------------------------------------------------------------------------------------
Khi hàm mục tiêu gốc tăng hoặc đang xét bài toán cực đại hoá một hàm
hữu dụng u(x), chúng ta có thể chuyển sang hàm thích nghi như sau:
u(x) Cmin +
)(xf
=
khi u(x) + Cmin > 0
⎧ ⎨ 0 ⎩
trong các trường hợp khác
Ở đây Cmin là tham số đầu vào, có thể là trị tuyệt đối của u bé nhất trong
quần thể hiện tại hoặc trong k vòng lặp cuối cùng hoặc là một hàm của biến
quần thể.
Điều chỉnh độ thích nghi:
Một vấn đề quan trọng là điều chỉnh số con cháu. Điều này đặc biệt
quan trọng cho một vài vòng lặp đầu tiên, khi một vài cá thể “siêu” có tiềm
năng chiếm lĩnh phần lớn quần thể và làm cho hội tụ sớm. Điều chỉnh độ
thích nghi có thể giúp giải quyết vấn đề này.
Một kiểu điều chỉnh hay gặp là điều chỉnh tuyến tính. Chúng ta định
nghĩa độ thích nghi gốc là f và độ thích nghi đã biến đổi là f’. Điều chỉnh
tuyến tính xác định quan hệ giữa f và f’ như sau:
f’ = a*f + b (A.1)
Với a, b là các hệ số được chọn sao cho:
(A.2) f’avg = f avg
và
max
mult*favg
f’ = C (A.3)
Ở đây Cmult là số các bản sao cần thiết đối với một thành viên tốt nhất. Với
lượng biến tương đối nhỏ (n=50 đến 100), Cmult thường được chọn từ 1.2 đến
2 và tỏ ra khá hiệu quả.
---------------------------------------------------------------------------------------------- 55
Phụ lục A : Thuật giải di truyền ----------------------------------------------------------------------------------------------
Biểu thức (A.2) bảo đảm rằng mỗi thành viên với độ thích nghi trung bình sẽ
cho một con hay một cháu đối với lần phát sinh tiếp theo.
Biểu thức (A.3) kiểm soát số con cháu được nạp vào làm thành viên với độ
thích nghi gốc cực đại.
Lưu ý rằng điều chỉnh tuyến tính trong biểu thức từ (A.1) – (A.3) có thể làm
cho giá trị thích nghi trở thành âm. Điều này không cho phép vì phải luôn
đảm bảo tính không âm của nó. Một giải pháp thay thế điều kiện trong biểu
min
thức (A.3) là sử dụng điều kiện f = 0.
+ Thuật giải:
Sơ đồ thuật giải:
---------------------------------------------------------------------------------------------- 56
Phụ lục A : Thuật giải di truyền ----------------------------------------------------------------------------------------------
Thuật giải :
Bước 1: Khởi tạo quần thể các nhiễm sắc thể
nhằm thiết lập số lượng nhiễm sắc thể ngẫu nhiên
ban đầu (thường dưới dạng chuỗi nhị phân) với
kích cỡ quần thể bằng pop_size (xác định trước).
Bước 2: Xác định giá trị thích nghi (fitness
value) của từng nhiễm sắc thể.
Tiếp tục cho
Bước 3: Sao chép lại các nhiễm sắc thể dựa vào
đến khi đạt giá trị thích nghi của chúng và tạo ra những
được điều kiện nhiễm sắc thể mới bằng việc kết hợp các nhiễm
sắc thể hiện tại (dùng các toán tử lai ghép, đột định trước.
biến, tái kết hợp).
Bước 4: Loại bỏ những thành viên không thích
nghi trong quần thể.
Bước 5: Chèn những nhiễm sắc thể mới vào
quần thể để hình thành một quần thể mới.
---------------------------------------------------------------------------------------------- 57
Phụ lục B : Logic mờ ----------------------------------------------------------------------------------------------
Mã giải : [3]
Bắt đầu :
t = 0;
Khởi tạo P(t);
Tính độ thích nghi cho các cá thể thuộc P(t);
Khi (điều kiện dừng chưa thoả) lặp
t = t + 1;
Tái sinh P’(t) từ P(t);
Lai Q(t) từ P(t-1);
Đột biến R(t) từ P(t-1);
Chọn lọc P(t) từ P(t-1)
∪
∪
P’(t); Q(t) ∪ R(t)
Hết lặp
Kết thúc.
B. Logic mờ (fuzzy logic):
+ Đại cương: [2]
Hệ thống nhị phân là nguyên tắc hoạt động căn bản của máy vi tính:
mạch điện đóng (1) hay mở (0), sự kiện có (1) hay không có (0), đáp số trúng
(1) hay không trúng (0), … là những chi tiết mà máy vi tính xét đến để giải
quyết vấn đề. Nhưng trong thực tế, chúng ta không luôn luôn đối diện với
những tình trạng rõ ràng như trên, những gì chúng ta phải giải quyết hầu như
không đầy đủ, không chính xác hay không có biên giới rõ ràng.
VD:
_Chiều nay có thể mưa nhưng không chắc sẽ có mưa rào.
_Máy phát điện chạy không êm chắc là thiếu nhớt trong trục máy.
_Hiệu điện thế thay đổi khá nhiều chắc là nhu cầu điện tăng giảm bất
thường.
---------------------------------------------------------------------------------------------- 58
Phụ lục B : Logic mờ ----------------------------------------------------------------------------------------------
Hệ thống nhị phân, trắng đen rõ ràng, của máy vi tính không thể giúp
giải quyết vấn đề này. Và L.A.Zadeh thuộc đại học Hoa Kỳ đã đề xuất lý
thuyết về Logic mờ (Fuzzy Logic) dựa trên một nhóm số không chính xác là
tập mờ (fuzzy set) để giải quyết các vấn đề mơ hồ(vague) bằng máy vi tính.
Ngày nay Logic mờ là kỹ thuật được ưa chuộng nhất trong điều khiển
máy móc, biến chế dữ kiện, thu thập kiến thức,…
Sau đây là phần trình bày các vấn đề liên quan đến Logic mờ:
+ Tập mờ (fuzzy sets) [4]
Tập mờ là tập chứa các phần tử mà giá trị của nó được ánh xạ sang
miền [0, 1]. Khác với logic đúng-sai (Boolean) chỉ chứa 2 giá trị 0 hoặc 1,
logic mờ chứa những giá trị nằm giữa 0 và 1, ví dụ như 0, 0.2, 0.7213, 0.02,
1, …Tập mờ được xác định bởi hàm thành viên.
+ Hàm thuộc (hay hàm thành viên) (membership function) [4]
Hàm thuộc là một đường mà vạch rõ mọi điểm nằm trong không gian
đầu vào được ánh xạ thành độ thuộc(degree of membership) nằm giữa 0 và 1.
Độ thuộc được kí hiệu là μ.
Ví dụ : vận tốc có tập mờ là : {nhỏ, trung bình, lớn} và được xác định bởi 3
hàm thành viên như sau :
+ Các phép toán cơ bản của Logic mờ [4]
Như chúng ta đã biết trong logic đúng-sai, các phép toán AND, OR,
NOT được định nghĩa như sau :
---------------------------------------------------------------------------------------------- 59
Phụ lục B : Logic mờ ----------------------------------------------------------------------------------------------
Trong logic mờ, các phép toán này được định nghĩa như sau :
Phép toán AND(A,B) được thay thế bằng hàm min(A, B), OR(A,B)
được thay bằng hàm max(A,B), NOT(A) được thay bằng (1 - A) làm cho ta
có thể thay thế số 0 và 1 bằng những số thực khác nằm giữa 0 và 1.
Dưới đây là đồ thị biểu diễn bảng chân trị của tập mờ C được tạo từ 2
tập mờ A, B với 3 phép toán : AND, OR, NOT.
---------------------------------------------------------------------------------------------- 60
Phụ lục B : Logic mờ ----------------------------------------------------------------------------------------------
+ Biến ngôn ngữ (linguistic variable) [4]
Là những biến mà giá trị của nó là những từ (words) thay vì là những
con số (numbers).
+ Luật mờ ( fuzzy rule) [4]
Luật mờ là một câu điều kiện có dạng :
If x is A Then y is B
Trong đó:
A, B là những giá trị ngôn ngữ được xác định bởi tập mờ trong phạm vi của
biến x,y.
Phần “x is A” của mệnh đề If được gọi là tiền đề, còn phần “y is B” của mệnh
đề Then gọi là kết luận.
VD:
If (nhiệt độ is cao) Then (trời is nóng).
If (gió is lớn) and (mây is nhiều) Then (mưa is lớn).
If (thứ is bảy) or (thứ is chủ nhật) Then (hoạt động is nghỉ).
---------------------------------------------------------------------------------------------- 61
Phụ lục C : Các màn hình chính của chương trình giả lập thử nghiệm ----------------------------------------------------------------------------------------------
C. Các màn hình chính của chương trình giả lập thử nghiệm * Màn hình C.1. Quá trình xây dựng và mở rộng bộ luật cơ bản
---------------------------------------------------------------------------------------------- 62
Phụ lục C : Các màn hình chính của chương trình giả lập thử nghiệm ----------------------------------------------------------------------------------------------
Mô tả và xử lý quá trình ra quyết định của vùng điều khiển trực thăng
* Màn hình C.2. bay theo chiều dọc
---------------------------------------------------------------------------------------------- 63
Phụ lục C : Các màn hình chính của chương trình giả lập thử nghiệm ----------------------------------------------------------------------------------------------
Mô tả và xử lý quá trình ra quyết định của vùng điều khiển trực thăng
* Màn hình C.3. bay theo chiều ngang
---------------------------------------------------------------------------------------------- 64
Phụ lục C : Các màn hình chính của chương trình giả lập thử nghiệm ----------------------------------------------------------------------------------------------
Mô tả và xử lý quá trình ra quyết định của vùng điều khiển bàn đạp
* Màn hình C.4.
---------------------------------------------------------------------------------------------- 65
Phụ lục C : Các màn hình chính của chương trình giả lập thử nghiệm ----------------------------------------------------------------------------------------------
Mô tả và xử lý quá trình ra quyết định của vùng điều khiển cần nâng
* Màn hình C.5.
---------------------------------------------------------------------------------------------- 66
Phụ lục C : Các màn hình chính của chương trình giả lập thử nghiệm ----------------------------------------------------------------------------------------------
Mô phỏng quá trình bay tự động của trực thăng từ điểm xuất phát tới
* Màn hình C.6. điểm kết thúc.
---------------------------------------------------------------------------------------------- 67
Phụ lục D : Thiết kế luật cho từng khối điều khiển ----------------------------------------------------------------------------------------------
D. Thiết kế luật cho từng khối D.1. Khối Longitudinal Acceleration : Đầu vào :
Biến IAS với 3 hàm thành viên : “Small”, “Medium”, “Big”
Biến Eu với 3 hàm thành viên : “Negative”, “Stable”, “Positive”
Biến u_dot với 3 hàm thành viên : “Negative”, “Stable”, “Positive”
Đầu ra :
Biến R_theta với 5 hàm thành viên : “Negative Big”, “Negative Small”, “Zero”, “Positive Small”, “Positive Big”
Một số luật của khối: if(IAS = Small & Eu = Negative & u_dot = Stable) then R_theta = Negative Big if(IAS = Small & Eu = Negative & u_dot = Positive) then R_theta = Negative Small if(IAS = Small & Eu = Stable & u_dot = Positive) then R_theta = Zero if(IAS = Medium & Eu = Positive & u_dot = Negative) then R_theta = Zero if(IAS = Big & Eu = Stable & u_dot = Positive) then R_theta = Positive Small if(IAS = Medium & Eu = Positive & u_dot = Positive) then R_theta = Positive Small if(IAS = Big & Eu = Positive & u_dot = Positive) then R_theta = Postive Big
---------------------------------------------------------------------------------------------- 68
Phụ lục D : Thiết kế luật cho từng khối điều khiển ----------------------------------------------------------------------------------------------
D.2. Khối Longitudinal Hold : Đầu vào :
Biến IAS với 3 hàm thành viên : “Small”, “Medium”, “Big”
Biến Eu với 3 hàm thành viên : “Negative”, “Stable”, “Positive”
Biến u_dot với 3 hàm thành viên : “Negative”, “Stable”, “Positive”
Đầu ra :
Biến E_theta với 5 hàm thành viên : “Negative Big”, “Negative Small”, “Zero”, “Positive Small”, “Positive Big”
Một số luật của khối: if(IAS = Small & Eu = Negative & u_dot = Stable) then E_theta = Negative Big if(IAS = Small & Eu = Positive & u_dot = Negative) then E_theta = Negative Small if(IAS = Medium & Eu = Negative & u_dot = Positive) then E_theta = Zero if(IAS = Medium & Eu = Negative & u_dot = Positive) then E_theta = Zero if(IAS = Medium & Eu = Stable & u_dot = Positive) then E_theta = Positive Small if(IAS = Small & Eu = Positive & u_dot = Stable) then E_theta = Positive Small if(IAS = Big & Eu = Positive & u_dot = Negative) then E_theta = Postive Big if(IAS = Big & Eu = Positive & u_dot = Positive) then R_theta = Postive Big
---------------------------------------------------------------------------------------------- 69
Phụ lục D : Thiết kế luật cho từng khối điều khiển ----------------------------------------------------------------------------------------------
D.3. Khối Longitudinal Attitude : Đầu vào :
Biến E_theta với 5 hàm thành viên : “Negative Big”, “Negative Small”, “Zero”, “Positive Small”, “Positive Big”
Biến q với 3 hàm thành viên : “Negative”, “Stable”, “Positive”
Biến q_dot với 3 hàm thành viên : “Negative”, “Stable”, “Positive”
Đầu ra :
Biến lon với 3 hàm thành viên : “Negative”, “Stable”, “Positive”
Một số luật của khối: if(E_theta = Negative Big & q = Negative & q_dot = Negative) then lon = Negative if(E_theta = Negative Small & q = Stable & q_dot = Stable) then lon = Negative if(E_theta = Negative Small & q = Positive & q_dot = Negative) then lon = Negative if(E_theta = Zero & q = Positive & q_dot = Stable) then lon = Stable if(E_theta = Zero & q = Positive & q_dot = Positive) then lon = Stable if(E_theta = Positive Small & q = Stable & q_dot = Positive) then lon = Positive if(E_theta = Postive Big & q = Negative & q_dot = Stable) then lon = Positive if(E_theta = Postive Big & q = Stable & q_dot = Positive) then lon = Positive
---------------------------------------------------------------------------------------------- 70
Phụ lục D : Thiết kế luật cho từng khối điều khiển ----------------------------------------------------------------------------------------------
D.4. Khối Lateral Acceleration : Đầu vào :
Biến Ev với 3 hàm thành viên : “Negative”, “Stable”, “Positive”
Biến v_dot với 3 hàm thành viên : “Negative”, “Stable”, “Positive”
Đầu ra :
Biến R_phi với 5 hàm thành viên : “Negative Big”, “Negative Small”, “Zero”, “Positive Small”, “Positive Big”
Một số luật của khối: if(Ev = Negative & v_dot = Negative) then R_phi = Negative Big if(Ev = Negative & v_dot = Stable) then R_phi = Negative Small if(Ev = Negative & v_dot = Positive) then R_phi = Zero if(Ev = Stable & v_dot = Negative) then R_phi = Negative Small if(Ev = Stable & v_dot = Stable) then R_phi = Zero if(Ev = Stable & v_dot = Positive) then R_phi = Positive Small if(Ev = Positive & v_dot = Negative) then R_phi = Zero if(Ev = Positive & v_dot = Stable) then R_phi = Positive Small if(Ev = Positive & v_dot = Positive) then R_phi = Postive Big
---------------------------------------------------------------------------------------------- 71
Phụ lục D : Thiết kế luật cho từng khối điều khiển ----------------------------------------------------------------------------------------------
D.5. Khối Lateral Hold : Đầu vào :
Biến Ev với 5 hàm thành viên : “Negative Big”, “Negative Small”, “Zero”, “Positive Small”, “Positive Big”
Biến v_dot với 3 hàm thành viên : “Negative”, “Stable”, “Positive”
Đầu ra :
Biến R_phi với 5 hàm thành viên : “Negative Big”, “Negative Small”, “Zero”, “Positive Small”, “Positive Big”
Một số luật của khối: if(Ev = Negative Big & v_dot = Stable) then E_phi = Negative Big if(Ev = Negative Small & v_dot = Stable) then E_phi = Negative Small if(Ev = Zero & v_dot = Negative) then E_phi = Negative Small if(Ev = Zero & v_dot = Stable) then E_phi = Zero if(Ev = Positive Small & v_dot = Negative) then E_phi = Zero if(Ev = Positive Small & v_dot = Stable) then E_phi = Positive Small if(Ev = Postive Big & v_dot = Stable) then E_phi = Postive Big if(Ev = Postive Big & v_dot = Positive) then E_phi = Postive Big
---------------------------------------------------------------------------------------------- 72
Phụ lục D : Thiết kế luật cho từng khối điều khiển ----------------------------------------------------------------------------------------------
D.6. Khối Lateral Attitude : Đầu vào :
Biến E_theta với 5 hàm thành viên : “Negative Big”, “Negative Small”, “Zero”, “Positive Small”, “Positive Big”
Biến p với 3 hàm thành viên : “Negative”, “Stable”, “Positive”
Biến p_dot với 3 hàm thành viên : “Negative”, “Stable”, “Positive”
Đầu ra :
Biến lat1 với 3 hàm thành viên : “Negative”, “Stable”, “Positive”
Một số luật của khối: if(E_phi = Negative Big & p = Negative & p_dot = Positive) then Lat1 = Negative if(E_phi = Negative Big & p = Positive & p_dot = Negative) then Lat1 = Negative if(E_phi = Zero & p = Negative & p_dot = Stable) then Lat1 = Stable if(E_phi = Zero & p = Positive & p_dot = Stable) then Lat1 = Stable if(E_phi = Positive Small & p = Negative & p_dot = Stable) then Lat1 = Stable if(E_phi = Positive Small & p = Positive & p_dot = Positive) then Lat1 = Positive if(E_phi = Postive Big & p = Stable & p_dot = Negative) then Lat1 = Positive if(E_phi = Postive Big & p = Positive & p_dot = Stable) then Lat1 = Positive
---------------------------------------------------------------------------------------------- 73
Phụ lục D : Thiết kế luật cho từng khối điều khiển ----------------------------------------------------------------------------------------------
D.7. Khối Bank Hold : Đầu vào :
Biến IAS với 2 hàm thành viên : “Small”, “Big”
Biến E_psi với 3 hàm thành viên : “Negative”, “Stable”, “Positive”
Đầu ra :
Biến R_phi với 3 hàm thành viên: “Negative”, “Stable”, “Positive”
Một số luật của khối: if(IAS = Small & E_psi = Negative) then R_phi = Negative if(IAS = Small & E_psi = Stable) then R_phi = Negative if(IAS = Small & E_psi = Positive) then R_phi = Zero if(IAS = Big & E_psi = Negative) then R_phi = Zero if(IAS = Big & E_psi = Stable) then R_phi = Positive if(IAS = Big & E_psi = Positive) then R_phi = Positive
---------------------------------------------------------------------------------------------- 74
Phụ lục D : Thiết kế luật cho từng khối điều khiển ----------------------------------------------------------------------------------------------
D.8. Khối Heading Hold : Đầu vào :
Biến E_psi với 5 hàm thành viên : “Negative Big”, “Negative Small”, “Zero”, “Positive Small”, “Positive Big”
Biến psi_dot với 3 hàm thành viên: “Negative”, “Stable”, “Positive”
Đầu ra :
Biến E_phi với 7 hàm thành viên: “Negative Big”, “Negative Medium”, “Negative Small”, “Zero”, “Positive Small”, “Positive Medium”, “Positive Big”
Một số luật của khối: if(E_psi = Negative Big & psi_dot = Negative) then E_phi = Negative Big if(E_psi = Negative Big & psi_dot = Stable) then E_phi = Negative Medium if(E_psi = Negative Small & psi_dot = Positive) then E_phi = Negative Medium if(E_psi = Zero & psi_dot = Positive) then E_phi = Positive Small if(E_psi = Positive Small & psi_dot = Positive) then E_phi = Positive Medium if(E_psi = Postive Big & psi_dot = Negative) then E_phi = Positive Small if(E_psi = Postive Big & psi_dot = Stable) then E_phi = Positive Medium if(E_psi = Postive Big & psi_dot = Positive) then E_phi = Postive Big
---------------------------------------------------------------------------------------------- 75
Phụ lục D : Thiết kế luật cho từng khối điều khiển ----------------------------------------------------------------------------------------------
D.9. Khối Bank Attitude : Đầu vào :
Biến E_theta với 7 hàm thành viên : “Negative Big”, “Negative Medium”, “Negative Small”, “Zero”, “Positive Small”, “Positive Medium”, “Positive Big”
Biến p với 3 hàm thành viên : “Negative”, “Stable”, “Positive”
Biến p_dot với 3 hàm thành viên : “Negative”, “Stable”, “Positive”
Đầu ra :
Biến lat2 với 3 hàm thành viên : “Negative”, “Stable”, “Positive”
Một số luật của khối: if(E_phi = Negative Big & p = Positive & p_dot = Stable) then Lat2 = Negative if(E_phi = Negative Medium & p = Stable & p_dot = Stable) then Lat2 = Negative if(E_phi = Negative Medium & p = Positive & p_dot = Stable) then Lat2 = Negative if(E_phi = Negative Small & p = Stable & p_dot = Stable) then Lat2 = Stable if(E_phi = Zero & p = Negative & p_dot = Positive) then Lat2 = Stable if(E_phi = Positive Small & p = Positive & p_dot = Positive) then Lat2 = Positive if(E_phi = Zero & p = Stable & p_dot = Stable) then Lat2 = Positive
---------------------------------------------------------------------------------------------- 76
Phụ lục D : Thiết kế luật cho từng khối điều khiển ----------------------------------------------------------------------------------------------
D.10. Khối Hover Heading : Đầu vào :
Biến IAS với 2 hàm thành viên : “Small”, “Big”
Biến E_psi với 7 hàm thành viên : “Negative Big”, “Negative Medium”, “Negative Small”, “Zero”, “Positive Small”, “Positive Medium”, “Positive Big”
Biến r với 3 hàm thành viên : “Negative”, “Stable”, “Positive”
Biến r_dot với 3 hàm thành viên : “Negative”, “Stable”, “Positive”
---------------------------------------------------------------------------------------------- 77
Phụ lục D : Thiết kế luật cho từng khối điều khiển ----------------------------------------------------------------------------------------------
Đầu ra :
Biến tr1 với 3 hàm thành viên : “Negative”, “Stable”, “Positive”
if(IAS = Small & E_psi = Negative Big & r = Stable & r_dot = Stable) then Tr1 = Negative
if(IAS = Small & E_psi = Negative Big & r = Positive & r_dot = Stable) then Tr1 = Negative
if(IAS = Small & E_psi = Negative Small & r = Positive & r_dot = Stable) then Tr1 = Negative
if(IAS = Small & E_psi = Negative Small & r = Negative & r_dot = Negative) then Tr1 = Negative
if(IAS = Small & E_psi = Zero & r = Stable & r_dot = Negative) then Tr1 = Stable
if(IAS = Small & E_psi = Zero & r = Stable & r_dot = Positive) then Tr1 = Stable
if(IAS = Small & E_psi = Positive Small & r = Negative & r_dot = Positive) then Tr1 = Stable
if(IAS = Small & E_psi = Positive Medium & r = Negative & r_dot = Positive) then Tr1 = Positive
if(IAS = Small & E_psi = Positive Medium & r = Positive & r_dot = Positive) then Tr1 = Positive
if(IAS = Small & E_psi = Postive Big & r = Stable & r_dot = Positive) then Tr1 = Positive
if(IAS = Big & E_psi = Negative Big & r = Stable & r_dot = Stable) then Tr1 = Stable
if(IAS = Big & E_psi = Negative Big & r = Positive & r_dot = Positive) then Tr1 = Positive
if(IAS = Big & E_psi = Negative Medium & r = Positive & r_dot = Stable) then Tr1 = Stable
if(IAS = Big & E_psi = Negative Small & r = Stable & r_dot = Positive) then Tr1 = Stable
if(IAS = Big & E_psi = Negative Small & r = Positive & r_dot = Positive) then Tr1 = Positive
Một số luật của khối: if(IAS = Small & E_psi = Negative Big & r = Negative & r_dot = Stable) then Tr1 = Negative
---------------------------------------------------------------------------------------------- 78
Phụ lục D : Thiết kế luật cho từng khối điều khiển ----------------------------------------------------------------------------------------------
D.11. KhốiLateral Trim : Đầu vào :
Biến IAS với 2 hàm thành viên : “Small”, “Big”
Biến Ev với 3 hàm thành viên : “Negative”, “Stable”, “Positive”
Biến v_dot với 3 hàm thành viên : “Negative”, “Stable”, “Positive”
Đầu ra :
Biến tr2 với 3 hàm thành viên : “Negative”, “Stable”, “Positive”
Một số luật của khối: if(IAS = Small & Ev = Negative & v_dot = Stable) then Tr2 = Negative if(IAS = Small & Ev = Stable & v_dot = Negative) then Tr2 = Negative if(IAS = Small & Ev = Positive & v_dot = Negative) then Tr2 = Stable if(IAS = Big & Ev = Negative & v_dot = Stable) then Tr2 = Stable if(IAS = Big & Ev = Stable & v_dot = Stable) then Tr2 = Positive if(IAS = Big & Ev = Positive & v_dot = Stable) then Tr2 = Positive if(IAS = Big & Ev = Stable & v_dot = Negative) then Tr2 = Stable
---------------------------------------------------------------------------------------------- 79
Phụ lục D : Thiết kế luật cho từng khối điều khiển ----------------------------------------------------------------------------------------------
D.12. Khối Climb Rate : Đầu vào :
Biến IAS với 2 hàm thành viên : “Small”, “Big”
Biến Eh với 3 hàm thành viên : “Negative”, “Stable”, “Positive”
Biến h_dot với 3 hàm thành viên : “Negative”, “Stable”, “Positive”
Đầu ra :
Biến col với 3 hàm thành viên : “Negative”, “Stable”, “Positive”
Một số luật của khối: if(IAS = Small & Eh = Negative & h_dot = Stable) then Col = Negative if(IAS = Small & Eh = Stable & h_dot = Stable) then Col = Stable if(IAS = Small & Eh = Positive & h_dot = Negative) then Col = Stable if(IAS = Small & Eh = Positive & h_dot = Positive) then Col = Positive if(IAS = Big & Eh = Negative & h_dot = Negative) then Col = Negative if(IAS = Big & Eh = Stable & h_dot = Positive) then Col = Positive if(IAS = Big & Eh = Positive & h_dot = Stable) then Col = Positive
---------------------------------------------------------------------------------------------- 80
Phụ lục E : Bộ luật tổng quát ----------------------------------------------------------------------------------------------
E. Bộ luật tổng quát (414 luật) trong điều khiển trực thăng : 1. if(IAS = Small & Eu = Negative & u_dot = Negative) then R_theta = Negative Big 2. if(IAS = Small & Eu = Negative & u_dot = Stable) then R_theta = Negative Big 3. if(IAS = Small & Eu = Negative & u_dot = Positive) then R_theta = Negative Small 4. if(IAS = Small & Eu = Stable & u_dot = Negative) then R_theta = Negative Small 5. if(IAS = Small & Eu = Stable & u_dot = Stable) then R_theta = Zero 6. if(IAS = Small & Eu = Stable & u_dot = Positive) then R_theta = Zero 7. if(IAS = Small & Eu = Positive & u_dot = Negative) then R_theta = Negative Small 8. if(IAS = Small & Eu = Positive & u_dot = Stable) then R_theta = Positive Small 9. if(IAS = Small & Eu = Positive & u_dot = Positive) then R_theta = Positive Small 10. if(IAS = Medium & Eu = Negative & u_dot = Negative) then R_theta = Zero 11. if(IAS = Medium & Eu = Negative & u_dot = Stable) then R_theta = Zero 12. if(IAS = Medium & Eu = Negative & u_dot = Positive) then R_theta = Zero 13. if(IAS = Medium & Eu = Stable & u_dot = Negative) then R_theta = Positive Small 14. if(IAS = Medium & Eu = Stable & u_dot = Stable) then R_theta = Positive Small 15. if(IAS = Medium & Eu = Stable & u_dot = Positive) then R_theta = Positive Small 16. if(IAS = Medium & Eu = Positive & u_dot = Negative) then R_theta = Zero 17. if(IAS = Medium & Eu = Positive & u_dot = Stable) then R_theta = Positive Small 18. if(IAS = Medium & Eu = Positive & u_dot = Positive) then R_theta = Positive Small 19. if(IAS = Big & Eu = Negative & u_dot = Negative) then R_theta = Zero 20. if(IAS = Big & Eu = Negative & u_dot = Stable) then R_theta = Zero 21. if(IAS = Big & Eu = Negative & u_dot = Positive) then R_theta = Positive Small 22. if(IAS = Big & Eu = Stable & u_dot = Negative) then R_theta = Positive Small 23. if(IAS = Big & Eu = Stable & u_dot = Stable) then R_theta = Positive Small 24. if(IAS = Big & Eu = Stable & u_dot = Positive) then R_theta = Positive Small 25. if(IAS = Big & Eu = Positive & u_dot = Negative) then R_theta = Postive Big 26. if(IAS = Big & Eu = Positive & u_dot = Stable) then R_theta = Postive Big 27. if(IAS = Big & Eu = Positive & u_dot = Positive) then R_theta = Postive Big 28. if(IAS = Small & Eu = Negative & u_dot = Negative) then E_theta = Negative Big 29. if(IAS = Small & Eu = Negative & u_dot = Stable) then E_theta = Negative Big 30. if(IAS = Small & Eu = Negative & u_dot = Positive) then E_theta = Negative Small 31. if(IAS = Small & Eu = Stable & u_dot = Negative) then E_theta = Negative Small 32. if(IAS = Small & Eu = Stable & u_dot = Stable) then E_theta = Zero 33. if(IAS = Small & Eu = Stable & u_dot = Positive) then E_theta = Zero 34. if(IAS = Small & Eu = Positive & u_dot = Negative) then E_theta = Negative Small 35. if(IAS = Small & Eu = Positive & u_dot = Stable) then E_theta = Positive Small 36. if(IAS = Small & Eu = Positive & u_dot = Positive) then E_theta = Positive Small 37. if(IAS = Medium & Eu = Negative & u_dot = Negative) then E_theta = Zero 38. if(IAS = Medium & Eu = Negative & u_dot = Stable) then E_theta = Zero 39. if(IAS = Medium & Eu = Negative & u_dot = Positive) then E_theta = Zero 40. if(IAS = Medium & Eu = Stable & u_dot = Negative) then E_theta = Positive Small 41. if(IAS = Medium & Eu = Stable & u_dot = Stable) then E_theta = Positive Small 42. if(IAS = Medium & Eu = Stable & u_dot = Positive) then E_theta = Positive Small 43. if(IAS = Medium & Eu = Positive & u_dot = Negative) then E_theta = Zero 44. if(IAS = Medium & Eu = Positive & u_dot = Stable) then E_theta = Positive Small 45. if(IAS = Medium & Eu = Positive & u_dot = Positive) then E_theta = Positive Small 46. if(IAS = Big & Eu = Negative & u_dot = Negative) then E_theta = Zero 47. if(IAS = Big & Eu = Negative & u_dot = Stable) then E_theta = Zero 48. if(IAS = Big & Eu = Negative & u_dot = Positive) then E_theta = Positive Small 49. if(IAS = Big & Eu = Stable & u_dot = Negative) then E_theta = Positive Small 50. if(IAS = Big & Eu = Stable & u_dot = Stable) then E_theta = Positive Small 51. if(IAS = Big & Eu = Stable & u_dot = Positive) then E_theta = Positive Small 52. if(IAS = Big & Eu = Positive & u_dot = Negative) then E_theta = Postive Big 53. if(IAS = Big & Eu = Positive & u_dot = Stable) then E_theta = Postive Big 54. if(IAS = Big & Eu = Positive & u_dot = Positive) then E_theta = Postive Big
---------------------------------------------------------------------------------------------- 81
Phụ lục E : Bộ luật tổng quát ----------------------------------------------------------------------------------------------
55. if(E_theta = Negative Big & q = Negative & q_dot = Negative) then lon = Negative 56. if(E_theta = Negative Big & q = Negative & q_dot = Stable) then lon = Negative 57. if(E_theta = Negative Big & q = Negative & q_dot = Positive) then lon = Negative 58. if(E_theta = Negative Big & q = Stable & q_dot = Negative) then lon = Negative 59. if(E_theta = Negative Big & q = Stable & q_dot = Stable) then lon = Negative 60. if(E_theta = Negative Big & q = Stable & q_dot = Positive) then lon = Negative 61. if(E_theta = Negative Big & q = Positive & q_dot = Negative) then lon = Negative 62. if(E_theta = Negative Big & q = Positive & q_dot = Stable) then lon = Negative 63. if(E_theta = Negative Big & q = Positive & q_dot = Positive) then lon = Negative 64. if(E_theta = Negative Small & q = Negative & q_dot = Negative) then lon = Negative 65. if(E_theta = Negative Small & q = Negative & q_dot = Stable) then lon = Negative 66. if(E_theta = Negative Small & q = Negative & q_dot = Positive) then lon = Negative 67. if(E_theta = Negative Small & q = Stable & q_dot = Negative) then lon = Negative 68. if(E_theta = Negative Small & q = Stable & q_dot = Stable) then lon = Negative 69. if(E_theta = Negative Small & q = Stable & q_dot = Positive) then lon = Stable 70. if(E_theta = Negative Small & q = Positive & q_dot = Negative) then lon = Negative 71. if(E_theta = Negative Small & q = Positive & q_dot = Stable) then lon = Stable 72. if(E_theta = Negative Small & q = Positive & q_dot = Positive) then lon = Stable 73. if(E_theta = Zero & q = Negative & q_dot = Negative) then lon = Stable 74. if(E_theta = Zero & q = Negative & q_dot = Stable) then lon = Stable 75. if(E_theta = Zero & q = Negative & q_dot = Positive) then lon = Stable 76. if(E_theta = Zero & q = Stable & q_dot = Negative) then lon = Stable 77. if(E_theta = Zero & q = Stable & q_dot = Stable) then lon = Stable 78. if(E_theta = Zero & q = Stable & q_dot = Positive) then lon = Stable 79. if(E_theta = Zero & q = Positive & q_dot = Negative) then lon = Stable 80. if(E_theta = Zero & q = Positive & q_dot = Stable) then lon = Stable 81. if(E_theta = Zero & q = Positive & q_dot = Positive) then lon = Stable 82. if(E_theta = Positive Small & q = Negative & q_dot = Negative) then lon = Stable 83. if(E_theta = Positive Small & q = Negative & q_dot = Stable) then lon = Stable 84. if(E_theta = Positive Small & q = Negative & q_dot = Positive) then lon = Stable 85. if(E_theta = Positive Small & q = Stable & q_dot = Negative) then lon = Stable 86. if(E_theta = Positive Small & q = Stable & q_dot = Stable) then lon = Stable 87. if(E_theta = Positive Small & q = Stable & q_dot = Positive) then lon = Positive 88. if(E_theta = Positive Small & q = Positive & q_dot = Negative) then lon = Positive 89. if(E_theta = Positive Small & q = Positive & q_dot = Stable) then lon = Positive 90. if(E_theta = Positive Small & q = Positive & q_dot = Positive) then lon = Positive 91. if(E_theta = Postive Big & q = Negative & q_dot = Negative) then lon = Stable 92. if(E_theta = Postive Big & q = Negative & q_dot = Stable) then lon = Positive 93. if(E_theta = Postive Big & q = Negative & q_dot = Positive) then lon = Positive 94. if(E_theta = Postive Big & q = Stable & q_dot = Negative) then lon = Positive 95. if(E_theta = Postive Big & q = Stable & q_dot = Stable) then lon = Positive 96. if(E_theta = Postive Big & q = Stable & q_dot = Positive) then lon = Positive 97. if(E_theta = Postive Big & q = Positive & q_dot = Negative) then lon = Positive 98. if(E_theta = Postive Big & q = Positive & q_dot = Stable) then lon = Positive 99. if(E_theta = Postive Big & q = Positive & q_dot = Positive) then lon = Positive 100. if(Ev = Negative & v_dot = Negative) then R_phi = Negative Big 101. if(Ev = Negative & v_dot = Stable) then R_phi = Negative Small 102. if(Ev = Negative & v_dot = Positive) then R_phi = Zero 103. if(Ev = Stable & v_dot = Negative) then R_phi = Negative Small 104. if(Ev = Stable & v_dot = Stable) then R_phi = Zero 105. if(Ev = Stable & v_dot = Positive) then R_phi = Positive Small 106. if(Ev = Positive & v_dot = Negative) then R_phi = Zero 107. if(Ev = Positive & v_dot = Stable) then R_phi = Positive Small 108. if(Ev = Positive & v_dot = Positive) then R_phi = Postive Big 109. if(Ev = Negative Big & v_dot = Negative) then E_phi = Negative Big 110. if(Ev = Negative Big & v_dot = Stable) then E_phi = Negative Big 111. if(Ev = Negative Big & v_dot = Positive) then E_phi = Negative Small
---------------------------------------------------------------------------------------------- 82
Phụ lục E : Bộ luật tổng quát ----------------------------------------------------------------------------------------------
112. if(Ev = Negative Small & v_dot = Negative) then E_phi = Negative Big 113. if(Ev = Negative Small & v_dot = Stable) then E_phi = Negative Small 114. if(Ev = Negative Small & v_dot = Positive) then E_phi = Zero 115. if(Ev = Zero & v_dot = Negative) then E_phi = Negative Small 116. if(Ev = Zero & v_dot = Stable) then E_phi = Zero 117. if(Ev = Zero & v_dot = Positive) then E_phi = Positive Small 118. if(Ev = Positive Small & v_dot = Negative) then E_phi = Zero 119. if(Ev = Positive Small & v_dot = Stable) then E_phi = Positive Small 120. if(Ev = Positive Small & v_dot = Positive) then E_phi = Postive Big 121. if(Ev = Postive Big & v_dot = Negative) then E_phi = Positive Small 122. if(Ev = Postive Big & v_dot = Stable) then E_phi = Postive Big 123. if(Ev = Postive Big & v_dot = Positive) then E_phi = Postive Big 124. if(E_phi = Negative Big & p = Negative & p_dot = Negative) then Lat1 = Negative 125. if(E_phi = Negative Big & p = Negative & p_dot = Stable) then Lat1 = Negative 126. if(E_phi = Negative Big & p = Negative & p_dot = Positive) then Lat1 = Negative 127. if(E_phi = Negative Big & p = Stable & p_dot = Negative) then Lat1 = Negative 128. if(E_phi = Negative Big & p = Stable & p_dot = Stable) then Lat1 = Negative 129. if(E_phi = Negative Big & p = Stable & p_dot = Positive) then Lat1 = Negative 130. if(E_phi = Negative Big & p = Positive & p_dot = Negative) then Lat1 = Negative 131. if(E_phi = Negative Big & p = Positive & p_dot = Stable) then Lat1 = Negative 132. if(E_phi = Negative Big & p = Positive & p_dot = Positive) then Lat1 = Negative 133. if(E_phi = Negative Small & p = Negative & p_dot = Negative) then Lat1 = Negative 134. if(E_phi = Negative Small & p = Negative & p_dot = Stable) then Lat1 = Negative 135. if(E_phi = Negative Small & p = Negative & p_dot = Positive) then Lat1 = Negative 136. if(E_phi = Negative Small & p = Stable & p_dot = Negative) then Lat1 = Negative 137. if(E_phi = Negative Small & p = Stable & p_dot = Stable) then Lat1 = Stable 138. if(E_phi = Negative Small & p = Stable & p_dot = Positive) then Lat1 = Stable 139. if(E_phi = Negative Small & p = Positive & p_dot = Negative) then Lat1 = Negative 140. if(E_phi = Negative Small & p = Positive & p_dot = Stable) then Lat1 = Stable 141. if(E_phi = Negative Small & p = Positive & p_dot = Positive) then Lat1 = Stable 142. if(E_phi = Zero & p = Negative & p_dot = Negative) then Lat1 = Negative 143. if(E_phi = Zero & p = Negative & p_dot = Stable) then Lat1 = Stable 144. if(E_phi = Zero & p = Negative & p_dot = Positive) then Lat1 = Stable 145. if(E_phi = Zero & p = Stable & p_dot = Negative) then Lat1 = Stable 146. if(E_phi = Zero & p = Stable & p_dot = Stable) then Lat1 = Positive 147. if(E_phi = Zero & p = Stable & p_dot = Positive) then Lat1 = Positive 148. if(E_phi = Zero & p = Positive & p_dot = Negative) then Lat1 = Stable 149. if(E_phi = Zero & p = Positive & p_dot = Stable) then Lat1 = Stable 150. if(E_phi = Zero & p = Positive & p_dot = Positive) then Lat1 = Positive 151. if(E_phi = Positive Small & p = Negative & p_dot = Negative) then Lat1 = Stable 152. if(E_phi = Positive Small & p = Negative & p_dot = Stable) then Lat1 = Stable 153. if(E_phi = Positive Small & p = Negative & p_dot = Positive) then Lat1 = Stable 154. if(E_phi = Positive Small & p = Stable & p_dot = Negative) then Lat1 = Positive 155. if(E_phi = Positive Small & p = Stable & p_dot = Stable) then Lat1 = Positive 156. if(E_phi = Positive Small & p = Stable & p_dot = Positive) then Lat1 = Positive 157. if(E_phi = Positive Small & p = Positive & p_dot = Negative) then Lat1 = Positive 158. if(E_phi = Positive Small & p = Positive & p_dot = Stable) then Lat1 = Positive 159. if(E_phi = Positive Small & p = Positive & p_dot = Positive) then Lat1 = Positive 160. if(E_phi = Postive Big & p = Negative & p_dot = Negative) then Lat1 = Stable 161. if(E_phi = Postive Big & p = Negative & p_dot = Stable) then Lat1 = Positive 162. if(E_phi = Postive Big & p = Negative & p_dot = Positive) then Lat1 = Positive 163. if(E_phi = Postive Big & p = Stable & p_dot = Negative) then Lat1 = Positive 164. if(E_phi = Postive Big & p = Stable & p_dot = Stable) then Lat1 = Positive 165. if(E_phi = Postive Big & p = Stable & p_dot = Positive) then Lat1 = Positive 166. if(E_phi = Postive Big & p = Positive & p_dot = Negative) then Lat1 = Positive 167. if(E_phi = Postive Big & p = Positive & p_dot = Stable) then Lat1 = Positive 168. if(E_phi = Postive Big & p = Positive & p_dot = Positive) then Lat1 = Positive
---------------------------------------------------------------------------------------------- 83
Phụ lục E : Bộ luật tổng quát ----------------------------------------------------------------------------------------------
169. if(IAS = Small & E_psi = Negative) then R_phi = Negative 170. if(IAS = Small & E_psi = Stable) then R_phi = Negative 171. if(IAS = Small & E_psi = Positive) then R_phi = Zero 172. if(IAS = Big & E_psi = Negative) then R_phi = Zero 173. if(IAS = Big & E_psi = Stable) then R_phi = Positive 174. if(IAS = Big & E_psi = Positive) then R_phi = Positive 175. if(E_psi = Negative Big & psi_dot = Negative) then E_phi = Negative Big 176. if(E_psi = Negative Big & psi_dot = Stable) then E_phi = Negative Medium 177. if(E_psi = Negative Big & psi_dot = Positive) then E_phi = Negative Small 178. if(E_psi = Negative Small & psi_dot = Negative) then E_phi = Negative Medium 179. if(E_psi = Negative Small & psi_dot = Stable) then E_phi = Negative Small 180. if(E_psi = Negative Small & psi_dot = Positive) then E_phi = Negative Medium 181. if(E_psi = Zero & psi_dot = Negative) then E_phi = Negative Small 182. if(E_psi = Zero & psi_dot = Stable) then E_phi = Zero 183. if(E_psi = Zero & psi_dot = Positive) then E_phi = Positive Small 184. if(E_psi = Positive Small & psi_dot = Negative) then E_phi = Zero 185. if(E_psi = Positive Small & psi_dot = Stable) then E_phi = Positive Small 186. if(E_psi = Positive Small & psi_dot = Positive) then E_phi = Positive Medium 187. if(E_psi = Postive Big & psi_dot = Negative) then E_phi = Positive Small 188. if(E_psi = Postive Big & psi_dot = Stable) then E_phi = Positive Medium 189. if(E_psi = Postive Big & psi_dot = Positive) then E_phi = Postive Big 190. if(E_phi = Negative Big & p = Negative & p_dot = Negative) then Lat2 = Negative 191. if(E_phi = Negative Big & p = Negative & p_dot = Stable) then Lat2 = Negative 192. if(E_phi = Negative Big & p = Negative & p_dot = Positive) then Lat2 = Negative 193. if(E_phi = Negative Big & p = Stable & p_dot = Negative) then Lat2 = Negative 194. if(E_phi = Negative Big & p = Stable & p_dot = Stable) then Lat2 = Negative 195. if(E_phi = Negative Big & p = Stable & p_dot = Positive) then Lat2 = Negative 196. if(E_phi = Negative Big & p = Positive & p_dot = Negative) then Lat2 = Negative 197. if(E_phi = Negative Big & p = Positive & p_dot = Stable) then Lat2 = Negative 198. if(E_phi = Negative Big & p = Positive & p_dot = Positive) then Lat2 = Negative 199. if(E_phi = Negative Medium & p = Negative & p_dot = Negative) then Lat2 = Negative 200. if(E_phi = Negative Medium & p = Negative & p_dot = Stable) then Lat2 = Negative 201. if(E_phi = Negative Medium & p = Negative & p_dot = Positive) then Lat2 = Negative 202. if(E_phi = Negative Medium & p = Stable & p_dot = Negative) then Lat2 = Negative 203. if(E_phi = Negative Medium & p = Stable & p_dot = Stable) then Lat2 = Negative 204. if(E_phi = Negative Medium & p = Stable & p_dot = Positive) then Lat2 = Negative 205. if(E_phi = Negative Medium & p = Positive & p_dot = Negative) then Lat2 = Negative 206. if(E_phi = Negative Medium & p = Positive & p_dot = Stable) then Lat2 = Negative 207. if(E_phi = Negative Medium & p = Positive & p_dot = Positive) then Lat2 = Stable 208. if(E_phi = Negative Small & p = Negative & p_dot = Negative) then Lat2 = Negative 209. if(E_phi = Negative Small & p = Negative & p_dot = Stable) then Lat2 = Negative 210. if(E_phi = Negative Small & p = Negative & p_dot = Positive) then Lat2 = Negative 211. if(E_phi = Negative Small & p = Stable & p_dot = Negative) then Lat2 = Negative 212. if(E_phi = Negative Small & p = Stable & p_dot = Stable) then Lat2 = Stable 213. if(E_phi = Negative Small & p = Stable & p_dot = Positive) then Lat2 = Stable 214. if(E_phi = Negative Small & p = Positive & p_dot = Negative) then Lat2 = Stable 215. if(E_phi = Negative Small & p = Positive & p_dot = Stable) then Lat2 = Stable 216. if(E_phi = Negative Small & p = Positive & p_dot = Positive) then Lat2 = Positive 217. if(E_phi = Zero & p = Negative & p_dot = Negative) then Lat2 = Negative 218. if(E_phi = Zero & p = Negative & p_dot = Stable) then Lat2 = Negative 219. if(E_phi = Zero & p = Negative & p_dot = Positive) then Lat2 = Stable 220. if(E_phi = Zero & p = Stable & p_dot = Negative) then Lat2 = Negative 221. if(E_phi = Zero & p = Stable & p_dot = Stable) then Lat2 = Positive 222. if(E_phi = Zero & p = Stable & p_dot = Positive) then Lat2 = Positive 223. if(E_phi = Zero & p = Positive & p_dot = Negative) then Lat2 = Stable 224. if(E_phi = Zero & p = Positive & p_dot = Stable) then Lat2 = Positive 225. if(E_phi = Zero & p = Positive & p_dot = Positive) then Lat2 = Positive
---------------------------------------------------------------------------------------------- 84
Phụ lục E : Bộ luật tổng quát ----------------------------------------------------------------------------------------------
226. if(E_phi = Positive Small & p = Negative & p_dot = Negative) then Lat2 = Negative 227. if(E_phi = Positive Small & p = Negative & p_dot = Stable) then Lat2 = Positive 228. if(E_phi = Positive Small & p = Negative & p_dot = Positive) then Lat2 = Positive 229. if(E_phi = Positive Small & p = Stable & p_dot = Negative) then Lat2 = Stable 230. if(E_phi = Positive Small & p = Stable & p_dot = Stable) then Lat2 = Positive 231. if(E_phi = Positive Small & p = Stable & p_dot = Positive) then Lat2 = Positive 232. if(E_phi = Positive Small & p = Positive & p_dot = Negative) then Lat2 = Positive 233. if(E_phi = Positive Small & p = Positive & p_dot = Stable) then Lat2 = Positive 234. if(E_phi = Positive Small & p = Positive & p_dot = Positive) then Lat2 = Positive 235. if(E_phi = Positive Medium & p = Negative & p_dot = Negative) then Lat2 = Stable 236. if(E_phi = Positive Medium & p = Negative & p_dot = Stable) then Lat2 = Stable 237. if(E_phi = Positive Medium & p = Negative & p_dot = Positive) then Lat2 = Positive 238. if(E_phi = Positive Medium & p = Stable & p_dot = Negative) then Lat2 = Positive 239. if(E_phi = Positive Medium & p = Stable & p_dot = Stable) then Lat2 = Positive 240. if(E_phi = Positive Medium & p = Stable & p_dot = Positive) then Lat2 = Positive 241. if(E_phi = Positive Medium & p = Positive & p_dot = Negative) then Lat2 = Positive 242. if(E_phi = Positive Medium & p = Positive & p_dot = Stable) then Lat2 = Positive 243. if(E_phi = Positive Medium & p = Positive & p_dot = Positive) then Lat2 = Positive 244. if(E_phi = Postive Big & p = Negative & p_dot = Negative) then Lat2 = Positive 245. if(E_phi = Postive Big & p = Negative & p_dot = Stable) then Lat2 = Positive 246. if(E_phi = Postive Big & p = Negative & p_dot = Positive) then Lat2 = Positive 247. if(E_phi = Postive Big & p = Stable & p_dot = Negative) then Lat2 = Positive 248. if(E_phi = Postive Big & p = Stable & p_dot = Stable) then Lat2 = Positive 249. if(E_phi = Postive Big & p = Stable & p_dot = Positive) then Lat2 = Positive 250. if(E_phi = Postive Big & p = Positive & p_dot = Negative) then Lat2 = Positive 251. if(E_phi = Postive Big & p = Positive & p_dot = Stable) then Lat2 = Positive 252. if(E_phi = Postive Big & p = Positive & p_dot = Positive) then Lat2 = Positive 253. if(IAS = Small & E_psi = Negative Big & r = Negative & r_dot = Negative) then Tr1 = Negative 254. if(IAS = Small & E_psi = Negative Big & r = Negative & r_dot = Stable) then Tr1 = Negative 255. if(IAS = Small & E_psi = Negative Big & r = Negative & r_dot = Positive) then Tr1 = Negative 256. if(IAS = Small & E_psi = Negative Big & r = Stable & r_dot = Negative) then Tr1 = Negative 257. if(IAS = Small & E_psi = Negative Big & r = Stable & r_dot = Stable) then Tr1 = Negative 258. if(IAS = Small & E_psi = Negative Big & r = Stable & r_dot = Positive) then Tr1 = Negative 259. if(IAS = Small & E_psi = Negative Big & r = Positive & r_dot = Negative) then Tr1 = Negative 260. if(IAS = Small & E_psi = Negative Big & r = Positive & r_dot = Stable) then Tr1 = Negative 261. if(IAS = Small & E_psi = Negative Big & r = Positive & r_dot = Positive) then Tr1 = Negative 262. if(IAS = Small & E_psi = Negative Medium & r = Negative & r_dot = Negative) then Tr1 = Negative 263. if(IAS = Small & E_psi = Negative Medium & r = Negative & r_dot = Stable) then Tr1 = Negative 264. if(IAS = Small & E_psi = Negative Medium & r = Negative & r_dot = Positive) then Tr1 = Negative 265. if(IAS = Small & E_psi = Negative Medium & r = Stable & r_dot = Negative) then Tr1 = Negative 266. if(IAS = Small & E_psi = Negative Medium & r = Stable & r_dot = Stable) then Tr1 = Negative 267. if(IAS = Small & E_psi = Negative Medium & r = Stable & r_dot = Positive) then Tr1 = Negative 268. if(IAS = Small & E_psi = Negative Medium & r = Positive & r_dot = Negative) then Tr1 = Negative 269. if(IAS = Small & E_psi = Negative Medium & r = Positive & r_dot = Stable) then Tr1 = Negative 270. if(IAS = Small & E_psi = Negative Medium & r = Positive & r_dot = Positive) then Tr1 = Negative 271. if(IAS = Small & E_psi = Negative Small & r = Negative & r_dot = Negative) then Tr1 = Negative 272. if(IAS = Small & E_psi = Negative Small & r = Negative & r_dot = Stable) then Tr1 = Negative 273. if(IAS = Small & E_psi = Negative Small & r = Negative & r_dot = Positive) then Tr1 = Negative 274. if(IAS = Small & E_psi = Negative Small & r = Stable & r_dot = Negative) then Tr1 = Negative 275. if(IAS = Small & E_psi = Negative Small & r = Stable & r_dot = Stable) then Tr1 = Negative 276. if(IAS = Small & E_psi = Negative Small & r = Stable & r_dot = Positive) then Tr1 = Negative 277. if(IAS = Small & E_psi = Negative Small & r = Positive & r_dot = Negative) then Tr1 = Negative 278. if(IAS = Small & E_psi = Negative Small & r = Positive & r_dot = Stable) then Tr1 = Negative 279. if(IAS = Small & E_psi = Negative Small & r = Positive & r_dot = Positive) then Tr1 = Negative 280. if(IAS = Small & E_psi = Zero & r = Negative & r_dot = Negative) then Tr1 = Negative 281. if(IAS = Small & E_psi = Zero & r = Negative & r_dot = Stable) then Tr1 = Negative 282. if(IAS = Small & E_psi = Zero & r = Negative & r_dot = Positive) then Tr1 = Negative
---------------------------------------------------------------------------------------------- 85
Phụ lục E : Bộ luật tổng quát ----------------------------------------------------------------------------------------------
283. if(IAS = Small & E_psi = Zero & r = Stable & r_dot = Negative) then Tr1 = Stable 284. if(IAS = Small & E_psi = Zero & r = Stable & r_dot = Stable) then Tr1 = Stable 285. if(IAS = Small & E_psi = Zero & r = Stable & r_dot = Positive) then Tr1 = Stable 286. if(IAS = Small & E_psi = Zero & r = Positive & r_dot = Negative) then Tr1 = Stable 287. if(IAS = Small & E_psi = Zero & r = Positive & r_dot = Stable) then Tr1 = Positive 288. if(IAS = Small & E_psi = Zero & r = Positive & r_dot = Positive) then Tr1 = Positive 289. if(IAS = Small & E_psi = Positive Small & r = Negative & r_dot = Negative) then Tr1 = Stable 290. if(IAS = Small & E_psi = Positive Small & r = Negative & r_dot = Stable) then Tr1 = Stable 291. if(IAS = Small & E_psi = Positive Small & r = Negative & r_dot = Positive) then Tr1 = Stable 292. if(IAS = Small & E_psi = Positive Small & r = Stable & r_dot = Negative) then Tr1 = Stable 293. if(IAS = Small & E_psi = Positive Small & r = Stable & r_dot = Stable) then Tr1 = Positive 294. if(IAS = Small & E_psi = Positive Small & r = Stable & r_dot = Positive) then Tr1 = Positive 295. if(IAS = Small & E_psi = Positive Small & r = Positive & r_dot = Negative) then Tr1 = Positive 296. if(IAS = Small & E_psi = Positive Small & r = Positive & r_dot = Stable) then Tr1 = Positive 297. if(IAS = Small & E_psi = Positive Small & r = Positive & r_dot = Positive) then Tr1 = Positive 298. if(IAS = Small & E_psi = Positive Medium & r = Negative & r_dot = Negative) then Tr1 = Positive 299. if(IAS = Small & E_psi = Positive Medium & r = Negative & r_dot = Stable) then Tr1 = Positive 300. if(IAS = Small & E_psi = Positive Medium & r = Negative & r_dot = Positive) then Tr1 = Positive 301. if(IAS = Small & E_psi = Positive Medium & r = Stable & r_dot = Negative) then Tr1 = Positive 302. if(IAS = Small & E_psi = Positive Medium & r = Stable & r_dot = Stable) then Tr1 = Positive 303. if(IAS = Small & E_psi = Positive Medium & r = Stable & r_dot = Positive) then Tr1 = Positive 304. if(IAS = Small & E_psi = Positive Medium & r = Positive & r_dot = Negative) then Tr1 = Positive 305. if(IAS = Small & E_psi = Positive Medium & r = Positive & r_dot = Stable) then Tr1 = Positive 306. if(IAS = Small & E_psi = Positive Medium & r = Positive & r_dot = Positive) then Tr1 = Positive 307. if(IAS = Small & E_psi = Postive Big & r = Negative & r_dot = Negative) then Tr1 = Stable 308. if(IAS = Small & E_psi = Postive Big & r = Negative & r_dot = Stable) then Tr1 = Stable 309. if(IAS = Small & E_psi = Postive Big & r = Negative & r_dot = Positive) then Tr1 = Stable 310. if(IAS = Small & E_psi = Postive Big & r = Stable & r_dot = Negative) then Tr1 = Stable 311. if(IAS = Small & E_psi = Postive Big & r = Stable & r_dot = Stable) then Tr1 = Positive 312. if(IAS = Small & E_psi = Postive Big & r = Stable & r_dot = Positive) then Tr1 = Positive 313. if(IAS = Small & E_psi = Postive Big & r = Positive & r_dot = Negative) then Tr1 = Positive 314. if(IAS = Small & E_psi = Postive Big & r = Positive & r_dot = Stable) then Tr1 = Positive 315. if(IAS = Small & E_psi = Postive Big & r = Positive & r_dot = Positive) then Tr1 = Positive 316. if(IAS = Big & E_psi = Negative Big & r = Negative & r_dot = Negative) then Tr1 = Negative 317. if(IAS = Big & E_psi = Negative Big & r = Negative & r_dot = Stable) then Tr1 = Negative 318. if(IAS = Big & E_psi = Negative Big & r = Negative & r_dot = Positive) then Tr1 = Negative 319. if(IAS = Big & E_psi = Negative Big & r = Stable & r_dot = Negative) then Tr1 = Negative 320. if(IAS = Big & E_psi = Negative Big & r = Stable & r_dot = Stable) then Tr1 = Stable 321. if(IAS = Big & E_psi = Negative Big & r = Stable & r_dot = Positive) then Tr1 = Stable 322. if(IAS = Big & E_psi = Negative Big & r = Positive & r_dot = Negative) then Tr1 = Stable 323. if(IAS = Big & E_psi = Negative Big & r = Positive & r_dot = Stable) then Tr1 = Stable 324. if(IAS = Big & E_psi = Negative Big & r = Positive & r_dot = Positive) then Tr1 = Positive 325. if(IAS = Big & E_psi = Negative Medium & r = Negative & r_dot = Negative) then Tr1 = Stable 326. if(IAS = Big & E_psi = Negative Medium & r = Negative & r_dot = Stable) then Tr1 = Stable 327. if(IAS = Big & E_psi = Negative Medium & r = Negative & r_dot = Positive) then Tr1 = Stable 328. if(IAS = Big & E_psi = Negative Medium & r = Stable & r_dot = Negative) then Tr1 = Negative 329. if(IAS = Big & E_psi = Negative Medium & r = Stable & r_dot = Stable) then Tr1 = Stable 330. if(IAS = Big & E_psi = Negative Medium & r = Stable & r_dot = Positive) then Tr1 = Positive 331. if(IAS = Big & E_psi = Negative Medium & r = Positive & r_dot = Negative) then Tr1 = Stable 332. if(IAS = Big & E_psi = Negative Medium & r = Positive & r_dot = Stable) then Tr1 = Stable 333. if(IAS = Big & E_psi = Negative Medium & r = Positive & r_dot = Positive) then Tr1 = Positive 334. if(IAS = Big & E_psi = Negative Small & r = Negative & r_dot = Negative) then Tr1 = Negative 335. if(IAS = Big & E_psi = Negative Small & r = Negative & r_dot = Stable) then Tr1 = Stable 336. if(IAS = Big & E_psi = Negative Small & r = Negative & r_dot = Positive) then Tr1 = Stable 337. if(IAS = Big & E_psi = Negative Small & r = Stable & r_dot = Negative) then Tr1 = Stable 338. if(IAS = Big & E_psi = Negative Small & r = Stable & r_dot = Stable) then Tr1 = Stable 339. if(IAS = Big & E_psi = Negative Small & r = Stable & r_dot = Positive) then Tr1 = Stable
---------------------------------------------------------------------------------------------- 86
Phụ lục E : Bộ luật tổng quát ----------------------------------------------------------------------------------------------
340. if(IAS = Big & E_psi = Negative Small & r = Positive & r_dot = Negative) then Tr1 = Stable 341. if(IAS = Big & E_psi = Negative Small & r = Positive & r_dot = Stable) then Tr1 = Positive 342. if(IAS = Big & E_psi = Negative Small & r = Positive & r_dot = Positive) then Tr1 = Positive 343. if(IAS = Big & E_psi = Zero & r = Negative & r_dot = Negative) then Tr1 = Stable 344. if(IAS = Big & E_psi = Zero & r = Negative & r_dot = Stable) then Tr1 = Positive 345. if(IAS = Big & E_psi = Zero & r = Negative & r_dot = Positive) then Tr1 = Stable 346. if(IAS = Big & E_psi = Zero & r = Stable & r_dot = Negative) then Tr1 = Stable 347. if(IAS = Big & E_psi = Zero & r = Stable & r_dot = Stable) then Tr1 = Stable 348. if(IAS = Big & E_psi = Zero & r = Stable & r_dot = Positive) then Tr1 = Positive 349. if(IAS = Big & E_psi = Zero & r = Positive & r_dot = Negative) then Tr1 = Stable 350. if(IAS = Big & E_psi = Zero & r = Positive & r_dot = Stable) then Tr1 = Positive 351. if(IAS = Big & E_psi = Zero & r = Positive & r_dot = Positive) then Tr1 = Positive 352. if(IAS = Big & E_psi = Positive Small & r = Negative & r_dot = Negative) then Tr1 = Stable 353. if(IAS = Big & E_psi = Positive Small & r = Negative & r_dot = Stable) then Tr1 = Positive 354. if(IAS = Big & E_psi = Positive Small & r = Negative & r_dot = Positive) then Tr1 = Positive 355. if(IAS = Big & E_psi = Positive Small & r = Stable & r_dot = Negative) then Tr1 = Positive 356. if(IAS = Big & E_psi = Positive Small & r = Stable & r_dot = Stable) then Tr1 = Positive 357. if(IAS = Big & E_psi = Positive Small & r = Stable & r_dot = Positive) then Tr1 = Positive 358. if(IAS = Big & E_psi = Positive Small & r = Positive & r_dot = Negative) then Tr1 = Positive 359. if(IAS = Big & E_psi = Positive Small & r = Positive & r_dot = Stable) then Tr1 = Positive 360. if(IAS = Big & E_psi = Positive Small & r = Positive & r_dot = Positive) then Tr1 = Positive 361. if(IAS = Big & E_psi = Positive Medium & r = Negative & r_dot = Negative) then Tr1 = Positive 362. if(IAS = Big & E_psi = Positive Medium & r = Negative & r_dot = Stable) then Tr1 = Positive 363. if(IAS = Big & E_psi = Positive Medium & r = Negative & r_dot = Positive) then Tr1 = Positive 364. if(IAS = Big & E_psi = Positive Medium & r = Stable & r_dot = Negative) then Tr1 = Positive 365. if(IAS = Big & E_psi = Positive Medium & r = Stable & r_dot = Stable) then Tr1 = Positive 366. if(IAS = Big & E_psi = Positive Medium & r = Stable & r_dot = Positive) then Tr1 = Positive 367. if(IAS = Big & E_psi = Positive Medium & r = Positive & r_dot = Negative) then Tr1 = Positive 368. if(IAS = Big & E_psi = Positive Medium & r = Positive & r_dot = Stable) then Tr1 = Positive 369. if(IAS = Big & E_psi = Positive Medium & r = Positive & r_dot = Positive) then Tr1 = Positive 370. if(IAS = Big & E_psi = Postive Big & r = Negative & r_dot = Negative) then Tr1 = Positive 371. if(IAS = Big & E_psi = Postive Big & r = Negative & r_dot = Stable) then Tr1 = Positive 372. if(IAS = Big & E_psi = Postive Big & r = Negative & r_dot = Positive) then Tr1 = Positive 373. if(IAS = Big & E_psi = Postive Big & r = Stable & r_dot = Negative) then Tr1 = Positive 374. if(IAS = Big & E_psi = Postive Big & r = Stable & r_dot = Stable) then Tr1 = Positive 375. if(IAS = Big & E_psi = Postive Big & r = Stable & r_dot = Positive) then Tr1 = Positive 376. if(IAS = Big & E_psi = Postive Big & r = Positive & r_dot = Negative) then Tr1 = Positive 377. if(IAS = Big & E_psi = Postive Big & r = Positive & r_dot = Stable) then Tr1 = Positive 378. if(IAS = Big & E_psi = Postive Big & r = Positive & r_dot = Positive) then Tr1 = Positive 379. if(IAS = Small & Ev = Negative & v_dot = Negative) then Tr2 = Negative 380. if(IAS = Small & Ev = Negative & v_dot = Stable) then Tr2 = Negative 381. if(IAS = Small & Ev = Negative & v_dot = Positive) then Tr2 = Negative 382. if(IAS = Small & Ev = Stable & v_dot = Negative) then Tr2 = Negative 383. if(IAS = Small & Ev = Stable & v_dot = Stable) then Tr2 = Stable 384. if(IAS = Small & Ev = Stable & v_dot = Positive) then Tr2 = Stable 385. if(IAS = Small & Ev = Positive & v_dot = Negative) then Tr2 = Stable 386. if(IAS = Small & Ev = Positive & v_dot = Stable) then Tr2 = Stable 387. if(IAS = Small & Ev = Positive & v_dot = Positive) then Tr2 = Positive 388. if(IAS = Big & Ev = Negative & v_dot = Negative) then Tr2 = Stable 389. if(IAS = Big & Ev = Negative & v_dot = Stable) then Tr2 = Stable 390. if(IAS = Big & Ev = Negative & v_dot = Positive) then Tr2 = Positive 391. if(IAS = Big & Ev = Stable & v_dot = Negative) then Tr2 = Stable 392. if(IAS = Big & Ev = Stable & v_dot = Stable) then Tr2 = Positive 393. if(IAS = Big & Ev = Stable & v_dot = Positive) then Tr2 = Positive 394. if(IAS = Big & Ev = Positive & v_dot = Negative) then Tr2 = Positive 395. if(IAS = Big & Ev = Positive & v_dot = Stable) then Tr2 = Positive 396. if(IAS = Big & Ev = Positive & v_dot = Positive) then Tr2 = Positive
---------------------------------------------------------------------------------------------- 87
Phụ lục E : Bộ luật tổng quát ----------------------------------------------------------------------------------------------
397. if(IAS = Small & Eh = Negative & h_dot = Negative) then Col = Negative 398. if(IAS = Small & Eh = Negative & h_dot = Stable) then Col = Negative 399. if(IAS = Small & Eh = Negative & h_dot = Positive) then Col = Negative 400. if(IAS = Small & Eh = Stable & h_dot = Negative) then Col = Stable 401. if(IAS = Small & Eh = Stable & h_dot = Stable) then Col = Stable 402. if(IAS = Small & Eh = Stable & h_dot = Positive) then Col = Stable 403. if(IAS = Small & Eh = Positive & h_dot = Negative) then Col = Stable 404. if(IAS = Small & Eh = Positive & h_dot = Stable) then Col = Stable 405. if(IAS = Small & Eh = Positive & h_dot = Positive) then Col = Positive 406. if(IAS = Big & Eh = Negative & h_dot = Negative) then Col = Negative 407. if(IAS = Big & Eh = Negative & h_dot = Stable) then Col = Stable 408. if(IAS = Big & Eh = Negative & h_dot = Positive) then Col = Stable 409. if(IAS = Big & Eh = Stable & h_dot = Negative) then Col = Stable 410. if(IAS = Big & Eh = Stable & h_dot = Stable) then Col = Stable 411. if(IAS = Big & Eh = Stable & h_dot = Positive) then Col = Positive 412. if(IAS = Big & Eh = Positive & h_dot = Negative) then Col = Positive 413. if(IAS = Big & Eh = Positive & h_dot = Stable) then Col = Positive 414. if(IAS = Big & Eh = Positive & h_dot = Positive) then Col = Positive
---------------------------------------------------------------------------------------------- 88
Phụ lục F : Một số đoạn code chính trong chương trình ----------------------------------------------------------------------------------------------
float kc1 = (float)fabs(m_Min0 - m_Min1); float kc2 = value - m_Min0; return((float)fabs(kc2 / kc1));
float kc1 = (float)fabs(m_Max0 - m_Max1); float kc2 = value - m_Max0; return((float)fabs(kc2 / kc1));
if (value < m_Min0 || value > m_Max0) return(0.0f); if (value >= m_Min1 && value <= m_Max1) return(1.0f); if (value >= m_Min0 && value <= m_Min1) { } if (value >= m_Max1 && value <= m_Max0) { } return(0);
float v1 = rule1.Tinh_gia_tri_01(value1); float v2 = rule2.Tinh_gia_tri_01(value2); return (__min(v1,v2));
F. Một số đoạn code chính trong chương trình : //tính giá trị của value trong miền [0, 1] // Min1-------Max1 // / \ // / \ // / \ // Min0-----------------Max0 // in : giá trị thực của biến // out : giá trị mờ //----------------------------------------- float CFuzzyRule::Tinh_gia_tri_01(float value) { } //--------------------------- //Phép AND 2 luật //in : 2 luật và giá trị thực của mỗi biến //out : giá trị mờ min của 2 luật. //--------------------------- float FuzzyAND(CFuzzyRule &rule1, float value1, CFuzzyRule &rule2, float value2) { }
---------------------------------------------------------------------------------------------- 89
Phụ lục F : Một số đoạn code chính trong chương trình ----------------------------------------------------------------------------------------------
kc = 0.1f;
kc = 0.5f;
x[nx++] = f;
y1[i] = 0; y2[i] = 0;
y1[index] = 1;
y1[index] = 0;
if(x[index] >= b) if(x[index] < a) if(a<= x[index] && x[index] < b && a != b) y1[index] = (x[index] - a)/(b-a);
//--------------------------- //Tìm điểm trung tâm (centroid) của khối mờ //out : điểm centroid của khối mờ //--------------------------- float CFuzzyRule::Diem_giua() {
float *x = new float [200];
int nx =0;
int i,index;
float f, fMax;
fMax = float((fabs(m_Min0) > fabs(m_Max0)) ? fabs(m_Min0) :fabs(m_Max0));
float kc =0.f;
if(fMax <= 1)
kc = 0.05f;
else if(fMax <= 2)
else
for(f = -fMax; f <= fMax; f += kc)
//
float *y1,*y2,*y;
y1 = new float[nx];
y2 = new float[nx];
y = new float[nx];
for(i=0;i if(x[index] <= c) ----------------------------------------------------------------------------------------------
90 Phụ lục F : Một số đoạn code chính trong chương trình
---------------------------------------------------------------------------------------------- y2[index] = 1; y2[index] = 0; if(x[index] > d)
if(c < x[index] && x[index] <= d && c != d)
y2[index] = (d - x[index])/(d-c); y[i] = ((y1[i] > y2[i]) ? y2[i] : y1[i]);
sum += y[i]; return 0.0f; total += y[i]*x[i]; }
//min(y1,y2)
float sum = 0.0f;
for(i=0;i float x1 = value01*(m_Min1 - m_Min0) + m_Min0;
float x2 = value01*(m_Max1 - m_Max0) + m_Max0;
float top = float(fabs(x2 - x1));
float bottom = m_Max0 - m_Min0;
return value01*(top + bottom)/2; }
//---------------------------
//Tính diện tích hoặc vùng (area) của khối mờ ứng với giá trị mờ value01
// in : giá trị mờ value01
// out : area của khối mờ ứng với giá trị value01
//---------------------------
float CFuzzyRule::Tinh_dien_tich(float value01)
{
} ----------------------------------------------------------------------------------------------
91 Phụ lục F : Một số đoạn code chính trong chương trình
---------------------------------------------------------------------------------------------- CFuzzyRule &r = m_RIAS[i];
str.Format("\nIAS [\"%s\"]: %f", r.Lay_Name(),r.Tinh_gia_tri_01(IAS));
text += str; CFuzzyRule &r = m_REu[i];
str.Format("\nEu [\"%s\"]: %f", r.Lay_Name(),r.Tinh_gia_tri_01(Eu));
text += str; CFuzzyRule &r = m_Ru_dot[i];
str.Format("\nu_dot [\"%s\"]: %f",r.Lay_Name(),r.Tinh_gia_tri_01(u_dot));
text += str ; //---------------------------
//Hàm ra quyết định của khối Longitudinal Hold khi biết dữ liệu vào
// in : các biến đầu vào
//out : kết quả, MYOUT gồm {CString text, float value}
//---------------------------
MYOUT CBlockLongHol::Ra_quyet_dinh(float IAS, float Eu, float u_dot,CString &text)
{ MYOUT out;
int i;
float value[5];//ung voi 5 gia tri ra
int x,y,z;
CString str;
//IAS
for(i=0;i <3; i++)
{
}
text += "\n";
//Eu
for(i=0;i <3; i++)
{
}
text += "\n";
//u_dot
for(i=0;i <3; i++)
{
}
text += "\n\n";
//AND
int luatthu = 0;
for (x=0; x < 3; x++)
{ for (y=0; y < 3; y++)
{ for(z = 0;z < 3;z ++)
{ if(m_luatCoBan[luatthu] != -1)
{ ----------------------------------------------------------------------------------------------
92 Phụ lục F : Một số đoạn code chính trong chương trình
---------------------------------------------------------------------------------------------- m_arrMatrix[x][y][z] = FuzzyAND(m_RIAS[x], if(m_arrMatrix[x][y][z] > 0.0f)
{ m_luatSuDung[luatthu] = 1;
CString tmp;
i = luatthu + 27;
tmp = Lay_chuoi_luat(i);
text += tmp;
tmp.Format(" => text += tmp; } } value[i] = 0.0f; addtoindex = 0; addtoindex = 1; addtoindex = 2; addtoindex = 3; }
//tinh gia tri out
for (i=0; i < 5; i++)
{
}
//tinh toan kha nang
luatthu =0;
for (x=0; x < 3; x++)
{ for (y=0; y < 3; y++)
{ for(z=0; z < 3; z ++)
{ if(m_luatCoBan[luatthu] != -1)
{ int addtoindex = 0;
if (!strcmp(m_strRule[x][y][z], name.NB))
else if (!strcmp(m_strRule[x][y][z], name.NS))
else if (!strcmp(m_strRule[x][y][z], name.Z))
else if (!strcmp(m_strRule[x][y][z], name.PS))
else if (!strcmp(m_strRule[x][y][z], name.PB)) addtoindex = 4; IAS, m_REu[y], Eu,m_Ru_dot[z],u_dot);
%f\n",m_arrMatrix[x][y][z]);
}
luatthu ++;
} if(value[addtoindex] < m_arrMatrix[x][y][z]) value[addtoindex] = m_arrMatrix[x][y][z]; ----------------------------------------------------------------------------------------------
93 Phụ lục F : Một số đoạn code chính trong chương trình
---------------------------------------------------------------------------------------------- }
luatthu ++; } } maxindex = i;
maxvalue = value[i]; if (value[i] > maxvalue)
{
} area = m_RE_theta[i].Tinh_dien_tich(value[i]);
centroid = m_RE_theta[i].Diem_giua();
sum += area*centroid;
sum_of_areas += area; if(value[i] > 0.0f)
{
} out.value = 100;//ko co gia tri out.value = sum/sum_of_areas; }
//chon kq out
int maxindex = 0;
float maxvalue = 0.0f;
for (i=0; i < 5; i++)
{
}
out.Cai_dat(m_RE_theta[maxindex].Lay_Name(),0);
//KL
float sum =0;
float sum_of_areas =0;
float area, centroid;
for(i =0;i < 5;i++)
{
}
if( sum_of_areas == 0)
{
}
else
{
}
//
return out; } ----------------------------------------------------------------------------------------------
94 Phụ lục F : Một số đoạn code chính trong chương trình
---------------------------------------------------------------------------------------------- luat_thu++;
continue; egi = eu;
goto LABEL1; if(lt == luat_thu)
{
}
lt++; for(u_dot =0; u_dot < 3;u_dot ++)
{
} for(eu =0; eu < 3; eu ++)
{
} CMyStr* byte4 = new CMyStr(s.Lay_4byte(chuoi,i));
float e = byte4->Decimal();
delete byte4;
if(e == 0)
{
}
e *= g;
//tim luat thu may
int ias,eu,u_dot,lt=0,egi;
for(ias = 0; ias < 3;ias ++)
{
} float *fValue = new float[27];
int n=0;
CMyMath math;
int luat_thu=0;
int len = strlen(chuoi);
int i;
CMyStr s;
for(i=0; i //---------------------------
//Hàm tính giá trị sai số E của chuỗi trong khối Longitudinal Hold
//in : chuỗi cần tính, tỉ lệ co giãn g
//out : giá trị E của khối Longitudinal Hold
//---------------------------
float CBlockLongHol::Tinh_E(char* chuoi, float g)
{
LABEL1: CFuzzyRule &r = m_REu[egi];
e = r.Tinh_gia_tri_vat_ly(e);
fValue[n] = e;
n++; ----------------------------------------------------------------------------------------------
95 Phụ lục F : Một số đoạn code chính trong chương trình
---------------------------------------------------------------------------------------------- luat_thu++; delete []fValue;
return 100;//không thể tính E }
if(!n)
{
}
float t = math.Trung_binh(fValue,n);
delete []fValue;
return t; CBlock * bl = new CBlock();
assert(bl);
float f = bl->Tinh_E(chuoi);
delete bl;
return float(fabs(f - etb)); }
//---------------------------
//Hàm mục tiêu của Thuật giải di truyền
//in : chuỗi tìm kiếm và giá trị etb của các lần thử nghiệm
//out : giá trị sai số giữa giá trị etb và giá trị E của chuỗi tìm kiếm
//---------------------------
float CGeneticAlg::F(char *chuoi,float etb)
{
}
//---------------------------
//Hàm chính của Thuật giải di truyền
//in : chuoi_vao : các chuỗi bit của các lần thử nghiệm trước
out : chuỗi kq
gen, pcross, pmu, popsize : số vòng lặp, xác suất lai, đột biến và kích thước quần thể.
e_tb : giá trị etb của các lần thử nghiệm
limit : ngưỡng cố định (có thể không dùng)
//---------------------------
float CGeneticAlg::GEN(char **chuoi_vao,char *out,int gen,float pcross, float pmu, int
popsize, float e_tb,float limit)
{ float sum;
int lchrom, i, j,N;
lchrom = 4*414+1;
N = lchrom;
sum = 1;
float ty = float(100);
Initpop(m_oldpop,popsize,N,chuoi_vao);
for(j=0;j < gen; j++)
{ for(i = 0;i ----------------------------------------------------------------------------------------------
96 Phụ lục F : Một số đoạn code chính trong chương trình
---------------------------------------------------------------------------------------------- { m_obj[i] = F(m_oldpop[i],e_tb);
//lay chuoi co e xap xi bang e_tb
float temp = m_obj[i];
if(ty > temp)
{
} ty = temp;
strcpy(out,m_oldpop[i]); }
sum = Scalepop(m_obj,m_fit,popsize);
Generate(m_oldpop,m_newpop,popsize,lchrom,m_fit,sum,pcross,pmu);
Reproduction(m_oldpop,m_newpop,popsize,N); }
return ty; } ----------------------------------------------------------------------------------------------
97