From c597820746d61e8c20f2a67d018cfce18d4f56f3 Mon Sep 17 00:00:00 2001 From: Andrea Spadaccini Date: Wed, 16 Oct 2019 13:59:32 +0100 Subject: [PATCH 1/2] Fix typo: an -> a. --- ortools/sat/csharp/IntegerExpressions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ortools/sat/csharp/IntegerExpressions.cs b/ortools/sat/csharp/IntegerExpressions.cs index 82345d314b..43b7a6e51c 100644 --- a/ortools/sat/csharp/IntegerExpressions.cs +++ b/ortools/sat/csharp/IntegerExpressions.cs @@ -45,7 +45,7 @@ namespace Google.OrTools.Sat int GetIndex(); } - // Holds an linear expression. + // Holds a linear expression. public class LinearExpr { From a24c7904ab4f7fb8f1d84649ccaf6f63562ac44d Mon Sep 17 00:00:00 2001 From: Paul Date: Tue, 19 Nov 2019 17:02:48 -0500 Subject: [PATCH 2/2] Create mip_var_array.py New MIP example for documentation. --- .../linear_solver/samples/mip_var_array.py | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 ortools/linear_solver/samples/mip_var_array.py diff --git a/ortools/linear_solver/samples/mip_var_array.py b/ortools/linear_solver/samples/mip_var_array.py new file mode 100644 index 0000000000..fdd751c965 --- /dev/null +++ b/ortools/linear_solver/samples/mip_var_array.py @@ -0,0 +1,103 @@ +# Copyright 2010-2018 Google LLC +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""Integer programming examples that show how to use the APIs.""" +# [START program] +# [START import] +from __future__ import print_function +from ortools.linear_solver import pywraplp +# [END import] + + +# [START data_model] +def create_data_model(): + """Stores the data for the problem.""" + data = {} + # Locations in block units + data['constraint_coeffs'] = [ + [5, 7, 9, 2, 1], + [18, 4, -9, 10, 12], + [4, 7, 3, 8, 5], + [5, 13, 16, 3, -7], + ] + data['bounds'] = [250, 285, 211, 315] + data['obj_coeffs'] = [7, 8, 2, 9, 6] + data['num_vars'] = 5 + data['num_constraints'] = 4 + return data +# [END data_model] + + +def main(): + # [START data] + data = create_data_model() + # [END data] + + # [START solver] + # MOE:begin_strip + # Create the mip solver with the CBC backend. + solver = pywraplp.Solver( + 'simple_mip_program', + pywraplp.Solver.CBC_MIXED_INTEGER_PROGRAMMING) + # [END solver] + # [START variables] + infinity = solver.infinity() + x = {} + for j in range(data['num_vars']): + x[j] = solver.IntVar(0, infinity, 'x[%i]' % j) + print('Number of variables =', solver.NumVariables()) + # [END variables] + + # [START constraints] + for i in range(data['num_constraints']): + constraint = solver.RowConstraint(0, data['bounds'][i], '') + for j in range(data['num_vars']): + constraint.SetCoefficient(x[j], data['constraint_coeffs'][i][j]) + print('Number of constraints =', solver.NumConstraints()) + # In Python, you can also set the constraints as follows. + # for i in range(data['num_constraints']): + # constraint_expr = \ + # [data['constraint_coeffs'][i][j] * x[j] for j in range(data['num_vars'])] + # solver.Add(sum(constraint_expr) <= data['bounds'][i]) + # [END constraints] + + # [START objective] + objective = solver.Objective() + for j in range(data['num_vars']): + objective.SetCoefficient(x[j], data['obj_coeffs'][j]) + objective.SetMaximization() + # In Python, you can also set the objective as follows. + # obj_expr = [data['obj_coeffs'][j] * x[j] for j in range(data['num_vars'])] + # solver.Maximize(solver.Sum(obj_expr)) + # [END objective] + + # [START solve] + status = solver.Solve() + # [END solve] + + # [START print_solution] + if status == pywraplp.Solver.OPTIMAL: + print('Objective value =', solver.Objective().Value()) + for j in range(data['num_vars']): + print(x[j].name(), ' = ', x[j].solution_value()) + print() + print('Problem solved in %f milliseconds' % solver.wall_time()) + print('Problem solved in %d iterations' % solver.iterations()) + print('Problem solved in %d branch-and-bound nodes' % solver.nodes()) + else: + print('The problem does not have an optimal solution.') + # [END print_solution] + + +if __name__ == '__main__': + main() +# [END program]