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

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