|
|
- #!/usr/bin/env python3
-
- from util.kSAT import kSAT
- from util import SAT2QUBO
- import util.script as scriptUtils
- import pymongo
- import ssl
- import json
-
- def main():
- args = __parseArguments()
-
- dbContext = scriptUtils.getDBContext(args["dbConfigPath"])
-
- __createQubos(dbContext, args["experimentScope"])
-
- def __parseArguments():
- parser = scriptUtils.ArgParser()
-
- parser.addArg(alias="experimentScope", shortFlag="s", longFlag="scope",
- help="the experiment experiment scope of interest", type=str)
-
- parser.addArg(alias="dbConfigPath", shortFlag="d", longFlag="db_config",
- help="path to the database config file", type=str,
- default="database.config")
-
-
- return parser.parse()
-
-
- def __createQubos(dbContext, experimentScope):
- instances = __queryInstancs(dbContext["db"], experimentScope)
-
- for instance in instances:
- sat = kSAT()
-
- for clause in instance["clauses"]:
- sat.addClause(clause);
-
- qubo = SAT2QUBO.WMISdictQUBO(sat)
-
- doc = {}
-
- doc["instance"] = instance["_id"]
- doc["description"] = {"<qubo>": "<entrys>",
- "<entrys>": "<entry><entrys> | <entry> | \"\"",
- "<entry>": "<coupler><energy>",
- "<energy>": "<real_number>",
- "<coupler>": "<node><node>",
- "<node>": "<clause><literal>",
- "<clause>": "<natural_number>",
- "<literal>": "<integer>"}
- doc["qubo"] = __qubo2JSON(qubo)
-
- dbContext["db"]["wmis_qubos"].insert_one(doc)
-
- def __qubo2JSON(qubo):
- quboJSON = []
-
- for coupler, value in qubo.items():
- quboJSON.append([coupler, float(value)])
-
- return quboJSON
-
- def __queryInstancs(db, experimentScope):
- return db["experiment_scopes"].aggregate([
- {
- "$match": {"_id": experimentScope}
- },
- {
- "$unwind": "$instances"
- },
- {
- "$lookup":
- {
- "from": "instances",
- "localField": "instances",
- "foreignField": "_id",
- "as": "instance"
- }
- },
- {
- "$unwind": "$instance"
- },
- {
- "$replaceRoot": {"newRoot": "$instance"}
- }
- ])
-
-
- if __name__ == "__main__":
- main()
|