Defining a Model - dynexcoin/DynexSDK GitHub Wiki
The Dynex sampler needs a "model" object for sampling. Based on the problem formulation, multiple model classes are supported.
Binary Quadratic Model (BQM)
Dimod's dimod.binary.BinaryQuadraticModel (BQM) contains linear and quadratic biases for problems formulated as binary quadratic models as well as additional information such as variable labels and offset.
Given a binary quadratic model bqm:
bqm = dimod.BinaryQuadraticModel({'x1': 1.0, 'x2': -1.5, 'x3': 2.0},
{('x1', 'x2'): 1.0, ('x2', 'x3'): -2.0},
0.0, dimod.BINARY)
The model can be defined with:
model = dynex.BQM(bqm)
This model can then be sampled with the following command on the Dynex platform:
sampler = dynex.DynexSampler(model, mainnet=False);
sampleset = sampler.sample(num_reads=1000, annealing_time = 10);
print(sampleset)
Returns:
[DYNEX] SAMPLER INITIALISED
[DYNEX|TESTNET] *** WAITING FOR READS ***
โญโโโโโโโโโโโโโฌโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโฌโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโโโโโโโโฎ
โ DYNEXJOB โ QUBITS โ QUANTUM GATES โ BLOCK FEE โ ELAPSED โ WORKERS READ โ CIRCUITS โ STEPS โ GROUND STATE โ
โโโโโโโโโโโโโโผโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโผโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโโโโโโโค
โ -1 โ 11 โ 15 โ 0 โ โ *** WAITING FOR READS *** โ โ โ โ
โฐโโโโโโโโโโโโโดโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโดโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโโโโโโโโฏ
[DYNEX] FINISHED READ AFTER 0.95 SECONDS
[DYNEX] SAMPLESET READY
x1 x2 x3 energy num_oc.
0 0 1 1 -1.5 1
['BINARY', 1 rows, 1 samples, 3 variables]
Constraint Quadratic Model (CQM)
Dimod's dimod.ConstrainedQuadraticModel (CQM) contains linear and quadratic biases for problems formulated as constrained quadratic models as well as additional information such as variable labels, offsets, and equality and inequality constraints.
Given a constraint quadratic model cqm:
num_widget_a = dimod.Integer('num_widget_a', upper_bound=7)
num_widget_b = dimod.Integer('num_widget_b', upper_bound=3)
cqm = dimod.ConstrainedQuadraticModel()
cqm.set_objective(-3 * num_widget_a - 4 * num_widget_b)
cqm.add_constraint(num_widget_a + num_widget_b <= 5, label='total widgets')
The model can be defined with:
model = dynex.CQM(cqm)
This model can then be sampled with the following command on the Dynex platform:
sampler = dynex.DynexSampler(model, mainnet=False);
sampleset = sampler.sample(num_reads=1000, annealing_time = 10);
print(sampleset)
Returns:
[DYNEX] SAMPLER INITIALISED
[DYNEX|TESTNET] *** WAITING FOR READS ***
โญโโโโโโโโโโโโโฌโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโฌโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโโโโโโโโฎ
โ DYNEXJOB โ QUBITS โ QUANTUM GATES โ BLOCK FEE โ ELAPSED โ WORKERS READ โ CIRCUITS โ STEPS โ GROUND STATE โ
โโโโโโโโโโโโโโผโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโผโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโโโโโโโค
โ -1 โ 16 โ 44 โ 0 โ โ *** WAITING FOR READS *** โ โ โ โ
โฐโโโโโโโโโโโโโดโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโดโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโโโโโโโโฏ
[DYNEX] FINISHED READ AFTER 0.83 SECONDS
[DYNEX] SAMPLESET READY
num_widget_a num_widget_b energy num_oc. is_sat. is_fea.
0 2 3 -18.0 1 arra... True
['INTEGER', 1 rows, 1 samples, 2 variables]
Discrete Quadratic Model (DQM)
The discrete quadratic model (DQM) is a polynomial over discrete variables, with all terms of degree two or less, where a discrete variable represents some collection of distinct values, such as {red, green, blue, yellow} or {3.2, 67}, which are called the variableโs cases.
Example:
cases = ["rock", "paper", "scissors"]
win = {"rock": "scissors", "paper": "rock", "scissors": "paper"}
dqm = dimod.DiscreteQuadraticModel()
dqm.add_variable(3, label='my_hand')
dqm.add_variable(3, label='their_hand')
for my_idx, my_case in enumerate(cases):
for their_idx, their_case in enumerate(cases):
if win[my_case] == their_case:
dqm.set_quadratic('my_hand', 'their_hand',
{(my_idx, their_idx): -1})
if win[their_case] == my_case:
dqm.set_quadratic('my_hand', 'their_hand',
{(my_idx, their_idx): 1})
model = dynex.DQM(dqm)
sampler = dynex.DynexSampler(model, mainnet=False);
sampleset = sampler.sample(num_reads=1000, annealing_time = 10);
print(sampleset)
print("{} beats {}".format(cases[sampleset.first.sample['my_hand']],
cases[sampleset.first.sample['their_hand']]))
Returns:
[DYNEX] SAMPLER INITIALISED
[DYNEX|TESTNET] *** WAITING FOR READS ***
โญโโโโโโโโโโโโโฌโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโฌโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโโโโโโโโฎ
โ DYNEXJOB โ QUBITS โ QUANTUM GATES โ BLOCK FEE โ ELAPSED โ WORKERS READ โ CIRCUITS โ STEPS โ GROUND STATE โ
โโโโโโโโโโโโโโผโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโผโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโโโโโโโค
โ -1 โ 14 โ 32 โ 0 โ โ *** WAITING FOR READS *** โ โ โ โ
โฐโโโโโโโโโโโโโดโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโดโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโโโโโโโโฏ
[DYNEX] FINISHED READ AFTER 0.79 SECONDS
[DYNEX] SAMPLESET READY
my_hand their_hand energy num_oc.
0 2 1 0 1
['INTEGER', 1 rows, 1 samples, 2 variables]
scissors beats paper
Quadratic Unconstrained Binary Optimization Model (QUBO)
Quadratic unconstrained binary optimization (QUBO), also known as unconstrained binary quadratic programming (UBQP), is a combinatorial optimization problem with a wide range of applications from finance and economics to machine learning.
Given a generic QUBO model Q:
Q = {(0, 0): -1, (1, 1): -1, (0, 1): 2}
The model can be defined with:
bqm = dimod.BinaryQuadraticModel.from_qubo(Q, offset = 0.0)
model = dynex.BQM(bqm)
This model can then be sampled with the following command on the Dynex platform:
sampler = dynex.DynexSampler(model, mainnet=False);
sampleset = sampler.sample(num_reads=1000, annealing_time = 10);
print(sampleset)
Returns:
[DYNEX] SAMPLER INITIALISED
[DYNEX|TESTNET] *** WAITING FOR READS ***
โญโโโโโโโโโโโโโฌโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโฌโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโโโโโโโโฎ
โ DYNEXJOB โ QUBITS โ QUANTUM GATES โ BLOCK FEE โ ELAPSED โ WORKERS READ โ CIRCUITS โ STEPS โ GROUND STATE โ
โโโโโโโโโโโโโโผโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโผโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโโโโโโโค
โ -1 โ 10 โ 11 โ 0 โ โ *** WAITING FOR READS *** โ โ โ โ
โฐโโโโโโโโโโโโโดโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโดโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโโโโโโโโฏ
[DYNEX] FINISHED READ AFTER 0.75 SECONDS
[DYNEX] SAMPLESET READY
0 1 energy num_oc.
0 1 0 -1.0 1
['BINARY', 1 rows, 1 samples, 2 variables]
SAT Model
Given clauses of a SAT problem:
clauses = [[1, -2, 3], [-1, 4, 5], [6, 7, -8], [-9, -10, 11], [12, 13, -14],
[-1, 15, -16], [17, -18, 19], [-20, 2, 3], [4, -5, 6], [-7, 8, 9],
[10, 11, -12], [-13, -14, 15], [16, 17, -18], [-19, 20, 1], [2, -3, 4],
[-5, 6, 7], [8, 9, -10], [-11, -12, 13], [14, 15, -16], [-17, 18, 19]]
The model can be defined with:
model = dynex.SAT(clauses)
This model can then be sampled with the following command on the Dynex platform (note SAT jobs can only be sampled on the Dynex mainnet):
sampler = dynex.DynexSampler(model, mainnet=True);
sampleset = sampler.sample(num_reads=1000, annealing_time = 100);
print(sampleset)
Returns:
โญโโโโโโโโโโโโโฌโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโฌโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโโโโโโโโฎ
โ DYNEXJOB โ QUBITS โ QUANTUM GATES โ BLOCK FEE โ ELAPSED โ WORKERS READ โ CIRCUITS โ STEPS โ GROUND STATE โ
โโโโโโโโโโโโโโผโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโผโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโโโโโโโค
โ 20673 โ 28 โ 28 โ 0.01 โ 0.47 โ 1 โ -1 โ -1 โ 0 โ
โฐโโโโโโโโโโโโโดโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโดโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโโโโโโโโฏ
โญโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโโฌโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโฌโโโโโโโโโโโฎ
โ WORKER โ VERSION โ CIRCUITS โ LOC โ ENERGY โ RUNTIME โ LAST UPDATE โ STEPS โ STATUS โ
โโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโโโโผโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโผโโโโโโโโโโโค
โ 35f4..cdea โ 2.3.5.OZM.128.L โ 992 โ 0 โ 0.00 โ 10.980027106s โ 2024-07-10T07:52:47.961376Z โ 0 (0.00%) โ STOPPED โ
โโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโโโโผโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโผโโโโโโโโโโโค
โ 01ea..2c5a โ 2.3.5f.BZM.v21. โ 96 โ 0 โ 0.00 โ 1.174598643s โ 2024-07-10T07:52:57.766806Z โ 0 (0.00%) โ STOPPED โ
โโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโโโโผโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโผโโโโโโโโโโโค
โ 496e..3bfa โ 2.3.5.OZM.130.L โ 3016160 โ 0 โ 0.00 โ 9.328952483s โ 2024-07-10T07:52:49.612453Z โ 0 (0.00%) โ STOPPED โ
โโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโโโโผโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโผโโโโโโโโโโโค
โ 783e..12b3 โ 2.3.5.OZM.127.L โ 992 โ 0 โ 0.00 โ 4.386888343s โ 2024-07-10T07:52:54.554518Z โ 0 (0.00%) โ STOPPED โ
โโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโโโโผโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโผโโโโโโโโโโโค
โ 51b1..e93d โ 2.3.5.OZM.129.L โ 992 โ 0 โ 0.00 โ 1.486101887s โ 2024-07-10T07:52:57.455305Z โ 0 (0.00%) โ STOPPED โ
โโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโโโโผโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโผโโโโโโโโโโโค
โ 08d9..bb19 โ 2.3.5.OZM.127.L โ 992 โ 0 โ 0.00 โ 764.895208ms โ 2024-07-10T07:52:58.176512Z โ 0 (0.00%) โ STOPPED โ
โฐโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโโดโโโโโโโโโโโดโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโดโโโโโโโโโโโฏ
[DYNEX] FINISHED READ AFTER 47.50 SECONDS
[DYNEX] SAMPLESET READY
{1: 0, 2: 1, 3: 1, 4: 0, 5: 0, 6: 1, 7: 0, 8: 0, 9: 0, 10: 0, 11: 1, 12: 0, 13: 1, 14: 1, 15: 1, 16: 1, 17: 0, 18: 1, 19: 1, 20: 1}