Hide navigation sidebar
Hide table of contents sidebar
Back to top
Toggle table of contents sidebar

# Using an API to Create a Batch

Batch Optimization is a feature only available with the Gurobi Cluster Manager. It allows a client to create a model, tag a set of relevant elements in that model, and then submit that model as a batch. A unique batch ID is returned in response, allowing the client to query and monitor the status of the batch (submitted, completed, etc.). Once the batch request has been processed, the client can retrieve its solution and the relevant attributes of the tagged elements in the model as a JSON document.

In this section, we just want to introduce the principles of the API by briefly illustrating these steps. The code snippets that follow show the main concepts, but aren’t necessarily complete programs. You can refer to the Gurobi Reference Manual for details on the full API and for a complete and functional example.

The first step in this process is to create a batch environment by connecting to a Cluster Manager and enabling batch mode with the `CSBatchMode` parameter. In order to authenticate the application with the Cluster Manager, you have two options. The first is to use your user name and password, by setting the `UserName` and `ServerPassword` parameters. The second, which we recommend, is to use API keys and set the `CSAPIAccessID` and `CSAPISecret` parameters instead. We set these parameters directly in the code snippet for simplicity, but we recommended that you set them in the license file or read their values from environment variables to avoid the need to hard-code them.

Then you can build a model, tag the variables and other elements that you will want to export in the solution, and finally you can submit the batch, which gives a batch ID.

The following Python code illustrates these steps:

    import gurobipy as gp

    # create a batch environment
    with gp.Env(empty=True) as env:
        env.setParam('CSManager',     'http://localhost:61080')
        env.setParam('CSAPIAccessID', '0e8c35d5-ff20-4e5d-a639-10105e56b264')
        env.setParam('CSAPISecret',   'd588f010-ad47-4310-933e-1902057661c9')
        env.setParam('CSBatchMode',   1)
        env.start()

        # build the model
        with gp.read('misc07.mps', env) as model:

            # set tags to control the solution export
            [...]

            # submit and get the batch ID
            batchid = model.optimizeBatch()

Then your client or application can monitor the batch status. Here is an example that accesses and prints the current status:

    # create a batch environment
    with gp.Env(empty=True) as env:
        env.setParam('CSManager',     'http://localhost:61080')
        env.setParam('CSAPIAccessID', '0e8c35d5-ff20-4e5d-a639-10105e56b264')
        env.setParam('CSAPISecret',   'd588f010-ad47-4310-933e-1902057661c9')
        env.setParam('CSBatchMode',    1)
        env.start()

        # get the batch information
        with gp.Batch(batchid, env) as batch:

            print("Batch ID {}: Error code {} ({})".format(
                batch.BatchID, batch.BatchErrorCode, batch.BatchErrorMessage))

Once the batch is complete, you can retrieve the solution as a JSON object:

    # create a batch environment
    with gp.Env(empty=True) as env:
        env.setParam('CSManager',     'http://localhost:61080')
        env.setParam('CSAPIAccessID', '0e8c35d5-ff20-4e5d-a639-10105e56b264')
        env.setParam('CSAPISecret',   'd588f010-ad47-4310-933e-1902057661c9')
        env.setParam('CSBatchMode',   1)
        env.start()

        # get the batch information
        with gp.Batch(batchid, env) as batch:

            # Get JSON solution as string, create dict from it
            sol = json.loads(batch.getJSONSolution())

            # Pretty printing the general solution information
            print(json.dumps(sol["SolutionInfo"], indent=4))

Help and Feedback

Press `/` or click to search this documentation | Gurobi website | Gurobi community forum
Go to other Gurobi documentation | Gurobi download | Contact support