Một trong những giải pháp tốt nhất có khả năng dựa trên thư giãn lập trình tuyến tính hoặc lập trình số nguyên trực tiếp . Đối với trường hợp sau, việc phân nhánh và quay lui sẽ được ẩn giấu và bạn sẽ không phải tự mình quản lý nó.
Tôi đã thấy nó được giải quyết theo hai cách sử dụng kỹ thuật này. Chúng tôi có thể cải thiện một chút thuật toán giới hạn của bạn.
Phương pháp sách giáo khoa
Sử dụng biến nhị phân xtôi j đại diện f( i ) = j, bạn có thể định nghĩa các biến liên tục f( i ) =Σnj = 1jxtôi j
Thêm các ràng buộc ΣTôixtôi j= 1 và Σjxtôi j= 1 đại diện cho một vị trí được gán một và chỉ một nút.
Đối với mỗi cạnh, chi phí ce có hai ràng buộc: ce≥ f( i ) - f( j ) và ce≥ f( j ) - f( tôi )và bạn muốn giảm thiểu Σece
Bạn có thể đưa ra vấn đề này cho một người giải quyết lập trình số nguyên, họ sẽ rất vui khi thực hiện quay lui cho bạn và hơn thế nữa - hoặc bạn có thể tự giải quyết việc thư giãn lập trình tuyến tính (chỉ khi bạn muốn tìm hiểu, người giải quyết tối ưu hóa nội bộ).
Thư giãn khác
Thay vì sử dụng các vị trí làm biến nhị phân, bạn có thể sử dụng f( i ) < f( j ) tức là nút Tôi đi trước nút j. Điều này phù hợp hơn nếu bạn muốn tự phân nhánh và không chỉ định rõ ràng các biến đó.
Với cách tiếp cận này, đôi khi bạn có thể có một vấn đề nhanh hơn để giải quyết tại mỗi nút - ở đây có thể giải quyết vấn đề dòng chi phí tối thiểu đơn giản hơn như được trình bày trong bài viết này . Tôi sẽ không giới thiệu nó trừ khi bạn sẵn sàng điều tra nhiều thời gian và nghiên cứu về vấn đề của bạn.
Các kỹ thuật khác
Đối với chi nhánh và ràng buộc, mọi ràng buộc thấp hơn trên hàm chi phí của bạn sẽ làm. Đối với các vấn đề nhỏ, cách tiếp cận giới hạn của bạn là hoàn toàn tốt.
Bạn có thể làm cho nó chặt hơn: đối với mỗi cạnh có một nút không có dấu, hãy chọn nhãn miễn phí tốt nhất có thể để ước tính chi phí của nó. Một số cạnh có thể sử dụng cùng một vị trí cho các nút khác nhau, nhưng điều này sẽ tốt hơn so với ước tính chi phí của chúng là 0.
Có nhiều biến thể có thể có trong sơ đồ này: chọn nhãn miễn phí tốt nhất cho mỗi nút không được gắn nhãn (không phân biệt chồng lấp) hoặc chỉ xem xét chồng lấp bên trong các nhóm nút nhỏ.