Welfare maximization
The welfare maximization problem is an optimization problem studied in economics and computer science. Its goal is to partition a set of items among agents with different utility functions, such that the welfare – defined as the sum of the agents' utilities – is as high as possible. In other words, the goal is to find an item allocation satisfying the utilitarian rule. An equivalent problem in the context of combinatorial auctions is called the winner determination problem. In this context, each agent submits a list of bids on sets of items, and the goal is to determine what bid or bids should win, such that the sum of the winning bids is maximum. Definitions 
There is a set M of m items, and a set N of n agents. Each agent i in N has a utility function . The function assigns a real value to every possible subset of items. It is usually assumed that the utility functions are monotone set functions, that is,  implies . It is also assumed that . Together with monotonicity, this implies that all utilities are non-negative. An allocation is an ordered partition of the items into n disjoint subsets, one subset per agent, denoted , such that .The welfare of an allocation is the sum of agents' utilities: . The welfare maximization problem is: find an allocation X that maximizes W(X). The welfare maximization problem has many variants, depending on the type of allowed utility functions, the way by which the algorithm can access the utility functions, and whether there are additional constraints on the allowed allocations. Additive agents 
An additive agent has a utility function that is an additive set function: for every additive agent i and item j, there is a value , such that  for every set Z of items. When all agents are additive, welfare maximization can be done by a simple polynomial-time algorithm: give each item j to an agent for whom  is maximum (breaking ties arbitrarily). The problem becomes more challenging when there are additional constraints on the allocation. Fairness constraints 
One may want to maximize the welfare among all allocations that are fair, for example, envy-free up to one item (EF1), proportional up to one item (PROP1), or equitable up to one item (EQ1). This problem is strongly NP-hard when n is variable. For any fixed n ≥ 2, the problem is weakly NP-hard, and has a pseudo-polynomial time algorithm based on dynamic programming. For n = 2, the problem has a fully polynomial-time approximation scheme. There are algorithms for solving this problem in polynomial time when there are few agent types, few item types or small value levels. The problem can also be solved in polynomial time when the agents' additive utilities are binary (the value of every item is either 0 or 1), as well as for a more general class of utilities called generalized binary. Matroid constraints 
Another constraint on the allocation is that the bundles must be independent sets of a matroid. For example, every bundle must contain at most k items, where k is a fixed integer (this corresponds to a uniform matroid). Or, the items may be partitioned into categories, and each bundle must contain at most kc items from each category c (this corresponds to a partition matroid). In general, there may be a different matroid for each agent, and the allocation must give each agent i a subset Xi that is an independent set of their own matroid. Welfare maximization with additive utilities under heterogeneous matroid constraints can be done in polynomial time, by reduction to the weighted matroid intersection problem. Gross-substitute agents 
Gross-substitute utilities are more general than additive utilities. Welfare maximization with gross-substitute agents can be done in polynomial time. This is because, with gross-substitute agents, a Walrasian equilibrium always exists, and it maximizes the sum of utilities. A Walrasian equilibrium can be found in polynomial time. Submodular agents 
A submodular agent has a utility function that is a submodular set function. This means that the agent's utility has decreasing marginals. Submodular utilities are more general than gross-substitute utilities. Hardness 
Welfare maximization with submodular agents is NP-hard. Moreover, it cannot be approximated to a factor better than (1-1/e)≈0.632 unless P=NP. Moreover, a better than (1-1/e) approximation would require an exponential number of querires to a value oracle, regardless of whether P=NP. Greedy algorithm 
The maximum welfare can be approximated by the following polynomial-time greedy algorithm:

 Initialize X1 = X2 = ... = Xn = empty. For every item g (in an arbitrary order):
 Compute, for each agen i, his marginal utility for g, defined as: ui(Xi+g) - ui(Xi). Give item g to an agent with the largest marginal utility. Lehman, Lehman and Nisan prove that the greedy algorithm finds a 1/2-factor approximation (they note that this result follows from a result of Fisher, Nemhauser and Wolsey regarding the maximization of a single submodular valuation over a matroid). The proof idea is as follows. Suppose the algorithm allocates an item g to some agent i. This contributes to the welfare some amount v, which is marginal utility of g for i at that point. Suppose that, in the optimal solution, g should be given to another agent, say k. Consider how the welfare changes if we move g from i to k: 

 The utility of k increases by his marginal utility of g, which at most v by the greedy selection. The marginal utility of the remaining bundle of i increases by at most v. This follows from submodularity: the marginal utility of g, when added to the remaining bundle, cannot be higher than its marginal utility when the algorithm processed it. So, for every contribution of v to the algorithm welfare, the potential contribution to the optimal welfare could be at most 2v. Therefore, the optimal welfare is at most 2 times the algorithm welfare. The factor of 2 is tight for the greedy algorithm. For example, suppose there are two items x,y and the valuations are:

The optimal allocation is Alice: {y}, George: {x}, with welfare 2. But if the greedy algorithm allocates x first, it might allocate it to Alice. Then, regardless of how y is allocated, the welfare is only 1. Algorithms using a value oracle 
A value oracle is an oracle that, given a set of items, returns the agent's value to this set. In this model:

 Dobzinski and Schapira present a polytime -approximation algorithm, and an (1-1/e)≈0.632-approximation algorithm for the special case in which the agents' utilities are set-coverage functions. Vondrak and Calinescu, Chekuri, Pal and Vondrak present a randomized polytime algorithm that finds a (1-1/e)-approximation with high probability. Their algorithm uses a continuous-greedy algorithm - an algorithm that extends a fractional bundle (a bundle that contains a fraction pj of each item j) in a greedy direction (similarly to gradient descent). Their algorithm needs to compute the value of fractional bundles, defined as the expected value of the bundle attained when each item j is selected independently with probability pj. In general, computing the value of a fractional bundle might require 2m calls to a value oracle; however, it can be computed approximately with high probability by random sampling. This leads to a randomized algorithm that attains a (1-1/e)-approximation with high probability. In cases when fractional bundles can be evaluated efficiently (e.g. when utility functions are set-coverage functions), the algorithm can be made deterministic. They mention as an open problem, whether there is a deterministic polytime (1-1/e)-approximation algorithm for general submodular functions. The welfare maximization problem (with n different submodular functions) can be reduced to the problem of maximizing a single submodular set function subject to a matroid constraint: given an instance with m items and n agents, construct an instance with m*n (agent,item) pairs, where each pair represents the assignment of an item to an agent. Construct a single function that assigns, to each set of pairs, the total welfare of the corresponding allocation. It can be shown that, if all utilities are submodular, then this welfare function is also submodular. This function should be maximized subject to a partition matroid constraint, ensuring that each item is allocated to at most one agent. Algorithms using a demand oracle 
Another way to access the agents' utilities is using a demand oracle (an oracle that, given a price-vector, returns the agent's most desired bundle). In this model:
 Dobzinski and Schapira present a polytime (1-1/e)-approximation algorithm. Feige and Vondrak improve this to (1-1/e+ε) for some small positive ε (this does not contradict the above hardness result, since the hardness result uses only a value oracle; in the hardness examples, the demand oracle itself would require exponentially many queries). Subadditive agents 
When agents' utilities are subadditive set functions (more general than submodular), a  approximation would require an exponential number of value queries. Feige presents a way of rounding any fractional solution to an LP relaxation to this problem to a feasible solution with welfare at least 1/2 the value of the fractional solution. This gives a 1/2-approximation for general subadditive agents, and (1-1/e)-approximation for the special case of fractionally-subadditive valuations. Superadditive agents 
When agents' utilities are superadditive set functions (more general than supermodular), a  approximation would require a super-polynomial number of value queries. Single-minded agents 
A single-minded agent wants only a specific set of items. For every single-minded agent i, there is a demanded set Di, and a value Vi > 0, such that . That is, the agent receives a fixed positive utility if and only if their bundle contains their demanded set. Welfare maximization with single-minded agents is NP-hard even when  for all i. In this case, the problem is equivalent to set packing, which is known to be NP hard. Moreover, it cannot be approximated within any constant factor (in contrast to the case of submodular agents). The best known algorithm approximates it within a factor of . General agents 
When agents can have arbitrary monotone utility functions (including complementary items), welfare maximization is hard to approximate within a factor of  for any . However, there are algorithms based on state space search that work very well in practice. See also 

 Utility maximization problem

References 

Optimization algorithms and methods