From 43ddf85eccb4a4be82281f47a583addb95762af7 Mon Sep 17 00:00:00 2001 From: Corentin Le Molgat Date: Fri, 28 Dec 2018 16:43:21 +0100 Subject: [PATCH] Add SimpleRoutingProgram.cs --- makefiles/Makefile.dotnet.mk | 1 + .../samples/SimpleRoutingProgram.cs | 88 +++++++++++++++++++ .../samples/SimpleRoutingProgram.csproj | 20 +++++ 3 files changed, 109 insertions(+) create mode 100644 ortools/constraint_solver/samples/SimpleRoutingProgram.cs create mode 100644 ortools/constraint_solver/samples/SimpleRoutingProgram.csproj diff --git a/makefiles/Makefile.dotnet.mk b/makefiles/Makefile.dotnet.mk index 7ff6558e32..a0da48d8c7 100644 --- a/makefiles/Makefile.dotnet.mk +++ b/makefiles/Makefile.dotnet.mk @@ -519,6 +519,7 @@ test_dotnet_algorithms_samples: ; .PHONY: test_dotnet_constraint_solver_samples # Build and Run all .Net CP Samples (located in ortools/constraint_solver/samples) test_dotnet_constraint_solver_samples: + $(MAKE) run SOURCE=ortools/constraint_solver/samples/SimpleRoutingProgram.cs $(MAKE) run SOURCE=ortools/constraint_solver/samples/Tsp.cs $(MAKE) run SOURCE=ortools/constraint_solver/samples/Vrp.cs diff --git a/ortools/constraint_solver/samples/SimpleRoutingProgram.cs b/ortools/constraint_solver/samples/SimpleRoutingProgram.cs new file mode 100644 index 0000000000..89bd35629a --- /dev/null +++ b/ortools/constraint_solver/samples/SimpleRoutingProgram.cs @@ -0,0 +1,88 @@ +// Copyright 2018 Google +// 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. + +// [START program] +// [START import] +using System; +using Google.OrTools.ConstraintSolver; +// [END import] + +/// +/// This is a sample using the routing library .Net wrapper. +/// +public class SimpleRoutingProgram { + /// + /// Solves the current routing problem. + /// + static void Solve() { + // Instantiate the data problem. + // [START data] + const int num_location = 5; + const int num_vehicles = 1; + const int depot = 0; + // [END data] + + // Create Routing Index Manager + // [START index_manager] + RoutingIndexManager manager = new RoutingIndexManager(num_location, num_vehicles, depot); + // [END index_manager] + + // Create Routing Model. + // [START routing_model] + RoutingModel routing = new RoutingModel(manager); + // [END routing_model] + + // Define cost of each arc. + // [START arc_cost] + routing.SetArcCostEvaluatorOfAllVehicles( + routing.RegisterTransitCallback( + (long FromIndex, long ToIndex) => { + return 1L; } + )); + // [END arc_cost] + + // Setting first solution heuristic. + // [START parameters] + RoutingSearchParameters searchParameters = + operations_research_constraint_solver.DefaultRoutingSearchParameters(); + searchParameters.FirstSolutionStrategy = + FirstSolutionStrategy.Types.Value.PathCheapestArc; + // [END parameters] + + // Solve the problem. + // [START solve] + Assignment solution = routing.SolveWithParameters(searchParameters); + // [END solve] + + // Print solution on console. + // [START print_solution] + Console.WriteLine("Objective: {0}", solution.ObjectiveValue()); + // Inspect solution. + long index = routing.Start(0); + Console.WriteLine("Route for Vehicle 0:"); + long route_distance = 0; + while (routing.IsEnd(index) == false) { + Console.Write("{0} -> ", manager.IndexToNode((int)index)); + long previousIndex = index; + index = solution.Value(routing.NextVar(index)); + route_distance += routing.GetArcCostForVehicle(previousIndex, index, 0); + } + Console.WriteLine("{0}", manager.IndexToNode(index)); + Console.WriteLine("Distance of the route: {0}m", route_distance); + // [END print_solution] + } + + public static void Main(String[] args) { + Solve(); + } +} diff --git a/ortools/constraint_solver/samples/SimpleRoutingProgram.csproj b/ortools/constraint_solver/samples/SimpleRoutingProgram.csproj new file mode 100644 index 0000000000..8af8b935af --- /dev/null +++ b/ortools/constraint_solver/samples/SimpleRoutingProgram.csproj @@ -0,0 +1,20 @@ + + + Exe + 7.2 + netcoreapp2.1 + false + $(RestoreSources);../../../packages;https://api.nuget.org/v3/index.json + + + + full + true + true + + + + + + +