Java Reference

Java Reference

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 RegisterPositiveUnaryTransitCallback(LongUnaryOperator callback) {
86  return mainJNI.RoutingModel_RegisterPositiveUnaryTransitCallback(swigCPtr, this, callback);
87  }
88 
89  public int registerTransitCallback(LongBinaryOperator callback) {
90  return mainJNI.RoutingModel_registerTransitCallback(swigCPtr, this, callback);
91  }
92 
93  public int registerPositiveTransitCallback(LongBinaryOperator callback) {
94  return mainJNI.RoutingModel_registerPositiveTransitCallback(swigCPtr, this, callback);
95  }
96 
100  public boolean addDimension(int evaluator_index, long slack_max, long capacity, boolean fix_start_cumul_to_zero, String name) {
101  return mainJNI.RoutingModel_addDimension(swigCPtr, this, evaluator_index, slack_max, capacity, fix_start_cumul_to_zero, name);
102  }
103 
104  public boolean addDimensionWithVehicleTransits(int[] evaluator_indices, long slack_max, long capacity, boolean fix_start_cumul_to_zero, String name) {
105  return mainJNI.RoutingModel_addDimensionWithVehicleTransits(swigCPtr, this, evaluator_indices, slack_max, capacity, fix_start_cumul_to_zero, name);
106  }
107 
108  public boolean addDimensionWithVehicleCapacity(int evaluator_index, long slack_max, long[] vehicle_capacities, boolean fix_start_cumul_to_zero, String name) {
109  return mainJNI.RoutingModel_addDimensionWithVehicleCapacity(swigCPtr, this, evaluator_index, slack_max, vehicle_capacities, fix_start_cumul_to_zero, name);
110  }
111 
112  public boolean addDimensionWithVehicleTransitAndCapacity(int[] evaluator_indices, long slack_max, long[] vehicle_capacities, boolean fix_start_cumul_to_zero, String name) {
113  return mainJNI.RoutingModel_addDimensionWithVehicleTransitAndCapacity(swigCPtr, this, evaluator_indices, slack_max, vehicle_capacities, fix_start_cumul_to_zero, name);
114  }
115 
119  public boolean addConstantDimensionWithSlack(long value, long capacity, long slack_max, boolean fix_start_cumul_to_zero, String name) {
120  return mainJNI.RoutingModel_addConstantDimensionWithSlack(swigCPtr, this, value, capacity, slack_max, fix_start_cumul_to_zero, name);
121  }
122 
123  public boolean addConstantDimension(long value, long capacity, boolean fix_start_cumul_to_zero, String name) {
124  return mainJNI.RoutingModel_addConstantDimension(swigCPtr, this, value, capacity, fix_start_cumul_to_zero, name);
125  }
126 
130  public boolean addVectorDimension(long[] values, long capacity, boolean fix_start_cumul_to_zero, String name) {
131  return mainJNI.RoutingModel_addVectorDimension(swigCPtr, this, values, capacity, fix_start_cumul_to_zero, name);
132  }
133 
137  public Constraint MakePathSpansAndTotalSlacks(RoutingDimension dimension, IntVar[] spans, IntVar[] total_slacks) {
138  long cPtr = mainJNI.RoutingModel_MakePathSpansAndTotalSlacks(swigCPtr, this, RoutingDimension.getCPtr(dimension), dimension, spans, total_slacks);
139  return (cPtr == 0) ? null : new Constraint(cPtr, false);
140  }
141 
145  public SWIGTYPE_p_std__vectorT_operations_research__RoutingDimension_p_t GetDimensionsForGlobalCumulOptimizers() {
146  return new SWIGTYPE_p_std__vectorT_operations_research__RoutingDimension_p_t(mainJNI.RoutingModel_GetDimensionsForGlobalCumulOptimizers(swigCPtr, this), false);
147  }
148 
149  public SWIGTYPE_p_std__vectorT_operations_research__RoutingDimension_p_t GetDimensionsForLocalCumulOptimizers() {
150  return new SWIGTYPE_p_std__vectorT_operations_research__RoutingDimension_p_t(mainJNI.RoutingModel_GetDimensionsForLocalCumulOptimizers(swigCPtr, this), false);
151  }
152 
156  public boolean hasDimension(String dimension_name) {
157  return mainJNI.RoutingModel_hasDimension(swigCPtr, this, dimension_name);
158  }
159 
163  public RoutingDimension getDimensionOrDie(String dimension_name) {
164  return new RoutingDimension(mainJNI.RoutingModel_getDimensionOrDie(swigCPtr, this, dimension_name), false);
165  }
166 
170  public RoutingDimension getMutableDimension(String dimension_name) {
171  long cPtr = mainJNI.RoutingModel_getMutableDimension(swigCPtr, this, dimension_name);
172  return (cPtr == 0) ? null : new RoutingDimension(cPtr, false);
173  }
174 
178  public void setPrimaryConstrainedDimension(String dimension_name) {
179  mainJNI.RoutingModel_setPrimaryConstrainedDimension(swigCPtr, this, dimension_name);
180  }
181 
186  return mainJNI.RoutingModel_getPrimaryConstrainedDimension(swigCPtr, this);
187  }
188 
192  public int addDisjunction(long[] indices, long penalty, long max_cardinality) {
193  return mainJNI.RoutingModel_addDisjunction__SWIG_0(swigCPtr, this, indices, penalty, max_cardinality);
194 }
195 
199  public int addDisjunction(long[] indices, long penalty) {
200  return mainJNI.RoutingModel_addDisjunction__SWIG_1(swigCPtr, this, indices, penalty);
201 }
202 
206  public int addDisjunction(long[] indices) {
207  return mainJNI.RoutingModel_addDisjunction__SWIG_2(swigCPtr, this, indices);
208 }
209 
213  public int[] getDisjunctionIndices(long index) {
214  return mainJNI.RoutingModel_getDisjunctionIndices__SWIG_0(swigCPtr, this, index);
215 }
216 
220  public long[] getDisjunctionIndices(int index) {
221  return mainJNI.RoutingModel_getDisjunctionIndices__SWIG_1(swigCPtr, this, index);
222 }
223 
227  public long getDisjunctionPenalty(int index) {
228  return mainJNI.RoutingModel_getDisjunctionPenalty(swigCPtr, this, index);
229  }
230 
234  public long getDisjunctionMaxCardinality(int index) {
235  return mainJNI.RoutingModel_getDisjunctionMaxCardinality(swigCPtr, this, index);
236  }
237 
241  public int getNumberOfDisjunctions() {
242  return mainJNI.RoutingModel_getNumberOfDisjunctions(swigCPtr, this);
243  }
244 
249  mainJNI.RoutingModel_ignoreDisjunctionsAlreadyForcedToZero(swigCPtr, this);
250  }
251 
255  public void addSoftSameVehicleConstraint(long[] indices, long cost) {
256  mainJNI.RoutingModel_addSoftSameVehicleConstraint(swigCPtr, this, indices, cost);
257  }
258 
262  public void setAllowedVehiclesForIndex(int[] vehicles, long index) {
263  mainJNI.RoutingModel_setAllowedVehiclesForIndex(swigCPtr, this, vehicles, index);
264  }
265 
269  public boolean isVehicleAllowedForIndex(int vehicle, long index) {
270  return mainJNI.RoutingModel_isVehicleAllowedForIndex(swigCPtr, this, vehicle, index);
271  }
272 
276  public void addPickupAndDelivery(long pickup, long delivery) {
277  mainJNI.RoutingModel_addPickupAndDelivery(swigCPtr, this, pickup, delivery);
278  }
279 
283  public void addPickupAndDeliverySets(int pickup_disjunction, int delivery_disjunction) {
284  mainJNI.RoutingModel_addPickupAndDeliverySets(swigCPtr, this, pickup_disjunction, delivery_disjunction);
285  }
286 
290  public void setPickupAndDeliveryPolicyOfAllVehicles(int policy) {
291  mainJNI.RoutingModel_setPickupAndDeliveryPolicyOfAllVehicles(swigCPtr, this, policy);
292  }
293 
294  public void setPickupAndDeliveryPolicyOfVehicle(int policy, int vehicle) {
295  mainJNI.RoutingModel_setPickupAndDeliveryPolicyOfVehicle(swigCPtr, this, policy, vehicle);
296  }
297 
298  public int getPickupAndDeliveryPolicyOfVehicle(int vehicle) {
299  return mainJNI.RoutingModel_getPickupAndDeliveryPolicyOfVehicle(swigCPtr, this, vehicle);
300  }
301 
305  public int getNumOfSingletonNodes() {
306  return mainJNI.RoutingModel_getNumOfSingletonNodes(swigCPtr, this);
307  }
308 
312  public void setVisitType(long index, int type) {
313  mainJNI.RoutingModel_setVisitType(swigCPtr, this, index, type);
314  }
315 
316  public int getVisitType(long index) {
317  return mainJNI.RoutingModel_getVisitType(swigCPtr, this, index);
318  }
319 
320  public int getNumberOfVisitTypes() {
321  return mainJNI.RoutingModel_getNumberOfVisitTypes(swigCPtr, this);
322  }
323 
327  public long unperformedPenalty(long var_index) {
328  return mainJNI.RoutingModel_unperformedPenalty(swigCPtr, this, var_index);
329  }
330 
334  public long unperformedPenaltyOrValue(long default_value, long var_index) {
335  return mainJNI.RoutingModel_unperformedPenaltyOrValue(swigCPtr, this, default_value, var_index);
336  }
337 
341  public long getDepot() {
342  return mainJNI.RoutingModel_getDepot(swigCPtr, this);
343  }
344 
348  public void setArcCostEvaluatorOfAllVehicles(int evaluator_index) {
349  mainJNI.RoutingModel_setArcCostEvaluatorOfAllVehicles(swigCPtr, this, evaluator_index);
350  }
351 
355  public void setArcCostEvaluatorOfVehicle(int evaluator_index, int vehicle) {
356  mainJNI.RoutingModel_setArcCostEvaluatorOfVehicle(swigCPtr, this, evaluator_index, vehicle);
357  }
358 
362  public void setFixedCostOfAllVehicles(long cost) {
363  mainJNI.RoutingModel_setFixedCostOfAllVehicles(swigCPtr, this, cost);
364  }
365 
369  public void setFixedCostOfVehicle(long cost, int vehicle) {
370  mainJNI.RoutingModel_setFixedCostOfVehicle(swigCPtr, this, cost, vehicle);
371  }
372 
376  public long getFixedCostOfVehicle(int vehicle) {
377  return mainJNI.RoutingModel_getFixedCostOfVehicle(swigCPtr, this, vehicle);
378  }
379 
383  public void setAmortizedCostFactorsOfAllVehicles(long linear_cost_factor, long quadratic_cost_factor) {
384  mainJNI.RoutingModel_setAmortizedCostFactorsOfAllVehicles(swigCPtr, this, linear_cost_factor, quadratic_cost_factor);
385  }
386 
390  public void setAmortizedCostFactorsOfVehicle(long linear_cost_factor, long quadratic_cost_factor, int vehicle) {
391  mainJNI.RoutingModel_setAmortizedCostFactorsOfVehicle(swigCPtr, this, linear_cost_factor, quadratic_cost_factor, vehicle);
392  }
393 
395  return mainJNI.RoutingModel_getAmortizedLinearCostFactorOfVehicles(swigCPtr, this);
396 }
397 
399  return mainJNI.RoutingModel_getAmortizedQuadraticCostFactorOfVehicles(swigCPtr, this);
400 }
401 
402  public void ConsiderEmptyRouteCostsForVehicle(boolean consider_costs, int vehicle) {
403  mainJNI.RoutingModel_ConsiderEmptyRouteCostsForVehicle(swigCPtr, this, consider_costs, vehicle);
404  }
405 
406  public boolean AreEmptyRouteCostsConsideredForVehicle(int vehicle) {
407  return mainJNI.RoutingModel_AreEmptyRouteCostsConsideredForVehicle(swigCPtr, this, vehicle);
408  }
409 
413  public void setFirstSolutionEvaluator(LongBinaryOperator evaluator) {
414  mainJNI.RoutingModel_setFirstSolutionEvaluator(swigCPtr, this, evaluator);
415  }
416 
420  public void addLocalSearchOperator(LocalSearchOperator ls_operator) {
421  mainJNI.RoutingModel_addLocalSearchOperator(swigCPtr, this, LocalSearchOperator.getCPtr(ls_operator), ls_operator);
422  }
423 
427  public void addSearchMonitor(SearchMonitor monitor) {
428  mainJNI.RoutingModel_addSearchMonitor(swigCPtr, this, SearchMonitor.getCPtr(monitor), monitor);
429  }
430 
434  public void addAtSolutionCallback(Runnable callback) {
435  mainJNI.RoutingModel_addAtSolutionCallback(swigCPtr, this, callback);
436  }
437 
442  mainJNI.RoutingModel_addVariableMinimizedByFinalizer(swigCPtr, this, IntVar.getCPtr(var), var);
443  }
444 
449  mainJNI.RoutingModel_addVariableMaximizedByFinalizer(swigCPtr, this, IntVar.getCPtr(var), var);
450  }
451 
455  public void AddWeightedVariableMinimizedByFinalizer(IntVar var, long cost) {
456  mainJNI.RoutingModel_AddWeightedVariableMinimizedByFinalizer(swigCPtr, this, IntVar.getCPtr(var), var, cost);
457  }
458 
462  public void AddVariableTargetToFinalizer(IntVar var, long target) {
463  mainJNI.RoutingModel_AddVariableTargetToFinalizer(swigCPtr, this, IntVar.getCPtr(var), var, target);
464  }
465 
469  public void closeModel() {
470  mainJNI.RoutingModel_closeModel(swigCPtr, this);
471  }
472 
477  mainJNI.RoutingModel_closeModelWithParameters(swigCPtr, this, search_parameters.toByteArray());
478  }
479 
483  public Assignment solve(Assignment assignment) {
484  long cPtr = mainJNI.RoutingModel_solve__SWIG_0(swigCPtr, this, Assignment.getCPtr(assignment), assignment);
485  return (cPtr == 0) ? null : new Assignment(cPtr, false);
486  }
487 
491  public Assignment solve() {
492  long cPtr = mainJNI.RoutingModel_solve__SWIG_1(swigCPtr, this);
493  return (cPtr == 0) ? null : new Assignment(cPtr, false);
494  }
495 
500  long cPtr = mainJNI.RoutingModel_solveWithParameters(swigCPtr, this, search_parameters.toByteArray());
501  return (cPtr == 0) ? null : new Assignment(cPtr, false);
502  }
503 
505  long cPtr = mainJNI.RoutingModel_solveFromAssignmentWithParameters(swigCPtr, this, Assignment.getCPtr(assignment), assignment, search_parameters.toByteArray());
506  return (cPtr == 0) ? null : new Assignment(cPtr, false);
507  }
508 
512  public void setAssignmentFromOtherModelAssignment(Assignment target_assignment, RoutingModel source_model, Assignment source_assignment) {
513  mainJNI.RoutingModel_setAssignmentFromOtherModelAssignment(swigCPtr, this, Assignment.getCPtr(target_assignment), target_assignment, RoutingModel.getCPtr(source_model), source_model, Assignment.getCPtr(source_assignment), source_assignment);
514  }
515 
519  public long computeLowerBound() {
520  return mainJNI.RoutingModel_computeLowerBound(swigCPtr, this);
521  }
522 
526  public int status() {
527  return mainJNI.RoutingModel_status(swigCPtr, this);
528  }
529 
533  public IntVar applyLocks(long[] locks) {
534  long cPtr = mainJNI.RoutingModel_applyLocks(swigCPtr, this, locks);
535  return (cPtr == 0) ? null : new IntVar(cPtr, false);
536  }
537 
541  public boolean applyLocksToAllVehicles(long[][] locks, boolean close_routes) {
542  return mainJNI.RoutingModel_applyLocksToAllVehicles(swigCPtr, this, locks, close_routes);
543  }
544 
549  long cPtr = mainJNI.RoutingModel_preAssignment(swigCPtr, this);
550  return (cPtr == 0) ? null : new Assignment(cPtr, false);
551  }
552 
554  long cPtr = mainJNI.RoutingModel_mutablePreAssignment(swigCPtr, this);
555  return (cPtr == 0) ? null : new Assignment(cPtr, false);
556  }
557 
561  public boolean writeAssignment(String file_name) {
562  return mainJNI.RoutingModel_writeAssignment(swigCPtr, this, file_name);
563  }
564 
568  public Assignment readAssignment(String file_name) {
569  long cPtr = mainJNI.RoutingModel_readAssignment(swigCPtr, this, file_name);
570  return (cPtr == 0) ? null : new Assignment(cPtr, false);
571  }
572 
577  long cPtr = mainJNI.RoutingModel_restoreAssignment(swigCPtr, this, Assignment.getCPtr(solution), solution);
578  return (cPtr == 0) ? null : new Assignment(cPtr, false);
579  }
580 
584  public Assignment readAssignmentFromRoutes(long[][] routes, boolean ignore_inactive_indices) {
585  long cPtr = mainJNI.RoutingModel_readAssignmentFromRoutes(swigCPtr, this, routes, ignore_inactive_indices);
586  return (cPtr == 0) ? null : new Assignment(cPtr, false);
587  }
588 
592  public boolean routesToAssignment(long[][] routes, boolean ignore_inactive_indices, boolean close_routes, Assignment assignment) {
593  return mainJNI.RoutingModel_routesToAssignment(swigCPtr, this, routes, ignore_inactive_indices, close_routes, Assignment.getCPtr(assignment), assignment);
594  }
595 
599  public void assignmentToRoutes(Assignment assignment, long[][] routes) {
600  mainJNI.RoutingModel_assignmentToRoutes(swigCPtr, this, Assignment.getCPtr(assignment), assignment, routes);
601  }
602 
607  long cPtr = mainJNI.RoutingModel_compactAssignment(swigCPtr, this, Assignment.getCPtr(assignment), assignment);
608  return (cPtr == 0) ? null : new Assignment(cPtr, false);
609  }
610 
615  long cPtr = mainJNI.RoutingModel_compactAndCheckAssignment(swigCPtr, this, Assignment.getCPtr(assignment), assignment);
616  return (cPtr == 0) ? null : new Assignment(cPtr, false);
617  }
618 
622  public void addToAssignment(IntVar var) {
623  mainJNI.RoutingModel_addToAssignment(swigCPtr, this, IntVar.getCPtr(var), var);
624  }
625 
626  public void addIntervalToAssignment(IntervalVar interval) {
627  mainJNI.RoutingModel_addIntervalToAssignment(swigCPtr, this, IntervalVar.getCPtr(interval), interval);
628  }
629 
633  public Assignment PackCumulsOfOptimizerDimensionsFromAssignment(Assignment original_assignment, SWIGTYPE_p_absl__Duration duration_limit) {
634  long cPtr = mainJNI.RoutingModel_PackCumulsOfOptimizerDimensionsFromAssignment(swigCPtr, this, Assignment.getCPtr(original_assignment), original_assignment, SWIGTYPE_p_absl__Duration.getCPtr(duration_limit));
635  return (cPtr == 0) ? null : new Assignment(cPtr, false);
636  }
637 
642  mainJNI.RoutingModel_addLocalSearchFilter(swigCPtr, this, LocalSearchFilter.getCPtr(filter), filter);
643  }
644 
648  public long start(int vehicle) {
649  return mainJNI.RoutingModel_start(swigCPtr, this, vehicle);
650  }
651 
655  public long end(int vehicle) {
656  return mainJNI.RoutingModel_end(swigCPtr, this, vehicle);
657  }
658 
662  public boolean isStart(long index) {
663  return mainJNI.RoutingModel_isStart(swigCPtr, this, index);
664  }
665 
669  public boolean isEnd(long index) {
670  return mainJNI.RoutingModel_isEnd(swigCPtr, this, index);
671  }
672 
676  public int VehicleIndex(int index) {
677  return mainJNI.RoutingModel_VehicleIndex(swigCPtr, this, index);
678  }
679 
683  public long next(Assignment assignment, long index) {
684  return mainJNI.RoutingModel_next(swigCPtr, this, Assignment.getCPtr(assignment), assignment, index);
685  }
686 
690  public boolean isVehicleUsed(Assignment assignment, int vehicle) {
691  return mainJNI.RoutingModel_isVehicleUsed(swigCPtr, this, Assignment.getCPtr(assignment), assignment, vehicle);
692  }
693 
697  public IntVar[] nexts() {
698  return mainJNI.RoutingModel_nexts(swigCPtr, this);
699 }
700 
704  public IntVar[] vehicleVars() {
705  return mainJNI.RoutingModel_vehicleVars(swigCPtr, this);
706 }
707 
711  public IntVar nextVar(long index) {
712  long cPtr = mainJNI.RoutingModel_nextVar(swigCPtr, this, index);
713  return (cPtr == 0) ? null : new IntVar(cPtr, false);
714  }
715 
719  public IntVar activeVar(long index) {
720  long cPtr = mainJNI.RoutingModel_activeVar(swigCPtr, this, index);
721  return (cPtr == 0) ? null : new IntVar(cPtr, false);
722  }
723 
727  public IntVar VehicleCostsConsideredVar(int vehicle) {
728  long cPtr = mainJNI.RoutingModel_VehicleCostsConsideredVar(swigCPtr, this, vehicle);
729  return (cPtr == 0) ? null : new IntVar(cPtr, false);
730  }
731 
735  public IntVar vehicleVar(long index) {
736  long cPtr = mainJNI.RoutingModel_vehicleVar(swigCPtr, this, index);
737  return (cPtr == 0) ? null : new IntVar(cPtr, false);
738  }
739 
743  public IntVar costVar() {
744  long cPtr = mainJNI.RoutingModel_costVar(swigCPtr, this);
745  return (cPtr == 0) ? null : new IntVar(cPtr, false);
746  }
747 
751  public long getArcCostForVehicle(long from_index, long to_index, long vehicle) {
752  return mainJNI.RoutingModel_getArcCostForVehicle(swigCPtr, this, from_index, to_index, vehicle);
753  }
754 
759  return mainJNI.RoutingModel_costsAreHomogeneousAcrossVehicles(swigCPtr, this);
760  }
761 
765  public long getHomogeneousCost(long from_index, long to_index) {
766  return mainJNI.RoutingModel_getHomogeneousCost(swigCPtr, this, from_index, to_index);
767  }
768 
772  public long getArcCostForFirstSolution(long from_index, long to_index) {
773  return mainJNI.RoutingModel_getArcCostForFirstSolution(swigCPtr, this, from_index, to_index);
774  }
775 
779  public long getArcCostForClass(long from_index, long to_index, long cost_class_index) {
780  return mainJNI.RoutingModel_getArcCostForClass(swigCPtr, this, from_index, to_index, cost_class_index);
781  }
782 
786  public int getCostClassIndexOfVehicle(long vehicle) {
787  return mainJNI.RoutingModel_getCostClassIndexOfVehicle(swigCPtr, this, vehicle);
788 }
789 
793  public boolean hasVehicleWithCostClassIndex(int cost_class_index) {
794  return mainJNI.RoutingModel_hasVehicleWithCostClassIndex(swigCPtr, this, cost_class_index);
795  }
796 
800  public int getCostClassesCount() {
801  return mainJNI.RoutingModel_getCostClassesCount(swigCPtr, this);
802  }
803 
808  return mainJNI.RoutingModel_getNonZeroCostClassesCount(swigCPtr, this);
809  }
810 
811  public int getVehicleClassIndexOfVehicle(long vehicle) {
812  return mainJNI.RoutingModel_getVehicleClassIndexOfVehicle(swigCPtr, this, vehicle);
813 }
814 
818  public int getVehicleClassesCount() {
819  return mainJNI.RoutingModel_getVehicleClassesCount(swigCPtr, this);
820  }
821 
825  public int[] getSameVehicleIndicesOfIndex(int node) {
826  return mainJNI.RoutingModel_getSameVehicleIndicesOfIndex(swigCPtr, this, node);
827 }
828 
832  public boolean arcIsMoreConstrainedThanArc(long from, long to1, long to2) {
833  return mainJNI.RoutingModel_arcIsMoreConstrainedThanArc(swigCPtr, this, from, to1, to2);
834  }
835 
839  public String debugOutputAssignment(Assignment solution_assignment, String dimension_to_print) {
840  return mainJNI.RoutingModel_debugOutputAssignment(swigCPtr, this, Assignment.getCPtr(solution_assignment), solution_assignment, dimension_to_print);
841  }
842 
846  public Solver solver() {
847  long cPtr = mainJNI.RoutingModel_solver(swigCPtr, this);
848  return (cPtr == 0) ? null : new Solver(cPtr, false);
849  }
850 
854  public boolean checkLimit() {
855  return mainJNI.RoutingModel_checkLimit(swigCPtr, this);
856  }
857 
861  public SWIGTYPE_p_absl__Duration RemainingTime() {
862  return new SWIGTYPE_p_absl__Duration(mainJNI.RoutingModel_RemainingTime(swigCPtr, this), true);
863  }
864 
868  public int nodes() {
869  return mainJNI.RoutingModel_nodes(swigCPtr, this);
870  }
871 
875  public int vehicles() {
876  return mainJNI.RoutingModel_vehicles(swigCPtr, this);
877  }
878 
882  public long size() {
883  return mainJNI.RoutingModel_size(swigCPtr, this);
884  }
885 
890  return mainJNI.RoutingModel_getNumberOfDecisionsInFirstSolution(swigCPtr, this, search_parameters.toByteArray());
891  }
892 
894  return mainJNI.RoutingModel_getNumberOfRejectsInFirstSolution(swigCPtr, this, search_parameters.toByteArray());
895  }
896 
900  public boolean isMatchingModel() {
901  return mainJNI.RoutingModel_isMatchingModel(swigCPtr, this);
902  }
903 
907  public DecisionBuilder makeGuidedSlackFinalizer(RoutingDimension dimension, LongUnaryOperator initializer) {
908  long cPtr = mainJNI.RoutingModel_makeGuidedSlackFinalizer(swigCPtr, this, RoutingDimension.getCPtr(dimension), dimension, initializer);
909  return (cPtr == 0) ? null : new DecisionBuilder(cPtr, false);
910  }
911 
916  long cPtr = mainJNI.RoutingModel_makeSelfDependentDimensionFinalizer(swigCPtr, this, RoutingDimension.getCPtr(dimension), dimension);
917  return (cPtr == 0) ? null : new DecisionBuilder(cPtr, false);
918  }
919 
920  public void addMatrixDimension(long[][] values, long capacity, boolean fix_start_cumul_to_zero, String name) {
921  mainJNI.RoutingModel_addMatrixDimension(swigCPtr, this, values, capacity, fix_start_cumul_to_zero, name);
922  }
923 
924  // Status
932  public final static int ROUTING_NOT_SOLVED = mainJNI.RoutingModel_ROUTING_NOT_SOLVED_get();
936  public final static int ROUTING_SUCCESS = mainJNI.RoutingModel_ROUTING_SUCCESS_get();
940  public final static int ROUTING_FAIL = mainJNI.RoutingModel_ROUTING_FAIL_get();
944  public final static int ROUTING_FAIL_TIMEOUT = mainJNI.RoutingModel_ROUTING_FAIL_TIMEOUT_get();
948  public final static int ROUTING_INVALID = mainJNI.RoutingModel_ROUTING_INVALID_get();
949 
950  // PickupAndDeliveryPolicy
958  public final static int PICKUP_AND_DELIVERY_NO_ORDER = mainJNI.RoutingModel_PICKUP_AND_DELIVERY_NO_ORDER_get();
962  public final static int PICKUP_AND_DELIVERY_LIFO = mainJNI.RoutingModel_PICKUP_AND_DELIVERY_LIFO_get();
966  public final static int PICKUP_AND_DELIVERY_FIFO = mainJNI.RoutingModel_PICKUP_AND_DELIVERY_FIFO_get();
967 
968 }
int vehicles()
Returns the number of vehicle routes in the model.
Assignment compactAndCheckAssignment(Assignment assignment)
Same as CompactAssignment() but also checks the validity of the final compact solution; if it is not ...
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...
long getFixedCostOfVehicle(int vehicle)
Returns the route fixed cost taken into account if the route of the vehicle is not empty,...
int status()
Returns the current status of the routing model.
void setAmortizedCostFactorsOfVehicle(long linear_cost_factor, long quadratic_cost_factor, int vehicle)
Sets the linear and quadratic cost factor of the given vehicle.
Dimensions represent quantities accumulated at nodes along the routes.
RoutingDimension getMutableDimension(String dimension_name)
Returns a dimension from its name.
IntVar [] nexts()
Returns all next variables of the model, such that Nexts(i) is the next variable of the node correspo...
void addVariableMinimizedByFinalizer(IntVar var)
Adds a variable to minimize in the solution finalizer.
static int getKNoDimension()
Constant used to express the "no dimension" index, returned when a dimension name does not correspond...
Solver Class A solver represents the main computation engine.
Definition: Solver.java:57
int RegisterPositiveUnaryTransitCallback(LongUnaryOperator callback)
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 VehicleIndex(int index)
Returns the vehicle of the given start/end index, and -1 if the given index is not a vehicle start/en...
Assignment readAssignment(String file_name)
Reads an assignment from a file and returns the current solution.
int getVehicleClassesCount()
Returns the number of different vehicle classes in the model.
IntVar vehicleVar(long index)
Returns the vehicle variable of the node corresponding to index.
int registerPositiveTransitCallback(LongBinaryOperator callback)
IntVar applyLocks(long[] locks)
Applies a lock chain to the next search.
void setAllowedVehiclesForIndex(int[] vehicles, long index)
Sets the vehicles which can visit a given node.
void closeModel()
Closes the current routing model; after this method is called, no modification to the model can be do...
Assignment preAssignment()
Returns an assignment used to fix some of the variables of the problem.
Manager for any NodeIndex <-> variable index conversion.
static final int ROUTING_INVALID
Model, model parameters or flags are not valid.
boolean isVehicleUsed(Assignment assignment, int vehicle)
Returns true if the route of 'vehicle' is non empty in 'assignment'.
void setPrimaryConstrainedDimension(String dimension_name)
Set the given dimension as "primary constrained".
Assignment solve(Assignment assignment)
Solves the current routing model; closes the current model.
static long getKNoPenalty()
Constant used to express a hard constraint instead of a soft penalty.
boolean writeAssignment(String file_name)
Writes the current solution to a file containing an AssignmentProto.
int [] getDisjunctionIndices(long index)
Returns the indices of the disjunctions to which an index belongs.
int getCostClassesCount()
Returns the number of different cost classes in the model.
boolean isMatchingModel()
Returns true if a vehicle/node matching problem is detected.
void setVisitType(long index, int type)
Set the node visit types and incompatibilities/requirements between the types (see below).
int getNumOfSingletonNodes()
Returns the number of non-start/end nodes which do not appear in a pickup/delivery pair.
static final int ROUTING_FAIL_TIMEOUT
Time limit reached before finding a solution with RoutingModel::Solve().
boolean addDimensionWithVehicleTransitAndCapacity(int[] evaluator_indices, long slack_max, long[] vehicle_capacities, boolean fix_start_cumul_to_zero, String name)
boolean addDimensionWithVehicleCapacity(int evaluator_index, long slack_max, long[] vehicle_capacities, boolean fix_start_cumul_to_zero, String name)
long unperformedPenalty(long var_index)
Get the "unperformed" penalty of a node.
long getDisjunctionMaxCardinality(int index)
Returns the maximum number of possible active nodes of the node disjunction of index 'index'.
void addSearchMonitor(SearchMonitor monitor)
Adds a search monitor to the search used to solve the routing model.
long getDepot()
Returns the variable index of the first starting or ending node of all routes.
long computeLowerBound()
Computes a lower bound to the routing problem solving a linear assignment problem.
static final int PICKUP_AND_DELIVERY_LIFO
Deliveries must be performed in reverse order of pickups.
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...
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...
Assignment solveFromAssignmentWithParameters(Assignment assignment, com.google.ortools.constraintsolver.RoutingSearchParameters search_parameters)
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...
boolean isStart(long index)
Returns true if 'index' represents the first node of a route.
void addLocalSearchOperator(LocalSearchOperator ls_operator)
Adds a local search operator to the set of operators used to solve the vehicle routing problem.
static final int ROUTING_NOT_SOLVED
Status of the search.
void addSoftSameVehicleConstraint(long[] indices, long cost)
Adds a soft contraint to force a set of variable indices to be on the same vehicle.
long getDisjunctionPenalty(int index)
Returns the penalty of the node disjunction of index 'index'.
boolean arcIsMoreConstrainedThanArc(long from, long to1, long to2)
Returns whether the arc from->to1 is more constrained than from->to2, taking into account,...
void AddWeightedVariableMinimizedByFinalizer(IntVar var, long cost)
Adds a variable to minimize in the solution finalizer, with a weighted priority: the higher the more ...
int addDisjunction(long[] indices, long penalty, long max_cardinality)
Adds a disjunction constraint on the indices: exactly 'max_cardinality' of the indices are active.
IntVar activeVar(long index)
Returns the active variable of the node corresponding to index.
Assignment solve()
Solves the current routing model; closes the current model.
int [] getSameVehicleIndicesOfIndex(int node)
Returns variable indices of nodes constrained to be on the same route.
long size()
Returns the number of next variables in the model.
long next(Assignment assignment, long index)
Assignment inspection Returns the variable index of the node directly after the node corresponding to...
void addIntervalToAssignment(IntervalVar interval)
boolean checkLimit()
Returns true if the search limit has been crossed.
long [] getDisjunctionIndices(int index)
Returns the variable indices of the nodes in the disjunction of index 'index'.
IntVar [] vehicleVars()
Returns all vehicle variables of the model, such that VehicleVars(i) is the vehicle variable of the n...
RoutingModel(long cPtr, boolean cMemoryOwn)
Assignment solveWithParameters(com.google.ortools.constraintsolver.RoutingSearchParameters search_parameters)
Solves the current routing model with the given parameters.
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; ...
Constraint MakePathSpansAndTotalSlacks(RoutingDimension dimension, IntVar[] spans, IntVar[] total_slacks)
For every vehicle of the routing model: - if total_slacks[vehicle] is not nullptr,...
void addPickupAndDeliverySets(int pickup_disjunction, int delivery_disjunction)
Same as AddPickupAndDelivery but notifying that the performed node from the disjunction of index 'pic...
A search monitor is a simple set of callbacks to monitor all search events.
long start(int vehicle)
Model inspection.
long getArcCostForVehicle(long from_index, long to_index, long vehicle)
Returns the cost of the transit arc between two nodes for a given vehicle.
IntVar nextVar(long index)
Returns the next variable of the node corresponding to index.
A DecisionBuilder is responsible for creating the search tree.
SWIGTYPE_p_absl__Duration RemainingTime()
Returns the time left in the search limit.
boolean isEnd(long index)
Returns true if 'index' represents the last node of a route.
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...
int addDisjunction(long[] indices, long penalty)
Adds a disjunction constraint on the indices: exactly 'max_cardinality' of the indices are active.
boolean addDimensionWithVehicleTransits(int[] evaluator_indices, long slack_max, long capacity, boolean fix_start_cumul_to_zero, String name)
int getNonZeroCostClassesCount()
Ditto, minus the 'always zero', built-in cost class.
void addPickupAndDelivery(long pickup, long delivery)
Notifies that index1 and index2 form a pair of nodes which should belong to the same route.
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 addToAssignment(IntVar var)
Adds an extra variable to the vehicle routing assignment.
boolean addConstantDimension(long value, long capacity, boolean fix_start_cumul_to_zero, String name)
This class represent a reversible FIFO structure.
long end(int vehicle)
Returns the variable index of the ending node of a vehicle route.
RoutingModel(RoutingIndexManager index_manager, com.google.ortools.constraintsolver.RoutingModelParameters parameters)
void ignoreDisjunctionsAlreadyForcedToZero()
SPECIAL: Makes the solver ignore all the disjunctions whose active variables are all trivially zero (...
void addVariableMaximizedByFinalizer(IntVar var)
Adds a variable to maximize in the solution finalizer (see above for information on the solution fina...
void AddVariableTargetToFinalizer(IntVar var, long target)
Add a variable to set the closest possible to the target value in the solution finalizer.
Assignment restoreAssignment(Assignment solution)
Restores an assignment as a solution in the routing model and returns the new solution.
Local Search Filters are used for fast neighbor pruning.
int addDisjunction(long[] indices)
Adds a disjunction constraint on the indices: exactly 'max_cardinality' of the indices are active.
void setPickupAndDeliveryPolicyOfAllVehicles(int policy)
Sets the Pickup and delivery policy of all vehicles.
boolean isVehicleAllowedForIndex(int vehicle, long index)
Returns true if a vehicle is allowed to visit a given node.
static final int PICKUP_AND_DELIVERY_NO_ORDER
Types of precedence policy applied to pickup and delivery pairs.
DecisionBuilder makeGuidedSlackFinalizer(RoutingDimension dimension, LongUnaryOperator initializer)
The next few members are in the public section only for testing purposes.
Assignment compactAssignment(Assignment assignment)
Returns a compacted version of the given assignment, in which all vehicles with id lower or equal to ...
IntVar costVar()
Returns the global cost variable which is being minimized.
An Assignment is a variable -> domains mapping, used to report solutions to the user.
Definition: Assignment.java:14
String getPrimaryConstrainedDimension()
Get the primary constrained dimension, or an empty std::string if it is unset.
Assignment readAssignmentFromRoutes(long[][] routes, boolean ignore_inactive_indices)
Restores the routes as the current solution.
int registerTransitCallback(LongBinaryOperator callback)
IntVar VehicleCostsConsideredVar(int vehicle)
Returns the variable specifying whether or not costs are considered for vehicle.
int registerUnaryTransitCallback(LongUnaryOperator callback)
Registers 'callback' and returns its index.
void setFixedCostOfVehicle(long cost, int vehicle)
Sets the fixed cost of one vehicle route.
RoutingModel(RoutingIndexManager index_manager)
Constructor taking an index manager.
Solver solver()
Returns the underlying constraint solver.
long getArcCostForFirstSolution(long from_index, long to_index)
Returns the cost of the arc in the context of the first solution strategy.
int getCostClassIndexOfVehicle(long vehicle)
Get the cost class index of the given vehicle.
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.
void addLocalSearchFilter(LocalSearchFilter filter)
Adds a custom local search filter to the list of filters used to speed up local search by pruning unf...
String debugOutputAssignment(Assignment solution_assignment, String dimension_to_print)
Print some debugging information about an assignment, including the feasible intervals of the CumulVa...
void ConsiderEmptyRouteCostsForVehicle(boolean consider_costs, int vehicle)
void setFixedCostOfAllVehicles(long cost)
Sets the fixed cost of all vehicle routes.
void setArcCostEvaluatorOfVehicle(int evaluator_index, int vehicle)
Sets the cost function for a given vehicle route.
static final int ROUTING_FAIL
No solution found to the problem after calling RoutingModel::Solve().
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...
void assignmentToRoutes(Assignment assignment, long[][] routes)
Converts the solution in the given assignment to routes for all vehicles.
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...
RoutingDimension getDimensionOrDie(String dimension_name)
Returns a dimension from its name.
boolean hasDimension(String dimension_name)
Returns true if a dimension exists for a given dimension name.
long getNumberOfRejectsInFirstSolution(com.google.ortools.constraintsolver.RoutingSearchParameters search_parameters)
static final int PICKUP_AND_DELIVERY_FIFO
Deliveries must be performed in the same order as pickups.
long getNumberOfDecisionsInFirstSolution(com.google.ortools.constraintsolver.RoutingSearchParameters search_parameters)
Returns statistics on first solution search, number of decisions sent to filters, number of decisions...
boolean costsAreHomogeneousAcrossVehicles()
Whether costs are homogeneous across all vehicles.
boolean hasVehicleWithCostClassIndex(int cost_class_index)
Returns true iff the model contains a vehicle with the given cost_class_index.
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...
int nodes()
Sizes and indices Returns the number of nodes in the model.
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.
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)...
void addMatrixDimension(long[][] values, long capacity, boolean fix_start_cumul_to_zero, String name)
void setPickupAndDeliveryPolicyOfVehicle(int policy, int vehicle)
void setFirstSolutionEvaluator(LongBinaryOperator evaluator)
Gets/sets the evaluator used during the search.
DecisionBuilder makeSelfDependentDimensionFinalizer(RoutingDimension dimension)
MakeSelfDependentDimensionFinalizer is a finalizer for the slacks of a self-dependent dimension.
static int getKNoDisjunction()
Constant used to express the "no disjunction" index, returned when a node does not appear in any disj...
int getNumberOfDisjunctions()
Returns the number of node disjunctions in the model.
SWIGTYPE_p_std__vectorT_operations_research__RoutingDimension_p_t GetDimensionsForLocalCumulOptimizers()
static final int ROUTING_SUCCESS
Problem solved successfully after calling RoutingModel::Solve().
void addAtSolutionCallback(Runnable callback)
Adds a callback called each time a solution is found during the search.