data extraction
This commit is contained in:
		
							
								
								
									
										60
									
								
								test_data_extraction.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										60
									
								
								test_data_extraction.py
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,60 @@ | |||||||
|  | #!/usr/bin/env python3 | ||||||
|  |  | ||||||
|  | import util.script as script | ||||||
|  | import util.queries as queries | ||||||
|  | import dimod | ||||||
|  |  | ||||||
|  | def main(): | ||||||
|  |     wmis_siman_results_alpha_num_of_assignments() | ||||||
|  |      | ||||||
|  | def wmis_siman_results(): | ||||||
|  |     db = script.connect_to_instance_pool() | ||||||
|  |      | ||||||
|  |     q = queries.WMIS_result_scope_query_raw(db) | ||||||
|  |     q.query("c50_v[5, 50]_1", "wmis_siman_results") | ||||||
|  |      | ||||||
|  |     for i in range(30): | ||||||
|  |         result = q.__next__() | ||||||
|  |          | ||||||
|  |         sample_set = queries.read_raw_wmis_sample_set(result["data"]) | ||||||
|  |          | ||||||
|  |         data = script.analyze_wmis_sample(sample_set.first) | ||||||
|  |          | ||||||
|  |         print(data) | ||||||
|  |          | ||||||
|  | def wmis_siman_results_alpha_num_of_assignments(): | ||||||
|  |     edb = script.connect_to_experimetns_db() | ||||||
|  |     edb_cursor = edb.cursor() | ||||||
|  |      | ||||||
|  |     idb = script.connect_to_instance_pool() | ||||||
|  |      | ||||||
|  |     q = queries.WMIS_result_scope_query_raw(idb) | ||||||
|  |     q.query("c50_v[5, 50]_1", "wmis_siman_results") | ||||||
|  |      | ||||||
|  |     insert_row = ("INSERT INTO c50_v5to50_1_wmis_alpha_number_of_assignments " | ||||||
|  |                   "(result_id, " | ||||||
|  |                   " number_of_clauses, " | ||||||
|  |                   " number_of_variables, " | ||||||
|  |                   " number_of_found_assignments) " | ||||||
|  |                   "VALUES (%s, %s, %s, %s) ") | ||||||
|  |      | ||||||
|  |     for result in q: | ||||||
|  |         sample_set = queries.read_raw_wmis_sample_set(result["data"]) | ||||||
|  |          | ||||||
|  |         data = script.analyze_wmis_sample(sample_set.first) | ||||||
|  |          | ||||||
|  |         sat = queries.get_instance_by_id(idb["instances"], result["instance"]) | ||||||
|  |          | ||||||
|  |         edb_cursor.execute(insert_row, (str(result["_id"]), | ||||||
|  |                                         int(sat.getNumberOfClauses()), | ||||||
|  |                                         int(sat.getNumberOfVariables()), | ||||||
|  |                                         int(data["number_of_assignments"]))) | ||||||
|  |          | ||||||
|  |         print(data) | ||||||
|  |          | ||||||
|  |     edb.commit() | ||||||
|  |     edb_cursor.close() | ||||||
|  |     edb.close() | ||||||
|  |  | ||||||
|  | if __name__ == "__main__": | ||||||
|  |     main() | ||||||
| @@ -1,5 +1,6 @@ | |||||||
| from .kSAT import kSAT | from .kSAT import kSAT | ||||||
| import bson | import bson | ||||||
|  | import dimod | ||||||
|  |  | ||||||
| class Instance_scope_query: | class Instance_scope_query: | ||||||
|      |      | ||||||
| @@ -196,6 +197,45 @@ class WMIS_solver_input_scope_query (WMIS_solver_input_scope_query_raw): | |||||||
|              |              | ||||||
|         return data |         return data | ||||||
|      |      | ||||||
|  | class WMIS_result_scope_query_raw: | ||||||
|  |     def __init__(self, database): | ||||||
|  |         self.__database = database | ||||||
|  |         self.__query = None | ||||||
|  |          | ||||||
|  |     def query(self, scope, collection): | ||||||
|  |         self.__query = self.__database["experiment_scopes"].aggregate([ | ||||||
|  |             { | ||||||
|  |                 "$match": {"_id": scope} | ||||||
|  |             }, | ||||||
|  |             { | ||||||
|  |                 "$unwind": "$instances" | ||||||
|  |             }, | ||||||
|  |             { | ||||||
|  |                 "$project": {"instance_id": "$instances"} | ||||||
|  |             }, | ||||||
|  |             { | ||||||
|  |                 "$lookup": | ||||||
|  |                 { | ||||||
|  |                     "from": collection, | ||||||
|  |                     "localField": "instance_id",   | ||||||
|  |                     "foreignField": "instance", | ||||||
|  |                     "as": "result" | ||||||
|  |                 } | ||||||
|  |             }, | ||||||
|  |             { | ||||||
|  |                 "$unwind": "$result" | ||||||
|  |             }, | ||||||
|  |             { | ||||||
|  |                 "$replaceRoot": {"newRoot": "$result"} | ||||||
|  |             } | ||||||
|  |         ]) | ||||||
|  |      | ||||||
|  |     def __iter__(self): | ||||||
|  |         return self | ||||||
|  |      | ||||||
|  |     def __next__(self): | ||||||
|  |         return self.__query.next() | ||||||
|  |  | ||||||
| def load_embedding(collection, qubo_id, solver_graph_id): | def load_embedding(collection, qubo_id, solver_graph_id): | ||||||
|     doc = collection.find_one( |     doc = collection.find_one( | ||||||
|         { |         { | ||||||
| @@ -262,3 +302,24 @@ def read_raw_embedding(raw_embedding): | |||||||
|         emb[tuple(entry[0])] = entry[1] |         emb[tuple(entry[0])] = entry[1] | ||||||
|          |          | ||||||
|     return emb |     return emb | ||||||
|  |  | ||||||
|  | def read_raw_wmis_sample_set(raw_sample_set): | ||||||
|  |     sample_set_data = raw_sample_set.copy() | ||||||
|  |      | ||||||
|  |     sample_set_data["variable_labels"] = [] | ||||||
|  |      | ||||||
|  |     for label in raw_sample_set["variable_labels"]: | ||||||
|  |         sample_set_data["variable_labels"].append(tuple(label)) | ||||||
|  |          | ||||||
|  |     return dimod.SampleSet.from_serializable(sample_set_data) | ||||||
|  |  | ||||||
|  | def get_instance_by_id(collection, id): | ||||||
|  |     doc = collection.find_one({"_id": bson.ObjectId(id)}) | ||||||
|  |      | ||||||
|  |     sat = kSAT() | ||||||
|  |      | ||||||
|  |     for clause in doc["clauses"]: | ||||||
|  |             sat.addClause(clause); | ||||||
|  |          | ||||||
|  |     return sat | ||||||
|  |      | ||||||
|   | |||||||
| @@ -9,7 +9,7 @@ from . import queries | |||||||
| from . import graph | from . import graph | ||||||
| import minorminer | import minorminer | ||||||
| from tqdm import tqdm | from tqdm import tqdm | ||||||
|  | import numpy as np | ||||||
|  |  | ||||||
| def readConfig(configFilePath): | def readConfig(configFilePath): | ||||||
|     config = configparser.ConfigParser() |     config = configparser.ConfigParser() | ||||||
| @@ -104,7 +104,7 @@ def getDBContext(dbConfigPath): | |||||||
|  |  | ||||||
|     return dbContext |     return dbContext | ||||||
|  |  | ||||||
| def connect_to_instance_pool(dbConfigPath): | def connect_to_instance_pool(dbConfigPath = "database.config"): | ||||||
|     dbConf = readConfig(dbConfigPath) |     dbConf = readConfig(dbConfigPath) | ||||||
|      |      | ||||||
|     client = pymongo.MongoClient( |     client = pymongo.MongoClient( | ||||||
| @@ -119,7 +119,7 @@ def connect_to_instance_pool(dbConfigPath): | |||||||
|          |          | ||||||
|     return client[dbConf["INSTANCE_POOL"]["database"]] |     return client[dbConf["INSTANCE_POOL"]["database"]] | ||||||
|              |              | ||||||
| def connect_to_experimetns_db(dbConfigPath): | def connect_to_experimetns_db(dbConfigPath = "database.config"): | ||||||
|     dbConfig = readConfig(dbConfigPath) |     dbConfig = readConfig(dbConfigPath) | ||||||
|      |      | ||||||
|     return mysql.connector.connect( |     return mysql.connector.connect( | ||||||
| @@ -267,3 +267,9 @@ def save_simulated_annealing_result(collection, result, solver_input, emb_list_i | |||||||
|      |      | ||||||
|     collection.insert_one(doc) |     collection.insert_one(doc) | ||||||
|      |      | ||||||
|  | def analyze_wmis_sample(sample): | ||||||
|  |     data = {} | ||||||
|  |      | ||||||
|  |     data["number_of_assignments"] = np.count_nonzero(list(sample.sample.values())) | ||||||
|  |      | ||||||
|  |     return data | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user