RoutingModel.java
Go to the documentation of this file.
1 /* ----------------------------------------------------------------------------
2  * This file was automatically generated by SWIG (http://www.swig.org).
3  * Version 4.0.0
4  *
5  * Do not make changes to this file unless you know what you are doing--modify
6  * the SWIG interface file instead.
7  * ----------------------------------------------------------------------------- */
8 
9 package com.google.ortools.constraintsolver;
10 
11 // Used to wrap RoutingTransitCallback2
12 // see https://docs.oracle.com/javase/8/docs/api/java/util/function/LongBinaryOperator.html
13 import java.util.function.LongBinaryOperator;
14 // Used to wrap RoutingTransitCallback1
15 // see https://docs.oracle.com/javase/8/docs/api/java/util/function/LongUnaryOperator.html
16 import java.util.function.LongUnaryOperator;
17 
18 public class RoutingModel {
19  private transient long swigCPtr;
20  protected transient boolean swigCMemOwn;
21 
22  protected RoutingModel(long cPtr, boolean cMemoryOwn) {
23  swigCMemOwn = cMemoryOwn;
24  swigCPtr = cPtr;
25  }
26 
27  protected static long getCPtr(RoutingModel obj) {
28  return (obj == null) ? 0 : obj.swigCPtr;
29  }
30 
31  @SuppressWarnings("deprecation")
32  protected void finalize() {
33  delete();
34  }
35 
36  public synchronized void delete() {
37  if (swigCPtr != 0) {
38  if (swigCMemOwn) {
39  swigCMemOwn = false;
40  mainJNI.delete_RoutingModel(swigCPtr);
41  }
42  swigCPtr = 0;
43  }
44  }
45 
49  public static long getKNoPenalty() {
50  return mainJNI.RoutingModel_kNoPenalty_get();
51  }
52 
56  public static int getKNoDisjunction() {
57  return mainJNI.RoutingModel_kNoDisjunction_get();
58 }
59 
63  public static int getKNoDimension() {
64  return mainJNI.RoutingModel_kNoDimension_get();
65 }
66 
70  public RoutingModel(RoutingIndexManager index_manager) {
71  this(mainJNI.new_RoutingModel__SWIG_0(RoutingIndexManager.getCPtr(index_manager), index_manager), true);
72  }
73 
75  this(mainJNI.new_RoutingModel__SWIG_1(RoutingIndexManager.getCPtr(index_manager), index_manager, parameters.toByteArray()), true);
76  }
77 
81  public int registerUnaryTransitCallback(LongUnaryOperator callback) {
82  return mainJNI.RoutingModel_registerUnaryTransitCallback(swigCPtr, this, callback);
83  }
84 
85  public int registerTransitCallback(LongBinaryOperator callback) {
86  return mainJNI.RoutingModel_registerTransitCallback(swigCPtr, this, callback);
87  }
88 
89  public int registerPositiveTransitCallback(LongBinaryOperator callback) {
90  return mainJNI.RoutingModel_registerPositiveTransitCallback(swigCPtr, this, callback);
91  }
92 
96  public boolean addDimension(int evaluator_index, long slack_max, long capacity, boolean fix_start_cumul_to_zero, String name) {
97  return mainJNI.RoutingModel_addDimension(swigCPtr, this, evaluator_index, slack_max, capacity, fix_start_cumul_to_zero, name);
98  }
99 
100  public boolean addDimensionWithVehicleTransits(int[] evaluator_indices, long slack_max, long capacity, boolean fix_start_cumul_to_zero, String name) {
101  return mainJNI.RoutingModel_addDimensionWithVehicleTransits(swigCPtr, this, evaluator_indices, slack_max, capacity, fix_start_cumul_to_zero, name);
102  }
103 
104  public boolean addDimensionWithVehicleCapacity(int evaluator_index, long slack_max, long[] vehicle_capacities, boolean fix_start_cumul_to_zero, String name) {
105  return mainJNI.RoutingModel_addDimensionWithVehicleCapacity(swigCPtr, this, evaluator_index, slack_max, vehicle_capacities, fix_start_cumul_to_zero, name);
106  }
107 
108  public boolean addDimensionWithVehicleTransitAndCapacity(int[] evaluator_indices, long slack_max, long[] vehicle_capacities, boolean fix_start_cumul_to_zero, String name) {
109  return mainJNI.RoutingModel_addDimensionWithVehicleTransitAndCapacity(swigCPtr, this, evaluator_indices, slack_max, vehicle_capacities, fix_start_cumul_to_zero, name);
110  }
111 
115  public boolean addConstantDimensionWithSlack(long value, long capacity, long slack_max, boolean fix_start_cumul_to_zero, String name) {
116  return mainJNI.RoutingModel_addConstantDimensionWithSlack(swigCPtr, this, value, capacity, slack_max, fix_start_cumul_to_zero, name);
117  }
118 
119  public boolean addConstantDimension(long value, long capacity, boolean fix_start_cumul_to_zero, String name) {
120  return mainJNI.RoutingModel_addConstantDimension(swigCPtr, this, value, capacity, fix_start_cumul_to_zero, name);
121  }
122 
126  public boolean addVectorDimension(long[] values, long capacity, boolean fix_start_cumul_to_zero, String name) {
127  return mainJNI.RoutingModel_addVectorDimension(swigCPtr, this, values, capacity, fix_start_cumul_to_zero, name);
128  }
129 
133  public Constraint MakePathSpansAndTotalSlacks(RoutingDimension dimension, IntVar[] spans, IntVar[] total_slacks) {
134  long cPtr = mainJNI.RoutingModel_MakePathSpansAndTotalSlacks(swigCPtr, this, RoutingDimension.getCPtr(dimension), dimension, spans, total_slacks);
135  return (cPtr == 0) ? null : new Constraint(cPtr, false);
136  }
137 
141  public SWIGTYPE_p_std__vectorT_operations_research__RoutingDimension_p_t GetDimensionsForGlobalCumulOptimizers() {
142  return new SWIGTYPE_p_std__vectorT_operations_research__RoutingDimension_p_t(mainJNI.RoutingModel_GetDimensionsForGlobalCumulOptimizers(swigCPtr, this), false);
143  }
144 
145  public SWIGTYPE_p_std__vectorT_operations_research__RoutingDimension_p_t GetDimensionsForLocalCumulOptimizers() {
146  return new SWIGTYPE_p_std__vectorT_operations_research__RoutingDimension_p_t(mainJNI.RoutingModel_GetDimensionsForLocalCumulOptimizers(swigCPtr, this), false);
147  }
148 
152  public boolean hasDimension(String dimension_name) {
153  return mainJNI.RoutingModel_hasDimension(swigCPtr, this, dimension_name);
154  }
155 
159  public RoutingDimension getDimensionOrDie(String dimension_name) {
160  return new RoutingDimension(mainJNI.RoutingModel_getDimensionOrDie(swigCPtr, this, dimension_name), false);
161  }
162 
166  public RoutingDimension getMutableDimension(String dimension_name) {
167  long cPtr = mainJNI.RoutingModel_getMutableDimension(swigCPtr, this, dimension_name);
168  return (cPtr == 0) ? null : new RoutingDimension(cPtr, false);
169  }
170 
174  public void setPrimaryConstrainedDimension(String dimension_name) {
175  mainJNI.RoutingModel_setPrimaryConstrainedDimension(swigCPtr, this, dimension_name);
176  }
177 
182  return mainJNI.RoutingModel_getPrimaryConstrainedDimension(swigCPtr, this);
183  }
184 
188  public int addDisjunction(long[] indices, long penalty, long max_cardinality) {
189  return mainJNI.RoutingModel_addDisjunction__SWIG_0(swigCPtr, this, indices, penalty, max_cardinality);
190 }
191 
195  public int addDisjunction(long[] indices, long penalty) {
196  return mainJNI.RoutingModel_addDisjunction__SWIG_1(swigCPtr, this, indices, penalty);
197 }
198 
202  public int addDisjunction(long[] indices) {
203  return mainJNI.RoutingModel_addDisjunction__SWIG_2(swigCPtr, this, indices);
204 }
205 
209  public int[] getDisjunctionIndices(long index) {
210  return mainJNI.RoutingModel_getDisjunctionIndices__SWIG_0(swigCPtr, this, index);
211 }
212 
216  public long[] getDisjunctionIndices(int index) {
217  return mainJNI.RoutingModel_getDisjunctionIndices__SWIG_1(swigCPtr, this, index);
218 }
219 
223  public long getDisjunctionPenalty(int index) {
224  return mainJNI.RoutingModel_getDisjunctionPenalty(swigCPtr, this, index);
225  }
226 
230  public long getDisjunctionMaxCardinality(int index) {
231  return mainJNI.RoutingModel_getDisjunctionMaxCardinality(swigCPtr, this, index);
232  }
233 
237  public int getNumberOfDisjunctions() {
238  return mainJNI.RoutingModel_getNumberOfDisjunctions(swigCPtr, this);
239  }
240 
245  mainJNI.RoutingModel_ignoreDisjunctionsAlreadyForcedToZero(swigCPtr, this);
246  }
247 
251  public void addSoftSameVehicleConstraint(long[] indices, long cost) {
252  mainJNI.RoutingModel_addSoftSameVehicleConstraint(swigCPtr, this, indices, cost);
253  }
254 
258  public void setAllowedVehiclesForIndex(int[] vehicles, long index) {
259  mainJNI.RoutingModel_setAllowedVehiclesForIndex(swigCPtr, this, vehicles, index);
260  }
261 
265  public boolean isVehicleAllowedForIndex(int vehicle, long index) {
266  return mainJNI.RoutingModel_isVehicleAllowedForIndex(swigCPtr, this, vehicle, index);
267  }
268 
272  public void addPickupAndDelivery(long pickup, long delivery) {
273  mainJNI.RoutingModel_addPickupAndDelivery(swigCPtr, this, pickup, delivery);
274  }
275 
279  public void addPickupAndDeliverySets(int pickup_disjunction, int delivery_disjunction) {
280  mainJNI.RoutingModel_addPickupAndDeliverySets(swigCPtr, this, pickup_disjunction, delivery_disjunction);
281  }
282 
286  public void setPickupAndDeliveryPolicyOfAllVehicles(int policy) {
287  mainJNI.RoutingModel_setPickupAndDeliveryPolicyOfAllVehicles(swigCPtr, this, policy);
288  }
289 
290  public void setPickupAndDeliveryPolicyOfVehicle(int policy, int vehicle) {
291  mainJNI.RoutingModel_setPickupAndDeliveryPolicyOfVehicle(swigCPtr, this, policy, vehicle);
292  }
293 
294  public int getPickupAndDeliveryPolicyOfVehicle(int vehicle) {
295  return mainJNI.RoutingModel_getPickupAndDeliveryPolicyOfVehicle(swigCPtr, this, vehicle);
296  }
297 
301  public int getNumOfSingletonNodes() {
302  return mainJNI.RoutingModel_getNumOfSingletonNodes(swigCPtr, this);
303  }
304 
308  public void setVisitType(long index, int type) {
309  mainJNI.RoutingModel_setVisitType(swigCPtr, this, index, type);
310  }
311 
312  public int getVisitType(long index) {
313  return mainJNI.RoutingModel_getVisitType(swigCPtr, this, index);
314  }
315 
316  public int getNumberOfVisitTypes() {
317  return mainJNI.RoutingModel_getNumberOfVisitTypes(swigCPtr, this);
318  }
319 
323  public long unperformedPenalty(long var_index) {
324  return mainJNI.RoutingModel_unperformedPenalty(swigCPtr, this, var_index);
325  }
326 
330  public long unperformedPenaltyOrValue(long default_value, long var_index) {
331  return mainJNI.RoutingModel_unperformedPenaltyOrValue(swigCPtr, this, default_value, var_index);
332  }
333 
337  public long getDepot() {
338  return mainJNI.RoutingModel_getDepot(swigCPtr, this);
339  }
340 
344  public void setArcCostEvaluatorOfAllVehicles(int evaluator_index) {
345  mainJNI.RoutingModel_setArcCostEvaluatorOfAllVehicles(swigCPtr, this, evaluator_index);
346  }
347 
351  public void setArcCostEvaluatorOfVehicle(int evaluator_index, int vehicle) {
352  mainJNI.RoutingModel_setArcCostEvaluatorOfVehicle(swigCPtr, this, evaluator_index, vehicle);
353  }
354 
358  public void setFixedCostOfAllVehicles(long cost) {
359  mainJNI.RoutingModel_setFixedCostOfAllVehicles(swigCPtr, this, cost);
360  }
361 
365  public void setFixedCostOfVehicle(long cost, int vehicle) {
366  mainJNI.RoutingModel_setFixedCostOfVehicle(swigCPtr, this, cost, vehicle);
367  }
368 
372  public long getFixedCostOfVehicle(int vehicle) {
373  return mainJNI.RoutingModel_getFixedCostOfVehicle(swigCPtr, this, vehicle);
374  }
375 
379  public void setAmortizedCostFactorsOfAllVehicles(long linear_cost_factor, long quadratic_cost_factor) {
380  mainJNI.RoutingModel_setAmortizedCostFactorsOfAllVehicles(swigCPtr, this, linear_cost_factor, quadratic_cost_factor);
381  }
382 
386  public void setAmortizedCostFactorsOfVehicle(long linear_cost_factor, long quadratic_cost_factor, int vehicle) {
387  mainJNI.RoutingModel_setAmortizedCostFactorsOfVehicle(swigCPtr, this, linear_cost_factor, quadratic_cost_factor, vehicle);
388  }
389 
391  return mainJNI.RoutingModel_getAmortizedLinearCostFactorOfVehicles(swigCPtr, this);
392 }
393 
395  return mainJNI.RoutingModel_getAmortizedQuadraticCostFactorOfVehicles(swigCPtr, this);
396 }
397 
398  public void ConsiderEmptyRouteCostsForVehicle(boolean consider_costs, int vehicle) {
399  mainJNI.RoutingModel_ConsiderEmptyRouteCostsForVehicle(swigCPtr, this, consider_costs, vehicle);
400  }
401 
402  public boolean AreEmptyRouteCostsConsideredForVehicle(int vehicle) {
403  return mainJNI.RoutingModel_AreEmptyRouteCostsConsideredForVehicle(swigCPtr, this, vehicle);
404  }
405 
409  public void setFirstSolutionEvaluator(LongBinaryOperator evaluator) {
410  mainJNI.RoutingModel_setFirstSolutionEvaluator(swigCPtr, this, evaluator);
411  }
412 
416  public void addLocalSearchOperator(LocalSearchOperator ls_operator) {
417  mainJNI.RoutingModel_addLocalSearchOperator(swigCPtr, this, LocalSearchOperator.getCPtr(ls_operator), ls_operator);
418  }
419 
423  public void addSearchMonitor(SearchMonitor monitor) {
424  mainJNI.RoutingModel_addSearchMonitor(swigCPtr, this, SearchMonitor.getCPtr(monitor), monitor);
425  }
426 
430  public void addAtSolutionCallback(Runnable callback) {
431  mainJNI.RoutingModel_addAtSolutionCallback(swigCPtr, this, callback);
432  }
433 
438  mainJNI.RoutingModel_addVariableMinimizedByFinalizer(swigCPtr, this, IntVar.getCPtr(var), var);
439  }
440 
445  mainJNI.RoutingModel_addVariableMaximizedByFinalizer(swigCPtr, this, IntVar.getCPtr(var), var);
446  }
447 
451  public void AddWeightedVariableMinimizedByFinalizer(IntVar var, long cost) {
452  mainJNI.RoutingModel_AddWeightedVariableMinimizedByFinalizer(swigCPtr, this, IntVar.getCPtr(var), var, cost);
453  }
454 
458  public void AddVariableTargetToFinalizer(IntVar var, long target) {
459  mainJNI.RoutingModel_AddVariableTargetToFinalizer(swigCPtr, this, IntVar.getCPtr(var), var, target);
460  }
461 
465  public void closeModel() {
466  mainJNI.RoutingModel_closeModel(swigCPtr, this);
467  }
468 
473  mainJNI.RoutingModel_closeModelWithParameters(swigCPtr, this, search_parameters.toByteArray());
474  }
475 
479  public Assignment solve(Assignment assignment) {
480  long cPtr = mainJNI.RoutingModel_solve__SWIG_0(swigCPtr, this, Assignment.getCPtr(assignment), assignment);
481  return (cPtr == 0) ? null : new Assignment(cPtr, false);
482  }
483 
487  public Assignment solve() {
488  long cPtr = mainJNI.RoutingModel_solve__SWIG_1(swigCPtr, this);
489  return (cPtr == 0) ? null : new Assignment(cPtr, false);
490  }
491 
496  long cPtr = mainJNI.RoutingModel_solveWithParameters(swigCPtr, this, search_parameters.toByteArray());
497  return (cPtr == 0) ? null : new Assignment(cPtr, false);
498  }
499 
501  long cPtr = mainJNI.RoutingModel_solveFromAssignmentWithParameters(swigCPtr, this, Assignment.getCPtr(assignment), assignment, search_parameters.toByteArray());
502  return (cPtr == 0) ? null : new Assignment(cPtr, false);
503  }
504 
508  public void setAssignmentFromOtherModelAssignment(Assignment target_assignment, RoutingModel source_model, Assignment source_assignment) {
509  mainJNI.RoutingModel_setAssignmentFromOtherModelAssignment(swigCPtr, this, Assignment.getCPtr(target_assignment), target_assignment, RoutingModel.getCPtr(source_model), source_model, Assignment.getCPtr(source_assignment), source_assignment);
510  }
511 
515  public long computeLowerBound() {
516  return mainJNI.RoutingModel_computeLowerBound(swigCPtr, this);
517  }
518 
522  public int status() {
523  return mainJNI.RoutingModel_status(swigCPtr, this);
524  }
525 
529  public IntVar applyLocks(long[] locks) {
530  long cPtr = mainJNI.RoutingModel_applyLocks(swigCPtr, this, locks);
531  return (cPtr == 0) ? null : new IntVar(cPtr, false);
532  }
533 
537  public boolean applyLocksToAllVehicles(long[][] locks, boolean close_routes) {
538  return mainJNI.RoutingModel_applyLocksToAllVehicles(swigCPtr, this, locks, close_routes);
539  }
540 
545  long cPtr = mainJNI.RoutingModel_preAssignment(swigCPtr, this);
546  return (cPtr == 0) ? null : new Assignment(cPtr, false);
547  }
548 
550  long cPtr = mainJNI.RoutingModel_mutablePreAssignment(swigCPtr, this);
551  return (cPtr == 0) ? null : new Assignment(cPtr, false);
552  }
553 
557  public boolean writeAssignment(String file_name) {
558  return mainJNI.RoutingModel_writeAssignment(swigCPtr, this, file_name);
559  }
560 
564  public Assignment readAssignment(String file_name) {
565  long cPtr = mainJNI.RoutingModel_readAssignment(swigCPtr, this, file_name);
566  return (cPtr == 0) ? null : new Assignment(cPtr, false);
567  }
568 
573  long cPtr = mainJNI.RoutingModel_restoreAssignment(swigCPtr, this, Assignment.getCPtr(solution), solution);
574  return (cPtr == 0) ? null : new Assignment(cPtr, false);
575  }
576 
580  public Assignment readAssignmentFromRoutes(long[][] routes, boolean ignore_inactive_indices) {
581  long cPtr = mainJNI.RoutingModel_readAssignmentFromRoutes(swigCPtr, this, routes, ignore_inactive_indices);
582  return (cPtr == 0) ? null : new Assignment(cPtr, false);
583  }
584 
588  public boolean routesToAssignment(long[][] routes, boolean ignore_inactive_indices, boolean close_routes, Assignment assignment) {
589  return mainJNI.RoutingModel_routesToAssignment(swigCPtr, this, routes, ignore_inactive_indices, close_routes, Assignment.getCPtr(assignment), assignment);
590  }
591 
595  public void assignmentToRoutes(Assignment assignment, long[][] routes) {
596  mainJNI.RoutingModel_assignmentToRoutes(swigCPtr, this, Assignment.getCPtr(assignment), assignment, routes);
597  }
598 
603  long cPtr = mainJNI.RoutingModel_compactAssignment(swigCPtr, this, Assignment.getCPtr(assignment), assignment);
604  return (cPtr == 0) ? null : new Assignment(cPtr, false);
605  }
606 
611  long cPtr = mainJNI.RoutingModel_compactAndCheckAssignment(swigCPtr, this, Assignment.getCPtr(assignment), assignment);
612  return (cPtr == 0) ? null : new Assignment(cPtr, false);
613  }
614 
618  public void addToAssignment(IntVar var) {
619  mainJNI.RoutingModel_addToAssignment(swigCPtr, this, IntVar.getCPtr(var), var);
620  }
621 
622  public void addIntervalToAssignment(IntervalVar interval) {
623  mainJNI.RoutingModel_addIntervalToAssignment(swigCPtr, this, IntervalVar.getCPtr(interval), interval);
624  }
625 
629  public Assignment PackCumulsOfOptimizerDimensionsFromAssignment(Assignment original_assignment, SWIGTYPE_p_absl__Duration duration_limit) {
630  long cPtr = mainJNI.RoutingModel_PackCumulsOfOptimizerDimensionsFromAssignment(swigCPtr, this, Assignment.getCPtr(original_assignment), original_assignment, SWIGTYPE_p_absl__Duration.getCPtr(duration_limit));
631  return (cPtr == 0) ? null : new Assignment(cPtr, false);
632  }
633 
638  mainJNI.RoutingModel_addLocalSearchFilter(swigCPtr, this, LocalSearchFilter.getCPtr(filter), filter);
639  }
640 
644  public long start(int vehicle) {
645  return mainJNI.RoutingModel_start(swigCPtr, this, vehicle);
646  }
647 
651  public long end(int vehicle) {
652  return mainJNI.RoutingModel_end(swigCPtr, this, vehicle);
653  }
654 
658  public boolean isStart(long index) {
659  return mainJNI.RoutingModel_isStart(swigCPtr, this, index);
660  }
661 
665  public boolean isEnd(long index) {
666  return mainJNI.RoutingModel_isEnd(swigCPtr, this, index);
667  }
668 
672  public int VehicleIndex(int index) {
673  return mainJNI.RoutingModel_VehicleIndex(swigCPtr, this, index);
674  }
675 
679  public long next(Assignment assignment, long index) {
680  return mainJNI.RoutingModel_next(swigCPtr, this, Assignment.getCPtr(assignment), assignment, index);
681  }
682 
686  public boolean isVehicleUsed(Assignment assignment, int vehicle) {
687  return mainJNI.RoutingModel_isVehicleUsed(swigCPtr, this, Assignment.getCPtr(assignment), assignment, vehicle);
688  }
689 
693  public IntVar[] nexts() {
694  return mainJNI.RoutingModel_nexts(swigCPtr, this);
695 }
696 
700  public IntVar[] vehicleVars() {
701  return mainJNI.RoutingModel_vehicleVars(swigCPtr, this);
702 }
703 
707  public IntVar nextVar(long index) {
708  long cPtr = mainJNI.RoutingModel_nextVar(swigCPtr, this, index);
709  return (cPtr == 0) ? null : new IntVar(cPtr, false);
710  }
711 
715  public IntVar activeVar(long index) {
716  long cPtr = mainJNI.RoutingModel_activeVar(swigCPtr, this, index);
717  return (cPtr == 0) ? null : new IntVar(cPtr, false);
718  }
719 
723  public IntVar VehicleCostsConsideredVar(int vehicle) {
724  long cPtr = mainJNI.RoutingModel_VehicleCostsConsideredVar(swigCPtr, this, vehicle);
725  return (cPtr == 0) ? null : new IntVar(cPtr, false);
726  }
727 
731  public IntVar vehicleVar(long index) {
732  long cPtr = mainJNI.RoutingModel_vehicleVar(swigCPtr, this, index);
733  return (cPtr == 0) ? null : new IntVar(cPtr, false);
734  }
735 
739  public IntVar costVar() {
740  long cPtr = mainJNI.RoutingModel_costVar(swigCPtr, this);
741  return (cPtr == 0) ? null : new IntVar(cPtr, false);
742  }
743 
747  public long getArcCostForVehicle(long from_index, long to_index, long vehicle) {
748  return mainJNI.RoutingModel_getArcCostForVehicle(swigCPtr, this, from_index, to_index, vehicle);
749  }
750 
755  return mainJNI.RoutingModel_costsAreHomogeneousAcrossVehicles(swigCPtr, this);
756  }
757 
761  public long getHomogeneousCost(long from_index, long to_index) {
762  return mainJNI.RoutingModel_getHomogeneousCost(swigCPtr, this, from_index, to_index);
763  }
764 
768  public long getArcCostForFirstSolution(long from_index, long to_index) {
769  return mainJNI.RoutingModel_getArcCostForFirstSolution(swigCPtr, this, from_index, to_index);
770  }
771 
775  public long getArcCostForClass(long from_index, long to_index, long cost_class_index) {
776  return mainJNI.RoutingModel_getArcCostForClass(swigCPtr, this, from_index, to_index, cost_class_index);
777  }
778 
782  public int getCostClassIndexOfVehicle(long vehicle) {
783  return mainJNI.RoutingModel_getCostClassIndexOfVehicle(swigCPtr, this, vehicle);
784 }
785 
789  public boolean hasVehicleWithCostClassIndex(int cost_class_index) {
790  return mainJNI.RoutingModel_hasVehicleWithCostClassIndex(swigCPtr, this, cost_class_index);
791  }
792 
796  public int getCostClassesCount() {
797  return mainJNI.RoutingModel_getCostClassesCount(swigCPtr, this);
798  }
799 
804  return mainJNI.RoutingModel_getNonZeroCostClassesCount(swigCPtr, this);
805  }
806 
807  public int getVehicleClassIndexOfVehicle(long vehicle) {
808  return mainJNI.RoutingModel_getVehicleClassIndexOfVehicle(swigCPtr, this, vehicle);
809 }
810 
814  public int getVehicleClassesCount() {
815  return mainJNI.RoutingModel_getVehicleClassesCount(swigCPtr, this);
816  }
817 
821  public int[] getSameVehicleIndicesOfIndex(int node) {
822  return mainJNI.RoutingModel_getSameVehicleIndicesOfIndex(swigCPtr, this, node);
823 }
824 
828  public boolean arcIsMoreConstrainedThanArc(long from, long to1, long to2) {
829  return mainJNI.RoutingModel_arcIsMoreConstrainedThanArc(swigCPtr, this, from, to1, to2);
830  }
831 
835  public String debugOutputAssignment(Assignment solution_assignment, String dimension_to_print) {
836  return mainJNI.RoutingModel_debugOutputAssignment(swigCPtr, this, Assignment.getCPtr(solution_assignment), solution_assignment, dimension_to_print);
837  }
838 
842  public Solver solver() {
843  long cPtr = mainJNI.RoutingModel_solver(swigCPtr, this);
844  return (cPtr == 0) ? null : new Solver(cPtr, false);
845  }
846 
850  public boolean checkLimit() {
851  return mainJNI.RoutingModel_checkLimit(swigCPtr, this);
852  }
853 
857  public SWIGTYPE_p_absl__Duration RemainingTime() {
858  return new SWIGTYPE_p_absl__Duration(mainJNI.RoutingModel_RemainingTime(swigCPtr, this), true);
859  }
860 
864  public int nodes() {
865  return mainJNI.RoutingModel_nodes(swigCPtr, this);
866  }
867 
871  public int vehicles() {
872  return mainJNI.RoutingModel_vehicles(swigCPtr, this);
873  }
874 
878  public long size() {
879  return mainJNI.RoutingModel_size(swigCPtr, this);
880  }
881 
886  return mainJNI.RoutingModel_getNumberOfDecisionsInFirstSolution(swigCPtr, this, search_parameters.toByteArray());
887  }
888 
890  return mainJNI.RoutingModel_getNumberOfRejectsInFirstSolution(swigCPtr, this, search_parameters.toByteArray());
891  }
892 
896  public boolean isMatchingModel() {
897  return mainJNI.RoutingModel_isMatchingModel(swigCPtr, this);
898  }
899 
903  public DecisionBuilder makeGuidedSlackFinalizer(RoutingDimension dimension, LongUnaryOperator initializer) {
904  long cPtr = mainJNI.RoutingModel_makeGuidedSlackFinalizer(swigCPtr, this, RoutingDimension.getCPtr(dimension), dimension, initializer);
905  return (cPtr == 0) ? null : new DecisionBuilder(cPtr, false);
906  }
907 
912  long cPtr = mainJNI.RoutingModel_makeSelfDependentDimensionFinalizer(swigCPtr, this, RoutingDimension.getCPtr(dimension), dimension);
913  return (cPtr == 0) ? null : new DecisionBuilder(cPtr, false);
914  }
915 
916  public void addMatrixDimension(long[][] values, long capacity, boolean fix_start_cumul_to_zero, String name) {
917  mainJNI.RoutingModel_addMatrixDimension(swigCPtr, this, values, capacity, fix_start_cumul_to_zero, name);
918  }
919 
920  // Status
928  public final static int ROUTING_NOT_SOLVED = mainJNI.RoutingModel_ROUTING_NOT_SOLVED_get();
932  public final static int ROUTING_SUCCESS = mainJNI.RoutingModel_ROUTING_SUCCESS_get();
936  public final static int ROUTING_FAIL = mainJNI.RoutingModel_ROUTING_FAIL_get();
940  public final static int ROUTING_FAIL_TIMEOUT = mainJNI.RoutingModel_ROUTING_FAIL_TIMEOUT_get();
944  public final static int ROUTING_INVALID = mainJNI.RoutingModel_ROUTING_INVALID_get();
945 
946  // PickupAndDeliveryPolicy
954  public final static int PICKUP_AND_DELIVERY_NO_ORDER = mainJNI.RoutingModel_PICKUP_AND_DELIVERY_NO_ORDER_get();
958  public final static int PICKUP_AND_DELIVERY_LIFO = mainJNI.RoutingModel_PICKUP_AND_DELIVERY_LIFO_get();
962  public final static int PICKUP_AND_DELIVERY_FIFO = mainJNI.RoutingModel_PICKUP_AND_DELIVERY_FIFO_get();
963 
964 }
void addPickupAndDelivery(long pickup, long delivery)
Notifies that index1 and index2 form a pair of nodes which should belong to the same route.
RoutingDimension getMutableDimension(String dimension_name)
Returns a dimension from its name.
void setPrimaryConstrainedDimension(String dimension_name)
Set the given dimension as "primary constrained".
void addToAssignment(IntVar var)
Adds an extra variable to the vehicle routing assignment.
Assignment PackCumulsOfOptimizerDimensionsFromAssignment(Assignment original_assignment, SWIGTYPE_p_absl__Duration duration_limit)
For every dimension in the model's dimensions_for_local/global_optimizer_, this method tries to pack ...
int [] getSameVehicleIndicesOfIndex(int node)
Returns variable indices of nodes constrained to be on the same route.
Dimensions represent quantities accumulated at nodes along the routes.
long unperformedPenalty(long var_index)
Get the "unperformed" penalty of a node.
Solver Class A solver represents the main computation engine.
Definition: Solver.java:57
int addDisjunction(long[] indices, long penalty, long max_cardinality)
Adds a disjunction constraint on the indices: exactly 'max_cardinality' of the indices are active.
static long getKNoPenalty()
Constant used to express a hard constraint instead of a soft penalty.
void addIntervalToAssignment(IntervalVar interval)
int registerTransitCallback(LongBinaryOperator callback)
boolean applyLocksToAllVehicles(long[][] locks, boolean close_routes)
Applies lock chains to all vehicles to the next search, such that locks[p] is the lock chain for rout...
void addSearchMonitor(SearchMonitor monitor)
Adds a search monitor to the search used to solve the routing model.
boolean addConstantDimensionWithSlack(long value, long capacity, long slack_max, boolean fix_start_cumul_to_zero, String name)
Creates a dimension where the transit variable is constrained to be equal to 'value'; 'capacity' is t...
DecisionBuilder makeSelfDependentDimensionFinalizer(RoutingDimension dimension)
MakeSelfDependentDimensionFinalizer is a finalizer for the slacks of a self-dependent dimension.
Assignment compactAssignment(Assignment assignment)
Returns a compacted version of the given assignment, in which all vehicles with id lower or equal to ...
boolean isMatchingModel()
Returns true if a vehicle/node matching problem is detected.
void addMatrixDimension(long[][] values, long capacity, boolean fix_start_cumul_to_zero, String name)
long next(Assignment assignment, long index)
Assignment inspection Returns the variable index of the node directly after the node corresponding to...
void addAtSolutionCallback(Runnable callback)
Adds a callback called each time a solution is found during the search.
IntVar applyLocks(long[] locks)
Applies a lock chain to the next search.
void ignoreDisjunctionsAlreadyForcedToZero()
SPECIAL: Makes the solver ignore all the disjunctions whose active variables are all trivially zero (...
Assignment restoreAssignment(Assignment solution)
Restores an assignment as a solution in the routing model and returns the new solution.
int getNonZeroCostClassesCount()
Ditto, minus the 'always zero', built-in cost class.
boolean writeAssignment(String file_name)
Writes the current solution to a file containing an AssignmentProto.
IntVar vehicleVar(long index)
Returns the vehicle variable of the node corresponding to index.
Manager for any NodeIndex <-> variable index conversion.
boolean addDimensionWithVehicleCapacity(int evaluator_index, long slack_max, long[] vehicle_capacities, boolean fix_start_cumul_to_zero, String name)
long getDisjunctionMaxCardinality(int index)
Returns the maximum number of possible active nodes of the node disjunction of index 'index'.
Assignment solveFromAssignmentWithParameters(Assignment assignment, com.google.ortools.constraintsolver.RoutingSearchParameters search_parameters)
void setPickupAndDeliveryPolicyOfVehicle(int policy, int vehicle)
int getNumOfSingletonNodes()
Returns the number of non-start/end nodes which do not appear in a pickup/delivery pair.
int VehicleIndex(int index)
Returns the vehicle of the given start/end index, and -1 if the given index is not a vehicle start/en...
long unperformedPenaltyOrValue(long default_value, long var_index)
Same as above except that it returns default_value instead of 0 when penalty is not well defined (def...
long start(int vehicle)
Model inspection.
int registerPositiveTransitCallback(LongBinaryOperator callback)
long getNumberOfRejectsInFirstSolution(com.google.ortools.constraintsolver.RoutingSearchParameters search_parameters)
boolean routesToAssignment(long[][] routes, boolean ignore_inactive_indices, boolean close_routes, Assignment assignment)
Fills an assignment from a specification of the routes of the vehicles.
long getArcCostForVehicle(long from_index, long to_index, long vehicle)
Returns the cost of the transit arc between two nodes for a given vehicle.
long getNumberOfDecisionsInFirstSolution(com.google.ortools.constraintsolver.RoutingSearchParameters search_parameters)
Returns statistics on first solution search, number of decisions sent to filters, number of decisions...
void setFixedCostOfAllVehicles(long cost)
Sets the fixed cost of all vehicle routes.
long getDisjunctionPenalty(int index)
Returns the penalty of the node disjunction of index 'index'.
int registerUnaryTransitCallback(LongUnaryOperator callback)
Registers 'callback' and returns its index.
int addDisjunction(long[] indices, long penalty)
Adds a disjunction constraint on the indices: exactly 'max_cardinality' of the indices are active.
RoutingDimension getDimensionOrDie(String dimension_name)
Returns a dimension from its name.
Assignment solve(Assignment assignment)
Solves the current routing model; closes the current model.
void setVisitType(long index, int type)
Set the node visit types and incompatibilities/requirements between the types (see below).
SWIGTYPE_p_std__vectorT_operations_research__RoutingDimension_p_t GetDimensionsForLocalCumulOptimizers()
void AddWeightedVariableMinimizedByFinalizer(IntVar var, long cost)
Adds a variable to minimize in the solution finalizer, with a weighted priority: the higher the more ...
RoutingModel(long cPtr, boolean cMemoryOwn)
SWIGTYPE_p_std__vectorT_operations_research__RoutingDimension_p_t GetDimensionsForGlobalCumulOptimizers()
Returns dimensions_for_[global|local]_optimizer_ if the model has been closed, and empty vectors othe...
boolean addVectorDimension(long[] values, long capacity, boolean fix_start_cumul_to_zero, String name)
Creates a dimension where the transit variable is constrained to be equal to 'values[i]' for node i; ...
static int getKNoDimension()
Constant used to express the "no dimension" index, returned when a dimension name does not correspond...
int vehicles()
Returns the number of vehicle routes in the model.
IntVar [] vehicleVars()
Returns all vehicle variables of the model, such that VehicleVars(i) is the vehicle variable of the n...
Assignment readAssignment(String file_name)
Reads an assignment from a file and returns the current solution.
int getNumberOfDisjunctions()
Returns the number of node disjunctions in the model.
Assignment solveWithParameters(com.google.ortools.constraintsolver.RoutingSearchParameters search_parameters)
Solves the current routing model with the given parameters.
int getCostClassesCount()
Returns the number of different cost classes in the model.
static final int PICKUP_AND_DELIVERY_LIFO
Deliveries must be performed in reverse order of pickups.
Assignment compactAndCheckAssignment(Assignment assignment)
Same as CompactAssignment() but also checks the validity of the final compact solution; if it is not ...
A search monitor is a simple set of callbacks to monitor all search events.
void setAmortizedCostFactorsOfVehicle(long linear_cost_factor, long quadratic_cost_factor, int vehicle)
Sets the linear and quadratic cost factor of the given vehicle.
boolean isStart(long index)
Returns true if 'index' represents the first node of a route.
long end(int vehicle)
Returns the variable index of the ending node of a vehicle route.
A DecisionBuilder is responsible for creating the search tree.
boolean isEnd(long index)
Returns true if 'index' represents the last node of a route.
long [] getDisjunctionIndices(int index)
Returns the variable indices of the nodes in the disjunction of index 'index'.
IntVar costVar()
Returns the global cost variable which is being minimized.
static final int PICKUP_AND_DELIVERY_FIFO
Deliveries must be performed in the same order as pickups.
boolean checkLimit()
Returns true if the search limit has been crossed.
static final int PICKUP_AND_DELIVERY_NO_ORDER
Types of precedence policy applied to pickup and delivery pairs.
Assignment solve()
Solves the current routing model; closes the current model.
Constraint MakePathSpansAndTotalSlacks(RoutingDimension dimension, IntVar[] spans, IntVar[] total_slacks)
For every vehicle of the routing model: - if total_slacks[vehicle] is not nullptr,...
void addVariableMaximizedByFinalizer(IntVar var)
Adds a variable to maximize in the solution finalizer (see above for information on the solution fina...
void setArcCostEvaluatorOfAllVehicles(int evaluator_index)
Sets the cost function of the model such that the cost of a segment of a route between node 'from' an...
This class represent a reversible FIFO structure.
void AddVariableTargetToFinalizer(IntVar var, long target)
Add a variable to set the closest possible to the target value in the solution finalizer.
int getVehicleClassesCount()
Returns the number of different vehicle classes in the model.
void setAmortizedCostFactorsOfAllVehicles(long linear_cost_factor, long quadratic_cost_factor)
The following methods set the linear and quadratic cost factors of vehicles (must be positive values)...
int addDisjunction(long[] indices)
Adds a disjunction constraint on the indices: exactly 'max_cardinality' of the indices are active.
void addLocalSearchFilter(LocalSearchFilter filter)
Adds a custom local search filter to the list of filters used to speed up local search by pruning unf...
boolean arcIsMoreConstrainedThanArc(long from, long to1, long to2)
Returns whether the arc from->to1 is more constrained than from->to2, taking into account,...
void setAssignmentFromOtherModelAssignment(Assignment target_assignment, RoutingModel source_model, Assignment source_assignment)
Given a "source_model" and its "source_assignment", resets "target_assignment" with the IntVar variab...
SWIGTYPE_p_absl__Duration RemainingTime()
Returns the time left in the search limit.
Local Search Filters are used for fast neighbor pruning.
static int getKNoDisjunction()
Constant used to express the "no disjunction" index, returned when a node does not appear in any disj...
static final int ROUTING_SUCCESS
Problem solved successfully after calling RoutingModel::Solve().
boolean addDimensionWithVehicleTransits(int[] evaluator_indices, long slack_max, long capacity, boolean fix_start_cumul_to_zero, String name)
An Assignment is a variable -> domains mapping, used to report solutions to the user.
Definition: Assignment.java:14
DecisionBuilder makeGuidedSlackFinalizer(RoutingDimension dimension, LongUnaryOperator initializer)
The next few members are in the public section only for testing purposes.
long getFixedCostOfVehicle(int vehicle)
Returns the route fixed cost taken into account if the route of the vehicle is not empty,...
void addLocalSearchOperator(LocalSearchOperator ls_operator)
Adds a local search operator to the set of operators used to solve the vehicle routing problem.
void ConsiderEmptyRouteCostsForVehicle(boolean consider_costs, int vehicle)
void addSoftSameVehicleConstraint(long[] indices, long cost)
Adds a soft contraint to force a set of variable indices to be on the same vehicle.
boolean addConstantDimension(long value, long capacity, boolean fix_start_cumul_to_zero, String name)
IntVar nextVar(long index)
Returns the next variable of the node corresponding to index.
void addVariableMinimizedByFinalizer(IntVar var)
Adds a variable to minimize in the solution finalizer.
void setAllowedVehiclesForIndex(int[] vehicles, long index)
Sets the vehicles which can visit a given node.
boolean addDimensionWithVehicleTransitAndCapacity(int[] evaluator_indices, long slack_max, long[] vehicle_capacities, boolean fix_start_cumul_to_zero, String name)
IntVar activeVar(long index)
Returns the active variable of the node corresponding to index.
long computeLowerBound()
Computes a lower bound to the routing problem solving a linear assignment problem.
boolean addDimension(int evaluator_index, long slack_max, long capacity, boolean fix_start_cumul_to_zero, String name)
Model creation Methods to add dimensions to routes; dimensions represent quantities accumulated at no...
void setPickupAndDeliveryPolicyOfAllVehicles(int policy)
Sets the Pickup and delivery policy of all vehicles.
boolean costsAreHomogeneousAcrossVehicles()
Whether costs are homogeneous across all vehicles.
int status()
Returns the current status of the routing model.
boolean hasDimension(String dimension_name)
Returns true if a dimension exists for a given dimension name.
void addPickupAndDeliverySets(int pickup_disjunction, int delivery_disjunction)
Same as AddPickupAndDelivery but notifying that the performed node from the disjunction of index 'pic...
IntVar [] nexts()
Returns all next variables of the model, such that Nexts(i) is the next variable of the node correspo...
String debugOutputAssignment(Assignment solution_assignment, String dimension_to_print)
Print some debugging information about an assignment, including the feasible intervals of the CumulVa...
Assignment readAssignmentFromRoutes(long[][] routes, boolean ignore_inactive_indices)
Restores the routes as the current solution.
long getArcCostForFirstSolution(long from_index, long to_index)
Returns the cost of the arc in the context of the first solution strategy.
RoutingModel(RoutingIndexManager index_manager)
Constructor taking an index manager.
long getArcCostForClass(long from_index, long to_index, long cost_class_index)
Returns the cost of the segment between two nodes for a given cost class.
long size()
Returns the number of next variables in the model.
static final int ROUTING_NOT_SOLVED
Status of the search.
Solver solver()
Returns the underlying constraint solver.
int nodes()
Sizes and indices Returns the number of nodes in the model.
int [] getDisjunctionIndices(long index)
Returns the indices of the disjunctions to which an index belongs.
boolean isVehicleAllowedForIndex(int vehicle, long index)
Returns true if a vehicle is allowed to visit a given node.
void setFirstSolutionEvaluator(LongBinaryOperator evaluator)
Gets/sets the evaluator used during the search.
Assignment preAssignment()
Returns an assignment used to fix some of the variables of the problem.
boolean hasVehicleWithCostClassIndex(int cost_class_index)
Returns true iff the model contains a vehicle with the given cost_class_index.
void setArcCostEvaluatorOfVehicle(int evaluator_index, int vehicle)
Sets the cost function for a given vehicle route.
boolean isVehicleUsed(Assignment assignment, int vehicle)
Returns true if the route of 'vehicle' is non empty in 'assignment'.
void assignmentToRoutes(Assignment assignment, long[][] routes)
Converts the solution in the given assignment to routes for all vehicles.
String getPrimaryConstrainedDimension()
Get the primary constrained dimension, or an empty std::string if it is unset.
RoutingModel(RoutingIndexManager index_manager, com.google.ortools.constraintsolver.RoutingModelParameters parameters)
void closeModelWithParameters(com.google.ortools.constraintsolver.RoutingSearchParameters search_parameters)
Same as above taking search parameters (as of 10/2015 some the parameters have to be set when closing...
void closeModel()
Closes the current routing model; after this method is called, no modification to the model can be do...
static final int ROUTING_FAIL_TIMEOUT
Time limit reached before finding a solution with RoutingModel::Solve().
long getDepot()
Returns the variable index of the first starting or ending node of all routes.
long getHomogeneousCost(long from_index, long to_index)
Returns the cost of the segment between two nodes supposing all vehicle costs are the same (returns t...
IntVar VehicleCostsConsideredVar(int vehicle)
Returns the variable specifying whether or not costs are considered for vehicle.
static final int ROUTING_INVALID
Model, model parameters or flags are not valid.
static final int ROUTING_FAIL
No solution found to the problem after calling RoutingModel::Solve().
int getCostClassIndexOfVehicle(long vehicle)
Get the cost class index of the given vehicle.
void setFixedCostOfVehicle(long cost, int vehicle)
Sets the fixed cost of one vehicle route.