Professional Documents
Culture Documents
L P Population
L P Population
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.
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
mutate, calcculateFitnessForAll:
doCrossover:
3
nextGeneration:
CclculateFitnessForAll, getGenome:
makeNewGame:
copyState:
4
solveGame:
makeProblem:
5
isInRow, isInCol:
isInBox, isOk:
solve:
6
7