22

Tôi là newbie cho lập trình tuyến tính nguyên. Tôi định sử dụng bộ giải mã lập trình tuyến tính số nguyên để giải quyết vấn đề tối ưu hóa tổ hợp của tôi. Tôi quen thuộc hơn với C++/lập trình hướng đối tượng trên một IDE. Bây giờ tôi đang sử dụng NetBeans với Cygwin để viết các ứng dụng của tôi hầu hết thời gian.Làm cách nào để chọn trình giải mã lập trình tuyến tính nguyên?

Tôi có thể hỏi liệu có giải pháp ILP dễ sử dụng cho tôi không? Hoặc nó phụ thuộc vào vấn đề tôi muốn giải quyết? Tôi đang cố gắng thực hiện một số tối ưu hóa ánh xạ tài nguyên. Vui lòng cho tôi biết nếu bạn có thêm thông tin.

Cảm ơn bạn rất nhiều, Cassie.

Trả lời

1

Linear Programming từ Wikipedia bao gồm một vài thuật toán khác nhau mà bạn có thể thực hiện một số kỹ thuật để xem có thể hoạt động tốt nhất cho bạn. Liệu điều đó có giúp ích hay bạn muốn một cái gì đó cụ thể hơn?

4

Đối với các vấn đề lớn, bạn có thể xem AMPL, là một thông dịch viên tối ưu hóa với nhiều backend solvers khả dụng. Nó chạy như a separate process; C++ sẽ được sử dụng để ghi dữ liệu đầu vào.

Sau đó, bạn có thể thử nhiều giải pháp hiện đại khác nhau.

8

Nếu những gì bạn muốn là chương trình số nguyên hỗn hợp tuyến tính, thì tôi sẽ trỏ đến Coin-OR (và cụ thể cho mô-đun CBC). Đó là phần mềm miễn phí (như lời nói) Bạn có thể sử dụng nó với một ngôn ngữ cụ thể, hoặc sử dụng C++.

Sử dụng C++ nếu dữ liệu của bạn cần nhiều tiền xử lý hoặc nếu bạn muốn đặt tay vào bộ giải (chọn điểm trục, tạo cột, thêm vết cắt ...).

Sử dụng ngôn ngữ được tích hợp nếu bạn muốn sử dụng bộ giải làm hộp đen (bạn chỉ quan tâm đến kết quả và sự cố dễ dàng hoặc đủ cổ điển để giải quyết mà không cần chỉnh sửa).

Nhưng trong các thẻ bạn đề cập đến thuật toán di truyền và thuật toán đồ thị. Có lẽ bạn nên bắt đầu bằng cách giải quyết tốt hơn vấn đề của bạn ... Đối với đồ thị tôi thích tăng cường rất nhiều :: Biểu đồ

+0

Cảm ơn bạn rất nhiều. Vấn đề của tôi về cơ bản là việc ánh xạ tới các máy trên một biểu đồ nhiệm vụ để lên lịch. Vì vậy, tôi có một đồ thị nhiệm vụ. Mỗi nút đại diện cho một công việc cần được vận hành trên một máy. Việc ánh xạ các công việc khác nhau cho các máy tính dẫn đến tổng thời gian lên lịch khác nhau trên con đường tới hạn. Mục tiêu của tôi là tìm thời gian lập kế hoạch minimun của một số nhiệm vụ giữa các công việc với máy. Vì vậy, làm bất cứ ai biết bất kỳ giải quyết sử dụng dễ dàng mà không yêu cầu backgound lập trình mạnh mẽ cho tôi để sử dụng? Cảm ơn nhiều.Cassie – Cassie

+2

Vâng, loại lịch trình này là một lĩnh vực nghiên cứu hoàn chỉnh. Một số vấn đề có thể được giải quyết bằng thuật toán đường đi ngắn nhất (nếu bạn không có ràng buộc về nhiệm vụ đồng thời). Nếu máy của bạn có thể đọc được, thì có các thuật toán đa thức đơn giản. Nếu không, rất có thể là tốt nếu bạn gặp khó khăn. Hãy thử sử dụng CBC như một hộp đen (nhưng bạn sẽ cần phải tìm hiểu làm thế nào để mô hình hóa các vấn đề đó trong một mô hình tuyến tính), hoặc cố gắng mã mã phân nhánh của riêng bạn :) –

8

Tôi đã sử dụng lp_solve (http://lpsolve.sourceforge.net/5.5/) vào một vài trường hợp thành công. Nó là trưởng thành, tính năng phong phú và được tài liệu cực kỳ tốt với rất nhiều lời khuyên tốt nếu kỹ năng lập trình tuyến tính của bạn là gỉ. Lập trình tuyến tính số nguyên không chỉ là phần bổ sung mà còn được nhấn mạnh với gói này.

Chỉ cần nhận thấy rằng bạn nói rằng bạn là 'người mới' ở đây. Vâng, sau đó tôi khuyên bạn nên gói này vì tài liệu có đầy đủ các ví dụ và hướng dẫn nhẹ nhàng. Các gói khác mà tôi đã thử có xu hướng giả định rất nhiều người dùng.

2

Nhìn vào GLPK. Đi kèm với một vài ví dụ, và làm việc với một tập hợp con của AMPL, mặc dù IMHO hoạt động tốt nhất khi bạn gắn bó với C/C++ để thiết lập mô hình. Bản sao với các mô hình khá lớn quá.

Các vấn đề liên quan