We have a set of bidders \(K\), \(|K| = k\) and a set of all kinds of goods for sale \(U\), \(|U| = m\). Each good \( e \in U\) is available in \(b_e \in \mathbb{N}\) copies, \( B = min_e \{b_e\}\). Let \(v_{i,S} > 0\) be the valuation of a bidder \( i \in K\) for a bundle \(S \subseteq U\).
Winner determination problem can be formulated as the following integer linear program:
\begin{eqnarray*} \mbox{max:} & \sum_{i \in K} \sum_{S \subseteq U} v_{i,S} x_{i,S} & \\ \mbox{subject to:} & & \\ & \sum_{i \in K} \sum_{S: S \subseteq U, e \in S} x_{i,S} \leq b_e & \mbox{ for every } e\in U\\ & \sum_{S \subseteq U} x_{i,S} \leq 1 & \mbox{ for every } i\in K\\ & x_{i,S} \in \{0,1\} & \mbox{ for every } i\in K, S \subseteq U\\ \end{eqnarray*}
where \(x_{i,S}\) is 1 iff a bidder \( i \) gets assigned a bundle \( S \). Bidders are supposed to specify their bids through a \(\gamma\)-oracle (see gamma oracle query): given prices \( p_j \) for each \( j \in U\), and a bidding threshold \( z_i \geq 0 \), a \(\gamma\)-oracle of a bidder \( i \) either decides that \(v_{i,S} \leq z_i\) for all \(S \subseteq U\) (i.e., \( i \) cannot buy anything), or otherwise the oracle outputs \(S^* \subseteq U\) such that \( \frac{\sum_{j \in S^*} p_j}{v_{i,S^*} - z_i} \leq \gamma \cdot \frac{\sum_{j \in S} p_j}{v_{i,S} - z_i} \) for all \(S \subseteq U\) with \(v_{i, S} > z_i \).
We solve the problem using a combinatorial, primal dual algorithm.
complete example is winner_determination_in_MUCA_example.cpp
\(e \cdot (2 \gamma + 1) \cdot m^{1 / (B + 1)}\).
Time complexity: \(O(m + k^2 * \log_{1 + 2 \gamma} (c_{max} / c_{min}) * GO_{time})\), where \(GO_{time}\) is the time complexity of one gamma oracle query, \(c_{max} / c_{min}\) is respectively the maximum / minimum \(c_{i, S}\).
Memory complexity: \(O(k + \min(\sum_{j \in U} b_e, m * k) + GO_{mem})\), where \(GO_{mem}\) is the memory complexity of one gamma oracle query.
The algorithm is described in [3], section 6.