Đầu vào:
- Bảng phân rã công việcCpr thể hiện quan hệ công việc trước, công việc sau. Các công việc được đánh số từ 0 tới n-1. n là tổng số lượng công việc.
Đầu ra:
- Mảng một chiều nguyên dương chromosome gồm n phần tử thể hiện thứ tự thực hiện công việc. Giá trị của phần tử của mảng chính là mã số công việc.
Các bƣớc thực hiện:
- Chọn ngẫu nhiên điểm đột biếni từ 0 tới n (n là kích thước mảng chromosome).
- Khởi tạo danh sách một chiều nguyên dương có các giá trị của phần tử trong mảng là giá trị định danh của công việc, các công việc này là các công việc phía
trước và phía sau của chromosome[i] (gen của nhiễm sắc thể tại vị trí i), gọi danh sách này là taskLine. taskLineđược tính toán từ Cpr, taskLine được tính toán bằng một thuật toán khác được học viên trình bày trong luận văn này.
- Tính điểm start: từ vị trí đột biến i, lùi lại các vị trí phía trước cho đến khi giá trị của của gen nằm trong danh sách taskLinethì dừng điểm này là điểm start
tăng start lên một giá trị start =start + 1.
- Tính điểm end: từ vị trí đột biến i, tiến về các vị trí phía trước cho đến khi tìm được giá trị gen nằm trong danh sách taskLinethì dừng, điểm này là điểm end, giảm điểm endđi một giá trị end = end – 1;
- Các phần tử từ ví trí start đến vị trí end là phần tử tại điểm đột biến i có thể đổi chỗ để sinh ra nhiễm sắc thể mới. Chọn phần tử k bất kỳ sao cho start <= k <= end, đổi chỗ phần tử kvà phần tử i,hoặc dịch phần tử i về trƣớc phần tử ksẽ được một nhiễm sắc thể đột biến mới.
Ví dụ áp dụng giải thuật để tạo các cá thể: Áp dụng giải thật đột biến cá thể với tập hợp các công việc có thứ tự công việc trước, công việc sau thể hiện trong hình Hình 3.1 trang 36, có tất cả 8 công việc tập hợp thực hiện công việc theo thứ tự được thể hiện bằng mảng không âm một chiều có 8 phần tử, các giá trị của mảng nằm trong khoảng từ 0 tới 7 và là duy nhất trong mảng. Giả sử nhiễm sắc thể dùng để đột biến là mảng thể hiện như sau:
Giá trị thể hiện chỉ số công việc 0 2 1 5 4 3 6 7
Vị trí công việc trong mảng 0 1 2 3 4 5 6 7 Bước 1: chọn ngẫu nhiên điểm đột biến i = 3 (tương ứng giá trị là 5)
Bước 2: tính tập hợp taskLinecủa điểm i (viết tắt là taskLinei) với i = 3 thì ta cótaskLine3= {0,1,2,5,7}
Bước 3: tính điểm start, từ vị trí 3 lùi về phía trước gặp vị trí 2 có giá trị là 1 thuộc taskLine3, theo thuật toán ta được điểm start= 3
Bước 4: tính điểm end, từ vị trí 3 tiền về phía trước gặp vị trí số 7 có giá trị là 7 thuộc
taskLine3, theo thuật toán tính được điểm end= 6
Bước 5: tiến hành đổi chỗ vị trí 3 với vị trí bất kỳ nằm trong khoảng startvà end, tức là vị trí kthỏa mãn 3<=k<=6, giả sử chọn ngẫu nhiên được k=5. Tiến hành đổi chỗ hai vị trí này cho nhau ta được nhiễm sắc thể đột biến mà vẫn thỏa mãn thứ tự thực hiện công việc trước, công việc sau của bảng phân rã công việc. Kết quả thuật toán sinh ra nhiễm sắc thể mới như sau:
Giá trị thể hiện chỉ số công việc 0 2 1 3 4 5 6 7
Vị trí công việc trong mảng 0 1 2 3 4 5 6 7