あなたの問題は、「「エージェント」の合計が、個々の需要ごとにエネルギーの個別の部分を正確に供給しなければならないか...」ということではないようです。または、あなたは私を理解しませんでした。それで、解決策を見つけたので、私は私の問題をより良く説明しようとします。
私の問題では、各エージェントが特定のリソースの予算を持ち、タスクのコストを共有できるエージェントのセットがあります。エージェントは1回「実行」する必要があります(多対多の割り当てを必要とせずに割り当てます)すべてのタスクを「実行」します)。つまり、タスク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の間であり、この制約により、1 z
未満の場合はすべて0、1の場合は1です。このtaskcost_bin_constraint
目的は次のようになります。
maxvalue =e= sum(t, value(t) * z(t));
私は疑問に思っていましたが、これはうまく機能し、制約の下でより良いソリューションを提供し、タスクを完全に構築するかどうかを決定します。
そのような制約を追加することもできますか?要求を正確に満たすための制約。値は0〜1の式で表されます。