Skip to main content

InfinityQ

For more info on the TitanQ solver, refer to the InfinityQ documentation.

Solver

BackendModel
infinityq.titanqInfinityQModel, BinaryQuadraticModel

InfinityQModel

For more examples see https://github.com/infinityq-tech/titanq-examples

from strangeworks_optimization import StrangeworksOptimizer
from strangeworks_optimization_models.parameter_models import InfinityQParameterModel
from strangeworks_optimization_models.problem_models import SwInfinityQModel
import dill
from titanq import Target, Vtype
import numpy as np
import json

model = SwInfinityQModel()
model.add_variable_vector(
"x", 4, Vtype.INTEGER, variable_bounds=json.loads("[[0.0, 50.0], [2.0, 50.0], [0.0, 50.0], [1.0, 50.0]]")
)
model.add_variable_vector("z", 8, Vtype.BINARY)
model.add_variable_vector("y", 4, Vtype.BINARY)

model.set_objective_matrices(
np.zeros((16, 16), dtype=np.float32),
dill.loads(
b"\x80\x04\x95\xea\x00\x00\x00\x00\x00\x00\x00\x8c\ndill._dill\x94\x8c\r_create_array\x94\x93\x94(\x8c\x15numpy.core.multiarray\x94\x8c\x0c_reconstruct\x94\x93\x94\x8c\x05numpy\x94\x8c\x07ndarray\x94\x93\x94K\x00\x85\x94C\x01b\x94\x87\x94(K\x01K\x10\x85\x94h\x06\x8c\x05dtype\x94\x93\x94\x8c\x02f4\x94\x89\x88\x87\x94R\x94(K\x03\x8c\x01<\x94NNNJ\xff\xff\xff\xffJ\xff\xff\xff\xffK\x00t\x94b\x89C@\x00\x00\x00\x00\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94t\x94Nt\x94R\x94." # noqa
),
Target.MINIMIZE,
)
model.add_inequality_constraints_matrix(
dill.loads(
b"\x80\x04\x95/\x02\x00\x00\x00\x00\x00\x00\x8c\ndill._dill\x94\x8c\r_create_array\x94\x93\x94(\x8c\x15numpy.core.multiarray\x94\x8c\x0c_reconstruct\x94\x93\x94\x8c\x05numpy\x94\x8c\x07ndarray\x94\x93\x94K\x00\x85\x94C\x01b\x94\x87\x94(K\x01K\x06K\x10\x86\x94h\x06\x8c\x05dtype\x94\x93\x94\x8c\x02f4\x94\x89\x88\x87\x94R\x94(K\x03\x8c\x01<\x94NNNJ\xff\xff\xff\xffJ\xff\xff\xff\xffK\x00t\x94b\x89B\x80\x01\x00\x00\x00\x00\x80\xbf\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xbf\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xbf\x00\x00\x00\x00\x00\x00\xa0@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80?\x00\x00\x80\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80?\x00\x00\x00\x00\x00\x00\xa0\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xbf\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94t\x94Nt\x94R\x94." # noqa
),
dill.loads(
b"\x80\x04\x95\xdc\x00\x00\x00\x00\x00\x00\x00\x8c\ndill._dill\x94\x8c\r_create_array\x94\x93\x94(\x8c\x15numpy.core.multiarray\x94\x8c\x0c_reconstruct\x94\x93\x94\x8c\x05numpy\x94\x8c\x07ndarray\x94\x93\x94K\x00\x85\x94C\x01b\x94\x87\x94(K\x01K\x06K\x02\x86\x94h\x06\x8c\x05dtype\x94\x93\x94\x8c\x02f4\x94\x89\x88\x87\x94R\x94(K\x03\x8c\x01<\x94NNNJ\xff\xff\xff\xffJ\xff\xff\xff\xffK\x00t\x94b\x89C0\x00\x00\x00@\x00\x00\xc0\x7f\x00\x00\x80?\x00\x00\xc0\x7f\x00\x00\x80?\x00\x00\xc0\x7f\x00\x00\x80?\x00\x00\xc0\x7f\x00\x00@\xc0\x00\x00\xc0\x7f\x00\x00\x80\xc0\x00\x00\xc0\x7f\x94t\x94Nt\x94R\x94." # noqa
),
)

options = InfinityQParameterModel(num_chains=2, timeout_in_secs=2)

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

BinaryQuadraticModel

from strangeworks_optimization import StrangeworksOptimizer
from strangeworks_optimization_models.parameter_models import InfinityQParameterModel
from dimod import BinaryQuadraticModel

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 = "infinityq.titanq"
options = InfinityQParameterModel(timeout_in_secs=1)

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

sw_job = so.run()

InfinityQParameterModel

ParameterTypeDefaultDescription
betaList[float][0.1]Hyper parameter used by the solver.
coupling_multfloat0.5Multiplier for the coupling strength.
timeout_in_secsfloat10.0Maximum time (in seconds) the solver can take to solve this problem.
num_chainsint8Number of chains to use.
num_enginesint1Number of engines to use.
penalty_scalingfloatNonePenalty scaling for the solver.