Skip to content

Commit

Permalink
Merge pull request #2 from SamMugel/feature/updated_to_python3
Browse files Browse the repository at this point in the history
made code compatible with python 3
  • Loading branch information
charleswhchan committed Dec 4, 2019
2 parents ff7306d + 519d59a commit 1286d51
Show file tree
Hide file tree
Showing 7 changed files with 178 additions and 150 deletions.
31 changes: 12 additions & 19 deletions examples/section2.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,7 @@
from dwave.system.composites import EmbeddingComposite

linear = {1: -5, 2: -3, 3: -8, 4: -6}
quadratic = {(1, 2): 4,
(1, 3): 8,
(2, 3): 2,
(3, 4): 10}
quadratic = {(1, 2): 4, (1, 3): 8, (2, 3): 2, (3, 4): 10}
offset = 0.0
vartype = dimod.BINARY

Expand All @@ -22,15 +19,11 @@
# x3 = 0
# x4 = 1

bqm = dimod.BinaryQuadraticModel(
linear,
quadratic,
offset,
vartype)
bqm = dimod.BinaryQuadraticModel(linear, quadratic, offset, vartype)
sampler = dimod.ExactSolver()
sample_set = sampler.sample(bqm)
print "Using ExactSolver()"
print sample_set
print("Using ExactSolver()")
print(sample_set)

# Using ExactSolver()
# 1 2 3 4 energy num_oc.
Expand All @@ -52,12 +45,12 @@
# 10 1 1 1 1 2.0 1
# ['BINARY', 16 rows, 16 samples, 4 variables]

print '#'*80
print("#" * 80)

sampler = dimod.SimulatedAnnealingSampler()
sample_set = sampler.sample(bqm)
print "Using SimulatedAnnlearingSampler()"
print sample_set
print("Using SimulatedAnnlearingSampler()")
print(sample_set)

# Using SimulatedAnnlearingSampler()
# 1 2 3 4 energy num_oc.
Expand All @@ -73,19 +66,19 @@
# 9 1 0 0 1 -11.0 1
# ['BINARY', 10 rows, 10 samples, 4 variables]

print '#'*80
print("#" * 80)

# Pre-requisite: Make sure your environment is setup using
# dwave config create
# See: https://docs.ocean.dwavesys.com/en/latest/overview/dwavesys.html#configuring-a-d-wave-system-as-a-solver
#
#
# For more information about the DWaveSampler(), refer to https://dwave-systemdocs.readthedocs.io/en/latest/reference/samplers/dwave_sampler.html#module-dwave.system.samplers.dwave_sampler
sampler = EmbeddingComposite(DWaveSampler())
sample_set = sampler.sample(bqm)
print "Using DWaveSampler()"
print sample_set
print("Using DWaveSampler()")
print(sample_set)

# Using DWaveSampler()
# 1 2 3 4 energy num_oc. chain_.
# 0 1 0 0 1 -11.0 1 0.0
# ['BINARY', 1 rows, 1 samples, 4 variables]
# ['BINARY', 1 rows, 1 samples, 4 variables]
58 changes: 32 additions & 26 deletions examples/section3.1-1.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,63 +13,69 @@
from dwave.system.samplers import DWaveSampler
from dwave.system.composites import EmbeddingComposite


def generate_numbers(num_numbers):
random.seed(51229)
numbers = random.sample(xrange(1, 1000), num_numbers)
numbers = random.sample(range(1, 1000), num_numbers)
return numbers


def to_bqm(numbers):
c = sum(numbers)
c_square = c**c
c_square = c ** c

linear = {}
quadratic = {}
offset = 0.0
vartype = dimod.BINARY
for index, value in enumerate(numbers):
linear[index+1] = value * (value - c)
linear[index + 1] = value * (value - c)
for index1, value1 in enumerate(numbers[:-1]):
for index2 in range(index1+1, len(numbers)):
for index2 in range(index1 + 1, len(numbers)):
value = value1 * numbers[index2]
idx = (index1+1, index2+1)
idx = (index1 + 1, index2 + 1)
quadratic[idx] = quadratic[tuple(reversed(idx))] = value

bqm = dimod.BinaryQuadraticModel(
linear,
quadratic,
offset,
vartype)
print len(linear)
print len(quadratic)
bqm = dimod.BinaryQuadraticModel(linear, quadratic, offset, vartype)
print(len(linear))
print(len(quadratic))
return bqm


def solve(sampler, bqm, num_reads=None):
params = {}
if num_reads:
params['num_reads'] = num_reads
params["num_reads"] = num_reads
return sampler.sample(bqm, **params)


def split_numbers_list(numbers, result):
list1 = []
list2 = []
for key, include_in_list in result.items():
index = key-1
index = key - 1
if include_in_list:
list1.append(numbers[index])
else:
list2.append(numbers[index])
return list1, list2


def print_result(sample_set):
for sample in sample_set.samples():
list1, list2 = split_numbers_list(numbers, sample)
print "list1: {}, sum: {}, list2: {}, sum: {}".format(list1, sum(list1), list2, sum(list2))
print(
"list1: {}, sum: {}, list2: {}, sum: {}".format(
list1, sum(list1), list2, sum(list2)
)
)


exact_solver = dimod.ExactSolver()
simulated_annealing_sampler = dimod.SimulatedAnnealingSampler()
dwave_sampler = EmbeddingComposite(DWaveSampler())

print "#"*80
print("#" * 80)
numbers = generate_numbers(50) # generate a list of numbers to be split into equal sums
bqm = to_bqm(numbers)

Expand All @@ -88,11 +94,11 @@ def print_result(sample_set):
start = time.time()
sample_set = solve(simulated_annealing_sampler, bqm)
end = time.time()
print "Using SimulatedAnnlearingSampler (elapsed time: {}s)".format(end-start)
print("Using SimulatedAnnlearingSampler (elapsed time: {}s)".format(end - start))
sample_set = sample_set.truncate(5)
print sample_set
print(sample_set)
print_result(sample_set)
print ""
print("")

# Using Simulated (elapsed time: 15.2062799931s)
# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 50 energy num_oc.
Expand All @@ -111,10 +117,10 @@ def print_result(sample_set):
start = time.time()
sample_set = solve(dwave_sampler, bqm, num_reads=10)
end = time.time()
print "Using DWaveSampler (elapsed time: {}s)".format(end-start)
print sample_set
print("Using DWaveSampler (elapsed time: {}s)".format(end - start))
print(sample_set)
print_result(sample_set)
print ""
print("")

# Using DWaveSampler (elapsed time: 5.94733715057s)
# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ... 50 energy num_oc. ...
Expand Down Expand Up @@ -146,11 +152,11 @@ def print_result(sample_set):
start = time.time()
sample_set = solve(dwave_sampler, bqm, num_reads=1000)
end = time.time()
print "Using DWaveSampler (elapsed time: {}s)".format(end-start)
print("Using DWaveSampler (elapsed time: {}s)".format(end - start))
sample_set = sample_set.truncate(100)
print sample_set
print(sample_set)
print_result(sample_set)
print ""
print("")

# Using DWaveSampler (elapsed time: 11.7918388844s)
# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ... 50 energy num_oc. ...
Expand All @@ -176,4 +182,4 @@ def print_result(sample_set):
# list1: [871, 112, 490, 608, 455, 107, 239, 88, 766, 902, 345, 170, 256, 523, 998, 673, 561, 86, 417, 206, 531, 566, 996, 602], sum: 11568, list2: [448, 834, 488, 295, 174, 911, 977, 67, 324, 588, 264, 980, 762, 209, 500, 102, 993, 514, 71, 696, 564, 266, 280, 24, 267, 6], sum: 11604
# list1: [871, 112, 834, 174, 911, 67, 324, 588, 264, 88, 902, 209, 345, 256, 500, 514, 71, 696, 561, 417, 206, 531, 566, 996, 602], sum: 11605, list2: [448, 490, 608, 488, 295, 455, 977, 107, 239, 766, 980, 762, 170, 523, 998, 102, 993, 673, 564, 266, 280, 24, 86, 267, 6], sum: 11567
# list1: [871, 112, 490, 608, 488, 295, 174, 107, 324, 239, 264, 902, 980, 762, 209, 170, 256, 523, 998, 102, 514, 71, 673, 266, 561, 24, 417, 6, 206], sum: 11612, list2: [448, 834, 455, 911, 977, 67, 588, 88, 766, 345, 500, 993, 696, 564, 280, 86, 267, 531, 566, 996, 602], sum: 11560
# list1: [448, 112, 295, 174, 911, 588, 239, 264, 88, 766, 902, 209, 345, 500, 523, 998, 102, 993, 673, 696, 417, 206, 566, 602], sum: 11617, list2: [871, 490, 834, 608, 488, 455, 977, 107, 67, 324, 980, 762, 170, 256, 514, 71, 564, 266, 280, 561, 24, 86, 267, 6, 531, 996], sum: 11555
# list1: [448, 112, 295, 174, 911, 588, 239, 264, 88, 766, 902, 209, 345, 500, 523, 998, 102, 993, 673, 696, 417, 206, 566, 602], sum: 11617, list2: [871, 490, 834, 608, 488, 455, 977, 107, 67, 324, 980, 762, 170, 256, 514, 71, 564, 266, 280, 561, 24, 86, 267, 6, 531, 996], sum: 11555
60 changes: 35 additions & 25 deletions examples/section3.1-2.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,67 +15,75 @@
from dwave.system.samplers import DWaveSampler
from dwave.system.composites import EmbeddingComposite


def generate_numbers(num_numbers):
random.seed(51229)
numbers = random.sample(xrange(1, 1000), num_numbers)
numbers = random.sample(range(1, 1000), num_numbers)
return numbers


def to_bqm(numbers):
c = sum(numbers)
c_square = c**c
c_square = c ** c

linear = {}
quadratic = {}
offset = 0.0
vartype = dimod.BINARY
for index, value in enumerate(numbers):
linear[index+1] = value * (value - c)
linear[index + 1] = value * (value - c)
for index1, value1 in enumerate(numbers[:-1]):
for index2 in range(index1+1, len(numbers)):
for index2 in range(index1 + 1, len(numbers)):
value = value1 * numbers[index2]
idx = (index1+1, index2+1)
idx = (index1 + 1, index2 + 1)
quadratic[idx] = quadratic[tuple(reversed(idx))] = value

bqm = dimod.BinaryQuadraticModel(
linear,
quadratic,
offset,
vartype)
print len(linear)
print len(quadratic)
bqm = dimod.BinaryQuadraticModel(linear, quadratic, offset, vartype)
print(len(linear))
print(len(quadratic))
return bqm


def solve(sampler, bqm, num_reads=None):
params = {}
if num_reads:
params['num_reads'] = num_reads
params["num_reads"] = num_reads
return sampler.sample(bqm, **params)


def split_numbers_list(numbers, result):
list1 = []
list2 = []
for key, include_in_list in result.items():
index = key-1
index = key - 1
if include_in_list:
list1.append(numbers[index])
else:
list2.append(numbers[index])
return list1, list2


def print_result(sample_set):
for sample in sample_set.samples():
list1, list2 = split_numbers_list(numbers, sample)
print "list1: {}, sum: {}, list2: {}, sum: {}".format(list1, sum(list1), list2, sum(list2))
print(
"list1: {}, sum: {}, list2: {}, sum: {}".format(
list1, sum(list1), list2, sum(list2)
)
)


dwave_sampler = EmbeddingComposite(DWaveSampler())

print "#"*80
numbers = generate_numbers(100) # generate a list of numbers to be split into equal sums
print("#" * 80)
numbers = generate_numbers(
100
) # generate a list of numbers to be split into equal sums
bqm = to_bqm(numbers)

# Redefine the workflow: a rolling decomposition window
decomposer = hybrid.EnergyImpactDecomposer(size=50, rolling_history=0.15)
sampler = hybrid.QPUSubproblemAutoEmbeddingSampler()
sampler = hybrid.QPUSubproblemAutoEmbeddingSampler()
composer = hybrid.SplatComposer()

iteration = hybrid.RacingBranches(decomposer | sampler | composer) | hybrid.ArgMin()
Expand All @@ -87,10 +95,10 @@ def print_result(sample_set):
start = time.time()
final_state = workflow.run(init_state).result()
end = time.time()
print "Using dwave-hybrid (elapsed time: {}s)".format(end-start)
print("Using dwave-hybrid (elapsed time: {}s)".format(end - start))
print(final_state.samples)
print_result(final_state.samples)
print ""
print("")

# Using dwave-hybrid (elapsed time: 17.1963908672s)
# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 100 energy num_oc.
Expand All @@ -99,8 +107,10 @@ def print_result(sample_set):
# list1: [447, 112, 485, 293, 452, 173, 106, 66, 320, 235, 259, 87, 204, 336, 165, 248, 104, 98, 68, 471, 255, 269, 466, 23, 82, 397, 254, 6, 196, 241, 423, 402, 80, 309, 152, 435, 478, 231, 130, 377, 477, 407, 261, 39, 418, 17, 111, 333, 464, 1], sum: 12463, list2: [871, 488, 831, 605, 902, 966, 579, 983, 750, 883, 958, 744, 591, 486, 507, 988, 959, 496, 648, 669, 541, 537, 504, 956, 944, 569, 864, 985, 521, 601, 916, 581, 715, 926, 889, 820, 787, 526, 666, 987, 533, 499, 665, 742, 913, 679, 868, 845, 783, 673], sum: 36939

# Change rolling_history=0.5, traversal='bfs' and num_reads=1000
decomposer = hybrid.EnergyImpactDecomposer(size=50, rolling_history=0.5, traversal='bfs')
sampler = hybrid.QPUSubproblemAutoEmbeddingSampler(num_reads=1000)
decomposer = hybrid.EnergyImpactDecomposer(
size=50, rolling_history=0.5, traversal="bfs"
)
sampler = hybrid.QPUSubproblemAutoEmbeddingSampler(num_reads=1000)
composer = hybrid.SplatComposer()

iteration = hybrid.RacingBranches(decomposer | sampler | composer) | hybrid.ArgMin()
Expand All @@ -112,13 +122,13 @@ def print_result(sample_set):
start = time.time()
final_state = workflow.run(init_state).result()
end = time.time()
print "Using dwave-hybrid (elapsed time: {}s)".format(end-start)
print("Using dwave-hybrid (elapsed time: {}s)".format(end - start))
print(final_state.samples)
print_result(final_state.samples)
print ""
print("")

# Using dwave-hybrid (elapsed time: 30.7170920372s)
# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 100 energy num_oc.
# 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... 1 -605135232.0 1
# ['BINARY', 1 rows, 1 samples, 100 variables]
# list1: [871, 447, 112, 488, 831, 605, 485, 293, 452, 173, 902, 966, 106, 66, 320, 579, 235, 259, 983, 87, 750, 883, 958, 744, 204, 336, 165, 591, 248, 486, 507, 104, 988, 98, 959, 496, 68, 648, 471, 669, 541, 255, 269, 537, 466, 23, 82, 397, 254, 6, 1], sum: 22464, list2: [196, 504, 956, 944, 569, 864, 241, 985, 521, 601, 916, 581, 715, 926, 889, 820, 423, 402, 787, 80, 309, 526, 152, 666, 435, 478, 231, 130, 377, 987, 533, 477, 499, 665, 407, 742, 261, 39, 418, 913, 679, 17, 868, 845, 111, 333, 783, 673, 464], sum: 26938
# list1: [871, 447, 112, 488, 831, 605, 485, 293, 452, 173, 902, 966, 106, 66, 320, 579, 235, 259, 983, 87, 750, 883, 958, 744, 204, 336, 165, 591, 248, 486, 507, 104, 988, 98, 959, 496, 68, 648, 471, 669, 541, 255, 269, 537, 466, 23, 82, 397, 254, 6, 1], sum: 22464, list2: [196, 504, 956, 944, 569, 864, 241, 985, 521, 601, 916, 581, 715, 926, 889, 820, 423, 402, 787, 80, 309, 526, 152, 666, 435, 478, 231, 130, 377, 987, 533, 477, 499, 665, 407, 742, 261, 39, 418, 913, 679, 17, 868, 845, 111, 333, 783, 673, 464], sum: 26938
Loading

0 comments on commit 1286d51

Please sign in to comment.