Skip to main content

Jij

Jij 🔗 is part of the Strangeworks Syndicate and is working on developing quantum annealing devices.

Solvers​

Loading optimization backends...

Quadratic Unconstrained Binary Optimization (QUBO)​

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

sw.authenticate(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")

solver = "jij.SA"
options = JijSAParameterModel(num_sweeps=2000, num_reads=100)

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

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

results = so.results(sw_job.slug)

Constrained Quadratic Model (CQM)​

JijModeling 🔗 can be used to natively encode either QUBO problems or also Constrained Quadratic Models where constraints are explicitly defined.

import strangeworks as sw
from strangeworks_optimization import StrangeworksOptimizer
from strangeworks_optimization_models.parameter_models import JijParameterModel
import jijmodeling as jm

d = jm.Placeholder("d", ndim=1) # Define variable d
d.len_at(0, latex="N") # Set latex expression of the length of d
x = jm.BinaryVar("x", shape=(d.shape[0],)) # Define binary variable
i = jm.Element("i", belong_to=(0, d.shape[0])) # Define dummy index in summation
jijproblem = jm.Problem("simple problem") # Create problem instance
jijproblem += jm.sum(i, d[i] * x[i]) # Add objective function
jijproblem += jm.Constraint("one hot", jm.sum(i, x[i]) == 1) # Add constraint condition

feed_dict = {"d": [1.0, 0.1, -2.0, 1.0]}

interpreter = jm.Interpreter(feed_dict)
model = interpreter.eval_problem(jijproblem)

solver = "jij.pysciopt"
options = JijParameterModel(use_sos1="auto")

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

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

results = so.results(sw_job.slug)

Parameters​

from strangeworks_optimization_models.parameter_models import JijParameterModel

options = JijParameterModel(.....)

Solvers

  • jij.pysciopt
NameDescriptionDefault Value
use_sos1Controls SOS1 (Special Ordered Set of type 1) constraint handling. Can be "disabled", "auto", or "forced".None