Quickstart: Solve an optimization problem in Azure Quantum
Learn how to use optimization solvers in Azure Quantum to solve a simple binary optimization problem.
Prerequisites
To complete this tutorial, you need
- An Azure account with an active subscription. If you don’t have an Azure account, register for free and sign up for a pay-as-you-go subscription.
- An Azure Quantum workspace with the Microsoft QIO provider enabled. For more information, see Create an Azure Quantum workspace.
- The latest azure-quantum Python package.
Jupyter Notebooks installation
Optionally, you can choose to interact with Azure Quantum optimization using Jupyter Notebooks. In order to do this, you need to:
Install the azure-quantum Python package (as described in Prerequisites)
In your terminal of choice, use the following command to launch a new Jupyter Notebook:
jupyter notebook
This launches a new browser window (or a new tab) showing the Notebook Dashboard, a control panel that allows you to create and manage your notebooks.
In the browser view, select the dropdown button on the right hand top corner and select
Python 3
from the list to create a new notebook.
Create and connect to an Azure Quantum workspace
A Workspace
represents a Azure Quantum workspace and is the main interface for interacting with the service.
from typing import List
from azure.quantum.optimization import Term
from azure.quantum import Workspace
workspace = Workspace (
subscription_id = "", # Add your subscription_id
resource_group = "", # Add your resource_group
name = "", # Add your workspace name
location = "" # Add your workspace location (for example, "westus")
)
The first time you run a method which interacts with the Azure service, a window might prompt in your default browser asking for your credentials.
You can optionally pass a credential to be used in the authentication in the construction of the Workspace
object or via its credentials
property.
See more at Azure.Quantum.Workspace
Note
The workspace.login()
method has been deprecated and is no longer necessary. The first time there is a call to the service, an authentication will be attempted using the credentials passed in the Workspace
constructor or its credentials
property. If no credentials were passed, several authentication methods will be attempted by the DefaultAzureCredential.
Express a simple problem
To express a simple problem to be solved, create an instance of a Problem
and set the problem_type
to either ProblemType.ising
or ProblemType.pubo
. For more information, see ProblemType
.
from azure.quantum.optimization import Problem, ProblemType, Term
problem = Problem(name="My First Problem", problem_type=ProblemType.ising)
Next, create an array of Term
objects and add them to the Problem
:
terms = [
Term(c=-9, indices=[0]),
Term(c=-3, indices=[1,0]),
Term(c=5, indices=[2,0]),
Term(c=9, indices=[2,1]),
Term(c=2, indices=[3,0]),
Term(c=-4, indices=[3,1]),
Term(c=4, indices=[3,2])
]
problem.add_terms(terms=terms)
Note
There are multiple ways to supply terms to the problem, and not all terms must be added at once.
Apply an optimization solver
For the Microsoft QIO provider, you'll use a parameter-free version of parallel tempering. You can find documentation on this solver and the other available solvers in the Microsoft QIO provider reference.
from azure.quantum.optimization import ParallelTempering
solver = ParallelTempering(workspace, timeout=100)
result = solver.optimize(problem)
print(result)
This method will submit the problem to Azure Quantum for optimization and synchronously wait for it to be solved. You'll see output like the following in your terminal window or Jupyter Notebook:
{'solutions': [{'configuration': {'0': 1, '1': 1, '2': -1, '3': 1}, 'cost': -32.0}]}
Prerequisites
To complete this tutorial, you need
- An Azure account with an active subscription. If you don’t have an Azure account, register for free and sign up for a pay-as-you-go subscription.
- An Azure Quantum workspace with the 1Qbit provider enabled. For more information, see Create an Azure Quantum workspace.
- The latest azure-quantum Python package.
Jupyter Notebooks installation
Optionally, you can choose to interact with Azure Quantum optimization using Jupyter Notebooks. In order to do this, you need to:
Install the azure-quantum Python package (as described in Prerequisites)
In your terminal of choice, use the following command to launch a new Jupyter Notebook:
jupyter notebook
This launches a new browser window (or a new tab) showing the Notebook Dashboard, a control panel that allows you to create and manage your notebooks.
In the browser view, select the dropdown button on the right hand top corner and select
Python 3
from the list to create a new notebook.
Create and connect to an Azure Quantum workspace
A Workspace
represents a Azure Quantum workspace and is the main interface for interacting with the service.
from typing import List
from azure.quantum.optimization import Term
from azure.quantum import Workspace
workspace = Workspace (
subscription_id = "", # Add your subscription_id
resource_group = "", # Add your resource_group
name = "", # Add your workspace name
location = "" # Add your workspace location (for example, "westus")
)
The first time you run a method which interacts with the Azure service, a window might prompt in your default browser asking for your credentials.
You can optionally pass a credential to be used in the authentication in the construction of the Workspace
object or via its credentials
property.
See more at Azure.Quantum.Workspace
Note
The workspace.login()
method has been deprecated and is no longer necessary. The first time there is a call to the service, an authentication will be attempted using the credentials passed in the Workspace
constructor or its credentials
property. If no credentials were passed, several authentication methods will be attempted by the DefaultAzureCredential.
Express a simple problem
To express a simple problem to be solved, create an instance of a Problem
and set the problem_type
to either ProblemType.ising
or ProblemType.pubo
. For more information, see ProblemType
.
from azure.quantum.optimization import Problem, ProblemType, Term
problem = Problem(name="My First Problem", problem_type=ProblemType.ising)
Next, create an array of Term
objects and add them to the Problem
:
terms = [
Term(c=-9, indices=[0]),
Term(c=-3, indices=[1,0]),
Term(c=5, indices=[2,0]),
Term(c=9, indices=[2,1]),
Term(c=2, indices=[3,0]),
Term(c=-4, indices=[3,1]),
Term(c=4, indices=[3,2])
]
problem.add_terms(terms=terms)
Note
There are multiple ways to supply terms to the problem, and not all terms must be added at once.
Apply an optimization solver
For the 1QBit provider, we'll use the path-relinking solver. You can find documentation on this solver and the other available solvers in the 1QBit provider reference.
from azure.quantum.optimization.oneqbit import PathRelinkingSolver
solver = PathRelinkingSolver(workspace)
result = solver.optimize(problem)
print(result)
This method will submit the problem to Azure Quantum for optimization and synchronously wait for it to be solved. You'll see output like the following in your terminal window or Jupyter Notebook:
{'solutions': [{'configuration': {'0': 1, '1': 1, '2': -1, '3': 1}, 'cost': -32.0}]}
Prerequisites
To complete this tutorial, you need
- An Azure account with an active subscription. If you don’t have an Azure account, register for free and sign up for a pay-as-you-go subscription.
- An Azure Quantum workspace with the Toshiba SQBM+ provider enabled. For more information, see Create an Azure Quantum workspace.
- The latest azure-quantum Python package.
Jupyter Notebooks installation
Optionally, you can choose to interact with Azure Quantum optimization using Jupyter Notebooks. In order to do this, you need to:
Install the azure-quantum Python package (as described in Prerequisites)
In your terminal of choice, use the following command to launch a new Jupyter Notebook:
jupyter notebook
This launches a new browser window (or a new tab) showing the Notebook Dashboard, a control panel that allows you to create and manage your notebooks.
In the browser view, select the dropdown button on the right hand top corner and select
Python 3
from the list to create a new notebook.
Create and connect to an Azure Quantum workspace
A Workspace
represents a Azure Quantum workspace and is the main interface for interacting with the service.
from typing import List
from azure.quantum.optimization import Term
from azure.quantum import Workspace
workspace = Workspace (
subscription_id = "", # Add your subscription_id
resource_group = "", # Add your resource_group
name = "", # Add your workspace name
location = "" # Add your workspace location (for example, "westus")
)
The first time you run a method which interacts with the Azure service, a window might prompt in your default browser asking for your credentials.
You can optionally pass a credential to be used in the authentication in the construction of the Workspace
object or via its credentials
property.
See more at Azure.Quantum.Workspace
Note
The workspace.login()
method has been deprecated and is no longer necessary. The first time there is a call to the service, an authentication will be attempted using the credentials passed in the Workspace
constructor or its credentials
property. If no credentials were passed, several authentication methods will be attempted by the DefaultAzureCredential.
Express a simple problem
To express a simple problem to be solved, create an instance of a Problem
and set the problem_type
to either ProblemType.ising
or ProblemType.pubo
. For more information, see ProblemType
.
from azure.quantum.optimization import Problem, ProblemType, Term
problem = Problem(name="My First Problem", problem_type=ProblemType.pubo)
Next, create an array of Term
objects and add them to the Problem
:
terms = [
Term(c=-9, indices=[0]),
Term(c=-3, indices=[1,0]),
Term(c=5, indices=[2,0]),
Term(c=9, indices=[2,1]),
Term(c=2, indices=[3,0]),
Term(c=-4, indices=[3,1]),
Term(c=4, indices=[3,2])
]
problem.add_terms(terms=terms)
Note
There are multiple ways to supply terms to the problem, and not all terms must be added at once.
Apply an optimization solver
For the Toshiba SQBM+ provider, we'll use the Ising solver, namely SimulatedBifurcationMachine
. You can find documentation on this solver in the Toshiba SQBM+ provider reference.
from azure.quantum.optimization.toshiba import SimulatedBifurcationMachine
solver = SimulatedBifurcationMachine(workspace)
result = solver.optimize(problem)
print(result)
This method will submit the problem to Azure Quantum for optimization and synchronously wait for it to be solved. You'll see output like the following in your terminal window or Jupyter Notebook:
{'solutions': [{'configuration': {'0': 1, '1': 1, '2': -1, '3': 1}, 'cost': -32.0}]}
Note
If you run into an error while working with Azure Quantum, you can check our list of common issues. Also if your are using an optimization solver and you get an error in the form <AZQxxx>
, you can check our list of common user errors in optimization solvers.
Next steps
Documentation
- Solver overview
- Expressing problems & supplying terms
- Interpreting solver results
- Job management
- Solve long-running problems (async problem submission)
- Reuse problem definitions
- Authenticating with a service principal
- Solvers reference for Microsoft QIO solver
- Solvers reference for 1QBit solver
Samples and end-to-end learning
- QIO samples repo
- Getting started
- Ship loading sample problem
- Job shop scheduling sample problem
Feedback
Submit and view feedback for