Vấn đề của bạn dường như không phải là ", rằng tổng của các" tác nhân "phải cung cấp chính xác một phần năng lượng riêng biệt hoặc không có gì cho mỗi nhu cầu duy nhất ...", phải không? Hoặc bạn không hiểu tôi. Vì vậy, tôi sẽ cố gắng mô tả vấn đề của mình tốt hơn, cũng bởi vì tôi đã tìm ra giải pháp.
Trong vấn đề của tôi, tôi có một tập hợp các đại lý trong đó mỗi đại lý có ngân sách của một số tài nguyên nhất định, những người có thể chia sẻ chi phí của các nhiệm vụ, có thể được "thực hiện" 1 lần hay không (nhiều nhiệm vụ mà không cần phải giao "thực thi" mọi nhiệm vụ). Nó có nghĩa là: tổng các giải pháp một phần của các tác nhân cho nhiệm vụ x nên nhỏ hơn hoặc bằng chi phí của nhiệm vụ x. Mục tiêu là tìm ra tập hợp các nhiệm vụ với hầu hết giá trị mà các đại lý có thể trả.
Tôi đang làm việc với phần mềm gams vì vậy tôi mô tả nó theo kiểu gams: đặt tác nhân, t nhiệm vụ tham số chi phí (t), giá trị (t) tài nguyên tham số (a)
biến dương y (a, t) (không phải int), một phần của tác nhân a cho chi phí của mục tiêu nhiệm vụ t:
maxvalue =e= sum((a,t), value(t) * y(a,t) / cost(t) );
agentresource_max_constraint(a).. sum(t, y(a,t)) =l= resources(a);
taskcost_max_constraint.. sum(a, y(a,t)) =l= cost(t);
Như tôi đã viết, tôi đã có một giải pháp nhưng không biết cách tách các giải pháp nhiệm vụ một phần. Nhưng bây giờ tôi phát hiện ra rằng tôi có thể xây dựng một ràng buộc với một
biến nhị phân z(t)
taskcost_bin_constraint z(t) =e= sum(a, y(a,t)) / cost(t);
sum(a, y(a,t)) / cost(t)
trong công thức phương trình là một cái gì đó trong khoảng từ 0 đến 1 và theo ràng buộc này, z
là 0 cho tất cả ít hơn 1 và 1 cho 1. với taskcost_bin_constraint
mục tiêu này sẽ là:
maxvalue =e= sum(t, value(t) * z(t));
Tôi đã tự hỏi nhưng điều này hoạt động và cung cấp cho tôi các giải pháp tốt hơn trong các ràng buộc, để xây dựng một nhiệm vụ đầy đủ hay không.
Có lẽ bạn cũng có thể thêm một ràng buộc như vậy? Một ràng buộc để đáp ứng chính xác các yêu cầu, được biểu thị bằng biểu thức có giá trị từ 0 đến 1.