\section{Numerical Experiments}
In this section, we present the numerical experiments conducted to evaluate the performance of our proposed method. We consider the problem of designing the revenue-maximizing auction involving multiple goods and a single buyer, as introduced in Section~IV-B.

We know that selling goods separately is generally not optimal. In multi-product screening models, the optimal mechanism often features bundling and nonlinear pricing. For example, \cite{armstrong1996multiproduct} showed that when consumers have multi-dimensional types, optimal pricing schedules may involve bundling and exclusion regions rather than independent prices for each good. \cite{rochet1998ironing} demonstrated that even in the two-good case, the optimal allocation exhibits “bunching,” with multiple consumer types mapped to the same contract; this implies that the optimal mechanism cannot be reduced to separate selling. \cite{manelli2006bundling} proved that pure bundling can strictly dominate separate selling in revenue, while \cite{manelli2007multidimensional} established that in general the optimal mechanism may require randomization over bundles, ruling out any simple deterministic scheme as fully optimal.

Beyond theoretical complications, computing optimal mechanisms poses severe numerical difficulties. The design problem is naturally a nested optimization: the seller chooses a mechanism to maximize revenue, while each buyer solves their own utility-maximization problem given the mechanism. This bilevel structure means that every candidate mechanism requires solving a second optimization, making the search problem computationally expensive. Moreover, the space of mechanisms is extremely high-dimensional as a DSIC mechanism depends on two functions $(a,t)$.

Keeping things simple and in line with the theoretical literature, we use the formalism of Section~IV-B and consider the problem of selling multiple items to a single buyer. We set the outcome space $X=[0,1]^n$ (the probability of receiving each of the $n$ items), the type space $Y=[0,1]^n$ (the value the buyer has for each item), and the surplus kernel $\Phi(x,y) = \langle x, y \rangle$. We also assume that buyer types follow the uniform distribution. As discussed above, the mechanism design problem can be viewed as finding the indirect utility function, which is generalized convex. We parameterize such functions and search over them to find the best mechanism.

\begin{table*}[!tb]
\centering
\caption{Mechanism performance. 
This table reports the average per-item profit, surplus, and utility of the mechanisms found by our method. 
For comparison, we also report the revenue of the Straight-Jacket auction (SJa), which is known exactly only for $n \leq 12$. 
For all available cases, the revenuegconvex achieved by our mechanisms is virtually identical to that of SJa.}
\label{tab:results}
\begin{tabular}{|c|c|c|c|c|}
\toprule
Number of Items & Mean Profit per Item & Revenue From SJa & Mean Surplus per Item & Mean Utility per Item \\
\midrule
1  & 0.250 & 0.250 & 0.377 & 0.127 \\
2  & 0.274 & 0.274 & 0.407 & 0.133 \\
5  & 0.314 & 0.315 & 0.444 & 0.130 \\
10 & 0.346 & 0.347 & 0.468 & 0.122 \\
20 & 0.377 & ---   & 0.479 & 0.102 \\
\bottomrule
\end{tabular}
\end{table*}


Even though the theoretical foundations discussed in this paper and supplementing code are able to tackle more complicated problems, such as the monopolist problem where seller incurs production cost or ones with non-linear surplus kernels, we refrain from them since they are not as widely understood.

We consider five cases $n \in \{1,2,5,10,20\}$. For $n\le 6$ \cite{giannakopoulos2014duality} proves that the Straight-Jacket auction (SJa) is optimal. \cite{joswig2022generalized} computes the revenue provided by the Straight-Jacket auction for $n \le 12$. In particular, for $n=1,2,5,10$, the revenue is $0.25, 0.549, 1.576, 3.478$. Table \ref{tab:results} summarizes the results of our experiments. We see that the mechanisms found by our method achieve virtually identical revenue to SJa for all available cases.

\begin{figure*}[!tb]
    \centering
    \subfloat[]{\includegraphics[width=0.48\linewidth]{figs/1d_allocation.png}}    
    \hfill
    \subfloat[]{\includegraphics[width=0.48\linewidth]{figs/revenue_fit.png}}
    \caption{Mechanism Found for The Single Item Case:
    In the single item case the optimal mechanism is known to be a posted price auction with the optimal price being $0.5$. Even though we are searching through all GCFs and finding the allocation as their derivative, we find the same simple posted price mechanism.
    }
    \label{fig:1d}
\end{figure*}


Figure \ref{fig:1d} visualizes the mechanism found for the single item case while \ref{fig:2d} does the same for the two item case. 





\begin{figure*}[!tb]
    \centering
    \subfloat[]{\includegraphics[width=0.48\linewidth]{figs/a_1_heatmap.png}}
    \hfill
    \subfloat[]{\includegraphics[width=0.48\linewidth]{figs/a_2_heatmap.png}}
    \caption{Mechanism Found for The Two Item Case:
    The mechanism is neither a posted price for both items together nor selling goods separately. Similar to SJa, it's a combination of pricing different combinations of items.
    }
    \label{fig:2d}
\end{figure*}