您的问题似乎不是,“每个代理的总和必须完全提供离散的能量,或者根本不提供任何能量……”,对吗?否则你不了解我。因此,我会尝试更好地描述我的问题,这也是因为我找到了解决方案。
在我的问题中,我有一组座席,每个座席都有一定资源的预算,他们可以分担任务的成本,应该分“执行”一次(或不执行一次)(多对多分配,而无需“执行”每个任务)。这意味着:任务x的代理商部分解决方案的总和应小于或等于任务x的成本。目的是找到代理商可以支付的最具价值的任务集。
我正在使用gams软件,因此我以gams样式进行描述:设置代理,t任务参数cost(t),value(t)参数resources(a)
正变量y(a,t)(非整数),是任务t目标成本的代理商a的一部分:
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
对于所有小于1的值,其值为0;对于1的值,其值为1。该taskcost_bin_constraint
目标为:
maxvalue =e= sum(t, value(t) * z(t));
我在想,但是这样做可以在约束下为我提供更好的解决方案,以完成或不完成任务。
也许您也可以添加这样的约束?精确满足需求的约束,用值介于0和1之间的表达式表示。