Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 7

1.

Lớp Population
Lớp "Population" được sử dụng để đại diện cho một tập hợp các cá thể tiềm
năng có khả năng giải quyết được bài toán. Mỗi cá thể trong populaton là một
bảng Sudoku với kích thước 9x9.
Tập hợp các cá thể này thường được tạo ra thông qua các phương pháp như
lai ghép, đột biến. Việc sử dụng Population giúp cho việc tìm kiếm giải pháp
trở nên hiệu quả hơn, do có thể duy trì một tập hợp các cá thể tiềm năng và tiếp
tục phát triển các cá thể này cho đến khi tìm ra giải pháp tối ưu.
Thuật toán tối ưu phổ biến được sử dụng trong lớp Population bao gồm
thuật toán di truyền và thuật toán quay lui.
Sử dụng thuật toán di truyền để giải Sudoku có thể được mô tả như
sau:
1, Khởi tạo quần thể ban đầu bao gồm một số lượng lớn các bảng
Sudoku khác nhau được tạo ngẫu nhiên.
2, Đánh giá độ thích nghi của mỗi bảng sudoku bằng cách kiểm tra số
lượng ô trống trong bảng và số lượng số đã điền đúng trong các hàng, cột và
khối.
3, Chọn một số bảng tốt nhất để tiến hành lai ghép (crossover) và đột
biến (mutation) để tạo ra thế hệ tiếp theo của các bảng.
4, Lặp lại các bước 2 và 3 cho đến khi tìm thấy giải pháp tối ưu hoặc
đạt đến một số lần lặp tối đa được định trước.
5, Trả về bảng Sudoku tốt nhất trong quần thể cuối cùng.
Các bước cụ thể của thuật toán quay lui để giải Sudoku như sau:
1. Kiểm tra xem ô hiện tại có giá trị hay không. Nếu có, di chuyển
đến ô tiếp theo. Nếu không, tiếp tục bước 2.
2. Thử các giá trị từ 1 đến 9 cho ô hiện tại. Nếu giá trị nào đó hợp lệ
(không bị trùng với các giá trị trong hàng, cột và khối), ghi nhận giá trị đó vào
ô hiện tại. Sau đó, di chuyển đến ô tiếp theo. Nếu không có giá trị nào hợp lệ,
trả lại giá trị rỗng cho ô hiện tại và quay lại ô trước đó để thử các giá trị tiếp
theo.
3. Lặp lại các bước trên cho đến khi tìm thấy lời giải hoặc không
còn ô chưa điền giá trị nào hợp lệ.
1.1. Các thuộc tính, phương thức và chức năng
1.1.1. Các thuộc tính
Đây là một số thuộc tính được sử dụng trong việc tạo ra và giải quyết các bảng
Sudoku bằng thuật toán di truyền. Dưới đây là giải thích chi tiết từng thuộc tính:

 n: Số lượng ô trong một bảng Sudoku(để tạo ra một bảng Sudoku 3x3).
 diemCheo: Điểm cheo được sử dụng trong quá trình lai ghép.
 slBang: Kích thước ban đầu của quần thể được tạo ra để giải quyết bài toán
Sudoku.
 slBangMax: Giới hạn số lượng bảng trong quần thể các bảng sudoku. Nếu số
lượng này vượt quá giới hạn, các bảng yếu sẽ bị loại bỏ để giảm thiểu số lượng.

1
 kMin: Giá trị nhỏ nhất được sử dụng trong quá trình tạo ra bảng Sudoku.
 kMax: Giá trị lớn nhất được sử dụng trong quá trình tạo ra bảng Sudoku.
 tsDotBien: Tỷ lệ đột biến, tức là xác suất một bảng bị đột biến trong quá trình
di truyền.

Ngoài ra, các thuộc tính khác bao gồm:

 Genomes Một danh sách các genome đại diện cho các bảng sudoku.
 GenomeReproducers : Một danh sách các genome sẽ tham gia vào quá trình
lai ghép để tạo ra thế hệ mới.
 GenomeResults: Một danh sách các genome đại diện cho các bảng được tạo ra
từ quá trình lai ghép.
 GenomeFamily: Một danh sách các genome đại diện cho các bảng có liên
quan với nhau.
 CurrentPopulation: Số lượng bảng sudoku hiện tại trong quần thể các bảng
sudoku.
 generation: Số thế hệ hiện tại trong quá trình giải quyết bài toán Sudoku.
 lastGenome: Genome đại diện cho các bảng được tạo ra gần nhất.
 Board : Một mảng hai chiều (9x9) để lưu trữ các giá trị của bảng Sudoku cần
giải.
 SIZE : Kích thước của bảng Sudoku.
 r: Đối tượng Random được sử dụng để tạo ra các giá trị ngẫu nhiên trong quá
trình tạo ra bảng Sudoku.
 isMakeNewGameSuccess: Biến đánh dấu xem quá trình tạo ra bảng

1.1.2. Các phương thức


 Population: Hàm tạo
 makePopulation: Tạo ra một quần thể ban đầu gồm các bảng sudoku
 mutate: thực hiện phép đột biến (mutation) trên genome, là một quá trình ngẫu
nhiên, trong đó một gene của genome được thay đổi giá trị của nó. Kỹ thuật
này giúp tăng tính đa dạng của quần thể và có thể giúp thuật toán di truyền tìm
kiếm các giải pháp tối ưu hơn.
 calcculateFitnessForAll: để tính toán giá trị độ thích nghi (fitness)
 doCrossover: thực hiện quá trình lai ghép giữa các bảng, giúp tạo ra sự đa
dạng của các bảng sudoku trong quần thể và cải thiện khả năng tìm kiếm giải
pháp tối ưu.
 nextGeneration: tạo ra thế hệ(các bảng sudoku) tiếp theo của quần thể và cải
thiện giá trị độ thích nghi của các bảng sudoku trong quần thể.
 CclculateFitnessForAll: tính toán giá trị độ thích nghi (fitness) cho tất cả các
bảng trong danh sách.
 getGenome: trả về bảng sudoku tốt nhất
 makeNewGame: tạo ra một trò chơi Sudoku mới bằng cách sử dụng thuật toán
di truyền
 copyState: tạo ra một bản sao bảng sudoku
 display2: hiển thị bảng sudoku (được biểu diễn bằng một mảng 2 chiều) ra
màn hình console.
2
 solveGame: giải quyết trò chơi Sudoku bằng cách sử dụng thuật toán di truyền
và hiển thị kết quả ra màn hình console.
 isMakeNewGameSuccess: Kiểm tra đã tạo thành công trò chơi hay chưa
 getBoard: trả về bảng sudoku hiện tại
 setBoard: thiết lập bảng sudoku mới
 print: in ra kết quả hiện tại
 makeProblem: Tạo bảng sudoku
 isInRow: Kiểm tra số đã tồn tại trong hàng hay chưa
 isInCol: Kiểm tra số đã tồn tại trong cột hay chưa
 isInBox: Kiểm tra số trong ma trận 3x3
 isOk: Kiểm tra tổng thể xem đúng điều kiện của một bảng sudoku chưa.
 solve: Sử dụng thuật toán BackTracking đệ quy giải bài toán

1.2. Cài đặt các phương thức


 makePopulation:

 mutate, calcculateFitnessForAll:

 doCrossover:

3
 nextGeneration:

 CclculateFitnessForAll, getGenome:

 makeNewGame:

 copyState:
4
 solveGame:

 isMakeNewGameSuccess, getBoard, setBoard, print:

 makeProblem:

5
 isInRow, isInCol:

 isInBox, isOk:

 solve:

6
7

You might also like