Tìm tất cả các giải pháp cho một vấn đề lập trình tuyến tính số nguyên (ILP)


8

Vấn đề của tôi là tìm tất cả các giải pháp số nguyên cho ILP. Ví dụ, tôi đang sử dụng ILP với hai biến, nhưng tôi có thể có nhiều hơn hai biến. Tôi mô tả phương pháp tôi hiện đang sử dụng để giải quyết vấn đề này gần cuối, nhưng tôi muốn biết liệu có một thuật toán hoặc phương pháp phù hợp và hiệu quả để giải quyết loại vấn đề này không.

Không có chức năng khách quan, nhưng các ràng buộc cho ILP này là

0-2x-ysố 801-x+3y502+x-y2x,yZ

Vì ILP này có hai biến, tôi có thể kiểm tra trực quan vùng giải pháp bằng cách vẽ đồ thị các đường được hình thành bởi các ràng buộc, đó là

y-2xy-2x-số 8y13x-13y13x+43yx+2yx

Đồ thị

Bằng cách kiểm tra, có 6 giải pháp số nguyên cho : .(x,y){(0,0),(-1,1),(-1,0),(-2,0),(-2,-1),(-3,-1)}

Tuy nhiên, phương pháp hiện tại của tôi là sử dụng lập trình tuyến tính với sự thoải mái không âm và các số nguyên từ nhánh và cắt. Tôi đã cố gắng sử dụng một bộ bốn chức năng mục tiêu: giảm thiểu , tối đa hóa , giảm thiểu , và tối đa hóa . Chúng cung cấp cho một khu vực tìm kiếm nhỏ hơn nhưxxyy

-3x0-1y1

Sau đó tôi lặp lại tất cả các bộ số nguyên hợp lệ trong vùng nhỏ hơn đó và lọc nó cho các bộ dữ liệu thỏa mãn các ràng buộc ban đầu. Các bộ dữ liệu còn lại là tất cả các giải pháp số nguyên hợp lệ.

Câu trả lời:


8

"Lập trình tuyến tính" là một vấn đề tối ưu hóa. Vấn đề mà bạn đang cố gắng giải quyết là đếm các điểm mạng bên trong một đa giác hợp lý lồi hữu hạn.

Vấn đề này có thuật toán đa thức thời gian, trường hợp chung được phát hiện bởi Alexander Barvinok vào năm 1994. Dường như tất cả các thuật toán hiện đại đều dựa trên phương pháp này. Bài báo năm 1999 của Barvinok & Pommershein, Một lý thuyết thuật toán về các điểm lưới trong Polyhedra , có lẽ là phần giới thiệu tốt nhất cho lý thuyết này. (Trên thực tế, có vẻ như Barvinok sau đó đã viết một cuốn sách hoặc chuyên khảo; điều đó có thể còn tốt hơn.)

Có thể có nhiều sự phát triển gần đây hơn tôi biết, nhưng điều này sẽ cho bạn một điểm khởi đầu để theo đuổi các trích dẫn.


Cảm ơn bạn đã quan sát. Tôi không quen thuộc với các chủ đề bạn đề cập, nhưng khi kiểm tra ngắn, tôi tin rằng chúng là điểm khởi đầu tốt để tìm hiểu thêm. Thật không may, danh tiếng của tôi quá thấp để nâng cao bạn.
nối lại

4
Huh. Thật bất ngờ. Kiểm tra xem có tồn tại bất kỳ điểm nguyên nào trong đa giác lồi hay không (cho dù số lượng các điểm đó là 0 hay>0) tương đương với việc kiểm tra tính khả thi của một thể hiện lập trình tuyến tính số nguyên (ILP). ILP là NP-cứng. Vì vậy, tôi đã suy luận rằng đó là NP-hard thậm chí để kiểm tra xem một đa giác có chứa một điểm tích phân hay không, chứ đừng nói đến việc đếm số lượng của chúng. Làm thế nào để chúng ta hòa giải hai sự thật này? Tôi đã đi sai ở đâu?
DW

Điều đáng chú ý có lẽ là thuật toán của Barvinok là đa thức cho một chiều cố định. Nếu số lượng biến được cố định, thuật toán sẽ chia tỷ lệ đa thức khi bạn thêm các ràng buộc. Các trường hợp điển hình mà bạn muốn liệt kê các điểm mạng là những thứ như các giải pháp cho phương trình Diophantine tuyến tính, và ở đó kích thước có xu hướng thấp.
Bút danh

2

Land and Doig (1960) đã đề xuất một phương pháp để giải quyết các vấn đề lập trình rời rạc. Bạn có thể sửa đổi thuật toán của anh ấy để thay vì giải quyết vấn đề tối ưu hóa, bạn đang liệt kê mọi giải pháp số nguyên khả thi có thể.

Tài liệu tham khảo

AH Land và AG Doig (1960). "Một phương pháp tự động để giải quyết các vấn đề lập trình rời rạc". Kinh tế lượng. 28 (3). trang 497 bóng520. doi: 10.2307 / 1910129.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.