## 4 Proposed Method
### Data Pre-Processing  
A set of feasible routes and related parameters are first generated to solve the set covering model for the GSRSP-BT. In this step, all feasible routes for each bare are generated, and the parameters, including \(r\), \(v\), \(p_{v}\), \(n_{ri}\), \(y_{ij,r}\), \(s_{tp_{v}}^{total}\), \(s_{tp_{v}}^{unload}\), \(c_{tp_{v}}^{total}\), \(c_{tp_{v}}^{unload}\), \(\eta_{s_{vp}}^{unload}\) and \(\eta_{s_{vp}}^{unload}\), are defined. A feasible route is a barge travel sequence from the depot to other ports and then back to the same depot. Job sequences of route \(r\) are defined as \(v=\{1,2,\ldots,Vr\}\) and used as the indices of departure and arrival job sequence numbers on route \(r\). \(P_{v}\) is defined as the set of all ports used in job sequences \(v\) on route \(r\) and \(p_{v}\) is the indices that define port of job sequences \(v\) of route \(r\) (\(p_{v}\in P_{v}\), \(P_{v}\subset P\)). Therefore, each job sequence uses one port for loading and one port for unloading. As a result, \(Pv\) is a set of {1,2}. Note that job sequence 0 is the origin and destination depot. One example of a feasible route is given in Figure 4.  
In this paper, we create all feasible routes in job sequence format. The data pre-processing steps are as follows:  
Figure 4: Feasible route for the example. Figure 3: A flowchart of the proposed method. Step 1: Use the backtracking algorithm developed by [PERSON] and [PERSON] [39; 40] to generate all feasible routes in job sequence format. Then, keep all feasible routes that satisfy constraints (1)-(5) as candidate routes. \[\prod_{v\in V_{r}}\prod_{p_{v}\in\mathbb{P}_{v}}\mu_{p_{v}}\geq 1\quad\forall r\in R \tag{1}\]  
\[\prod_{v\in V_{r}}\prod_{p_{v}\in\mathbb{P}_{v}}\omega_{p_{v}}\geq 1\quad\forall r\in R \tag{2}\]  
\[\sum_{l\in I}n_{ri}=1\quad\forall r\in R \tag{3}\]  
\[\prod_{v\in V_{r}}\mu_{v}\geq 1\quad\forall r\in R \tag{4}\]  
\[\prod_{v\in V_{r}}\omega_{v}\geq 1\quad\forall r\in R \tag{5}\]  
where  
\[\mu_{p_{v}}=\left\{ \begin{array}{l}1,\,e_{p_{v}}\leq\left(st_{p_{v}}^{load} \wedge st_{p_{v}}^{unload}\right)\leq l_{p_{v}}\\ 0,\,\text{Otherwise}\end{array} \right. \tag{6}\]  
\[\omega_{p_{v}}=\left\{ \begin{array}{l}1,e_{p_{v}}\leq\left(ct_{p_{v}}^{load }\wedge ct_{p_{v}}^{unload}\right)\leq l_{p_{v}}\\ 0,\,\text{Otherwise}\end{array} \right. \tag{7}\]  
\[\mu_{v}=\left\{ \begin{array}{l}1,\,e_{v}\leq\left(st_{p_{v}}^{load}\wedge st _{p_{v}}^{unload}\right)\leq l_{v}\\ 0,\,\text{Otherwise}\end{array} \right. \tag{8}\]  
\[\omega_{v}=\left\{ \begin{array}{l}1,e_{v}\leq\left(ct_{p_{v}}^{load}\wedge ct _{p_{v}}^{unload}\right)\leq l_{v}\\ 0,\,\text{Otherwise}\end{array} \right. \tag{9}\]  
Constraint (1) ensures that the start time of job sequence v of route r and using port p is within the specified time windows of port \(p_{v}\). Constraint (2) ensures that the completion time of job sequence v using route r and port p is within the specified time windows of port \(p_{v}\). Constraint (3) ensure that each job is used exactly once for all routes. Constraints (4) and (5) ensure that the start and completion times of job sequence \(v\) using route \(r\) are within the time windows of job sequence \(v\). Equations (6) and (7) determine the binary parameters to describe whether \(\mu_{p_{v}}\) and \(\omega_{p_{v}}\) = 1 mean that the start and completion times at port \(p_{v}\) within its time windows are satisfied. Otherwise, they are set to 0, and these binary parameters are used in constraints (1) and (2), respectively. Therefore, Equations (8) and (9) determine the binary parameters to describe whether \(\mu_{v}\) and \(\omega_{v}\) = 1 mean that the start and completion times at port \(p_{v}\) within the time window of job sequence v are satisfied. Otherwise, they are set to 0, and these binary parameters are used in constraints (4) and (5). The rest are removed. Step 2: Define all feasible routes as the set of routes {\(r\) = 1,2, 3,..., \(R\)}.