Ваша проблема, похоже, не в том, что «сумма агентов» должна поставлять ровно определенную порцию энергии или ничего для каждого отдельного спроса ... », верно? Или ты меня не понял. Поэтому я постараюсь описать мою проблему лучше, потому что я нашел решение.
В моей задаче у меня есть набор агентов, каждый из которых имеет бюджет определенных ресурсов, которые могут разделить стоимость задач, которые должны быть «выполнены» 1 раз или нет (назначение «многие ко многим» без необходимости «выполнить» каждое задание). Это означает: сумма частичных решений агентов для задачи x должна быть меньше или равна стоимости задачи x. Цель состоит в том, чтобы найти набор задач с наибольшей ценностью, которые могут заплатить агенты.
Я работаю с игровым программным обеспечением, поэтому я описываю его в игровом стиле: установите агентов, t задач, стоимость (t), значение (t), ресурсы ресурсов (a)
положительная переменная y (a, t) (не-int), часть агента a для стоимости цели 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);
Как я уже писал, у меня было решение, но я не знал, как отделить частичные решения задач. Но теперь я узнал, что я могу построить ограничение с
двоичная переменная z(t)
taskcost_bin_constraint z(t) =e= sum(a, y(a,t)) / cost(t);
sum(a, y(a,t)) / cost(t)
в формуле уравнения это что-то между 0 и 1 и по этому ограничению, z
0 для всех менее 1 и 1 для 1. с этой taskcost_bin_constraint
целью будет:
maxvalue =e= sum(t, value(t) * z(t));
Мне было интересно, но это работает и дает мне лучшие решения в условиях ограничения, чтобы выполнить задачу полностью или нет.
Может быть, вы также можете добавить такое ограничение? Ограничение для точного выполнения требований, выраженное в выражении со значением от 0 до 1.