BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC KINH TẾ TP.HCM
CÔNG TRÌNH DỰ THI
GIẢI THƯỞNG NGHIÊN CỨU KHOA HỌC SINH VIÊN
“NHÀ KINH TẾ TRẺ – NĂM 2012”
TÊN CÔNG TRÌNH:
ỨNG DỤNG THUẬT TOÁN DI TRUYỀN
XÁC ĐỊNH QUY TẮC GIAO DỊCH TỐI ƯU TRÊN
TRỊ TRƯỜNG CHỨNG KHOÁN VIỆT NAM
THUỘC NHÓM NGÀNH: KHOA HỌC KINH TẾ
MỤC LỤC
MỞ ĐẦU 1
CHƯƠNG 1: GIỚI THIỆU 2
1.1 Giới thiệu về thuật toán di truyền và ứng dụng 2
1.2 Thuật toán di truyền trong lĩnh vực tài chính 4
1.3 Phương pháp luận của đề tài 7
CHƯƠNG 2: THUẬT TOÁN DI TRUYỀN 9
2.1 Nguyên lý cơ bản về thuật toán di truyền 9
2.1.1 Tổng quan về nguyên lý của thuật toán di truyền 10
2.1.2 Thiết kế thuật toán 12
2.1.2.1 Mã hóa dữ liệu 12
2.1.2.2 Hàm thích nghi 14
2.1.3 Các phép toán của thuật toán di truyền 14
2.1.3.1 Tái sinh (Reproduction) 15
2.1.3.2 Lai ghép (Crossover) 16
2.1.3.3 Đột biến (Mutation) 17
2.1.4 Cấu trúc thuật toán tổng quát 18
2.2 Định lý cơ bản về thuật toán di truyền 20
2.2.1 Định lý cơ bản của Holland 20
2.2.2 Định lý phác đồ chuẩn – Exact Schema Theorem 23
CHƯƠNG 3: PHƯƠNG PHÁP VÀ DỮ LIỆU NGHIÊN CỨU 25
3.1 Định nghĩa quy tắc giao dịch 25
3.2 Quy tắc giao dịch với thuật toán di truyền 26
3.3 Các thử nghiệm và dữ liệu nghiên cứu 30
CHƯƠNG 4: KẾT QUẢ NGHIÊN CỨU & NHẬN ĐỊNH 35
4.1 Kết quả nghiên cứu 35
4.1.1 Kết quả với chỉ số VN-index 35
4.1.2 Kết quả nghiên cứu với các cổ phiếu 41
4.2 Một số nhận định về kết quả nghiên cứu 49
KẾT LUẬN 56
PHỤ LỤC 1: CODE VBA 57
PHỤ LỤC 2: ƯỚC LƯỢNG MÔ HÌNH GARCH 61
PHỤ LỤC 3: RANDOM WALK 68
TÀI LIỆU THAM KHẢO 74
DANH MỤC BẢNG
Bảng 2.1: Các thuật ngữ của thuật toán di truyền 9
Bảng 3.1 Phương pháp tính toán một số chỉ số PTKT 26
Bảng 3.2 Cấu trúc tổng quát của quy tắc giao dịch 29
Bảng 3.3 Thời gian thử nghiệm GAs với VN-index 30
Bảng 3.4 Quy tắc giao dịch với GARCH 32
Bảng 3.5 Các giai đoạn thử nghiệm với các cổ phiếu cụ thể 33
Bảng 3.6 Danh sách các cổ phiếu thử nghiệm 33
Bảng 4.1 So sánh giá trị t-prob giữa các mô hình tự hồi quy AR(p) 36
Bảng 4.2 So sánh giá trị t-prob giữa các mô trung bình trượt MA(q) 37
Bảng 4.3 Tổng hợp kết quả nghiên cứu với chỉ số VN-index 39
Bảng 4.4 Kết quả – training 4/1/2010-31/12/2010, test 04/01/2011-28/02/2011 41
Bảng 4.5 Kết quả – training 01/04/2010-31/03/2011, test 01/04/2011-31/05/2011 43
Bảng 4.6 Kết quả – training 01/07/2010-30/06/2011, test 01/07/2011-31/08/2011 45
Bảng 4.7 Kết quả – training 01/10/2010-30/09/2011, test 03/10/2011-30/11/2011 47
Bảng 4.8 Kết quả tối ưu hóa trong mẫu (training) của các cổ phiếu 49
Bảng 4.9 Tổng hợp tỷ suất sinh lời của cổ phiếu qua các giai đoạn 50
Bảng 4.10 Kết quả thuật toán di truyền trong trường hợp cổ phiếu giảm 52
Bảng 4.11 Trường hợp GAs không hiệu quả 54
DANH MỤC HÌNH
Hình 2.1: Sơ đồ mã hóa dữ liệu thuật toán di truyền 12
Hình 2.2: Lai ghép hai nhiễm sắc thể 1 điểm bắt chéo 17
Hình 2.3: Sơ đồ cấu trúc thuật toán di truyền tổng quát 19
Hình 4.1 Kết quả kiệm định nghiệm đơn vị chuỗi TSSL 36
Hình 4.2 Kết quả ước lượng mô hình AR(2) 37
Hình 4.3 Kiểm định ảnh hưởng ARCH(7) 38
Hình 4.4 Kết quả ước lượng mô hình GARCH(1,1) 38
Hình 4.5 Thống kê TSSL của các chuỗi ngẫu nhiên 40
Hình 4.6 Tỷ suất sinh lợi trung bình của GAs và cổ phiếu qua các giai đoạn 51
DANH MỤC TỪ VIẾT TẮT
TSSL Tỷ suất sinh lợi
PTKT Phân tích kỹ thuật
TTCK Thị trường chứng khoán
GAs Genetic Algrithms – Thuật toán di truyền
NNs Neural Networks – Mô hình mạng thần kinh
FL Fuzzy Logic – Hệ suy luận mờ
SC Soft Computing
AI Artificial intelligence
1
MỞ ĐẦU
Cùng với sự phát triển của thị trường chứng khoán (TTCK), các phương pháp phân tích
đầu tư chứng khoán cũng được hình thành và phát triển như một nhu cầu không thể thiếu.
Phân tích kỹ thuật (PTKT) là phương pháp phổ biến được áp dụng ở hầu hết các thị
trường chứng khoán. Những nghiên cứu của Brock, Lakonishok và LeBaron (1992),
nghiên cứu của Bessembinder và Chan (1995) [1] đã chỉ ra rằng phân tích kỹ thuật có
những hạn chế nhất định và không phải lúc nào cũng tỏ ra hiệu quả.
Sự bùng nổ của cuộc cách mạng công nghệ thông tin cuối thế kỉ 20 có thể coi là một
bước ngoặt lớn trong lịch sử loài người. Với sự ra đời và phát triển của máy tính, các
công cụ dự báo và ra quyết định cũng trở nên đa dạng và chính xác hơn, các mô hình dự
báo không chỉ dừng lại ở những mô hình cổ điển mà ngày càng được phát triển với nhiều
thuật toán phức tạp và năng động hơn. Trong thời gian gần đây, các mô hình trí tuệ nhân
tạo - artificial intelligence (soft computing) bao gồm: mô hình mạng thần kinh (Neural
Networks – NNs), hệ suy luận mờ (Fuzzy Logic – FL) và thuật toán di truyền (Genetic
Algrithms – GAs) đã thể hiện được sự vượt trội so với những mô hình dự báo và ra quyết
định truyền thống.
Thuật toán di truyền GAs là thuật toán mô phỏng quy luật tiến hóa tự nhiên, được ứng
dụng trong các bài toán tìm kiếm và tối ưu hóa. GAs đã được nhiều nhà nghiên cứu ứng
dụng thành công trong lĩnh vự tài chính. Tuy nhiên, ở Việt Nam, việc ứng dụng thuật
toán di truyền trong việc ra quyết định còn chưa phổ biến. Bài nghiên cứu sẽ đưa ra cái
nhìn tổng quan về thuật toán di truyền và thử nghiệm một trong những ứng dụng nổi bật
nhất của thuật toán di truyền trong tài chính đó là xác định các quy tắc đầu tư tối ưu, với
các biến đầu vào là các chỉ số PTKT đã được chuẩn hóa, với mục tiêu phát triển một công
cụ đầu tư mới trền nền tảng PTKT để tối đa hóa tỷ suất sinh lợi trên TTCK.
2
CHƯƠNG 1: GIỚI THIỆU
1.1 Giới thiệu về thuật toán di truyền và ứng dụng
Thuật toán di truyền là thuật toán tối ưu ngẫu nhiên dựa trên cơ chế chọn lọc tự nhiên và
tiến hóa di truyền. Nguyên lý cơ bản của thuật toán di truyền đã được Holland giới thiệu
vào năm 1962. Cơ sở toán học đã được phát triển từ cuối những năm 1960 và được giới
thiệu trong cuốn sách đầu tiên của Holland: Adaptive in Natural and Artificial Systems.
Thuật toán di truyền được ứng dụng đầu tiên trong hai lĩnh vực chính: tối ưu hóa và học
tập của máy (learning machine). Trong lĩnh vực tối ưu hóa, thuật toán di truyền được phát
triển nhanh chóng và ứng dụng trong nhiều lĩnh vực khác nhau như tối ưu hàm, xử lý
ảnh, bài toán hành trình người bán hàng, nhận dạng hệ thống và điều khiển.
Thuật toán di truyền cũng như các thuật toán tiến hóa nói chung, hình thành dựa trên
quan điểm cho rằng, quá trình tiến hóa 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ể 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 hóa 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 vì
tính kế thừa và đấu tranh sinh tồn.
Thuật giải di truyền cung cấp một cách tiếp cận cho việc tối ưu hóa dựa vào mô phỏng sự
tiến hóa. Các giả thuyết thường được mô tả bằng các chuỗi bit, việc hiểu các chuỗi bit
này tùy thuộc vào ứng dụng, ý tưởng các giả thuyết cũng có thể được mô tả bằng các biểu
thức kí hiệu hoặc các chương trình máy tính. Tìm kiếm giả thuyết thích hợp bắt đầu với
một quần thể, hay một tập hợp có chọn lọc ban đầu của các giả thuyết. Các cá thể của
quần thể hiện tại khởi nguồn cho quần thể thế hệ kế tiếp bằng các hoạt động lai ghép và
đột biến ngẫu nhiên – được lấy mẫu sau các quá trình tiến hóa sinh học. Ở mỗi bước, các
giả thuyết trong quần thể hiện tại được ước lượng liên hệ với đại lượng thích nghi được
cho, với các giả thuyết phù hợp nhất được chọn theo xác suất là các hạt giống cho việc
sản sinh thế hệ kế tiếp. Thuật giải di truyền đã được ứng dụng một cách thành công cho
nhiều tác vụ thuộc nhiều lĩnh vực khác nhau.
3
Ứng dụng của thuật toán di truyền
Ưu điểm vượt trội của thuật toán di truyền là nó dễ dàng thích nghi và xử lí với bất kì
rằng buộc nào của hàm mục tiêu. Đặc biệt với các bài toán tối ưu trong không gian tìm
kiếm lớn và không có những phân tích toán học có sẵn, ngay cả trường hợp mà phương
pháp truyền thống không thể tiếp cận được, GAs vẫn có thể giải quyết và đưa ra phương
án tối ưu. GAs được ứng dụng trong nhiều lĩnh vực khác nhau, bao gồm cả khoa học, kỹ
thuật, kinh tế, xã hội.
Lĩnh vực tối ưu hóa: GAs được sử dụng trong hàng loạt các vấn đề tối ưu, bao gồm
cả tối ưu hóa số học và tối ưu hóa tổ hợp, ví dụ bài toán hành trình của người bán hàng
(TSP), thiết kế mạch Louis 1993, lập kế hoạch công việc của cửa hàng Goldstein 1991 và
tối ưu hóa chất lượng âm thanh & hình ảnh.
Lập trình tự động hóa: GAs được sử dụng để phát triển các chương trình máy tính
thực hiện các nhiệm vụ chuyên biệt và thiết kế một số cấu trúc tính toán khác ví dụ như
thiết kế mạng lưới tính toán và phân loại tự động.
Học tập của máy và robot: GAs có nhiều ứng dụng trong lĩnh vực “học tập của
máy” để phân loại, dự báo và dự báo cấu trúc của chuỗi Protein. GAs cũng được sử dụng
để thiết kế mạng thần kinh NNs, phát triển các quy tắc phân loại hệ thống và logo sản
xuất, thiết kế quy trình điều khiển robot.
Mô hình hệ thống miễn dịch: GAs được sử dụng để mô hình hóa các khía cạnh khác
nhau của hệ thống miễn dịch tự nhiên, bao gồm cả đột biến soma trong suốt vòng đời của
cá thể và các nhóm gen đa trong quá trình tiến hóa.
Mô hình sinh thái: GAs được sử dụng để mô hình hóa các hiện tượng sinh thái như
các cuộc đua tranh vũ khí sinh học, vật chủ - kí sinh trùng đồng tiến hóa, cộng sinh và
nguồn tài nguyên trong hệ sinh thái.
Mô hình của các hệ thống xã hội: GAs đã được sử dụng để nghiên cứu các khía
cạnh tiến hóa của các hệ thống xã hội, chẳng hạn như sự tiến hóa của hợp tác [Chughtai
1995], sự phát triển của truyền đạt thông tin, và hành vi theo lối mòn ở loài kiến.
4
1.2 Thuật toán di truyền trong lĩnh vực tài chính
Phương pháp trí tuệ nhân tạo nói chung và thuật toán di truyền nói riêng ngày càng thể
hiện sự vượt trội so với các phương pháp truyền thống. Với mạng thần kinh (NNs) được
sử dụng để dự báo, hệ suy luận mờ (FL) để đối phó với những bất thường và không chắc
chắn, GAs cho tìm kiếm và tối ưu, lĩnh vực trí tuệ nhân tạo hứa hẹn sẽ là hướng đi định
lượng mới, sẽ được ứng dụng rộng rãi trong tương lai. GAs được ứng dụng thành công
trong nhiều khía cạnh khác nhau trong lĩnh vực tài chính như: dự báo, xác định các quy
tắc giao dịch, định giá quyền chọn và xây dựng danh mục đầu tư.
Dự báo
Aiken và Bsat (1999) sử dụng FFNN (Feed-forward Neural Network: quá trình dữ liệu
được đưa từ neural đầu vào, qua lớp neural ẩn đến neural đầu ra để trả ra kết quả dự báo
ban đầu được gọi bằng thuật ngữ Feedforward – tức dữ liệu được đẩy lần lượt từ đầu vào
đến đầu ra) với dữ liệu đã được training bằng thuật toán di truyền (GAs) để dự báo lãi
suất kì hạn 3 tháng của trái phiếu kho bạc Mỹ (U.S Treasury Bill). Họ kết luận NN kết
hợp với GAs có thể dự báo một cách chính xác lãi suất này.
Tansel và cộng sự (1999) đã so sánh mô hình hồi quy truyền thống với NN, GAs và các
mô hình dự báo chuỗi thời gian trên các tiêu chí: mức độ chính xác của mô hình, sự tiện
dụng và thời gian tính toán. Kết quả nghiên cứu cho thấy, các mô hình hồi quy tuyến tính
truyền thống là mô hình ước lượng tốt nhất. GAs cũng có thể cho kết quả ước lượng
chính xác nếu dữ liệu được giới hạn trong một miền nhất định và được ước lượng một
cách gần đúng. Nhưng NN lại cho kết quả ước lượng kém chính xác nhất. Mặc dù vậy, họ
nhấn mạnh rằng, mô hình phi tuyến được xây dựng kết hợp giữa GAs và NN có thể là
một công cụ dự báo mạnh, phù hợp với tiêu chuẩn ước lượng tổng quát.
Kim và Han (2000) sử dụng phương pháp mạng thần kinh NN với sự hỗ trợ của thuật
toán di truyền để dự báo chỉ số giá chứng khoán. Trong trường hợp này, GAs được sử
dụng để hạn chế sự phức tạp của những khoảng thời gian đặc biệt bằng cách tối ưu hóa sự
5
liên kết giữa các lớp. Họ kết luận rằng phương pháp sử dụng NN kết hợp với GAs cho
kết quả chính xác hơn các phương pháp thông thường.
Tiếp theo, nghiên cứu của Kuo và cộng sự (1996) và nghiên cứu của Kuo và cộng sự
(2001) phát triển FNN (GFNN) trên nền tảng GAs, để phát triển một cách có hệ thống
các kiến thức về hệ suy luận mờ, một hệ thống có thể định lượng ảnh hưởng của các nhân
tố định tính (ví dụ nhân tố chính trị) lên thị trường chứng khoán. Những tác động này
hoàn toàn đồng nhất với mô hình với các chỉ số phân tích kỹ thuật bằng phương pháp
NN. Sử dụng tín hiêu mua - bán thông qua cách tiếp cận trí tuệ nhân tạo trên TTCK Đài
Loan, họ kết luận rằng NNs sử dụng cả các nhân tố định lượng (phân tích kỹ thuật) và
nhân tố định tính hiệu quả hơn chỉ sử dụng các nhân tố định lượng.
Xác định các quy tắc giao dịch
Sự tính toán thời gian phù hợp để đưa ra quyết định (timing) là một trong những yếu tố
quan trọng nhất mang lại hiệu quả trong quyết định đầu tư. GAs là một công cụ mạnh để
xác định các quy tắc giao dịch (định nghĩa về quy tắc giao dịch sẽ được trình bày cụ thể ở
phần sau của bài nghiên cứu), có thể mang lại những quyết định đầu tư hợp lý, đây là ưu
điểm nổi trội của GAs so với NNs và FL.
Frick và cộng sự (1996) đã nghiên cứu để tìm ra một quy tắc giao dịch mua và bán chứng
khoán dựa trên các mẫu hình của đồ thị giá. Phương pháp của họ tập trung vào sự biến
đổi của các mẫu hình, các tín hiệu mua, bán được phát ra khi có sự đảo ngược mẫu hình.
Bằng cách mã hóa nhị phân các đồ thị này, họ đã sử dụng thuật toán di truyền để phân
loại các mẫu hình khác nhau. Với benchmark là TSSL trung bình của cổ phiếu, họ thống
kê rằng, phương pháp này có thể mang lại TSSL vượt trội trên sàn chứng khoán Fankfurt
(FSE).
Kassiecieh và cộng sự (1997) đã kiểm tra tính hiệu quả của GAs khi sử dụng để tạo một
quy tắc giao dịch market-timing có hệ thống. Mục tiêu của họ là phát triển một chiến
lược nắm giữ cổ phiếu theo tháng, quyết định xem nhà đầu tư nên nắm giữ hoàn toàn một
6
danh mục lớn gồm nhiều cổ phiếu, S&P 500 hay đầu tư phi rủi ro vào trái phiếu kho bạc
Mỹ. Cũng bằng phương pháp đó, Bauer (1994), với dữ liệu đầu vào là 10 chỉ số kinh tế
khác nhau, đã sử dụng GAs để tìm ra 3 chỉ số tốt nhất có thể được dùng để ra quyết định.
Họ khẳng định rằng, phương pháp này cho một kết quả TSSL rất cao.
Tiếp theo những nghiên cứu trên, Kassiecieh và cộng sự (1997) đã sử dụng GAs với dữ
liệu chuỗi thời gian của nhiều biến kinh tế khác nhau để chọn ra những biến số chính làm
input cho mô hình NN với 2, 3, 5 và 10 lớp ẩn.
Allen và Karjalainen sử dụng GAs để khai thác dữ liệu từ các chỉ số PTKT cho chỉ số
S&P 500, với dữ liệu được lấy theo ngày từ năm 1928 – 1995. Mặc dù, kết quả nghiên
cứu cho thấy rằng, sau chi phí giao dịch, GAs không mang lại TSSL cao hơn so với
phương pháp nắm giữ cổ phiếu trong toàn bộ thời gian tương đương nhưng nó có thể
nhận ra những sự đảo chiều xu hướng trong những giai đoạn ổn định, khối lượng giao
dịch ở mức thấp.
Baba và các cộng sự (2000) đã xây dựng hệ thống “hỗ trợ quyết định thông minh” –
Intelligent Decision Support System (DSS) để phân tích chỉ số giá chứng khoán Tokyo
(Tokyo Stock Exchange Prices Indexes – TOPIX). Bản chất của nghiên cứu này là sử
dụng DSS để dự báo mức giá cao và thấp khác nhau, đưa ra các tín hiệu mua, bán của
TOPIX trong bốn tuần liên tục. Mặt khác, họ xây dựng mô hình (8,15,2)FFNN với dữ
liệu đã được training bởi GAs kết hợp phương pháp BackpropaGAstion – BP, là hệ
thống ANN đa lớp (lớp đầu vào, lớp ẩn và lớp đầu ra). Họ kết luận rằng GAs và NN là
một công cụ mạnh để nghiên cứu chỉ số TOPIX.
Định giá quyền chọn
Chen và Lee (1997) đã minh họa bằng cách nào mà GAs – được sử dụng như một công
cụ thay thế NNs có thể dùng để định giá quyền chọn. Nghiên cứu này kiểm định khả
năng của GAs trong việc định giá quyền chọn mua kiểu châu Âu, giả định rằng, giá của
7
quyền chọn có thể được xác định một cách chính xác bằng lý thuyết Black – Scholes. Kết
quả nghiên cứu cho thấy, đây là một phương pháp đầy hứa hẹn.
Xây dựng danh mục đầu tư
Wendt (1995) đã sử dụng GAs để xây dựng đường biên danh mục hiệu quả. Mẫu dữ liệu
bao gồm 250 quan sát về lợi nhuận hàng năm của tám loại tài sản khác nhau. Để đánh giá
hiệu quả của GAs, output cuối cùng của GAs được so sánh với phương pháp xây dựng
đường biên hiệu quả bằng mô hình phi tuyến phức tạp. Sau khoảng 50 vòng lặp, đường
biên hiệu quả được xây dựng bằng hai phương pháp này là rất trùng khớp nhau.
Jackson (1997) đã áp dụng GAs giải quyết bài toán phân bổ tài sản. Với benchmark được
chọn là phương pháp tối ưu hóa Newton. Trong khi phương pháp Newton cho nhiều kết
quả khác nhau, không phụ thuộc vào giá trị ban đầu thì ngược lại, kết quả của GAs
thường bị gián đoạn trong không gian tìm kiếm và phụ thuộc nhiều vào giá trị ban đầu.
1.3 Phương pháp luận của đề tài
Năm 1859, Charles Darwin đã đưa ra một học thuyết toàn diện về nguồn gốc của loài do
chọn lọc tự nhiên. Theo học thuyết này tất cả các sinh vật đa dạng ngày nay là kết quả
của một lịch sử tiến hóa lâu dài. Tất cả các sinh vật thường xuyên thay đổi và những thay
đổi này của mỗi loài giúp cho chúng thích nghi với môi trường sống. Một trong các đặc
tính chung của sinh vật là khả năng biến dị di truyền. Những biến dị này cung cấp nguyên
liệu cho sự tiến hóa.
Thuyết hỗn mang (một trong những phát minh vĩ đại của thế kỷ 20), mô tả những hệ
tuyến tính hoặc phi tuyến (trong một số điều kiện) thể hiện hiện tượng hỗn loạn, đặc
trưng bởi tính chất nhạy cảm với với điều kiện ban đầu. Với đặc tính này, những biến đổi
quan sát được của các hệ thống vật lý có biểu hiện hỗn loạn trông có vẻ ngẫu nhiên, dù
mô hình mô tả của hệ thống là “xác định” theo nghĩa là được định nghĩa chính xác và
không chứa những tham số ngẫu nhiên (wikipedia). “The Butterfly Effect” (Hiệu ứng
cánh bướm) là một cụm từ dùng để mô tả một khái niệm trong lý thuyết hỗn loạn về độ
8
nhạy cảm của hệ so với điều kiện gốc (Sensitivity on initial conditions). Lý thuyết này
được Edward Norton Lorenz giới thiệu vào năm 1972: Một thứ nhỏ bé như cái đập
cánh của con bướm có thể gây ra một cơn bão cách đó nửa vòng trái đất. Ý nghĩa của
khái niệm này biểu thị mối tương quan của một hệ thống đối với điều kiện gốc. Theo đó,
một cú đập cánh của con bướm tuy rất nhỏ bé ban đầu, nhưng vẫn làm thay đổi các điều
kiện xung quanh (biến đổi về sức gió, không khí, các tác động vật lý hóa học…), các biến
đổi này tác động dẫn đến các biến đổi khác ngày càng lớn về qui mô, từ đó dẫn đến một
hiện tượng cực lớn như cơn bão, dù ở cách đó rất xa.
Thuyết tiến hóa và thuyết hỗn loạn đã chứng minh được rằng, thế giới tự nhiên là không
độc lập mà luôn vận động, tác động qua lại lẫn nhau. Điều này cũng phù hợp với nguyên
lý về mối liên hệ phổ biến trong quan điểm triết học của Marx và Ph. Anghen. Như
Anghen đã từng định nghĩa về phép biện chứng: “Phương pháp biện chứng là phương
pháp xem xét những sự vật và những phản ánh của chúng vào tư duy chủ yếu là trong
mối liên hệ qua lại giữa chúng, trong sự móc xích của chúng, trong sự vận động của
chúng, trong sự phát sinh và tiêu vong của chúng”.
TTCK nói chung và giá cổ phiếu nói riêng tuy không phải là một thực thể sống, không
phải là một cá thể sinh học hoàn chỉnh. Tuy nhiên nó cũng là một thành phần của thế giới
tự nhiên và mang tính hỗn loạn Bill William (1995). Cũng giống như một cơ thể sống,
TTCK cũng luôn tự “tiến hóa” để hoàn thiện và tích nghi. Trong một khoảng thời gian cụ
thể, tồn tại những quy luật – một quy tắc giao dịch có thể mang lại một TSSL cao hơn so
với các quy tắc giao dịch khác. Do đó, các quy tắc giao dịch tối ưu trong quá khứ có thể
mang lại một TSSL cao trong tương lai nếu trong những khoảng thời gian khác nhau này,
giá cả vận động theo cùng một quy luật, quy luật chung của sự tiến hóa. Dựa trên quan
điểm đó, bài nghiên cứu sẽ sử dụng thuật toán di truyền GAs để xác định và kiếm chứng
các quy tắc giao dịch tối ưu ở những thời điểm cụ thể, với những cổ phiếu cụ thể trên
TTCK Việt Nam.
9
CHƯƠNG 2: THUẬT TOÁN DI TRUYỀN
Bài nghiên cứu sẽ dành toàn bộ chương 2 để trình bày một cách khái quát những nguyên
lý hoạt động và cơ sở toán học cơ bản về thuật toán di truyền. Các thuật ngữ, phương
pháp tổ chức và mã hóa cơ sở dữ liệu, xây dựng hàm thích nghi, các phép toán cơ bản
(tái sinh, lai ghép, đột biến) và các định lý cơ bản về thuật toán di truyền sẽ lần lượt
được giới thiệu. Trong phạm vi nghiên cứu, đề tài chỉ trình bày những kiến thức cơ bản
nhất, phương pháp chứng minh, hạn chế, những lời phê bình về các định lý sẽ không
được đề cập đến. Toàn bộ kiến thức trong chương 2 sẽ là nền tảng để thiết kế dữ liệu và
thuật toán phù hợp với vấn đề cụ thể của đề tài nghiên cứu.
2.1 Nguyên lý cơ bản về thuật toán di truyền
2.1.1 Tổng quan về nguyên lý của thuật toán di truyền
Bảng 2.1: Các thuật ngữ của thuật toán di truyền
Thuật ngữ Giải thích
Nhiễm sắc thể một cấu trúc có tổ chức của ADN và protein nằm trong các
tế bào.
Gen một đoạn ADN mang một chức năng nhất định trong quá
trình truyền thông tin di truyền
Locus Gen vị trí cụ thể của 1 gen hay AND trên nhiễm sắc thể
Allele hay alen những dạng biến dị khác nhau của một gene có 1 vị trí locus
xác định trên nhiễm sắc thể
Phenotype–kiểu hình tổ hợp toàn bộ các tính trạng và đặc tính của cá thể
Genotype - kiểu gen đặc điểm di truyền của 1 tế bào, 1 cá thể, 1 sinh vật
10
Thuật toán di truyền – một mô hình khá mới mẻ, có nhiều ứng dụng hấp dẫn và vẫn đang
tiếp tục được nghiên cứu trên khắp thế giới – thuật giải cho phép chúng ta tạo ra được
những chương trình máy tính có khả năng tự lập trình cho chính nó. Thuật giải di truyền
(GAS) là kỹ thuật chung giúp giải quyết vấn đề-bài toán bằng cách mô phỏng sự tiến hóa
của con người hay của sinh vật nói chung (dựa trên thuyết tiến hóa của Darwin) trong
điều kiện qui định sẵn của môi trường. GAS là một thuật giải, nghĩa là mục tiêu của GAS
không nhằm đưa ra lời giải chính xác tối ưu mà là đưa ra lời giải tương đối tối ưu.
Trong các tài liệu về GAS thường đề cập đến hai thuật ngữ là "thuật giải di truyền" và
"lập trình di truyền". Theo các tài liệu này, "thuật giải di truyền" chỉ sử dụng cấu trúc dữ
liệu là chuỗi số nhị phân còn "lập trình di truyền" nghĩa là sử dụng cấu trúc dữ liệu tổng
quát. Sở dĩ có cách hiểu như vậy vì ý niệm thuật giải di truyền xuất hiện trước và ban đầu
người ta chỉ áp dụng nó với cấu trúc dữ liệu là chuỗi nhị phân. Về sau, người ta mới đưa
ra cách áp dụng thuật giải này trên các cấu trúc dữ liệu tổng quát hơn nên gọi là lập trình
di truyền. Bài nghiên cứu dựa trên quan điểm: "thuật giải di truyền" là một phương pháp
giải quyết bài toán bằng cách mô phỏng quá trình tiến hóa, thích nghi của sinh vật. Còn
"lập trình di truyền" là kỹ thuật lập trình sử dụng "thuật giải di truyền" để giải quyết vấn
đề - bài toán trên máy tính. Do đó, khi nói đến "thuật giải di truyền" chúng ta chỉ lưu tâm
đến khía cạnh thuật giải mà không quan tâm đến việc cài đặt nó ra sao. Ngược lại, khi nói
đến "lập trình di truyền" ta quan tâm nhiều hơn đến việc cài đặt.
Theo đề xuất ban đầu của giáo sư John Holland, một vấn đề - bài toán đặt ra sẽ được mã
hóa thành các chuỗi bit với chiều dài cố định. Nói một cách chính xác là các thông số của
bài toán sẽ được chuyển đổi và biểu diễn lại dưới dạng các chuỗi nhị phân. Các thông số
này có thể là các biến của một hàm hoặc hệ số của một biểu thức toán học. Người ta gọi
các chuỗi bit này là mã genome ứng với mỗi cá thể, các genome đều có cùng chiều dài.
Nói ngắn gọn, một lời giải sẽ được biểu diễn bằng một chuỗi bit, cũng giống như mỗi cá
thể đều được quy định bằng gen của cá thể đó. Như vậy, đối với thuật giải di truyền, một
cá thể chỉ có một gen duy nhất và một gen cũng chỉ phục vụ cho một cá thể duy nhất.
11
Ban đầu, ta sẽ phát sinh một số lượng lớn, giới hạn các cá thể có gen ngẫu nhiên - nghĩa
là phát sinh một tập hợp các chuỗi bit ngẫu nhiên. Tập hợp các cá thể này được gọi là
quần thể ban đầu (initial population). Sau đó, dựa trên một hàm thích nghi, ta sẽ xác định
được một giá trị gọi là độ thích nghi - Fitness. Giá trị này, để đơn giản, có thể tạm hiểu
chính là độ "tốt" của lời giải. Vì phát sinh ngẫu nhiên nên độ "tốt" của lời giải hay tính
thích nghi của các cá thể trong quần thể ban đầu là không xác định.
Để cải thiện tính thích nghi của quần thể, người ta tìm cách tạo ra quần thể mới. Có hai
thao tác thực hiện trên thế hệ hiện tại để tạo ra một thế hệ khác với độ thích nghi tốt hơn.
Thao tác đầu tiên là sao chép nguyên mẫu một nhóm các cá thể tốt từ thế hệ trước rồi đưa
sang thế hệ sau (selection). Thao tác này đảm bảo độ thích nghi của thế hệ sau luôn được
giữ ở một mức độ hợp lý. Các cá thể được chọn thông thường là các cá thể có độ thích
nghi cao nhất.
Thao tác thứ hai là tạo các cá thể mới bằng cách thực hiện các thao tác sinh sản trên một
số cá thể được chọn từ thế hệ trước – thông thường cũng là những cá thể có độ thích nghi
cao. Có hai loại thao tác sinh sản : một là lai tạo tác lai tạo (crossover), hai là đột biến
(mutation). Trong thao tác lai tạo, từ gen của hai cá thể được chọn trong thế hệ trước sẽ
được phối hợp với nhau (theo một số quy tắc nào đó) để tạo thành hai gen mới.
Thao tác chọn lọc và lai tạo giúp tạo ra thế hệ sau. Tuy nhiên, nhiều khi do thế hệ khởi
tạo ban đầu có đặc tính chưa phong phú và chưa phù hợp nên các cá thể không rải đều
được hết không gian của bài toán). Từ đó, khó có thể tìm ra lời giải tối ưu cho bài toán.
Thao tác đột biến sẽ giúp giải quyết được vấn đề này. Đó là sự biến đổi ngẫu nhiên một
hoặc nhiều thành phần gen của một cá thể ở thế hệ trước tạo ra một cá thể hoàn toàn mới
ở thế thệ sau. Nhưng thao tác này chỉ được phép xảy ra với tần suất rất thấp (thường dưới
0.01), vì thao tác này có thể gây xáo trộn và làm mất đi những cá thể đã chọn lọc và lai
tạo có tính thích nghi cao, dẫn đến thuật toán không còn hiệu quả.
12
Thế hệ mới được tạo ra lại được xử lý như thế hệ trước (xác định độ thích nghi và tạo thế
hệ mới) cho đến khi có một cá thể đạt được giải pháp mong muốn hoặc đạt đến thời gian
giới hạn.
2.1.2 Thiết kế thuật toán
2.1.2.1 Mã hóa dữ liệu
Để có thể thực hiện được các bước trong thuật giải di truyền, thao tác quan trọng nhất là
phải biết chọn một cấu trúc dữ liệu (CTDL) phù hợp. Để giải bài toán bằng thuật giải di
truyền, ta thường chọn sử dụng một trong 3 loại CTDL sau : chuỗi nhị phân, chuỗi số
thực và cấu trúc cây. Trong đó, cấu trúc chuỗi nhị phân và chuỗi số thực thường được sử
dụng hơn.
Hình 2.1: Sơ đồ mã hóa dữ liệu thuật toán di truyền
Nguồn: Genetic Algorithm Tom V. Mathew Assistant Professor.
Biễu diễn gen bằng chuỗi nhị phân
Về nguyên tắc, mọi cấu trúc dữ liệu trên máy tính, cuối cùng đều được chuyển về các
chuỗi nhị phân (từ số nguyên, số thực, âm thanh và thậm chí cả hình ảnh cũng chỉ là các
13
chuỗi nhị phân). Tuy nhiên, quá trình chuyển đổi sang chuỗi nhị phân được thực hiện bởi
trình biên dịch của máy tính. Ở đây, chúng ta sử dụng chuỗi nhị phân một cách tường
minh để thể hiện cấu trúc gen của một cá thể và để có thể thực hiện các thao tác lai ghép,
đột biến trên cấu trúc này.
Thông thường, có rất nhiều cách để chuyển đổi dữ liệu của bài toán về chuỗi nhị phân.
Tuy nhiên, chúng ta cần lưu ý chọn cách biểu diễn hiệu quả nhất theo quy tắc: Chọn
chuỗi nhị phân ngắn nhất nhưng đủ thể hiện được tất cả kiểu gen.
Tuy có nhiều chọn lựa nhưng thông thường, để biểu diễn một số thực x, người ta chỉ dùng
công thức đơn giản, tổng quát sau :Giả sử ta muốn biểu diễn số thực x nằm trong khoảng
[min, max] bằng một chuỗi nhị phân A dài L bit. Lúc đó, ta sẽ chia miền [min, max]
(lượng hóa) thành 2
L
-1 vùng. Trong đó, kích thước một vùng là :
1
max min
2
L
g
Người ta gọi g là độ chính xác của số thực được biểu diễn bằng cách này (vì g quy định
giá trị thập phân nhỏ nhất của số thực mà chuỗi nhị phân dài L bit có thể biểu diễn được).
Giá trị của số thực x được biểu diễn qua chuỗi nhị phân sẽ được tính như sau :
x = min + Decimal(<A>)*g
trong đó Decimal(<A>) là hàm để tính giá trị thập phân nguyên dương của chuỗi nhị
phân A theo quy tắc đếm. Hàm này được tính theo công thức sau:
1 2 1 0
1 2 1 0
( ) .2 .2 .2 .2 .
L
L
Decimal A a a a a
Với a
i
là bit thứ i trong chuỗi nhị phân tính từ phải sang trái.
Biểu diễn gen bằng số thực
14
Đối với những vấn đề - bài toán có nhiều tham số, việc biểu diễn gen bằng chuỗi số nhị
phân đôi lúc sẽ làm cho kiểu gen của cá thể trở nên quá phức tạp, dẫn đến việc thi hành
cách thao tác trên gen trở nên kém hiệu quả. Khi đó, chúng sẽ chọn biểu diễn kiểu gen
dưới dạng một chuỗi số thực. Tuy nhiên, chọn biểu diễn kiển gen bằng chuỗi số thực, cần
lưu ý quy tắc : Biểu diễn kiểu gen bằng số thực phải đảm bảo tiết kiệm không gian
đối với từng thành phần gen.
Quy tắc này lưu ý chúng ta phải tiết kiệm về mặt không gian bộ nhớ đối với các từng
thành phần gen. Giả sử nghiệm của bài toán được cấu thành từ 3 thành phần, thành phần
X thực có giá trị trong khoảng [1.0, 2.0], thành phần Y nguyên trong khoảng [0,15] và
thành phần Z trong khoảng [5,8]. Thì chúng ta không nên chọn biểu diễn kiểu gen bằng
một chuỗi 3 thành phần số thực. Vì như chúng ta đã biết, ít nhất mỗi số thực được phải
được biểu diễn bằng 6 byte. Chỉ với 3 số thực, ta đã sử dụng hết 18 byte. Như vậy với
trường hợp cụ thể này, ta nên chọn biểu diễn bằng chuỗi nhị phân, trong đó dùng khoảng
10 bit cho thành phần X (độ chính xác khoảng 0.001), 4 bit cho thành phần Y và 2 bit cho
thành phần Z. Tổng cộng chiếm có 16 bit = 2 byte.
Cấu trúc cây
Cấu trúc cây thường được dùng trong trường hợp bản thân CTDL của bài toán cũng có
dạng cây. Đây là một trường hợp phức tạp nên hiếm khi được sử dụng. Một loại cấu trúc
cây thường được sử dụng trong thuật giải di truyền là dạng cây hai nhánh (ở đây chúng ta
dùng chữ hai nhánh để phân biệt với loại cây nhị phân – thường dùng trong sắp xếp và
tìm kiếm).
2.1.2.2 Hàm thích nghi
Hàm thích nghi là hàm dùng để đánh giá độ tốt của một lời giải hoặc cá thể. Hàm thích
nghi nhận vào một tham số là gen của một cá thể và trả ra một số thực. Một cá thể càng
tốt nghĩa là độ thích nghi của nó càng cao và là tiền để để trở thành lời giải đúng của bài
toán. Việc thiết kế một hàm thích nghi tốt là rất quan trọng trong thuật toán di truyền.
15
Một hàm đánh giá không chính xác có thể làm mất đi các cá thể tốt trong quần thể. Hàm
thích nghi có thể không tuyến tính, không có đạo hàm, không liên tục bởi vì thuật toán di
truyền chỉ cần liên kết hàm thích nghi với các chuỗi số.
Chúng ta xây dựng hàm thích nghi f(x) không âm, có hai trường hợp sau:
Đối với bài toán tìm cực tiểu hàm g(x):
khi
max
( )
g x C
khi
max
( )
g x C
Có thể lấy C
max
là giá trị lớn nhất của g (x) trong quần thể hiện tại.
Đối với bài toán tìm cực đại hàm u(x):
khi
min
( ) 0
u x C
khi
min
( ) 0
u x C
Có thể lấy C
min
là giá trị tuyệt đối bé nhất của u(x) trong quần thể hiện tại.
2.1.3 Các phép toán của thuật toán di truyền
2.1.3.1 Tái sinh (Reproduction)
Tái sinh là quá trình chọn quần thể mới thỏa phân bố xác suất dựa trên độ thích nghi. Độ
thích nghi của các cá thể được xác định bởi hàm thích nghi (đã trình bày ở mục 2.1.2.2).
Các cá thể có độ thích nghi lớn hơn sẽ có nhiều bản sao trong thế hệ mới.
Quá trình này được thực hiện dựa trên bánh xe quay roulette (bánh xe xổ số) với các rãnh
được định kích thước theo độ thích nghi. Kỹ thuật này được gọi là lựa chọn cha mẹ theo
bánh xe roulette. Bánh xe roulette được xây dựng như sau (giả định rằng, các độ thích
nghi đều dương, trong trường hợp ngược lại ta có thể sử dụng một vài phép biến đổi
tương ứng để định lại tỷ lệ sao cho các độ thích nghi đều dương).
max
( )
( )
0
C g x
f x
min
( )
( )
0
u x C
f x
16
Tính độ thích nghi f
i
, i = 1, 2,…,n của mỗi nhiễm sắc thể trong quần thể hiện hành,
với n là kích thước quần thể (số nhiễm sắc thể trong quần thể).
Tìm tổng giá trị thích nghi toàn quần thể:
1
n
i
i
F f
Tính xác suất chọn p
i
cho mỗi nhiễm sắc thể:
i
i
f
p
F
Tính vị trí xác suất q
i
của mỗi nhiễm sắc thể:
1
i
i j
j
q p
Tiến trình chọn lọc đượcthực hiện bằng cách quay bánh xe roulette n lần, mỗi lần chọn
một nhiễm sắc thể từ quần thể hiện hành vào quần thể mới theo cách sau:
Phát sinh một số r trong khoảng [0;1] khi quay bánh xe.
Nếu r < q
1
thì chọn nhiễm sắc thể đầu tiên, ngược lại thì chọn nhiễm sắc thể thứ i sao
cho q
i-1
< r < q
i
.
2.1.3.2 Lai ghép (Crossover)
Phép lai là quá trình hình thành nhiễm sắc thể mới trên cơ sở các nhiễm sắc thể cha – mẹ,
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. Phép lai xảy ra với xác suất p
c
được thực hiện như sau:
Đối với nhiễm sắc thể trong quần thể mới, phát sinh ngẫu nhiên một số r trong khoảng
[0;1], nếu r < p
c
thì nhiễm sắc thể được chọn để lai ghép.
Ghép đôi các nhiễm sắc thể đã chọn được một cách ngẫu nhiên, đối với mỗi cặp
nhiễm sắc thể được ghép đôi, ta phát sinh ngẫu nhiên một số nguyên pos nằm trong
khoảng [0; m-1] (m là tổng chiều dài của một nhiễm sắc thể - tổng số gen). Số pos cho
biết vị trí của điểm lai. Điều này được minh họa bởi hình dưới đây.
Như vậy phép lai tạo 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ẹ chúng. Mặc dù phép lai ghép sử dụng lựa chọn ngẫu nhiên, nhưng nó
không được xem như là một lối đi ngẫu nhiên qua không gian tìm kiếm. Sự kết hợp giữa
17
tái sinh và lai ghép giúp cho thuật toán di truyền hướng việc tìm kiếm đến những vùng tốt
hơn. Dưới đây là hình minh họa cho phép lai cơ bản, các nhiễm sắc thể bắt chéo tại một
điểm.
Hình 2.2: Lai ghép hai nhiễm sắc thể 1 điểm bắt chéo
Vị trí lai
b
1
b
2
. . .
b
pos
b
pos+1
. . . b
m
c
1
c
2
. . .
c
pos
c
pos+1
. . . c
m
Chuyển đổi các gen nằm sau vị trí lai.
b
1
b
2
. . .
b
pos
c
pos+1
. . . c
m
c
1
c
2
. . .
c
pos
b
pos+1
. . . b
m
2.1.3.3 Đột biến (Mutation)
Đột biến là hiện tượng cá thể con mang một (một số) tính trạng không có trong mã di
truyền của cha mẹ. Phép đột biến xảy ra với xác suất p
m
, nhỏ hơn rất nhiều so với xác
suất lai p
c
.
Theo nghiên cứu của Kenneth De Jong thì:
Tỷ lệ lai ghép trung bình: 0.6
Tỷ lệ đột biến: 0.001
Tỷ lệ tạo sinh: 0.399
18
Mỗi gen trong nhiễm sắc thể có thể có cơ hội bị đột biến như nhau, nghĩa là đối với mỗi
nhiễm sắc thể trong quần thể hiện hành (sau khi lai) và đối với mỗi gen trong nhiễm sắc
thể, quá trình đột biến được thực hiện như sau:
Phát sinh ngẫu nhiên một số r trong khoảng [0;1].
Nếu r < p
m
thì đột biến gen đó.
Đột biến gen làm tăng khả năng tìm được lời giải gần tối ưu của thuật toán di truyền. Đột
biến không được sử dụng thường xuyên vì nó là phép toán tìm kiếm ngẫu nhiên, với tỷ lệ
đột biến cao, thuật toán di truyền sẽ còn xấu hơn phương pháp tìm kiếm ngẫu nhiên.
Sau quá trình tái sinh, lai và đột biến, quần thể tiếp tục được tính toán các giá trị thích
nghi, sự tính toán này được dùng để xây dựng phân bố xác suất (cho tiến trình tiếp theo),
nghĩa là, để xây dựng lại bánh xe roulette với các rãnh được định kích thước theo các giá
trị thích nghi hiện hành. Phần còn lại của thuật toán di truyền chỉ là sự lặp lại chu trình
của những bước trên.
2.1.4 Cấu trúc thuật toán tổng quát
Nguyên tắc hoạt động cơ bản của GAS được trình bày khái quát trong hình 2.3. Các bước
chính của thuật toán di truyền có thể tóm gọn bao gồm:
Bước 1: Khởi tạo quần thể các nhiễm sắc thể. Chọn mô hình giải pháp của vấn đề. Chỉ
định cho mỗi giải pháp một ký hiệu.
Bước 2: Tìm hàm thích nghi và xác định giá trị hàm thích nghi của từng nhiễm sắc thể.
Bước 3: Sao chép lại các nhiễm sắc thể dựa vào giá trị thích nghi của chúng (tạo sinh) và
tạo những nhiễm sắc thể mới bằng các phép toán di truyền (lai ghép và đột biến).
Bước 4: Tính hệ số thích nghi cho các cá thể mới và loại bỏ những các thể có hệ số thích
nghi không phù hợp.
Bước 5: Nếu chưa tìm được giải pháp tối ưu thì quay lại bước 3. Nếu mục tiêu tìm kiếm
đã đạt được thì dừng lại. Báo cáo kết quả.
19
Hình 2.3: Sơ đồ cấu trúc thuật toán di truyền tổng quát
Nguồn: Giáo trình công nghệ tính toán phần mềm – Đại học sư phạm kỹ thuật tp. HCM
Bắt đầu
Khởi động
Đánh giá
Hội tụ?
Mã hóa
Chọn lọc
Sinh sản
Đột biến
Giải mã
Kết thúc