7

Tôi đang làm việc trên một ứng dụng lập kế hoạch công việc tương tác. Đưa ra một tập hợp các tài nguyên với các hồ sơ khả năng/availabilty tương ứng, một tập hợp các công việc được thực thi trên các tài nguyên này và một tập hợp các ràng buộc xác định chuỗi công việc và thời gian bắt đầu/kết thúc sớm nhất/mới nhất cho công việc mà tôi muốn cho phép người dùng di chuyển thủ công công việc xung quanh. Về cơ bản tôi muốn người dùng có thể "lấy" một nút của mạng công việc và kéo về phía trước/ngược thời gian mà không vi phạm bất kỳ ràng buộc nào.Biến đổi đồ thị bị ràng buộc trong lập lịch trình các ứng dụng

Hình ảnh hiển thị một cấu hình ví dụ đơn giản. Công việc hình tam giác ở cuối biểu thị thời gian kết thúc mới nhất cho tất cả các công việc, các đường kết nối giữa các công việc áp đặt một lệnh trên các công việc và các thanh màu xám/xanh biểu thị tính sẵn sàng và tải tài nguyên.

Bạn có thể kéo bất kỳ công việc nào để nén lịch biểu. Lưu ý rằng công việc sẽ thay đổi về độ dài do các hồ sơ năng lực khác nhau.

Tôi đã triển khai thuật toán băm quảng cáo mà kinda hoạt động. Tuy nhiên vẫn còn những trường hợp nó sẽ thất bại và vi phạm một số ràng buộc. Tuy nhiên, kể từ khi job-shop-scheduling là một lĩnh vực được nghiên cứu tốt với rất nhiều thuật toán và chẩn đoán cho việc tìm kiếm một giải pháp tối ưu (hoặc khá tốt) cho vấn đề NP-hard chung - tôi nghĩ các giải pháp nên tồn tại cho tập hợp con dễ dàng hơn. Tôi đã xem xét các chủ đề lập trình hạn chế và thậm chí cả các giải pháp dựa trên vật lý (các cơ quan cứng nhắc được kết nối thông qua các khớp tĩnh) nhưng cho đến nay không thể tìm thấy bất cứ điều gì phù hợp. Bất kỳ gợi ý/gợi ý/mẹo/từ khóa tìm kiếm cho tôi?

+1

Tôi không hiểu vấn đề đầy đủ, xin lỗi. Tại sao độ dài công việc thay đổi? Bạn có ý gì khi bạn nói lấy và di chuyển nút? Là một công việc một nút? Cảm ơn. –

+0

Mạng như được hiển thị ở trên có thể được sửa đổi thông qua thao tác kéo và thả tương tác. Nhấp vào một công việc (các nút trong biểu đồ có nhãn "công việc") và di chuyển nó ở nơi khác. Vì thời gian công việc phụ thuộc vào khả năng có sẵn (thanh màu xám/xanh lục), độ dài công việc sẽ thay đổi trong khi di chuyển. – BuschnicK

+0

Tôi cũng không hiểu. Có phải bạn muốn các công việc khác di chuyển xung quanh để thỏa mãn một phong trào công việc cụ thể - giả sử bạn kéo job032 sang trái, job029 và job031 bằng cách nào đó sắp xếp lại bản thân để job031 vẫn kết thúc trước khi job032 bắt đầu? Nếu vậy, bạn sẽ cần phải cho chúng tôi biết những gì chúng tôi được phép làm cho các công việc khác - di chuyển đúng lúc, thay đổi tài nguyên, v.v ...? Tài nguyên có chia sẻ đơn giản (tức là hai công việc đơn vị hoạt động đang chạy trên cùng một tài nguyên mất 2 đơn vị thời gian để hoàn thành)? –

Trả lời

0

Bạn có thể thay đổi thuật toán tuyên truyền ràng buộc Waltz để đối phó với việc thay đổi các ràng buộc để nhanh chóng tìm ra nếu một giải pháp đã cho là hợp lệ. Tôi không có một tham chiếu đến tay, nhưng điều này có thể chỉ cho bạn đi đúng hướng: http://www.sciencedirect.com/science?_ob=ArticleURL&_udi=B6TYF-41C30BN-5&_user=809099&_rdoc=1&_fmt=&_orig=search&_sort=d&_docanchor=&view=c&_searchStrId=1102030809&_rerunOrigin=google&_acct=C000043939&_version=1&_urlVersion=0&_userid=809099&md5=696143716f0d363581a1805b34ae32d9

1

tôi khuyên bạn hãy nhìn vào Mozart Oz, nếu giao dịch vấn đề của bạn chỉ với số nguyên. Oz có hỗ trợ tuyệt vời cho miền hạn chế đặc điểm kỹ thuật ràng buộc, suy luận và tối ưu hóa. Trong trường hợp của bạn thông thường bạn sẽ làm như sau:

  1. Chỉ định ràng buộc của bạn theo cách khai báo. Trong đó, bạn sẽ chỉ định tất cả các biến và tên miền của chúng (giả sử V1: 1 # 100, có nghĩa là biến số V1 có thể nhận giá trị trong phạm vi 1--100). Một số biến số có thể có giá trị trực tiếp, giả sử V1: 99. Ngoài ra, bạn sẽ chỉ định tất cả các ràng buộc trên các biến.

  2. Yêu cầu hệ thống giải pháp: hoặc bất kỳ giải pháp nào đáp ứng các ràng buộc hoặc giải pháp tối ưu. Sau đó, bạn sẽ hiển thị giải pháp này trên giao diện người dùng.

  3. Giả sử người dùng thay đổi giá trị của một biến, có thể là thời điểm bắt đầu thời gian của một tác vụ. Bây giờ bạn có thể chuyển sang bước 1 để đăng sự cố lên bộ giải mã số Oz. Lần này, giải quyết vấn đề nhiều nhất có thể sẽ không mất nhiều thời gian như trước đó, vì tất cả các biến đã được khởi tạo.

    Có thể trường hợp người dùng đã chọn một giá trị không phù hợp. Trong trường hợp đó , người giải quyết trả về null. Sau đó, bạn có thể đưa giao diện người dùng đến giải pháp trước đó.

Nếu Oz phù hợp với nhu cầu của bạn và bạn thích ngôn ngữ, sau đó bạn có thể muốn viết một hạn chế giải như một máy chủ mà lắng nghe trên một socket. Bằng cách này, bạn có thể giữ trình giải quyết ràng buộc tách biệt với phần còn lại của mã, bao gồm giao diện người dùng.

Hy vọng điều này sẽ hữu ích.

+0

Cảm ơn con trỏ. Tôi đã quét nhanh nó và tôi hơi hoài nghi về: 1) học một ngôn ngữ mới yêu cầu tôi phải chỉnh sửa/cải tổ vấn đề 2) công cụ Mozart Oz trông giống như một khung tối ưu hóa tìm kiếm lịch làm việc tối ưu. Tôi chỉ tìm kiếm một cách thỏa mãn tất cả các ràng buộc khi chỉnh sửa thủ công mạng 3) hiệu suất tương tác thời gian thực? – BuschnicK

+0

1) Đó là một mối quan tâm hợp lệ, tôi đoán vậy. 2) Bạn chỉ có thể làm "hạn chế sự hài lòng". Bạn chỉ có thể tối ưu hóa nếu muốn. Vui lòng xem ví dụ "Gửi tiền nhiều hơn". 3) Đối với sự hài lòng ràng buộc (không tối ưu hóa), hiệu suất tương tác không phải là một vấn đề. – prp

0

Bạn đã cân nhắc sử dụng công cụ Lập trình tuyến tính nguyên bản (như lp_solve) chưa? Nó khá phù hợp để lập kế hoạch ứng dụng.

1

tôi sẽ bỏ phiếu ủng hộ việc lập trình khó khăn vì nhiều lý do:

1) CP sẽ nhanh chóng cho bạn biết nếu không có lịch trình satifies khó khăn của bạn

2) Nó sẽ xuất hiện mà bạn muốn cung cấp cho người dùng của bạn một giải pháp khả thi để bắt đầu nhưng cho phép họ thao tác công việc để cải thiện giải pháp. CP là tốt ở đây quá.

3) Cách tiếp cận MILP thường phức tạp và khó có thể xây dựng và bạn phải tạo một hàm mục tiêu giả tạo.

4) CP không khó học đặc biệt đối với các lập trình viên có kinh nghiệm - nó thực sự đến từ cộng đồng khoa học máy tính hơn là các nhà nghiên cứu hoạt động (như tôi).

Chúc may mắn.

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