## 2 Materials and Methods
### The Mixed-Integer and Asynchronous Level Decomposition
The function value is used to update the upper bound, \(f_{\text{k}}^{\text{up}}\), as usual for level methods; the subgradient is used to update the bound L on the Lipschitz constant of \(f\). In our algorithm below, the coordination is implemented by two vectors of Booleans: **to-coordinate** and **coordinating**. The role of **to-coordinate[j]** is to indicate to the master that worker j will evaluate \(f^{\text{j}}\) on the new coordination point \(\mathbf{\widetilde{x}}_{\text{k}}\); (at that moment, **to-coordinate[j]** is set to _false_, and **coordinating[j]** is set to _true_). Similarly, **coordinating[j]** indicates to the master that worker j is responding to a coordination step, which is used to update the upper bound. When a worker j responds, it is included in the set \(\mathcal{A}\) of available workers. If all workers are busy, then \(\mathcal{A}=\varnothing\). Our algorithm mirrors as much as possible Algorithm 3 of Reference [31], but contains some important specificities to handle (i) mixed-integer feasible sets and (ii) extended real-valued objective functions (we do not assume that \(f(x)\) is finite for all \(x\in\mathcal{X}\)). To handle (ii), we furnish our algorithm with a feasibility check (and addition of cuts), and for (i) we not only use a specialized solver for the MP but also change the rule for scarce coordination. The reason is that the rule of Reference [31] is only valid in the convex setting. Under nonconvexity, the coordination test \(\|\mathbf{x}_{\text{k}}-\mathbf{x}_{k-1}\|<\frac{\alpha}{\text{L}}\Delta_{ \text{k-1}}\)(with \(\alpha\in(0,1)\) and \(\text{L}\geq\|g_{\text{i}}\|\), \(\text{i}=1,\ldots,\text{k}\)) implies that the following inequality (important for the convergence analysis) is jeopardized:  
\[\|\mathbf{x}_{\text{k}}-\hat{\mathbf{x}}_{\text{k}}\|^{2}\geq\|\mathbf{x}_{ \text{k-1}}-\hat{\mathbf{x}}_{\text{k}}\|^{2}+\left(\frac{\alpha\Delta_{\text {k-1}}}{\text{L}}\right)^{2}. \tag{5}\]  
In the algorithm below, coordination is triggered when (5) is not satisfied and all workers have already responded on the last coordination iterate (i.e., \(\text{rr}=0\), where **rr** stands for \"remaining to respond\"). The assumption that the algorithm starts with a feasible point is made only for the sake of simplicity. Indeed, the initial point can be infeasible, but, in this case, Step 3 must be changed to ensure that the first computed feasible point is a coordination iterate. For the problem of interest, the feasibility check performed at line 45 amounts to verifying if \(f(\mathbf{x}_{\text{k+1}})<\infty\). In our SHTUC, the feasibility check comprises an auxiliary problem for verifying if ramp-rate constraints would be violated by \(\mathbf{x}_{\text{k+1}}\) and an additional auxiliary problem for checking if reservoir-volume bounds would be violated. Both problems are easily reduced to small linear-programming problems that can be solved to optimality in split seconds by off-the-shelf solvers. ```
1. Choose a gap tolerance \(\mathrm{tol}_{\Delta}\), upper bound \(f_{1}^{\mathrm{up}}\)\(>\)\(f_{*}+\mathrm{tol}_{\Delta}\), lower bound \(f_{1}^{\mathrm{low}}\)\(<\)\(f_{*}\), \(\alpha\in(0,1)\), \(L>0\), and \(x_{0}\) a feasible point. Set \(\mathbf{x}_{1}=\mathbf{\hat{x}}_{1}=\mathbf{x}_{\mathrm{best}}=\mathbf{x}_{0}\), \(\Delta_{0}\leftarrow f_{1}^{\mathrm{up}}-f_{1}^{\mathrm{low}}\), \(\Delta\leftarrow\infty\), \(\mathrm{rr}\gets 0\), \(\mathcal{A}\leftarrow\{1,2,\ldots,\mathrm{w}\}\), \(\mathrm{k}\gets 0\), \(\mathcal{J}\leftarrow\varnothing\) for \(\mathrm{j}\in\mathcal{A}\).