11
11
// See the License for the specific language governing permissions and
12
12
// limitations under the License.
13
13
14
+ #include < algorithm>
14
15
#include < cstdint>
15
16
#include < functional>
17
+ #include < iterator>
16
18
#include < utility>
17
19
18
20
#include " ortools/constraint_solver/constraint_solver.h"
30
32
#include " pybind11/stl.h"
31
33
#include " pybind11_protobuf/native_proto_caster.h"
32
34
35
+ using ::operations_research::DefaultRoutingModelParameters;
33
36
using ::operations_research::DefaultRoutingSearchParameters;
34
37
using ::operations_research::RoutingIndexManager;
38
+ using ::operations_research::RoutingDimension;
35
39
using ::operations_research::RoutingModel;
36
40
using ::pybind11::arg;
37
41
@@ -41,7 +45,12 @@ PYBIND11_MODULE(model, m) {
41
45
pybind11::module::import (
42
46
" ortools.constraint_solver.python.constraint_solver" );
43
47
48
+ m.def (" default_routing_model_parameters" , &DefaultRoutingModelParameters,
49
+ pybind11::return_value_policy::reference_internal,
50
+ DOC (operations_research, DefaultRoutingModelParameters));
51
+
44
52
m.def (" default_routing_search_parameters" , &DefaultRoutingSearchParameters,
53
+ pybind11::return_value_policy::reference_internal,
45
54
DOC (operations_research, DefaultRoutingSearchParameters));
46
55
47
56
pybind11::class_<RoutingIndexManager>(
@@ -52,6 +61,23 @@ PYBIND11_MODULE(model, m) {
52
61
RoutingIndexManager::NodeIndex (depot));
53
62
}),
54
63
DOC (operations_research, RoutingIndexManager, RoutingIndexManager))
64
+ .def (pybind11::init ([](int num_nodes, int num_vehicles,
65
+ const std::vector<int > starts,
66
+ const std::vector<int > ends) {
67
+ std::vector<RoutingIndexManager::NodeIndex> start_nodes;
68
+ start_nodes.reserve (starts.size ());
69
+ std::transform (starts.cbegin (), starts.cend (), std::back_inserter (start_nodes),
70
+ [](int node){return RoutingIndexManager::NodeIndex (node);});
71
+
72
+ std::vector<RoutingIndexManager::NodeIndex> end_nodes;
73
+ end_nodes.reserve (ends.size ());
74
+ std::transform (ends.cbegin (), ends.cend (), std::back_inserter (end_nodes),
75
+ [](int node){return RoutingIndexManager::NodeIndex (node);});
76
+
77
+ return new RoutingIndexManager (
78
+ num_nodes, num_vehicles, start_nodes, end_nodes);
79
+ }),
80
+ DOC (operations_research, RoutingIndexManager, RoutingIndexManager))
55
81
.def (" num_nodes" , &RoutingIndexManager::num_nodes,
56
82
DOC (operations_research, RoutingIndexManager, num_nodes))
57
83
.def (" num_vehicles" , &RoutingIndexManager::num_vehicles,
@@ -76,10 +102,34 @@ PYBIND11_MODULE(model, m) {
76
102
.def (" get_end_index" , &RoutingIndexManager::GetEndIndex,
77
103
DOC (operations_research, RoutingIndexManager, GetEndIndex));
78
104
105
+ pybind11::class_<RoutingDimension>(m, " RoutingDimension" )
106
+ .def (" model" , &RoutingDimension::model,
107
+ pybind11::return_value_policy::reference_internal)
108
+ .def (" get_transit_value" , &RoutingDimension::GetTransitValue,
109
+ arg (" from_index" ), arg (" to_index" ), arg (" vehicle" ));
110
+
79
111
pybind11::class_<RoutingModel>(m, " RoutingModel" )
80
112
.def (pybind11::init ([](const RoutingIndexManager& routing_index_manager) {
81
113
return new RoutingModel (routing_index_manager);
82
114
}))
115
+ .def (" register_transit_matrix" ,
116
+ [](RoutingModel* routing_model,
117
+ std::vector<std::vector<int64_t >> transit_matrix) {
118
+ return routing_model->RegisterTransitMatrix (
119
+ std::move (transit_matrix));
120
+ })
121
+ .def (" register_unary_transit_vector" ,
122
+ [](RoutingModel* routing_model,
123
+ std::vector<int64_t > transit_vector) {
124
+ return routing_model->RegisterUnaryTransitVector (
125
+ std::move (transit_vector));
126
+ })
127
+ .def (" register_unary_transit_callback" ,
128
+ [](RoutingModel* routing_model,
129
+ std::function<int64_t (int64_t )> transit_callback) {
130
+ return routing_model->RegisterUnaryTransitCallback (
131
+ std::move (transit_callback));
132
+ })
83
133
.def (" register_transit_callback" ,
84
134
[](RoutingModel* routing_model,
85
135
std::function<int64_t (int64_t , int64_t )> transit_callback) {
@@ -89,6 +139,48 @@ PYBIND11_MODULE(model, m) {
89
139
.def (" set_arc_cost_evaluator_of_all_vehicles" ,
90
140
&RoutingModel::SetArcCostEvaluatorOfAllVehicles,
91
141
arg (" transit_callback_index" ))
142
+ .def (" add_dimension" , &RoutingModel::AddDimension,
143
+ arg (" evaluator_index" ),
144
+ arg (" slack_max" ),
145
+ arg (" capacity" ),
146
+ arg (" fix_start_cumul_to_zero" ),
147
+ arg (" name" ))
148
+ .def (" add_dimension_with_vehicle_capacity" , &RoutingModel::AddDimensionWithVehicleCapacity,
149
+ arg (" evaluator_index" ),
150
+ arg (" slack_max" ),
151
+ arg (" vehicle_capacities" ),
152
+ arg (" fix_start_cumul_to_zero" ),
153
+ arg (" name" ))
154
+ .def (" add_dimension_with_vehicle_transits" , &RoutingModel::AddDimensionWithVehicleTransits,
155
+ arg (" evaluator_indices" ),
156
+ arg (" slack_max" ),
157
+ arg (" capacity" ),
158
+ arg (" fix_start_cumul_to_zero" ),
159
+ arg (" name" ))
160
+ .def (" add_dimension_with_vehicle_transit_and_capacity" , &RoutingModel::AddDimensionWithVehicleTransitAndCapacity,
161
+ arg (" evaluator_indices" ),
162
+ arg (" slack_max" ),
163
+ arg (" vehicle_capacities" ),
164
+ arg (" fix_start_cumul_to_zero" ),
165
+ arg (" name" ))
166
+ .def (" add_constant_dimension" , &RoutingModel::AddConstantDimension,
167
+ arg (" value" ),
168
+ arg (" capacity" ),
169
+ arg (" fix_start_cumul_to_zero" ),
170
+ arg (" name" ))
171
+ .def (" add_vector_dimension" , &RoutingModel::AddVectorDimension,
172
+ arg (" values" ),
173
+ arg (" capacity" ),
174
+ arg (" fix_start_cumul_to_zero" ),
175
+ arg (" name" ))
176
+ .def (" add_matrix_dimension" , &RoutingModel::AddMatrixDimension,
177
+ arg (" values" ),
178
+ arg (" capacity" ),
179
+ arg (" fix_start_cumul_to_zero" ),
180
+ arg (" name" ))
181
+ .def (" get_dimension_or_die" , &RoutingModel::GetDimensionOrDie,
182
+ pybind11::return_value_policy::reference_internal,
183
+ arg (" dimension_name" ))
92
184
.def (" solve" , &RoutingModel::Solve,
93
185
pybind11::return_value_policy::reference_internal,
94
186
arg (" assignment" ) = nullptr )
0 commit comments