Một số hệ GP biểu diễn tuyến tính đã được đưa ra và chia thành ba nhóm: GP dựa vào ngăn xếp, GP dựa vào mã máy và lập trình biểu thức Gen.
Trong GP dựa vào ngăn xếp [20] [21] [22], mỗi chương trình sẽ lấy tham số từ ngăn xếp, sau khi thực hiện tính toán, nó đẩy kết quả ngược lại ngăn xếp.
16 Để đảm bảo khỏi tràn và trống ngăn xếp, một số điều kiện kiểm tra được thực hiện. Nếu phát hiện ra những nguy cơ thì nó cho phép chương trình tiếp tục tiến hành bằng cách cung cấp giá trị mặc định để tránh làm trống ngăn xếp và loại bỏ dữ liệu khỏi tràn ngăn xếp.
Trong GP dựa vào mã máy [7] [23], dữ liệu được chứa trong thanh ghi. Mỗi câu lệnh được đọc ra từ một thanh ghi và ghi lại vào một thanh ghi khác. Dữ liệu được ghi vào trong thanh ghi trước khi chương trình được tiến hành, và kết quả của nó được đưa ra bởi dữ liệu cuối của một hoặc nhiều thanh ghi. Các câu lệnh là các đoạn mã máy trực tiếp, làm cho GP tuyến tính tiến hành nhanh hơn các hệ GP khác.
Còn với lập trình biểu thức Gen (GEP), ánh xạ giữa kiểu Gen và kiểu hình được sử dụng. Kiểu hình là cây biểu diễn GP chuẩn , còn kiểu Gen được biểu diễn như sau: đầu tiên, tất cả các đơn vị nguyên thủy (hàm và kết) được sử dụng để giải quyết bài toán trong GP chuẩn được đánh chỉ mục bởi một số nguyên.
Kiểu Gen là một chuỗi tuyến tính có độ dài cố định các số nguyên trong khoảng 0. . , trong đó n là số lượng các thành phần của tập nguyên thủy. Sau đó, nó được chia thành 2 phần, phần đầu tiên và bên trái được điền đầy bởi các số nguyên đại diện cho hoặc là hàm hoặc là ký hiệu kết. Phần còn lại, bên phải được điền đầy bởi số nguyên đại diện chỉ cho các ký hiệu kết. Độ dài của phần đầu là l, độ dài phần 2 là h x l, do đó độ dài của chuỗi Gen là (l + 1) x l, với l là số nguyên được định nghĩa trước và h là số lượng tham số lớn nhất của các thành phần nguyên thủy.
Việc ánh xạ từ kiểu Gen sang kiểu hình, là cây biểu diễn trong GP chuẩn, được thực hiện từ trái sang phải. Ở mỗi bước, một thành phần nguyên thủy (hàm hoặc kết) được thể hiện bởi Gen hiện tại được lấy ra để điền vào nhánh chưa hoàn thành tiếp theo của kiểu hình theo thứ tự từ trên xuống dưới và trái qua phải.
17 Quá trình này sẽ kết thúc khi cây biểu diễn được xây dựng từ kiểu Gen hoàn thành. Nếu vẫn còn Gen chưa được sử dụng khi kiểu hình đã hoàn thành, nó sẽ được bỏ qua và coi như những thành phần dư thừa (là phần của kiểu Gen nhưng không được sử dụng để mã hóa kiểu hình). Ở thời điểm hoàn thành, ở phần bên trái của chuỗi Gen, có thể có l hàm chưa điền đầy tham số, và mỗi hàm có ít nhất h tham số, do đó, có thể có ít nhất h x l tham số chưa hoàn thành khi phần bên phải được khởi tạo. Do phần bên phải được điền chỉ với tập kết và độ dài của nó là h x l, nó không thể sử dụng hết trong quá trình ánh xạ kiểu Gen sang kiểu hình. Do vậy, mỗi kiểu Gen hợp lệ, kiểu hình được tạo ra bởi quá trình ánh xạ.
Hình vẽ sau mô tả một ví dụ về cấu trúc kiểu Gen và ví dụ việc ánh xạ từ kiểu Gen sang kiểu hình trong GEP.
Hình vẽ 1.7. Kiểu Gen và kiểu hình trong GEP, với OR=0, AND=1, NOT=2, a=3, b=4, c=5.
Như được đề cập trong [24] [25] việc biểu diễn tuyến tính của GEP là một thuận lợi chính của nó so với GP. Nó cho phép GEP thiết kế và thử nghiệm với một loạt các toán tử phỏng sinh học để xem khả năng của nó trong GP. Nó cũng có khả năng đạt được yêu cầu đóng và thay đổi nhỏ trong kiểu Gen như trong GA.
Tuy nhiên, một vấn đề với biểu diễn tuyến tính của GEP đó là việc ánh xạ giữa kiểu Gen và kiểu hình vi phạm mối quan hệ cho biểu diễn của thuật toán
18 tiến hóa [26] [27] [28] đã nêu ra rằng những thay đổi nhỏ trong kiểu Gen sẽ làm thay đổi nhỏ trong kiểu hình. Điều đó có nghĩa là nếu muốn duy trì tính cục bộ thì cần duy trì không gian ánh xạ kiểu Gen và kiểu hình. Mặc dù thay đổi nhỏ trong kiểu Gen có thể là đóng và nhỏ thì ảnh hưởng với kiểu hình cũng rất khó kiểm soát. Ví dụ, nếu Gen đầu tiên của chuỗi Gen được đột biến, kiểu hình có thể thay đổi hoàn toàn
AND a OR c a 0 3 1 3 5 4 2 ... 3 3 1 3 5 4 2 ... a
Hình vẽ 1.8. Ví dụ về việc thay đổi hoàn toàn của kiểu hình 1.4 LẬP TRÌNH GEN ĐỊNH HƯỚNG BỞI VĂN PHẠM
Như đã trình bày ở trên, những yêu cầu về tính đóng làm hạn chế lĩnh vực giải quyết vấn đề của GP. Tuy nhiên, trong thực tế, nhiều vấn đề được đưa ra. Ví dụ bài toán về cây quyết định thực hiện trong khai phá dữ liệu [29], đòi hỏi các thuộc tính phải có các kiểu khác nhau. Hậu quả là không gian cây biểu thức trong GP chuẩn có thể chứa một số các cá thể không hợp lệ. Thậm chí có thể ban đầu xuất phát là các cá thể hợp lệ, qua quá trình tiến hóa, các toán tử di truyền có thể tạo ra các toán tử không hợp lệ.
Một giải pháp đối với ràng buộc nguyên thủy của GP (cả kiểu hàm và kết) là gắn các kiểu vào. Các toán tử di truyền được thiết kế để có thể nhận biết được kiểu của các thành phần nguyên thủy. Nó tạo ra một nhánh của GP gọi là GP
19 theo kiểu (Strongly-Typed GP - STGP), được đưa ra bởi Montana trong [30] [31]. Hình vẽ sau mô tả một ví dụ về biểu diễn và toán tử lai ghép trong GP theo kiểu
Hình vẽ 1.9. Một cá thể trong STGP
Mục tiêu quan trọng của STGP là giảm không gian tìm kiếm bằng cách tránh việc bùng nổ các cá thể không hợp lệ. Do đó, có tăng cơ hội tìm kiếm các lời giải so với hệ GP không theo kiểu. Ví dụ, trong [32] đã chứng minh là bằng việc tìm kiếm trong không gian chỉ gồm các các thể hợp lệ, STGP ưu thế hơn các hệ GP chuẩn. STGP hữu ích trong một số bài toán được trình bày trong [33] [34] [35] [36]. Một hướng mở rộng của STGP bằng cách sử dụng kiểu phân cấp, kiểu kế thừa theo mô hình hướng đối tượng.
Một hướng khác để giải quyết yêu cầu đóng trong GP là sử dụng văn phạm hình thức để ràng buộc cú pháp đối với chương trình. Ngôn ngữ hình thức được sử dụng rộng rãi trong việc định nghĩa ngôn ngữ của một số lĩnh vực, như trong ngôn ngữ lập trình và ngôn ngữ tự nhiên [37]. Đã có một số nghiên cứu về việc sử dụng ràng buộc dựa trên văn phạm áp dụng với GP được gọi là lập trình Gen định hướng bởi văn phạm (GGGP).
Sử dụng văn phạm giúp mã hóa miền tri thức về cấu trúc cú pháp của chương trình. Do miền tri thức ràng buộc cấu trúc lời giải, sử dụng văn phạm sẽ giúp kiểm soát được cấu trúc. Trong [1] một số cơ chế học đơn giản sử dụng để mã hóa cấu trúc cú pháp của lời giải. Hơn thế nữa sử dụng văn phạm hình thức sẽ cung cấp cách thức linh hoạt hơn. Ngoài ra, sử dụng văn phạm sẽ dễ điều hướng về cấu trúc cú pháp của chương trình bằng cách thay đổi văn phạm. Do văn phạm nằm ngoài hệ GP chứ không phải là một thành phần của GP, việc điều
20 hướng có thể thay đổi bằng cách thay đổi văn phạm mà không phải triển khai lại hệ thống. Ngoài ra, việc cài đặt điều hướng trong chương trình dẫn đến việc giảm không gian tìm kiếm, do đó tăng cơ hội tìm kiếm được lời giải. Cuối cùng, việc sử dụng văn phạm để thiết kế các toán tử tương đồng.
Antonisse trong [38] là người đầu tiên sử dụng văn phạm phi ngữ cảnh (CFG) để tạo ra chuỗi Gen dựa trên văn phạm trong GA. Hệ thống GA đầu tiên dựa trên văn phạm sử dụng chuỗi Gen từ ngôn ngữ được tạo ra bởi CFG. Khi toán tử lai ghép được thực hiện giữa hai cá thể, cần phải chuyển đổi vào hai cây dẫn xuất của G và việc lại ghép được thực hiện tương tự như trong GGGP với biểu diễn dạng cây. Với một chuỗi có thể có hơn một cây dẫn xuất nếu văn phạm là nhập nhằng. Do đó, trong [38] thì việc sử dụng văn phạm nhập nhằng là không được phép.
Sau khi Antonisse đề xuất hệ GA sử dụng văn phạm, một số nghiên cứu sử dụng văn phạm để kiểm soát cấu trúc của chương trình trong GP. Stefanski trong [39] đề xuất sử dụng cây cú pháp trừu tượng để khai báo định hướng trong GP. Robston trong [40] có giải thích tại sao văn phạm hình thức được sử dụng để đưa ra ràng buộc trong GP. Mizoguchi và Hemmi trong [41] [42] đề xuất sử dụng luật sinh để tạo ra ngôn ngữ mô tả trong quá trình tiến hóa. Robston sử dụng văn phạm để tạo ra quần thể ban đầu, trong khi các nghiên cứu khác chỉ đưa ra mô tả hình thức. Không có hệ thống nào duy trì cây dẫn xuất của văn phạm, hoặc phân tích ra từ chuỗi (Stefanski) hoặc tổng hợp với STGP (Robston).
1.4.1 GGGP với biểu diễn dạng cây
Những nghiên cứu đầu tiên gần như được đưa ra cùng một lúc bởi ba nhà nghiên cứu. Whigham [43] đề xuất sử dụng hệ CFG với văn phạm phi ngữ cảnh sử dụng để tạo ra quần thể là cây dẫn xuất trong CFG. Schultz trong [44] sử dụng hệ GGGP để học các qui tắc trong hệ chuyên gia.
21 Hệ này tương tự như Whigham, chỉ khác nhau ở thuật toán khởi tạo quần thể [45] [46] [47] [48] [49] [50] đề xuất sử dụng hệ LOGENPRO sử dụng văn phạm mệnh đề nhất định (DCG), một kiểu văn phạm logic trong LISP để tạo ra chương trình. DCG có tính biểu diễn cao hơn CFG, có khả năng tạo ra các ngôn ngữ cảm ngữ cảnh hơn.
Đây là điểm khác nhau giữa các hệ thống. Với ba hệ thống tương tự nhau, luận án trình bày ở đây chi tiết hơn về CFG-GP trong [43]. Năm thành phần cơ bản của GGGP cũng tương tự như hệ GP thông thường. Tuy nhiên, có một số đặc điểm lưu ý sau:
a. Biểu diễn chương trình
Mỗi một chương trình là cây dẫn xuất được tạo ra bởi văn phạm G (CFG đối với hệ thống của Whigham và Schultz, văn phạm logic DCG đối với hệ của Wong).
b. Khởi tạo quần thể
Trong [43], một thuật toán đơn giản được đề xuất để tạo ra cây dẫn xuất ngẫu nhiên với gới hạn về độ sâu dựa trên thủ tục gắn nhãn chương trình. Bohm và Schultz đưa ra thuật toán để khởi tạo quần thể dựa trên phân phối chuẩn của bước dẫn xuất. Còn thủ tục khởi tạo trong LOGENPRO kế thừa cơ chế trong PROLOG [51].
c. Hàm thích nghi:
Được thực hiện với các toán tử, là cây dẫn xuất của G, tương tự như trong GP chuẩn.
d. Toán tử di truyền:
Toán tử di truyền là cơ chế lựa chọn, tái sinh, lai ghép và đột biến. Việc lựa chọn và tái sinh được thực hiện tương tự như trong GP. Trong toán tử lai ghép, 2 nút phía trong với cùng nhãn không phải là ký hiệu kết trong văn phạm G được chọn ngẫu nhiên và hai cây dẫn xuất phía dưới sẽ được hoán đổi. Trong GGGP,
22 hiện tượng tương đồng là hai cây dẫn xuất bắt nguồn từ cùng một ký tự không kết.
Toán tử đột biến được thực hiện bằng cách lựa chọn một nút trong một cách ngẫu nhiên. Ký tự không kết trong nút này được đánh dấu và cây dẫn xuất phía dưới sẽ được xóa đi. Một cây dẫn xuất mới được tạo ra có gốc là ký tự không kết giống như trên thay thế vào cây dẫn xuất đã bị xóa.
e. Các tham số
Các tham số trong GP chuẩn bao gồm: kích cỡ quần thể, số thế hệ tối đa, độ sâu tối đa của cá thể và xác xuất thực hiện các toán tử di truyền.
1.4.2 GGGP với biểu diễn tuyến tính
Cũng như với GP chuẩn, GGGP cũng có những biểu diễn chương trình dưới dạng tuyến tính. Giải pháp chính được sử dụng là ánh xạ giữa kiểu Gen và kiểu hình, trong đó kiểu Gen là chuỗi tuyến tính còn kiểu hình là cây dẫn xuất của văn phạm (G). Trong một số nghiên cứu trước đó [52] [53] [54] [55], kiểu Gen là chuỗi cố định được sử dụng để mã hóa chỉ số của luật dẫn xuất trong văn phạm G. Việc chuyển đổi từ kiểu Gen sang kiểu hình được thực hiện từ trái sang phải và kiểu hình (cây dẫn xuất trong văn phạm G) được hình thành tương ứng. Ở mỗi bước, nếu vẫn còn nhánh chưa kết thúc của kiểu hình được đánh dấu bởi ký tự không kết, một Gen (gồm một số bit) sẽ được đọc và biên dịch như là số nguyên, tương ứng với quy luật trong tập luật P của văn phạm G có nhánh bên trái là A, sẽ được sử dụng để mở rộng cho nhánh của kiểu hình. Nếu kiểu hình đã hoàn thành mà vẫn còn kiểu những Gen chưa sử dụng trong kiểu Gen, nó sẽ bị bỏ qua vì đó là những Gen dư thừa. Trong trường hợp đã sử dụng hết các Gen là kiểu hình vẫn chưa được hình thành đầy đủ thì một số cây dẫn xuất con sẽ được tạo ra ngẫu nhiên để hoàn thành kiểu hình.
Một ví dụ về GGGP sử dụng biểu diễn tuyến tính là tiến hoá văn phạm (Grammatical Evolution – GE) được đưa ra trong [56] [57] [58] [59]. GE là mở rộng của GGGP với biểu diễn tuyến tính với ba cải tiến: độ dài thay đổi, dư thừa
23 sử dụng luật MOD và toán tử đóng gói. Kiểu hình trong GE là có độ dài thay đổi, mỗi Gen là số nhị phân tám bit sử dụng để xác định luật cho ký tự không kết khi nó được mở rộng. Nếu số thập phân biểu diễn bởi Gen lớn hơn số các luật cho các ký tự không kết thì toán tử dư sẽ được sử dụng để tính toán số luật.
Giả sử ta có văn phạm G là văn phạm CFG, G = (∑, , , ), trong đó
∑ = +, −, , là tập các ký hiệu kết, = , là tập các ký hiệu không
kết và tập quy luật sinh như sau: 0: EXP →EXP OP EXP 1: EXP →A
2: EXP →B 0: OP →* 1: OP →/
Hình vẽ sau là ví dụ ánh xạ giữa kiểu Gen và kiểu hình trong GE đối với văn phạm nêu trên
Hình vẽ 1.10 Một ví dụ về ánh xạ giữa kiểu Gen và kiểu hình trong GE
Có hai vấn đề chính đối với biểu diễn GE. Đầu tiên là một kiểu Gen hợp lệ có thể mã hóa ra kiểu hình không hợp lệ (không tính được độ tốt), chẳng hạn như trường hợp trên, nếu kiểu Gen là “0310” sẽ không thể giải mã được vì quá trình đó không bao giờ kết thúc, nó mã hóa ra chuỗi không kết thúc (A-(A-(A-
24 (A-…)))). Việc này có thể xử lý bằng cách gán cho cá thể đó độ tốt thấp, tuy nhiên sẽ là không đơn giản nếu số lượng cá thể kiểu này nhiều.
Vấn đề thứ hai gặp phải là nó không tuân theo luật nhân quả, mặc dù có những toán tử có những thay đổi nhỏ và có thể kiểm soát được những thay đổi trong kiểu Gen, kết quả thay đổi trong kiểu hình là không dự đoán trước được. Một thay đổi nhỏ trong một Gen ở một vị trí có thể thay đổi hoàn toàn của tất cả các Gen theo sau đó, đặc biệt, nó có thể làm thay đổi một kiểu hình từ hợp lệ thành không hợp lệ. Ví dụ như chuỗi Gen “011100001” là chuỗi Gen hợp lệ, nếu đột biến Gen số 4 thành 0, nó sẽ trở thành “011000001”, đây là kiểu hình không hợp lệ.
1.4.3 Một số vấn đề gặp phải với GGGP
Cũng như với GP, hệ thống GGGP cũng gặp phải những vấn đề. Trong hệ thống GGGP dựa trên biểu diễn dạng cây sẽ rất khó khăn để thiết kế các toán tử có thay đổi nhỏ và đóng. Ngoài những ràng buộc bởi cây văn phạm GP, cây dẫn xuất trong GGGP còn bị ràng buộc bởi luật viết lại của văn phạm. Do đó, một