Assumptions
The envy-graph procedure assumes that each person has aThe 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 aRun-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.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: 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. # Let's start off by giving the X object to a. After that both b and c and unenvied agents. So now let's give the Y object to b. After that c is an unenvied agent. So now let's 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. # Let's start off by giving the X object to a. After that both b and c and unenvied agents. So now let's give the Z object to b. After that c is an unenvied agent. So now let's 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. # Let's start off by giving the Y object to a. After that both b and c and unenvied agents. So now let's give the X object to b. After that c is an unenvied agent. So now let's 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. # Let's start off by giving the Y object to a. After that both b and c and unenvied agents. So now let's give the Z object to b. After that c is an unenvied agent. So now let's 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. # Let's start off by giving the Z object to a. After that both b and c and unenvied agents. So now let's give the X object to b. After that c is an unenvied agent. So now let's 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. # Let's start off by giving the Z object to a. After that both b and c and unenvied agents. So now let's give the Y object to b. After that c is an unenvied agent. So now let's 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. 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. # Let's start off by giving the X object to a. After that both b and c and unenvied agents. So now let's give the Y object to b. After that c is an unenvied agent. So now let's 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. # Let's start off by giving the X object to a. After that both b and c and unenvied agents. So now let's give the Z object to b. After that c is an unenvied agent. So now let's 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. # Let's start off by giving the Y object to a. After that both b and c and unenvied agents. So now let's give the X object to b. After that c is an unenvied agent. So now let's 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. # Let's start off by giving the Y object to a. After that both b and c and unenvied agents. So now let's give the Z object to b. After that c is an unenvied agent. So now let's 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. # Let's start off by giving the Z object to a. After that both b and c and unenvied agents. So now let's give the X object to b. After that c is an unenvied agent. So now let's 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. # Let's start off by giving the Z object to a. After that both b and c and unenvied agents. So now let's give the Y object to b. After that c is an unenvied agent. So now let's 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 you just need 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. 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. # Let's start off by giving the X object to a. After that both b and c and unenvied agents. So now let's give the Y object to b. After that c is an unenvied agent. So now let's 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. # Let's start off by giving the X object to a. After that both b and c and unenvied agents. So now let's give the Z object to b. After that c is an unenvied agent. So now let's 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. # Let's start off by giving the Y object to a. After that both b and c and unenvied agents. So now let's give the X object to b. After that c is an unenvied agent. So now let's 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. # Let's start off by giving the Y object to a. After that both b and c and unenvied agents. So now let's give the Z object to b. After that c is an unenvied agent. So now let's give the last object X to c. Now a is jealous of c, b is jealous of c and c is jealous of a and b so there are two envy cycles, one between a and c and another between b and c. Because the tie breaker is by lexicographic order, the procedure does the a and c envy cycle first then a and c will switch then a is not jealous of anybody, b is jealous of a and c is jealous of b 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. # Let's start off by giving the Z object to a. After that both b and c and unenvied agents. So now let's give the X object to b. After that c is an unenvied agent. So now let's give the last object Y to c. Now a is jealous of b and c, b is not jealous of anybody and c is jealous of a. Since there is an envy cycle between a and c they will switch objects and now a gets Y and c gets Z, 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. # Let's start off by giving the Z object to a. After that both b and c and unenvied agents. So now let's give the Y object to b. After that c is an unenvied agent. So now let's give the last object X 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. However, because there are 2 envy cycles between a, b and c there could be two options. Because the tie breaker is by lexicographic order, a gets X from c, b gets Z from a and c gets Y from b so the outcome would be a gets X, b gets Z and c 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 Z and c gets Y.Extensions
The envy-graph algorithm guarantees EF1 when the items are ''goods'' (- the marginal value of each item is positive for all agents). However, when there are both goods and chores, it does not guarantee EF1. An adaptation called ''generalized envy-graph'' guarantees EF1 even with a mixture of goods and chores. It works whenever the valuations are ''doubly-monotonic'', that is: each agent can partition the items into two subsets: one subset contains goods (- items whose marginal utility is always positive) and the other contains chores (- items whose marginal utility is always negative). When agents have cardinality constraints (i.e., for each category of items, there is an upper bound on the number of items each agent an get from this category), the envy-graph algorithm might fail. However, combining it with theSee also
*References
{{reflist Fair division protocols