queries: switched to lazy loding
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
db.getCollection("experiment_scopes").aggregate([
|
db.getCollection("experiment_scopes").aggregate([
|
||||||
{
|
{
|
||||||
$match: {_id: "test"}
|
$match: {_id: "c45_v[5-45]_1"}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
$unwind : "$instances"
|
$unwind : "$instances"
|
||||||
|
23
query_instances_from_scope_ids.js
Normal file
23
query_instances_from_scope_ids.js
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
db.getCollection("experiment_scopes").aggregate([
|
||||||
|
{
|
||||||
|
$match: {_id: "c45_v[5-45]_1"}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
$unwind : "$instances"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
$lookup:
|
||||||
|
{
|
||||||
|
from: "instances",
|
||||||
|
localField: "instances",
|
||||||
|
foreignField: "_id",
|
||||||
|
as: "instance"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
$unwind: "$instance"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
$project: {instance_id: "$instance._id"}
|
||||||
|
}
|
||||||
|
])
|
@@ -1,7 +1,7 @@
|
|||||||
db.getCollection('experiment_scopes').aggregate(
|
db.getCollection('experiment_scopes').aggregate(
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
$match: {_id: "c50_v[5, 50]_1"}
|
$match: {_id: "c45_v[5-45]_1"}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
$unwind: "$instances"
|
$unwind: "$instances"
|
||||||
@@ -48,10 +48,6 @@ db.getCollection('experiment_scopes').aggregate(
|
|||||||
{
|
{
|
||||||
$project:
|
$project:
|
||||||
{
|
{
|
||||||
/*_id: false,
|
|
||||||
qubo: false,
|
|
||||||
solver_graph: false,
|
|
||||||
description: false*/
|
|
||||||
embeddings: true
|
embeddings: true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -74,4 +70,5 @@ db.getCollection('experiment_scopes').aggregate(
|
|||||||
embeddings: "$embeddings.embeddings"
|
embeddings: "$embeddings.embeddings"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
])
|
])
|
83
query_req_data_for_solving_ids.js
Normal file
83
query_req_data_for_solving_ids.js
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
db.getCollection('experiment_scopes').aggregate(
|
||||||
|
[
|
||||||
|
{
|
||||||
|
$match: {_id: "c42_v[5-42]_1"}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
$unwind: "$instances"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
$project: {"instance_id": "$instances"}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
$lookup:
|
||||||
|
{
|
||||||
|
from: "wmis_qubos",
|
||||||
|
localField: "instance_id",
|
||||||
|
foreignField: "instance",
|
||||||
|
as: "wmis_qubo"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
$unwind: "$wmis_qubo"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
$project:
|
||||||
|
{
|
||||||
|
instance_id: true,
|
||||||
|
wmis_qubo_id: "$wmis_qubo._id"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
$lookup:
|
||||||
|
{
|
||||||
|
from: "embeddings",
|
||||||
|
let:
|
||||||
|
{
|
||||||
|
qubo_id: "$wmis_qubo_id",
|
||||||
|
solver_graph_id: ObjectId("5c9e13168c6fe628c16eb361")
|
||||||
|
},
|
||||||
|
pipeline:
|
||||||
|
[
|
||||||
|
{
|
||||||
|
$project:
|
||||||
|
{
|
||||||
|
qubo: true,
|
||||||
|
solver_graph: true,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
$match:
|
||||||
|
{
|
||||||
|
$expr:
|
||||||
|
{
|
||||||
|
$and:
|
||||||
|
[
|
||||||
|
{$eq: ["$qubo", "$$qubo_id"]},
|
||||||
|
{$eq: ["$solver_graph", "$$solver_graph_id"]}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
$project:
|
||||||
|
{
|
||||||
|
_id: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
as: "embeddings_id"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
$unwind: "$embeddings_id"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
$project:
|
||||||
|
{
|
||||||
|
instance_id: true,
|
||||||
|
wmis_qubo_id: true,
|
||||||
|
embeddings_id: "$embeddings_id._id"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
])
|
@@ -6,14 +6,15 @@ import dimod
|
|||||||
|
|
||||||
def main():
|
def main():
|
||||||
wmis_siman_results_alpha_num_of_assignments()
|
wmis_siman_results_alpha_num_of_assignments()
|
||||||
|
#wmis_siman_results()
|
||||||
|
|
||||||
def wmis_siman_results():
|
def wmis_siman_results():
|
||||||
db = script.connect_to_instance_pool()
|
db = script.connect_to_instance_pool()
|
||||||
|
|
||||||
q = queries.WMIS_result_scope_query_raw(db)
|
q = queries.WMIS_result_scope_query_raw(db)
|
||||||
q.query("c50_v[5, 50]_1", "wmis_siman_results")
|
q.query("c45_v[5-45]_1", "wmis_siman_results")
|
||||||
|
|
||||||
for i in range(30):
|
for i in range(2):
|
||||||
result = q.__next__()
|
result = q.__next__()
|
||||||
|
|
||||||
sample_set = queries.read_raw_wmis_sample_set(result["data"])
|
sample_set = queries.read_raw_wmis_sample_set(result["data"])
|
||||||
@@ -29,14 +30,17 @@ def wmis_siman_results_alpha_num_of_assignments():
|
|||||||
idb = script.connect_to_instance_pool()
|
idb = script.connect_to_instance_pool()
|
||||||
|
|
||||||
q = queries.WMIS_result_scope_query_raw(idb)
|
q = queries.WMIS_result_scope_query_raw(idb)
|
||||||
q.query("c50_v[5, 50]_1", "wmis_siman_results")
|
q.query("c42_v[5-42]_1", "wmis_siman_results")
|
||||||
|
|
||||||
insert_row = ("INSERT INTO c50_v5to50_1_wmis_alpha_number_of_assignments "
|
insert_row = ("INSERT INTO c42_v5to42_1_wmis_results "
|
||||||
"(result_id, "
|
"(result_id, "
|
||||||
" number_of_clauses, "
|
" number_of_clauses, "
|
||||||
" number_of_variables, "
|
" number_of_variables, "
|
||||||
" number_of_found_assignments) "
|
" number_of_found_assignments, "
|
||||||
"VALUES (%s, %s, %s, %s) ")
|
" chain_break_fraction, "
|
||||||
|
" num_occurrences, "
|
||||||
|
" energy) "
|
||||||
|
"VALUES (%s, %s, %s, %s, %s, %s, %s) ")
|
||||||
|
|
||||||
for result in q:
|
for result in q:
|
||||||
sample_set = queries.read_raw_wmis_sample_set(result["data"])
|
sample_set = queries.read_raw_wmis_sample_set(result["data"])
|
||||||
@@ -48,7 +52,10 @@ def wmis_siman_results_alpha_num_of_assignments():
|
|||||||
edb_cursor.execute(insert_row, (str(result["_id"]),
|
edb_cursor.execute(insert_row, (str(result["_id"]),
|
||||||
int(sat.getNumberOfClauses()),
|
int(sat.getNumberOfClauses()),
|
||||||
int(sat.getNumberOfVariables()),
|
int(sat.getNumberOfVariables()),
|
||||||
int(data["number_of_assignments"])))
|
int(data["number_of_assignments"]),
|
||||||
|
float(data["chain_break_fraction"]),
|
||||||
|
int(data["num_occurrences"]),
|
||||||
|
int(data["energy"])))
|
||||||
|
|
||||||
print(data)
|
print(data)
|
||||||
|
|
||||||
|
@@ -57,13 +57,13 @@ def __wmis2():
|
|||||||
print(res.first)
|
print(res.first)
|
||||||
|
|
||||||
def __wmis3():
|
def __wmis3():
|
||||||
db = script.connect_to_instance_pool("dbc")
|
db = script.connect_to_instance_pool()
|
||||||
target_graph = dnx.chimera_graph(16, 16, 4)
|
target_graph = dnx.chimera_graph(16, 16, 4)
|
||||||
target_graph_id = queries.get_id_of_solver_graph(db["solver_graphs"],
|
target_graph_id = queries.get_id_of_solver_graph(db["solver_graphs"],
|
||||||
nx.node_link_data(target_graph))
|
nx.node_link_data(target_graph))
|
||||||
|
|
||||||
solver_input_query = queries.WMIS_solver_input_scope_query(db)
|
solver_input_query = queries.WMIS_solver_input_scope_query(db)
|
||||||
solver_input_query.query("c50_v[5, 50]_1", target_graph_id)
|
solver_input_query.query("c42_v[5-42]_1", target_graph_id)
|
||||||
|
|
||||||
base_sampler = SimulatedAnnealingSampler()
|
base_sampler = SimulatedAnnealingSampler()
|
||||||
chimera_sampler = dimod.StructureComposite(base_sampler,
|
chimera_sampler = dimod.StructureComposite(base_sampler,
|
||||||
|
@@ -7,6 +7,8 @@ class Instance_scope_query:
|
|||||||
def __init__(self, database):
|
def __init__(self, database):
|
||||||
self.__database = database
|
self.__database = database
|
||||||
self.__query = None
|
self.__query = None
|
||||||
|
self.__instance_ids = []
|
||||||
|
self.__instance_id_iterator = None;
|
||||||
|
|
||||||
def query(self, scope):
|
def query(self, scope):
|
||||||
self.__query = self.__database["experiment_scopes"].aggregate([
|
self.__query = self.__database["experiment_scopes"].aggregate([
|
||||||
@@ -29,15 +31,23 @@ class Instance_scope_query:
|
|||||||
"$unwind": "$instance"
|
"$unwind": "$instance"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"$replaceRoot": {"newRoot": "$instance"}
|
"$project": {"instance_id": "$instance._id"}
|
||||||
}
|
}
|
||||||
])
|
])
|
||||||
|
|
||||||
|
self.__instance_ids = []
|
||||||
|
for doc in self.__query:
|
||||||
|
self.__instance_ids.append(doc["instance_id"])
|
||||||
|
|
||||||
|
self.__instance_id_iterator = iter(self.__instance_ids)
|
||||||
|
|
||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def __next__(self):
|
def __next__(self):
|
||||||
document = self.__query.next()
|
instance_id = self.__instance_id_iterator.__next__()
|
||||||
|
|
||||||
|
document = self.__database["instances"].find_one({"_id": instance_id})
|
||||||
|
|
||||||
return self.__document_to_sat(document)
|
return self.__document_to_sat(document)
|
||||||
|
|
||||||
@@ -54,6 +64,8 @@ class WMIS_scope_query_raw:
|
|||||||
def __init__(self, database):
|
def __init__(self, database):
|
||||||
self.__database = database
|
self.__database = database
|
||||||
self.__query = None
|
self.__query = None
|
||||||
|
self.__qubo_ids = []
|
||||||
|
self.__qubo_id_iterator = None
|
||||||
|
|
||||||
def query(self, scope):
|
def query(self, scope):
|
||||||
self.__query = self.__database["experiment_scopes"].aggregate([
|
self.__query = self.__database["experiment_scopes"].aggregate([
|
||||||
@@ -76,15 +88,26 @@ class WMIS_scope_query_raw:
|
|||||||
"$unwind": "$qubo"
|
"$unwind": "$qubo"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"$replaceRoot": {"newRoot": "$qubo"}
|
"$project": {"qubo_id": "$qubo._id"}
|
||||||
}
|
}
|
||||||
])
|
])
|
||||||
|
|
||||||
|
self.__qubo_ids = []
|
||||||
|
for doc in self.__query:
|
||||||
|
self.__qubo_ids.append(doc["qubo_id"])
|
||||||
|
|
||||||
|
self.__qubo_id_iterator = iter(self.__qubo_ids)
|
||||||
|
|
||||||
|
def __len__(self):
|
||||||
|
return self.query.count_documents({})
|
||||||
|
|
||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def __next__(self):
|
def __next__(self):
|
||||||
return self.__query.next()
|
qubo_filter = {"_id": self.__qubo_id_iterator.__next__()}
|
||||||
|
|
||||||
|
return self.__database["wmis_qubos"].find_one(qubo_filter)
|
||||||
|
|
||||||
class WMIS_scope_query (WMIS_scope_query_raw):
|
class WMIS_scope_query (WMIS_scope_query_raw):
|
||||||
|
|
||||||
@@ -99,6 +122,8 @@ class WMIS_solver_input_scope_query_raw:
|
|||||||
def __init__(self, database):
|
def __init__(self, database):
|
||||||
self.__database = database
|
self.__database = database
|
||||||
self.__query = None
|
self.__query = None
|
||||||
|
self.__ids = []
|
||||||
|
self.__id_iterator = None;
|
||||||
|
|
||||||
def query(self, scope, solver_graph_id):
|
def query(self, scope, solver_graph_id):
|
||||||
self.__query = self.__database["experiment_scopes"].aggregate([
|
self.__query = self.__database["experiment_scopes"].aggregate([
|
||||||
@@ -123,17 +148,31 @@ class WMIS_solver_input_scope_query_raw:
|
|||||||
{
|
{
|
||||||
"$unwind": "$wmis_qubo"
|
"$unwind": "$wmis_qubo"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"$project":
|
||||||
|
{
|
||||||
|
"instance_id": True,
|
||||||
|
"wmis_qubo_id": "$wmis_qubo._id"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"$lookup":
|
"$lookup":
|
||||||
{
|
{
|
||||||
"from": "embeddings",
|
"from": "embeddings",
|
||||||
"let":
|
"let":
|
||||||
{
|
{
|
||||||
"qubo_id": "$wmis_qubo._id",
|
"qubo_id": "$wmis_qubo_id",
|
||||||
"solver_graph_id": bson.ObjectId(solver_graph_id)
|
"solver_graph_id": bson.ObjectId(solver_graph_id)
|
||||||
},
|
},
|
||||||
"pipeline":
|
"pipeline":
|
||||||
[
|
[
|
||||||
|
{
|
||||||
|
"$project":
|
||||||
|
{
|
||||||
|
"qubo": True,
|
||||||
|
"solver_graph": True,
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"$match":
|
"$match":
|
||||||
{
|
{
|
||||||
@@ -148,34 +187,55 @@ class WMIS_solver_input_scope_query_raw:
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"$project": { "list": "$embeddings" }
|
"$project":
|
||||||
}
|
{
|
||||||
|
"_id": True
|
||||||
|
}
|
||||||
|
}
|
||||||
],
|
],
|
||||||
"as": "embeddings"
|
"as": "embeddings_id"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"$match": {"embeddings": {"$exists": True, "$not": {"$size": 0}}}
|
"$unwind": "$embeddings_id"
|
||||||
},
|
|
||||||
{
|
|
||||||
"$unwind": "$embeddings"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"$project":
|
"$project":
|
||||||
{
|
{
|
||||||
"_id": False,
|
|
||||||
"instance_id": True,
|
"instance_id": True,
|
||||||
"wmis_qubo": True,
|
"wmis_qubo_id": True,
|
||||||
"embeddings": True
|
"embeddings_id": "$embeddings_id._id"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
])
|
])
|
||||||
|
|
||||||
|
self.__ids = []
|
||||||
|
for doc in self.__query:
|
||||||
|
self.__ids.append({
|
||||||
|
"instance_id": doc["instance_id"],
|
||||||
|
"wmis_qubo_id": doc["wmis_qubo_id"],
|
||||||
|
"embeddings_id": doc["embeddings_id"]
|
||||||
|
})
|
||||||
|
|
||||||
|
self.__id_iterator = iter(self.__ids)
|
||||||
|
|
||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def __next__(self):
|
def __next__(self):
|
||||||
return self.__query.next()
|
ids = self.__id_iterator.__next__()
|
||||||
|
|
||||||
|
doc = {}
|
||||||
|
|
||||||
|
doc["instance_id"] = ids["instance_id"]
|
||||||
|
|
||||||
|
qubo_filter = {"_id": ids["wmis_qubo_id"]}
|
||||||
|
doc["wmis_qubo"] = self.__database["wmis_qubos"].find_one(qubo_filter)
|
||||||
|
|
||||||
|
embeddings_filter = {"_id": ids["embeddings_id"]}
|
||||||
|
doc["embeddings"] = self.__database["embeddings"].find_one(embeddings_filter)
|
||||||
|
|
||||||
|
return doc
|
||||||
|
|
||||||
class WMIS_solver_input_scope_query (WMIS_solver_input_scope_query_raw):
|
class WMIS_solver_input_scope_query (WMIS_solver_input_scope_query_raw):
|
||||||
|
|
||||||
@@ -192,7 +252,7 @@ class WMIS_solver_input_scope_query (WMIS_solver_input_scope_query_raw):
|
|||||||
data["embeddings_id"] = doc["embeddings"]["_id"]
|
data["embeddings_id"] = doc["embeddings"]["_id"]
|
||||||
|
|
||||||
data["embeddings"] = []
|
data["embeddings"] = []
|
||||||
for raw_emb in doc["embeddings"]["list"]:
|
for raw_emb in doc["embeddings"]["embeddings"]:
|
||||||
data["embeddings"].append(read_raw_embedding(raw_emb))
|
data["embeddings"].append(read_raw_embedding(raw_emb))
|
||||||
|
|
||||||
return data
|
return data
|
||||||
|
@@ -11,11 +11,17 @@ class Random_instance_pool:
|
|||||||
return self
|
return self
|
||||||
|
|
||||||
def __next__(self):
|
def __next__(self):
|
||||||
params = self.__parameter_range.next()
|
return self.Random(self.__parameter_range.next())
|
||||||
|
|
||||||
|
class Random:
|
||||||
|
def __init__(self, parameters):
|
||||||
|
self.__params = parameters
|
||||||
|
|
||||||
|
def random(self):
|
||||||
|
return randomSAT.generateRandomKSAT(self.__params.number_of_clauses,
|
||||||
|
self.__params.number_of_variables,
|
||||||
|
self.__params.variables_per_clause)
|
||||||
|
|
||||||
return randomSAT.generateRandomKSAT(params.number_of_clauses,
|
|
||||||
params.number_of_variables,
|
|
||||||
params.variables_per_clause)
|
|
||||||
|
|
||||||
|
|
||||||
class Instance_parameters:
|
class Instance_parameters:
|
||||||
|
@@ -241,19 +241,43 @@ def find_wmis_embeddings_for_scope(db, scope, solver_graph):
|
|||||||
qubos = queries.WMIS_scope_query(db)
|
qubos = queries.WMIS_scope_query(db)
|
||||||
qubos.query(scope)
|
qubos.query(scope)
|
||||||
|
|
||||||
|
new_embeddings_found = 0
|
||||||
|
already_found = 0
|
||||||
|
total_count = 0
|
||||||
for qubo, qubo_id in tqdm(qubos):
|
for qubo, qubo_id in tqdm(qubos):
|
||||||
if not __embedding_entry_exists(db["embeddings"], qubo_id, solver_graph_id):
|
total_count += 1
|
||||||
nx_qubo = graph.qubo_to_nx_graph(qubo)
|
|
||||||
|
max_no_improvement = 10
|
||||||
emb = minorminer.find_embedding(nx_qubo.edges(),
|
for i in range(5):
|
||||||
solver_graph.edges(),
|
if __embedding_entry_exists(db["embeddings"], qubo_id, solver_graph_id):
|
||||||
return_overlap=True)
|
already_found += 1
|
||||||
|
break;
|
||||||
if emb[1] == 1:
|
else:
|
||||||
write_wmis_embedding_to_pool_db(db["embeddings"],
|
nx_qubo = graph.qubo_to_nx_graph(qubo)
|
||||||
qubo_id,
|
|
||||||
solver_graph_id,
|
emb = minorminer.find_embedding(nx_qubo.edges(),
|
||||||
emb[0])
|
solver_graph.edges(),
|
||||||
|
return_overlap=True,
|
||||||
|
max_no_improvement=max_no_improvement)
|
||||||
|
|
||||||
|
if emb[1] == 1:
|
||||||
|
write_wmis_embedding_to_pool_db(db["embeddings"],
|
||||||
|
qubo_id,
|
||||||
|
solver_graph_id,
|
||||||
|
emb[0])
|
||||||
|
new_embeddings_found += 1
|
||||||
|
|
||||||
|
max_no_improvement *= 1.5
|
||||||
|
|
||||||
|
percentage = 0
|
||||||
|
|
||||||
|
if total_count > 0:
|
||||||
|
percentage = round(((new_embeddings_found + already_found) / total_count) * 100)
|
||||||
|
|
||||||
|
print("found {} of {} embeddigns ({}%)".format(new_embeddings_found + already_found,
|
||||||
|
total_count,
|
||||||
|
percentage))
|
||||||
|
print("{} new embeddigns found".format(new_embeddings_found))
|
||||||
|
|
||||||
def save_simulated_annealing_result(collection, result, solver_input, emb_list_index):
|
def save_simulated_annealing_result(collection, result, solver_input, emb_list_index):
|
||||||
doc = {}
|
doc = {}
|
||||||
@@ -271,5 +295,8 @@ def analyze_wmis_sample(sample):
|
|||||||
data = {}
|
data = {}
|
||||||
|
|
||||||
data["number_of_assignments"] = np.count_nonzero(list(sample.sample.values()))
|
data["number_of_assignments"] = np.count_nonzero(list(sample.sample.values()))
|
||||||
|
data["chain_break_fraction"] = sample.chain_break_fraction
|
||||||
|
data["num_occurrences"] = sample.num_occurrences
|
||||||
|
data["energy"] = sample.energy
|
||||||
|
|
||||||
return data
|
return data
|
||||||
|
Reference in New Issue
Block a user