1 Erratum to: Comput Manag Sci (2014) 11:503–516 DOI 10.1007/s10287-013-0184-4

Unfortunately, in the published version of the paper, the symbol \(\hbox {dev}(i, j)\) changes its definition in Sect. 3.2, without an explanation in the text. Moreover, Eqs. (11) and (12), while being correct, are slightly different from those implemented in the code used to generate the test results presented in the paper. The correct version of Sect. 3.2 is given below:

1.1 Heuristic for the average-deviation problem

In this section, we present a heuristic for the bivariate case of the average-deviation problem. Just like the MIP formulation (9) from the previous section, the heuristic works on the ranks of the copula and uses the difference between the cdfs as a measure of distance between the sample and the target. It is based on the observation from Eq. (2) that the rank cdf \(C_{\!r}(i,j)\) depends only on points \( \{ (i',j') : i'\le i\ \& \ j' \le j \}\) of the grid. This means that we can construct the sample ‘row-wise’: for each rank \(j\), we compute the deviation caused by its pairing to rank \(i\) as the sum of absolute values of deviations at grid points \((\cdot ,j)\). We denote this deviation by \({{\mathrm{dev}}}\!\left( i,j\right) \), which consequently changes its meaning from now on:

$$\begin{aligned} {{\mathrm{dev}}}\!\left( i,j\right) = \sum _{l=1}^S\bigl |C_{\!r}(l,j) - {C}^{*}_{\!r}(l,j)\bigr |. \end{aligned}$$
(11)

We evaluate \({{\mathrm{dev}}}\!\left( i,j\right) \) for all unused ranks \(i\) and then choose the one with the smallest deviation. The resulting greedy heuristic is presented in Fig. 3.

The most time-critical part of the heuristic is the calculation of \({{\mathrm{dev}}}\!\left( i,j\right) \) on line 4: if we simply use the definition from Eq. (11), the calculation would require \(\mathcal {O}\!\left( S\right) \) operations, making the whole heuristic \(\mathcal {O}\!\left( S^3\right) \). Fortunately, this can be improved upon using the fact that, for \(i>1\), we have

$$\begin{aligned} C_{\!r}(i,j)&= C_{\!r}(i,j-1) + {\left\{ \begin{array}{ll} \frac{1}{S}&{} \text {if we couple }j\text { to some }i' \le i \\ 0 &{} \text {otherwise,} \end{array}\right. } \end{aligned}$$

which, in combination with (11), gives

$$\begin{aligned} {{\mathrm{dev}}}\!\left( i,j\right)&= \sum _{l=1}^S\bigl |C_{\!r}(l,j-1) + \mathrm {if}\left( l \ge i, \tfrac{1}{S}, 0\right) - {C}^{*}_{\!r}(l,j)\bigr | \\&= \sum _{l=1}^{i-1} \bigl |C_{\!r}(l,j-1) - {C}^{*}_{\!r}(l,j)\bigr | + \sum _{l=i}^{S} \bigl |C_{\!r}(l,j-1) + \tfrac{1}{S} - {C}^{*}_{\!r}(l,j)\bigr | \end{aligned}$$

and therefore

$$\begin{aligned} {{\mathrm{dev}}}\!\left( i-1,j\right) = \sum _{l=1}^{i-2} \bigl |C_{\!r}(l,j-1) - {C}^{*}_{\!r}(l,j)\bigr | + \sum _{l=i-1}^{S} \bigl |C_{\!r}(l,j-1) + \tfrac{1}{S} - {C}^{*}_{\!r}(l,j)\bigr |. \end{aligned}$$

Subtracting the two then gives

$$\begin{aligned} {{\mathrm{dev}}}\!\left( i,j\right)&= {{\mathrm{dev}}}\!\left( i-1,j\right) + \bigl |C_{\!r}(i-1,j-1) - {C}^{*}_{\!r}(i-1,j)\bigr |\nonumber \\&\quad - \bigl |C_{\!r}(i-1,j-1) + \tfrac{1}{S} - {C}^{*}_{\!r}(i-1,j)\bigr |, \end{aligned}$$
(12)

which is then initialized with

$$\begin{aligned} {{\mathrm{dev}}}\!\left( 0,j\right) = \sum _{l=1}^S\bigl |C_{\!r}(l,j-1) + \tfrac{1}{S} - {C}^{*}_{\!r}(l,j)\bigr |. \end{aligned}$$

This recursive formula allows us to compute \({{\mathrm{dev}}}\!\left( i,j\right) \), except \({{\mathrm{dev}}}\!\left( 0,j\right) \), in a constant number of operations, so the heuristic becomes \(\mathcal {O}\!\left( S^2\right) \)—a big difference to the exponentially growing solution time of the MIP formulations. In practice, this means that we can generate five thousand samples in less than a second on the same hardware we used for the MIP models. Note that the recursion implies that we have to evaluate \({{\mathrm{dev}}}\!\left( i,j\right) \) for all \(i \in \{1,\dots ,S\}\), instead of using only \(i \in \mathcal {I}\) as we do in the algorithm presented in Fig. 3.