Ràng buộc lập trình Python
Các nhà phát triển Python hiện có thể giải quyết các vấn đề về lập kế hoạch AI (chẳng hạn như vấn đề định tuyến phương tiện và phân công nhân viên) bằng OptaPy. Hãy để tôi chỉ cho bạn cách sử dụng OptaPy và một chút mã Python đơn giản để giải quyết vấn đề tối ưu hóa toán học điển hình. tạo thời khóa biểu học tốt hơn cho giáo viên và học sinh. OptaPy là một dự án mã nguồn mở. Nó có sẵn trong PyPI và có thể sử dụng được từ bản cài đặt Python thông thường. Trong nội bộ, OptaPy sử dụng OptaPlanner, vì vậy nó cần cài đặt JDK. Hiện tại, nó chậm hơn đáng kể so với việc sử dụng OptaPlanner trực tiếp từ Java (hoặc Kotlin cho vấn đề đó), nhưng nó hoạt động và chúng tôi đang nghiên cứu các cách để thu hẹp khoảng cách về hiệu suất. Hãy tối ưu hóa thời gian biểu của trường đó bằng Python thuần túy. Vui lòng theo dõi trong sổ ghi chép OptaPy Jupyter Show
điều kiện tiên quyết
Cài đặt
thời gian biểu của trườngTrong thời khóa biểu ở trường, chúng ta cần gán một danh sách các bài học cho các khoảng thời gian và phòng. Ngoài ra, có một số ràng buộc
Mô hình hóa miềnCác đối tượng được sử dụng trong các ràng buộc được gọi là miền của vấn đề. Trong thời gian biểu của trường, miền bao gồm các bài học, phòng và thời gian biểu Sự kiện vấn đềSự thật vấn đề không thay đổi trong suốt quá trình giải quyết. Phòng và thời gian là ví dụ về sự thật của vấn đề. Tạo một tệp 3 với đoạn mã sau để tạo lớp 4
Trình trang trí 5 đăng ký lớp như một sự thật của vấn đề, điều này cho phép nó được sử dụng trong các ràng buộc. Người trang trí 6 đăng ký 7 làm ID lập kế hoạch cho 4. OptaPlanner yêu cầu ID lập kế hoạch cho một số chức năng, chẳng hạn như tạo các cặp duy nhất. ID lập kế hoạch phải là duy nhất cho các phiên bản của cùng một lớpBây giờ, trong 3, hãy thêm đoạn mã sau để tạo lớp 0
Thực thể lập kế hoạchCác thực thể lập kế hoạch thay đổi trong suốt quá trình giải quyết. Bài học là một thực thể lập kế hoạch, vì các thuộc tính 1 và 2 của nó thay đổi trong suốt quá trình giải. Vì các thuộc tính 1 và 2 thay đổi trong suốt quá trình giải nên chúng được gọi là các biến lập kế hoạch. Hãy thêm đoạn mã sau vào 3 để tạo lớp 6
Trình trang trí 7 đăng ký lớp dưới dạng một thực thể lập kế hoạch, cho phép OptaPlanner gán các biến lập kế hoạch của nó và để nó được sử dụng trong các ràng buộc. Trình trang trí 8 đăng ký một phương thức làm phương thức nhận của một biến lập kế hoạch. Getter phải được đặt tên là 9 và setter phải được đặt tên là 0. Đối số đầu tiên, 1, cho OptaPlanner biết loại giá trị mà OptaPlanner có thể gán cho biến lập kế hoạch này. Đối số thứ hai, 2, cho OptaPlanner biết phạm vi giá trị mà nó lấy giá trị từ. Chúng tôi sẽ giải thích phạm vi giá trị sau trong ví dụ nàyHạn chếCác ràng buộc xác định phép tính điểm hoặc hàm thích nghi của một bài toán lập kế hoạch. Mỗi lời giải của bài toán quy hoạch được chấm điểm. Điểm thể hiện chất lượng của một giải pháp cụ thể. Điểm càng cao càng tốt. OptaPlanner tìm kiếm giải pháp tốt nhất, là giải pháp có số điểm cao nhất được tìm thấy trong thời gian khả dụng. Nó có thể hoặc không thể là giải pháp tối ưu Vì trường hợp sử dụng này có các ràng buộc cứng và mềm, hãy sử dụng lớp HardSoftScore để biểu diễn điểm số
Các ràng buộc cứng được tính trọng số so với các ràng buộc cứng khác. Các ràng buộc mềm cũng có trọng số, so với các ràng buộc mềm khác. Các ràng buộc cứng luôn lớn hơn các ràng buộc mềm, bất kể trọng số tương ứng của chúng Để tính điểm, hãy tạo hàm cung cấp ràng buộc trong tệp 3
Trình trang trí 4 cho phép OptaPlanner sử dụng một chức năng làm trình cung cấp ràng buộc. Hàm phải nhận chính xác một đối số; . Để biết thêm thông tin, hãy xem trong tài liệu OptaPlannerTập hợp các đối tượng miền trong một giải pháp lập kế hoạchMột lớp TimeTable bao bọc tất cả các phiên bản Khe thời gian, Phòng và Bài học của một tập dữ liệu. Hơn nữa, vì nó chứa tất cả các bài học, mỗi bài học có một trạng thái biến lập kế hoạch cụ thể nên lớp TimeTable là một giải pháp lập kế hoạch và có điểm số
Trong 3, hãy thêm đoạn mã sau để tạo lớp 7
Trình trang trí 8 nói với OptaPlanner rằng lớp 7 chứa dữ liệu đầu vào và đầu ra. Trình trang trí 0 cho OptaPlanner biết chức năng cung cấp thông tin về vấn đề. Đối số 1 cho OptaPlanner biết loại dữ kiện mà nó cung cấp (ví dụ: Phòng)Trình trang trí 2 cho OptaPlanner biết hàm cung cấp một phạm vi giá trị, được sử dụng để nhận các giá trị có thể có của các biến lập kế hoạch. Đối số của nó, 3 là một chuỗi được sử dụng trong trang trí 4 để liên kết cả hai (ví dụ: 5 được liên kết với 6Trình trang trí 7 cho OptaPlanner biết chức năng cung cấp các thực thể lập kế hoạch. Đối số 8 cho OptaPlanner biết loại thực thể mà nó cung cấp (ví dụ: Bài học)Trình trang trí 9 cho OptaPlanner biết hàm trả về điểm số. Nó phải được đặt tên là 9 và có một setter tương ứng là 0. Đối số 2 cho OptaPlanner biết loại điểm sẽ sử dụng (ví dụ: 3). Loại nên được lấy từ mô-đun 4giải quyếtĐể giải quyết, trước tiên chúng ta cần tạo một thể hiện của vấn đề. Thêm đoạn mã sau vào 3
Tiếp theo, chúng ta cần tạo một 6, cho OptaPlanner biết về vấn đề và các chiến lược sẽ sử dụng. Trong 7, thêm đoạn mã sau
Đối với 6 ở trên, chúng tôi sử dụng các chiến lược mặc định, sử dụng mô hình mà chúng tôi đã xác định ở trên và đặt nó kết thúc sau 30 giâyCuối cùng, chúng tôi chuyển 6 và trường hợp vấn đề cho hàm 0, hàm này trả về giải pháp tốt nhất cuối cùng được tìm thấy. Thêm đoạn mã sau vào 7 0Giải pháp được trả về là một trường hợp 7 của giải pháp tốt nhất được tìm thấy. Khi giải pháp được định dạng thành một bảng, nó sẽ trông giống như thế này 1Chạy ứng dụngĐể chạy ứng dụng, hãy thực thi tệp chính 2Phần kết luậnVới OptaPy, các nhà phát triển Python hiện có thể sử dụng OptaPlanner bằng mã Python đơn giản (không cần mã Java). Ví dụ đầy đủ có thể được tìm thấy trong khởi động nhanh OptaPy Các ràng buộc trong Python là gì?Ràng buộc python là gì? . a module implementing support for handling CSPs (Constraint Solving Problems) over finite domain.
Lập trình ràng buộc nghĩa là gì?Tối ưu hóa ràng buộc hoặc lập trình ràng buộc (CP) là tên được đặt để xác định các giải pháp khả thi trong số rất nhiều ứng viên, trong đó vấn đề có thể được mô hình hóa dưới dạng . Các vấn đề về CP nảy sinh trong nhiều ngành khoa học và kỹ thuật. . CP problems arise in many scientific and engineering disciplines.
Là hạn chế lập trình trí tuệ nhân tạo?Lập trình ràng buộc là một công nghệ thỏa mãn bản địa bắt nguồn từ khoa học máy tính—lập trình logic, lý thuyết đồ thị và các nỗ lực trí tuệ nhân tạo của những năm 1980
Ràng buộc Lập trình logic được sử dụng để làm gì?Lập trình ràng buộc là một phương pháp giải các bài toán có tính tổ hợp cao dựa trên mô tả bài toán khai báo và một công cụ truyền bá ràng buộc chung . |