Skip to main content

Toshiba

Toshiba has developed the Simulated Bifurcation Machine (SBM), a combinatorial optimization solver that utilizes the Simulated Bifurcation Algorithm.

Solvers

ModelBackends
BinaryQuadraticModel, MatrixMarkettoshiba.qubo
QplibFiletoshiba.qplib, toshiba.pubo

ToshibaParameterModel

The ToshibaParameterModel is designed to configure the parameters for the Simulated Bifurcation Machine (SBM) solver. For detailed information on each parameter and how to set them up for your specific optimization problems, please refer to the official User Manual for SQBM+ AWS AMI v2.0.1.

Parameters:

  • steps (Optional[int] | None) – Specifies the number of steps in a computation request.

  • loops (Optional[int] | None) – Specifies the number of loops in SQBM+ computation.

  • timeout (Optional[int] | None) – Specifies the maximum computation time (timeout) in seconds.

  • target (Optional[float] | None) – Specifies the end condition of a computation request.

  • maxout (Optional[int] | None) – Specifies the upper limit of the number of solutions to be outputted.

  • maxwait (Optional[int] | None) – Specifies the upper limit of the number of solutions to be outputted.

  • algo (Optional[int] | None) – Specifies the algorithm to be used.

  • dt (Optional[float] | None) – Specifies the time per step.

  • C (Optional[float] | None) – Corresponds to the constant ξ0, appearing in the paper by Goto, Tatsumura, & Dixon (2019, p. 2), which is the theoretical basis of SQBM+.

  • blocks (Optional[int] | None) – Specify the number of blocks of GPUs used to find a solution. If 0 (zero) is specified, the value of 'blocks' will be auto- adjusted. Specify an integer between 0 and 40.

  • multishot (Optional[int] | None) – When you specify multishot, SQBM+ will get multiple solutions, which start from different initail decision variable values but other parameters are the same. The number of solution is multishot number. Default value is 0, which automatically decide multishot from problem size. If multishot > 1, SQBM+ will have less overhead. Specify an integer between 0 and 10.

    QPLIB Solver-specific parameters

  • PD3Orate (Optional[int] | None) – Parameter that determines the number of PD3O algorithm execution steps. SQBM+ searches for solutions using the SB algorithm, but if PD3Orate is set to anything other than 0, it also searches for solutions using another algorithm (called the PD3O algorithm). For the steps of the SB algorithm, the PD3O algorithm performs PD3Orate*steps times to update decision variables.

  • phi (Optional[float] | None) – Parameters that determine the behavior of the PD3O algorithm. Specify a real number between 0 and 1. If it is close to 0, it behaves like the SB algorithm. If it is close to 1, it narrows the search range of solutions, but it may find a better solution than the SB algorithm.

Binary Quadratic Model

import strangeworks as sw
from strangeworks_optimization import StrangeworksOptimizer
from strangeworks_optimization_models.parameter_models import ToshibaParameterModel
from dimod import BinaryQuadraticModel

sw.authenticate('your-api-key')

linear = {1: -2, 2: -2, 3: -3, 4: -3, 5: -2}
quadratic = {(1, 2): 2, (1, 3): 2, (2, 4): 2, (3, 4): 2, (3, 5): 2, (4, 5): 2}
model = BinaryQuadraticModel(linear, quadratic, "BINARY")

options = ToshibaParameterModel(algo=0, maxout=100, loops=10)

solver = "toshiba.qubo"

optimizer = StrangeworksOptimizer(model=model, solver=solver, options=options)
sw_job = optimizer.run()

print(f"Job slug: {sw_job.slug}")
print(f"Job status: {optimizer.status(sw_job.slug)}")

results = optimizer.results(sw_job.slug)

Matrix Market

Matrix Market is a NIST-sponsored repository of test matrices for use in numerical algorithms.

You can download Matrix Market files from the Matrix Market website.

import strangeworks as sw
from strangeworks_optimization import StrangeworksOptimizer
from strangeworks_optimization_models.parameter_models import ToshibaParameterModel
from strangeworks_optimization_models.problem_models import MatrixMarket

sw.authenticate('your-api-key')

options = ToshibaParameterModel(algo=0, maxout=100, loops=10)

solver = "toshiba.qubo"

model = MatrixMarket.read_file("path/to/matrixmarket/file.txt")

optimizer = StrangeworksOptimizer(model=model, solver=solver, options=options)

sw_job = optimizer.run()

print(f"Job slug: {sw_job.slug}")
print(f"Job status: {optimizer.status(sw_job.slug)}")

results = optimizer.results(sw_job.slug)

QPLIB

QPLIB is a collection of test problems for quadratic programming (QP) and quadratic unconstrained binary optimization (QUBO).

You can download QPLIB files from the QPLIB website.

import strangeworks as sw
from strangeworks_optimization import StrangeworksOptimizer
from strangeworks_optimization_models.parameter_models import ToshibaParameterModel
from strangeworks_optimization_models.problem_models import QplibFile

sw.authenticate('your-api-key')

options = ToshibaParameterModel(algo=0, maxout=100, loops=10)

solver = "toshiba.qplib"

model = QplibFile.read_file("path/to/qplib/file.qplib")

optimizer = StrangeworksOptimizer(model=model, solver=solver, options=options)

sw_job = optimizer.run()

print(f"Job slug: {sw_job.slug}")
print(f"Job status: {optimizer.status(sw_job.slug)}")

results = optimizer.results(sw_job.slug)

Polynomial Unconstrained Binary Optimization

QPLIB files can also be used to encode PUBO problems. PUBO stands for Polynomial Unconstrained Binary Optimization.


import strangeworks as sw
from strangeworks_optimization import StrangeworksOptimizer
from strangeworks_optimization_models.parameter_models import ToshibaParameterModel
from strangeworks_optimization_models.problem_models import QplibFile

sw.authenticate('your-api-key')

options = ToshibaParameterModel(algo=0, maxout=100, loops=10)

solver = "toshiba.pubo"

model = QplibFile.read_file("path/to/qplib/file.qplib")

optimizer = StrangeworksOptimizer(model=model, solver=solver, options=options)

sw_job = optimizer.run()

print(f"Job slug: {sw_job.slug}")
print(f"Job status: {optimizer.status(sw_job.slug)}")

results = optimizer.results(sw_job.slug)