# Installing the or-tools binary optimization

Google Optimization Tools OR-Tools is a fast and portable software suite for solving combinatorial optimization problems. To download OR-Tools, click one of the buttons below, based on your preferred coding language:. If installing the or-tools binary optimization you need is mixed integer linear optimization, you have a couple of options other than downloading OR-Tools:.

For details, see our Site Policies. Last updated March 29, Guides Reference Support All Products. A constraint programming solver. Graph algorithms shortest paths, min cost flow, max flow, linear sum installing the or-tools binary optimization. Bin packing and knapsack algorithms. The OR-Tools suite is: Open source and free. Examples and source code are freely available for download under Apache License 2.

We release improvements several times per month. NET using Mono on non-Windows platforms. We use it internally at Google, where speed and memory consumption are critical. We try to make our code as easy to use as possible especially in Python and C. We use it in mission-critical applications at Google, as do many external developers. If all you need is mixed integer linear optimization, you have a couple of options other than downloading OR-Tools: Use our mixed integer linear optimizer via Google Sheets.

Use our mixed integer linear optimizer via Installing the or-tools binary optimization Apps Script. On this site you'll find: A general introduction to combinatorial optimization.

Installation instructions for OR-Tools. Code examples in the navigation bar for particular problems you might want to solve.

The goal of optimization is to find the best solution to a problem out of a large set of possible solutions. Suppose that a shipping company delivers packages to its customers using a fleet of trucks. Every day, the company must assign packages to trucks, and then a choose a route for each truck to deliver its packages.

Each possible assignment of packages and routes has a cost, based on the total travel distance for the trucks, and possibly other factors as well. The problem is to choose the assignments of packages and routes that has the least cost. Like all optimization problems, this problem has the following elements: The objective — the quantity you want to optimize. In the example above, the objective is to minimize cost. To set up an optimization problem, you need to define a function that calculates the value of the objective for any possible solution.

This is called the objective function. In the preceding example, the objective function would calculate the total cost of installing the or-tools binary optimization assignment of packages and routes.

An optimal solution is one for which the value of the objective function is the best. The constraints — restrictions on the set of possible solutions, based on the specific requirements of the problem.

For example, if the shipping company can't assign packages above a given size to certain trucks, due to space limitations, this would impose a constraint on the solutions. A feasible solution is one that satisfies all the given constraints for the problem. The first step in solving an optimization problem is identifying the objective and constraints.

Next, we give an example of an optimization problem, and show how to set up and solve it in each of the installing the or-tools binary optimization languages. One of the oldest installing the or-tools binary optimization most widely-used areas of optimization is linear optimization or linear programmingin which the objective function and the constraints can be written as linear expressions.

Here's a simple example of this type of problem. Both the objective function and the constraints are given by linear expressions, which makes this a linear problem. The constraints define the feasible region, which is installing the or-tools binary optimization triangle shown below, including installing the or-tools binary optimization interior. For each language, the basic steps installing the or-tools binary optimization setting up and solving a problem are the installing the or-tools binary optimization Define the objective function.

Declare the solver — the method that implements an algorithm for finding the optimal solution. Invoke the solver and display the results. The following sections show how to implement these steps in each of the supported languages to solve the linear optimization problem:. So you can find useful information in the Reference pages no matter which language you are working in.

We've added links from the methods used in this example to their reference pages, in case you want to learn about them in more detail. Create the variables using the method MakeNumVar.

MakeRowConstraint -infinity, 14 creates an inequality constraint in which the left side is less than or equal to The method SetCoefficient sets the coefficients of the function. The method SetMaximization makes this a maximization installing the or-tools binary optimization. In this example, we use the OR-Tools linear solver wrapper to invoke GlopGoogle's linear optimizer. The following code declares the solver.

SetCoefficient x, 1 constraint1. SetCoefficient y, 2 Constraint 2: SetCoefficient x, installing the or-tools binary optimization constraint2. SetCoefficient y, -1 Constraint 3: SetCoefficient x, 1 constraint3. SetCoefficient y, -1 Note: SetCoefficient x, 3 objective.

SetCoefficient y, 4 objective. SetMaximization Declare the solver. Instantiate a Glop solver, naming it LinearExample. NumConstraints The value of each variable in the solution. The following code creates the solver. PositiveInfinity, "y" ; Define the constraints. SetCoefficient x, 1 ; c0. SetCoefficient x, 3 ; c1. SetCoefficient x, 1 ; c2. SetCoefficient y, -1 ; Note: SetCoefficient x, 3 installing the or-tools binary optimization objective.

SetCoefficient y, 4 ; objective. SetMaximization ; Declare the solver. Value ; Optimal solution Each program returns the optimal solution to the problem, as shown below. The dashed green line is defined by setting the objective function equal to its optimal value of If you think about the geometry in the above graph, in any linear optimization problem at least one vertex of the feasible region must be an optimal solution.

As a result, you can find an optimal solution by traversing the vertices of the feasible region until there is no more improvement in the objective function. This is the installing the or-tools binary optimization behind simplex algorithmthe most widely-used method for solving linear optimization problems. To learn more about solving linear optimization problems, see The Glop linear solver.

There are many different types of optimization problems in the world. For each type of problem, there are different approaches and algorithms for finding an optimal solution.

Before you can start installing the or-tools binary optimization a program to solve an optimization problem, you need to identify what type of problem you are dealing with, and then choose an appropriate solver — an algorithm for finding an optimal solution.

Below you will find a brief overview of the types of problems that OR-Tools solves, and links to the sections in this guide that explain how to solve each problem type. As you learned in the previous sectiona linear optimization problem is one in which the objective function and the constraints linear expressions in the variables. The primary solver in OR-Tools for this type of problem is the linear optimization solver, which is actually a wrapper for several different libraries for linear and mixed-integer optimizationincluding third-party libraries.

Learn more about linear optimization. A installing the or-tools binary optimization integer optimization problem is one in which some or all of the variables are required to be integers.

An example is the assignment problemin which a group of workers needs be assigned to a set of tasks. For each worker and task, you define a variable whose value is 1 if the given worker is assigned to the given task, and 0 otherwise.

In this case, the variables can only take on the values 0 or 1. Learn more about mixed-integer optimization. Bin packing is the problem of packing a set of objects of different sizes into containers with different capacities. The goal is to pack as many of the objects as possible, subject to the capacities of the containers. A special case of this is the knapsack problemin which there is just one container.

Learn more about bin packing. Many optimization problems can be represented by a directed graph consisting of nodes and directed arcs between them. For example, transportation problems, in which goods are shipped across a railway network, can be represented by a graph in which the arcs are rail lines and the nodes are distribution centers. In the maximum flow problemeach arc has a maximum capacity that can be transported across it. The problem is to assign the amount of goods to be shipped across each arc so that the total quantity being transported is as large as possible.

Learn more about network flows. Assignment problems involve assigning a group of agents say, workers or machines to a installing the or-tools binary optimization of tasks, where there is a fixed cost for assigning each agent to a specific task. The problem is to find the assignment with the least total cost. Assignment problems are actually a special case of network flow problems. Learn more about assignment. Scheduling problems involve assigning resources to perform a set of tasks at specific times.

An important example is the job shop problemin which multiple jobs are processed on several machines. Each job consists of a sequence of tasks, which must be performed in a given order, and each task must be processed on a specific machine.

The problem is to assign a schedule so that all jobs are completed in as short an interval of time as possible. Learn more about scheduling. Routing problems involve finding the optimal routes for a fleet of vehicles to traverse a network, defined by a directed graph. The problem of assigning packages to delivery trucks, described in What is an optimization problem?

Unless you have a specific need for the source code, we recommend the binary installation. Install prerequisite software Optional: Install third-party solvers Download the source code Build the source code Optional: If you anticipate needing to solve mixed-integer programs, you may want to install the open-source third-party solver SCIP:. The release is a stable version of OR-Tools that has been fully tested on all the supported platforms.

This is the best option unless you want to try out features that have been added since the most recent date. This is the latest version of Installing the or-tools binary optimization source code integrating all features even under developmenet.

For example to clone the master issue the following command:. For example to work with the v6. If the examples run successfully, you're all set to start running OR-Tools programs. You can download the latest version of Mono from the Mono Download page. First, install Xcode Command Line Tools, which includes git. The full Xcode distribution isn't necessary. Then you have a bunch of OSS tools to install. We recommend installing them using the "missing package manager for macOS" aka Homebrew:.

The following section explains the steps for installing OR-Tools from installing the or-tools binary optimization on Windows: If the examples run successfully, you are all set to start running OR-Tools programs. The following section describes some possible solutions in case you encounter problems installing OR-Tools, whether from source or binary:.

Sometimes Bison, a parser generator, will installing the or-tools binary optimization to build. Bison is only necessary for FlatZinc, a solver input language used for the MiniZinc constraint modeling language.

One workaround is described on this page: Unable to connect to a repository at URL 'svn: Can't connect to host 'vcs. Network is unreachable make: Cannot open include file: You're using Visual Studio and will need to upgrade to a later version or afterward. The system cannot find the path specified make: If this error occurs when you run make all or make pythonit means that make was unable to find Python's lib or include directories.

If you see this error when trying to run one of the Python examples after having followed the instructions above, you probably installed with sudo python setup. You can run the examples with sudoe. No module named pywraplp Most installing the or-tools binary optimization, you're using Windows XP.

Another common error is using pipwhich pulls the wrong archive with a wrong platform. Most likely, you don't have the right versions of the ortools or protobuf modules. To check whether this is the case, run the following command:. If this returns a message saying that your versions of Python or the protobuf modules are different from required versions or that they are not installedyou need to reinstall OR-Tools as follows:.

If you see errors when installing the Python build of OR-Tools, installing the or-tools binary optimization can try upgrading setuptools using the instructions found here. Except as otherwise noted, the content of this page installing the or-tools binary optimization licensed under the Creative Commons Attribution 3. For details, see our Site Policies. Last updated March 29, Guides Reference Support All Products. The packages to install depend on which languages you'll be using: Install third-party solvers If you anticipate needing to solve mixed-integer programs, you may want to install the open-source third-party solver SCIP: Open a terminal and navigate to the directory where you extracted installing the or-tools binary optimization tar file.

Then build it using the command: Donwload the latest release archive as: For example to clone the master issue the following command: Download previous release from the GitHub release page. Checkout to a specific time point in the revision history using a git tag.

Then enter the following command: For example for SCIP you add something like this: To use OR-Tools in your project, select one of the options below: We recommend installing them using the "missing package manager for macOS" aka Homebrew: Visual Studio or later Gitwhich can be downloaded from https: SVN Any version that provides svn. When installing CMake, select the option for a command-line accessible cmake. Download the following files and unpack them: Copy the file libscipopt.

Download the source code You have a couple of options to get the source code of OR-Tools: To test the third party solver installation, enter the following command to solve an integer programming problem using SCIP: Cleaning the build files If you need to re-install OR-Tools, the command: Troubleshooting The following section describes some possible solutions in installing the or-tools binary optimization you encounter problems installing OR-Tools, whether from source or binary: General troubleshooting Could not find suitable distribution for ortools Here's a sample error message: Could not find suitable distribution for Requirement.

Could not load file or assembly 'Google. This occurs when you try to install a binary distribution, but the installer is unable to build the ortools package for your operating system. In this case, you can still install and run OR-Tools from source files, and even build the python package yourself.

You can do so, by following these steps: Don't forget to make sure that everything is working fine by running make test. You will find the package under a directory called temp. No such file or directory Sometimes Bison, a parser generator, will fail to build.

Cannot download installing the or-tools binary optimization Here's a sample error message: Just retry until it works. Error C You're using Visual Studio and will need to upgrade to a later version or afterward. If you're using a generic Windows terminal, use a Visual Studio terminal instead.

Cannot import name Most likely, you don't have the right versions of the ortools or protobuf modules. To check whether this is the case, run the following command: If you still have problems, especially on Mac OS X, here is a workaround found by a user: Upgrade setuptools from