I have to solve an assignment problem between $ {1, points, N } $ agents and $ {1, points, M } $ objects, which comes to maximize:

begin {equation}

sum_ {ij} beta_ {ij} x_ {ij}

end {equation}

where $ x_ {ij} $ equals one if the object $ j $ is assigned to $ i $, $ 0 $ otherwise. The benefit of such assignment is the non-negative value $ beta_ {ij} $.

This problem usually comes with some restrictions:

begin {equation}

sum_i x_ {ij} = 1 ~, ~~ sum_j x_ {ij} = 1

end {equation}

indicating that an object can only be assigned once and that an agent can only assign an object.

As I understand it, this problem can also be seen as a maximum flow in a two-part chart and can be efficiently solved by an auction algorithm (see Bertsekas et al.)

I have to implement additional restrictions labeled $ k = 1, points, K $ which are all the same way: the $ k th one imposes that on a subset of objects $ mathcal {J} _k $, only a limited number of them, say $ P_k $, can be assigned at the same time:

begin {equation}

sum_ {j in mathcal {J} _k} sum_i x_ {ij} le P_k

end {equation}

My question is that I find it quite difficult to solve the previous problem with these new restrictions in a bipartite chart and I wonder if a tripartite chart would be more convenient.

**Below is how you would do it. I would like to turn to people with more experience in this field to assess whether this approach is appropriate or if there is a simpler one.**

I put the first problem with the additional restrictions in the form of a tripartite graph: the first column remains that of the agents and the third column that of the objects, except that the agents and the objects are no longer directly linked.

Between the first and the third column, I insert the column of $ {1, points, K } $ restrictions Leave $ y_ {ik} in {0,1 } $ be the link between the agent $ i $ and restriction $ k $. Additional restriction $ k $ now read:

begin {equation}

0 le sum_i y_ {ik} le P_k

end {equation}

The flow of agents over the restriction. $ k $ It is limited.

Also leave $ z_ {kj} in {0,1 } $ be the link between the constraint $ k $ and object $ j $.

That is, an object $ j $ can be linked to several restrictions, let's leave $ mathcal {K} _j $ be the subset of restrictions in which object $ j $ is involved, that is $ j in mathcal {J} _k $.

The restriction flow $ k $ The objects must be equal to that of the agents to this restriction:

begin {equation}

sum_i y_ {ik} = sum_j z_ {kj}

end {equation}

which means that an agent $ i $ is connected to the restriction $ k $ because there is some object $ j $ linked to him, and vice versa.

Then, returning to the bipartite chart, the link $ x_ {ij} $ between agent $ i $ and object $ j $ is now :

begin {equation}

x_ {ij} = sum_ {k in mathcal {K} _j} y_ {ik} + 1 – | mathcal {K} _j |

end {equation}

This equals only one if the agent $ i $ is connected to all restrictions $ k $ in what object $ j $ is involved. The downside is that $ x_ {ij} $ can be negative Another definition could be:

begin {equation}

x_ {ij} = min_ {k in mathcal {K} _j} {y_ {ik} }

end {equation}

but I would like to remain as linear as possible.

Why $ P_k <| mathcal {J} _k | $ there will always be at least $ | mathcal {J} _k | – P_k $ unassigned objects due to restrictions $ k $.

Let's define a virtual agent $ s $ to which we attach all objects (with zero benefit) not linked to any restrictions $ k $, $ forall k ~~ z_ {kj} = 0 $. The link is denoted $ x_ {sj} in {0,1 } $ because it is a direct link between an agent and objects.

Each object $ j $ must comply:

begin {equation}

sum_ {k in mathcal {K} _j} z_ {kj} + mathcal {K} _j x_ {kj} = mathcal {K} _j

end {equation}

So any object $ j $ is connected to all its limitations, $ forall k in mathcal {K} _j ~, ~ z_ {kj} = 1 $or is connected to the virtual node, $ x_ {sj} = 1 $.

It is clear that if the flow in all restrictions reaches its maximum, it will be at least:

begin {equation}

sum_k (| mathcal {J} _k | -P_k)

end {equation}

unassigned objects, therefore:

begin {equation}

sum_j x_ {sj} ge sum_k (| mathcal {J} _k | -P_k)

end {equation}

Then, each time the links between an object and its restrictions are broken, the object remains unassigned, so that:

begin {equation}

sum_j x_ {sj} – sum_k (| mathcal {J} _k | -P_k) = sum_k y_ {sk}

end {equation}

where $ y_ {sk} $ is the link between the virtual agent and the constraint $ k $whose capacity is $ {0, points, P_k } $ and checks:

begin {equation}

sum_i y_ {ik} + y_ {sk} = P_k ~, ~~ 0 le y_ {sk} le P_k

end {equation}

Returning to the allocation problem, maximization becomes:

begin {equation}

begin {split}

sum_ {ij} beta_ {ij} x_ {ij} = & sum_ {ij} beta_ {ij} biggl ( sum_ {k in mathcal {K} _j} y_ {ik} + 1 – | mathcal {K} _j | biggr) \

= & sum_ {ik} biggl ( sum_ {j in mathcal {J} _k} beta_ {ij} biggr) and_ {ik} + sum_j (1 – | mathcal {K} _j |) sum_i beta_ {ij}

end {split}

end {equation}

so that maximization now takes place between agents and restrictions. So I would like to write the dual formulation of this problem to solve it with an auction algorithm: agents have to buy all the restrictions to which an object is related to be able to assign it.