The envy-graph procedure (also called the envy-cycles procedure) is a procedure for fair item allocation. It can be used by several people who want to divide among them several discrete items, such as heirlooms, sweets, or seats in a class.
Ideally, we would like the allocation to be envy-free (EF), i.e., to give each agent a bundle that they prefer over the bundles of all other agents. However, the items are discrete and cannot be cut, so an envy-free assignment might be impossible (for example, consider a single item and two agents). The envy-graph procedure aims to achieve the "next-best" option -- envy-freeness up to at most a single good (EF1): it finds an allocation in which the envy of every person towards every other person is bounded by the maximum marginal utility it derives from a single item. In other words, for every two people i and j, there exists an item such that, if that item is removed, i does not envy j.
The procedure was presented by Lipton and Markakis and Mossel and Saberi and it is also described in .
Assumptions The envy-graph procedure assumes that each person has a cardinal utility function on bundles of items. This utility function has to be monotone (the utility of a set is at least as large as the utility of its subsets). However, it does not have to be additive. I.e, the items are not assumed to be independent goods.
The agents do not have to actually report their cardinal utility: it is sufficient that they know how to rank bundles.
The procedure Order the items arbitrarily. While there are unassigned items: Ensure that there is an unenvied agent - an agent that no other agent envies. Give the next item to the unenvied agent. In step 2, if there is no unenvied agent, it means that there is a directed cycle in the envy graph - a directed graph in which each agent points to all agents he envies. Cycles can be removed by cyclic exchange of bundles. After all cycles are removed, the envy-graph must have a node with no incoming edges; this node represents an unenvied agent.
The resulting allocation is not necessarily EF, but it is envy-free except one item. This is true not only in the final allocation but also in each intermediate allocation: since an item is always given to an unenvied agent, the envy of all other agents after that allocation is at most a single item.
Run-time analysis Suppose there are m items. Each allocation of an item adds to the envy-graph at most n-1 edges. Hence, at most edges are added overall. Each cycle-removal removes at least two edges. Hence, we need to run the cycle-removal step at most times. Finding a cycle can be done in time using e.g. depth-first search. All in all, the run-time is .
Examples In these examples the preferences go from 1-3 where the higher the number the higher the preference. Also a, b and c are people while X, Y and Z are objects.
1) With 3 people and 3 objects, every possible allocation will be a different result. This case happens when each of the three people have the same preferences. There are six different ways to allocate the objects:
+6 Different ResultsXYZa321b321c321
In the beginning because no one has anything then all of them are unenvied agents and this is the same in all the cases. In case of a tie, we break ties between unenvied agents in lexicographic order.
Start off by giving the X object to a. After that both b and c are unenvied agents. So now let us give the Y object to b. After that c is an unenvied agent. So now let us give the last object Z to c. Now c is jealous of b and a, b is jealous of a and a is not jealous of anybody and now since there is no envy cycle and no more objects to hand out then the procedure ends and the final result is a gets X, b gets Y and c gets Z. Start off by giving the X object to a. After that both b and c are unenvied agents. So now let us give the Z object to b. After that c is an unenvied agent. So now let us give the last object Y to c. Now c is jealous of a, b is jealous of a and c and a is not jealous of anybody and now since there is no envy cycle and no more objects to hand out then the procedure ends and the final result is a gets X, b gets Z and c gets Y. Start off by giving the Y object to a. After that both b and c are unenvied agents. So now let us give the X object to b. After that c is an unenvied agent. So now let us give the last object Z to c. Now c is jealous of a and b, a is jealous of b and b is not jealous of anybody and now since there is no envy cycle and no more objects to hand out then the procedure ends and the final result is a gets Y, b gets X and c gets Z. Start off by giving the Y object to a. After that both b and c are unenvied agents. So now let us give the Z object to b. After that c is an unenvied agent. So now let us give the last object X to c. Now a is jealous of c, b is jealous of a and c and c is not jealous of anybody and now since there is no envy cycle and no more objects to hand out then the procedure ends and the final result is a gets Y, b gets Z and c gets X. Start off by giving the Z object to a. After that both b and c are unenvied agents. So now let us give the X object to b. After that c is an unenvied agent. So now let us give the last object Y to c. Now c is jealous of b, a is jealous of b and c and b is not jealous of anybody and now since there is no envy cycle and no more objects to hand out then the procedure ends and the final result is a gets Z, b gets X and c gets Y. Start off by giving the Z object to a. After that both b and c are unenvied agents. So now let us give the Y object to b. After that c is an unenvied agent. So now let us give the last object X to c. Now b is jealous of c, a is jealous of b and c and c is not jealous of anybody and now since there is no envy cycle and no more objects to hand out then the procedure ends and the final result is a gets Z, b gets Y and c gets X.
2) With 3 people and 3 objects, every possible allocation will be the same result. This case happens when each of the three people have completely different preferences, because each person has something else they prefer no matter what they will get what they want.
+Same ResultXYZa321b132c213
There are six different ways to allocate the objects:
In the beginning because no one has anything then all of them are unenvied agents and this is the same in all the cases. In case of a tie, we break ties between unenvied agents in lexicographic order.
Start off by giving the X object to a. After that both b and c are unenvied agents. So now let us give the Y object to b. After that c is an unenvied agent. So now let us give the last object Z to c. Now a, b and c are all not jealous of anybody and now since there is no envy cycle and no more objects to hand out then the procedure ends and the final result is a gets X, b gets Y and c gets Z. Start off by giving the X object to a. After that both b and c are unenvied agents. So now let us give the Z object to b. After that c is an unenvied agent. So now let us give the last object Y to c. Now c is jealous of b, b is jealous of c and a is not jealous of anybody. Since there is an envy cycle between b and c, they will switch objects and now b gets Y and c gets Z. And now since there is no envy cycle and no more objects to hand out then the procedure ends and the final result is a gets X, b gets Y and c gets Z. Start off by giving the Y object to a. After that both b and c are unenvied agents. So now let us give the X object to b. After that c is an unenvied agent. So now let us give the last object Z to c. Now b is jealous of a, a is jealous of b and c is not jealous of anybody. Since there is an envy cycle between b and c, they will switch objects and now a gets X and b gets Y. And now since there is no envy cycle and no more objects to hand out then the procedure ends and the final result is a gets X, b gets Y and c gets Z. Start off by giving the Y object to a. After that both b and c are unenvied agents. So now let us give the Z object to b. After that c is an unenvied agent. So now let us give the last object X to c. Now b is jealous of a, a is jealous of c and c is jealous of b. Since there is an envy cycle between a, b and c, they will rotate objects against the direction of jealousy and now a gets X, b gets Y and c gets Z. And now since there is no envy cycle and no more objects to hand out then the procedure ends and the final result is a gets X, b gets Y and c gets Z. Start off by giving the Z object to a. After that both b and c are unenvied agents. So now let us give the X object to b. After that c is an unenvied agent. So now let us give the last object Y to c. Now b is jealous of a and c, a is jealous of b and c and c is jealous of b and a. Since there is an envy cycle between a, b and c they will rotate objects against the direction of jealousy and now a gets X and b gets Y and c gets Z. And now since there is no envy cycle and no more objects to hand out then the procedure ends and the final result is a gets X, b gets Y and c gets Z. Start off by giving the Z object to a. After that both b and c are unenvied agents. So now let us give the Y object to b. After that c is an unenvied agent. So now let us give the last object X to c. Now c is jealous of a, a is jealous of c and b is not jealous of anybody. Since there is an envy cycle between a and c, they will switch objects and now a gets X and c gets Z. And now since there is no envy cycle and no more objects to hand out then the procedure ends and the final result is a gets X, b gets Y and c gets Z.
3) With 3 people and 3 objects, any other situation then the first and second example will give between 1 and 6 results. So for that to happen one only needs at least two people to have same preference on one object or at most for two people to have different preferences on the same object.
+3 Different ResultsXYZa321b312c123
There are six different ways to allocate the objects:
In the beginning because no one has anything then all of them are unenvied agents and this is the same in all the cases. In case of a tie, we break ties between unenvied agents in lexicographic order.
Start off by giving the X object to a. After that both b and c are unenvied agents. So now let us give the Y object to b. After that, c is an unenvied agent. So now let us give the last object Z to c. Now a is not jealous of anybody, b is jealous of a and c and c is not jealous of anybody, now since there is no envy cycle and no more objects to hand out then the procedure ends and the final result is a gets X, b gets Y and c gets Z. Start off by giving the X object to a. After that both b and c are unenvied agents. So now let us give the Z object to b. After that c is an unenvied agent. So now let us give the last object Y to c. Now a is not jealous of anybody, b is jealous of a and c is jealous of b, now since there is no envy cycle and no more objects to hand out then the procedure ends and the final result is a gets X, b gets Z and c gets Y. Start off by giving the Y object to a. After that both b and c are unenvied agents. So now let us give the X object to b. After that c is an unenvied agent. So now let us give the last object Z to c. Now b and c are not jealous of anybody and a is jealous of b, now since there is no envy cycle and no more objects to hand out then the procedure ends and the final result is a gets Y, b gets X and c gets Z.