## 2 Materials and Methods
### Applying the Perturbation, Pseudocode for MORSE  
Define perturbation vector \(v_{1},\ldots,v_{n}\stackrel{{ iid}}{{\sim}}U(1-\varepsilon,1+\varepsilon)\). Define \(P^{\prime}\), the perturbed instance of \(P\), as an MIP with identical constraints as \(P\) (as defined in Section 2.2) and objective function  
\[\sum_{i=1}^{n}c^{\prime}{}_{i}x_{i}=\sum_{i=1}^{n}g(c_{i},v_{i},x_{i})\]  
where  
\[g(c,v,x)= \begin{cases}cvx,&\mathtt{vtype}(x)\
eq Continuous,\\ cx,&\mathtt{vtype}(x)=Continuous.\end{cases} \]  
The full pseudocode for MORSE is shown below with Algorithms 1 and 2 as helper functions used in Algorithm 3. ```
Input :MILP Output :equivalent MILP with integral coefficients
1 FunctionScaleCoefficient(\(\mathcal{P}\): MILP): // Extract coefficients from the input MILP. 2\(c_{1}=\frac{a_{1}}{b_{1}},\ldots,c_{n}=\frac{a_{n}}{b_{n}}\leftarrow\) objective_coefficients(\(\mathcal{P}\)); // Compute Scaler from denominators of the coefficients. 3\(s\gets LCM(b_{1},\ldots,b_{n})\); // Create a copy of the input MILP. 4\(\mathcal{Q}\leftarrow\mathcal{P}\); // Scale coefficient with the scaler. 5 objective_coefficients(\(\mathcal{Q}\)) \(\leftarrow\)\(s\cdot\)objective_coefficients(\(\mathcal{P}\));
6 return\(\mathcal{Q}\);
```  
**Algorithm 1**Coefficient scaling  
```
Input :MILP Output :\(s\) the perturbation factor
1 FunctionComputeEpsilon(\(\mathcal{P}\): MILP): \(\mathcal{S}\gets 0\); // Compute upper bound of the optimum w.r.t. non-continuous variables. foreach\((c_{i},x_{i})\) in objective(\(\mathcal{P}\))do
2 ifvtype(\(x_{i}\)) in (Integer, Boolean)then
3\(\mathcal{S}\leftarrow\mathcal{S}+|c_{i}|\cdot\max\left(|\texttt{lb}(x_{i})|,| \texttt{ub}(x_{i})|\right)\);
4
5 end if
6
7 end for return\(\varepsilon\leftarrow\frac{1}{2\mathcal{S}}\)
```  
**Algorithm 2**Compute \(\varepsilon\)  
```
Input :MILP unoptimized, a random seed Output :MILP optimized
1 FunctionMORSE(\(\mathcal{P}\), \(\phi\)):
2 initialize random seed with \(\phi\);
3\(\mathcal{Q}\leftarrow\)ScaleCoefficient(\(\mathcal{P}\));
4\(\varepsilon\leftarrow\)ComputeEpsilon(\(\mathcal{Q}\));
5 foreach\((c_{i},x_{i})\) in objective(\(\mathcal{Q}\))do
6 ifvtype(\(x_{i}\)) in (Integer, Boolean)then
7\(v_{i}\sim Uniform(1-\varepsilon,1+\varepsilon)\);
8\(c_{i}^{\prime}\gets v_{i}\cdot c_{i}\);
9 else
10\(c_{i}^{\prime}\gets c_{i}\);
11
12 end if
13
14 end if
15
16 objective(\(\mathcal{Q}\)) = \(\{(c_{i}^{\prime},x_{i})\}\); // Use MILP solver (e.g., Gurobi) to find the optimal solution to the conditioned MILP. return\(\leftarrow\) MILPSolver(\(\mathcal{Q}\));
```  
**Algorithm 3**MORSE procedure  
```
Input :\(s\) the perturbation factor
1 FunctionComputeEpsilon(\(\mathcal{P}\): MILP): \(\mathcal{S}\leftarrow\mathcal{S}+|c_{i}|\cdot\max\left(|\texttt{lb}(x_{i})|,| \texttt{ub}(x_{i})|\right)\);
2
3 end if
4 return\(\varepsilon\leftarrow\frac{1}{2\mathcal{S}}\)
```  
**Algorithm 4**MORSE procedure  
```
Input :\(s\) the perturbation factor
1 FunctionMORSE(\(\mathcal{P}\), \(\phi\)):
2 initialize random seed with \(\phi\);
3\(\mathcal{Q}\leftarrow\)ScaleCoefficient(\(\mathcal{P}\));
4\(\varepsilon\leftarrow\)ComputeEpsilon(\(\mathcal{Q}\));
5 foreach\((c_{i},x_{i})\) in objective(\(\mathcal{Q}\))do
6 ifvtype(\(x_{i}\)) in (Integer, Boolean)then
7\(v_{i}\sim Uniform(1-\varepsilon,1+\varepsilon)\);
8\(c_{i}^{\prime}\gets v_{i}\cdot c_{i}\);
9 else
10\(c_{i}^{\prime}\gets c_{i}\);
11 end if
12
13 end if
14
15 objective(\(\mathcal{Q}\)) = \(\{(c_{i}^{\prime},x_{i})\}\); // Use MILP solver (e.g., Gurobi) to find the optimal solution to the conditioned MILP.