InfinityQ
For more info on the TitanQ solver, refer to the InfinityQ documentation.
Solver
Backend | Model |
---|---|
infinityq.titanq | InfinityQModel, 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
Parameter | Type | Default | Description |
---|---|---|---|
beta | List[float] | [0.1] | Hyper parameter used by the solver. |
coupling_mult | float | 0.5 | Multiplier for the coupling strength. |
timeout_in_secs | float | 10.0 | Maximum time (in seconds) the solver can take to solve this problem. |
num_chains | int | 8 | Number of chains to use. |
num_engines | int | 1 | Number of engines to use. |
penalty_scaling | float | None | Penalty scaling for the solver. |