Tôi đang làm việc trên thư viện thuật toán xấp xỉ nguồn mở cho biểu đồ và mạng bằng cách sử dụng một số gói python phổ biến làm cơ sở. Mục tiêu chính là bao gồm các thuật toán xấp xỉ cập nhật cho các vấn đề NP-Complete trên biểu đồ và mạng. Lý do cho điều này là 1) Tôi chưa thấy một gói hợp nhất (hiện đại) bao gồm điều này và 2) nó sẽ là một công cụ sư phạm tốt đẹp để tìm hiểu về các thuật toán xấp xỉ trên các vấn đề tối ưu hóa NP-Hard.Thuật toán xấp xỉ thử nghiệm đơn vị
Khi xây dựng thư viện này, tôi đang sử dụng các bài kiểm tra đơn vị để kiểm tra sanity (như bất kỳ nhà phát triển thích hợp nào). Tôi hơi thận trọng về bài kiểm tra đơn vị của tôi trong đó bởi bản chất của họ, các thuật toán gần đúng có thể không trả về giải pháp đúng. Hiện tại tôi đang giải quyết một số trường hợp nhỏ bằng tay và sau đó đảm bảo rằng kết quả trả về khớp với kết quả đó, nhưng điều này không phải là mong muốn và cũng không thể mở rộng theo nghĩa thực hiện.
Điều gì sẽ là cách tốt nhất để các thuật toán xấp xỉ kiểm tra đơn vị? Tạo các trường hợp ngẫu nhiên và đảm bảo rằng các kết quả trả về nhỏ hơn giới hạn được đảm bảo bởi thuật toán? Điều đó dường như có dương tính giả (thử nghiệm chỉ có may mắn thời gian đó, không được bảo đảm cho tất cả các trường hợp được dưới ràng buộc).
Nếu bạn tạo "trường hợp ngẫu nhiên" cho các vấn đề NP-complete, làm cách nào để biết câu trả lời thực sự để kiểm tra giới hạn? IMHO bạn vẫn cần phải cẩn thận lựa chọn các trường hợp kiểm tra của bạn. Chọn các trường hợp mà bạn có thể, như một con người, phát hiện ra câu trả lời thực sự, nhưng điều đó có thể hoặc có thể không chứng minh khó khăn cho, hoặc ít nhất là tập thể dục, thuật toán xấp xỉ. Những trường hợp như vậy vẫn có thể được tạo ra theo chương trình để đủ lớn để có thể thực tế. Họ không nên là _random_. –
Mở rộng nhận xét của @ Toay, có một số loại vấn đề khó dễ dàng nếu bạn tạo ra vấn đề; ví dụ: factoring * pq * rất khó, trừ khi bạn đã biết * p * và * q * vì bạn đã tạo chúng. Nguyên tắc tương tự có thể được áp dụng cho các vấn đề về đồ thị/mạng của bạn không? –
+1 Tom đúng như ý tôi bằng cách tạo các trường hợp đã biết theo chương trình. Tôi hơi do dự khi thêm một câu trả lời vào lúc này bởi vì tôi không phải là một thẩm quyền trong lĩnh vực này; có lẽ ai đó có thể đến bởi những người có kinh nghiệm ở đây. Tôi chỉ cố gắng đặt một lá cờ đỏ xung quanh từ "ngẫu nhiên". –