title: Google OR-tools: CVRP with collection and delivery, as well as reload option at depot
body: <p>I am working with Google OR-tools in Python.</p>
  <p>The problem I am facing is basically a mixture of:</p>
  <ol>
  <li>creating both collecting and delivering dimensions for the CVRP (as in <a href="https://stackoverflow.com/questions/67000884/google-or-tools-vrp-pickup-dropoff-at-same-node">Google OR-tools VRP - Pickup/Dropoff at same node</a>) by having a demand and a load constraint, and</li>
  <li>implementing a reload option at the depot (similar to <a href="https://github.com/google/or-tools/blob/master/ortools/constraint_solver/samples/cvrp_reload.py" rel="nofollow noreferrer">https://github.com/google/or-tools/blob/master/ortools/constraint_solver/samples/cvrp_reload.py</a>) as well as the possibility to drop orders with a penalty.</li>
  </ol>
  <p>As an example, let's consider 1 vehicle with max_capacity=2 and the following 3 nodes (0 being the depot):</p>
  <div class="s-table-container">
  <table class="s-table">
  <thead>
  <tr>
  <th style="text-align: center;">Node</th>
  <th style="text-align: center;">deliveries</th>
  <th style="text-align: center;">collects</th>
  <th style="text-align: center;">loads (deliveries + collects)</th>
  </tr>
  </thead>
  <tbody>
  <tr>
  <td style="text-align: center;">0</td>
  <td style="text-align: center;">0</td>
  <td style="text-align: center;">0</td>
  <td style="text-align: center;">0</td>
  </tr>
  <tr>
  <td style="text-align: center;">A</td>
  <td style="text-align: center;">-1</td>
  <td style="text-align: center;">0</td>
  <td style="text-align: center;">-1</td>
  </tr>
  <tr>
  <td style="text-align: center;">B</td>
  <td style="text-align: center;">-1</td>
  <td style="text-align: center;">0</td>
  <td style="text-align: center;">-1</td>
  </tr>
  <tr>
  <td style="text-align: center;">C</td>
  <td style="text-align: center;">-1</td>
  <td style="text-align: center;">1</td>
  <td style="text-align: center;">0</td>
  </tr>
  </tbody>
  </table>
  </div>
  <p>Assuming all points are equidistant, one solution would be:</p>
  <p>0 (deliveries:2, load:2) --&gt; C (1, 2) --&gt; A  (0, 1) --&gt; 0, dropping order B at the given cost/penalty.</p>
  <p>However, I would like to implement the possibility to reload at 0, i.e., getting something like:</p>
  <p>0 (deliveries:2, load:2) --&gt; C (1, 2) --&gt; A  (0, 1) --&gt; 0 (1, 1) --&gt; B (0, 0) --&gt; 0.</p>
  <p>I've tried to combine the two solutions mentioned above, by setting the slack capacities of both dimensions (deliveries and loads) at max_capacity.
  However, my program always drops all the reload stations, even though dropping the additional orders is way more expensive.</p>
  <p>Did someone already manage to solve the problem I am facing, or has any recommendations?</p>