|
|
@ -0,0 +1,100 @@ |
|
|
|
#!/usr/bin/env python3 |
|
|
|
|
|
|
|
from util import randomSAT |
|
|
|
from util import kSAT |
|
|
|
import util.script as scriptUtils |
|
|
|
import h5py |
|
|
|
import numpy as np |
|
|
|
import pymongo |
|
|
|
import ssl |
|
|
|
|
|
|
|
def main(): |
|
|
|
args = __parseArguments() |
|
|
|
|
|
|
|
dbClient = __getDBClient(args["dbConfigPath"]); |
|
|
|
db = dbClient["experiments"] |
|
|
|
dbInstances = db["instances"] |
|
|
|
dbExperimentScopes = db["experiment_scopes"] |
|
|
|
|
|
|
|
experimentScope = {} |
|
|
|
experimentScope["instances"] = [] |
|
|
|
|
|
|
|
description = "This experiment contains %d instances " % args["instances"] |
|
|
|
description += "each with %d clauses, %d variables " % (args["clauses"], |
|
|
|
args["variables"]) |
|
|
|
description += ("and %d variables per clause (c/v = %.2f)" |
|
|
|
%(args["variablesPerClause"], |
|
|
|
float(args["clauses"]) / float(args["variables"]))) |
|
|
|
|
|
|
|
experimentScope["description"] = description |
|
|
|
|
|
|
|
|
|
|
|
for i in range(args["instances"]): |
|
|
|
print("loop", i) |
|
|
|
|
|
|
|
sat = randomSAT.generateRandomKSAT(args["clauses"], |
|
|
|
args["variables"], |
|
|
|
args["variablesPerClause"]) |
|
|
|
|
|
|
|
instanceId = dbInstances.insert_one(sat.writeJSONLike()).inserted_id |
|
|
|
|
|
|
|
experimentScope["instances"].append(instanceId) |
|
|
|
|
|
|
|
dbExperimentScopes.insert_one(experimentScope) |
|
|
|
|
|
|
|
dbClient.close() |
|
|
|
|
|
|
|
def __getDBClient(dbConfigPath): |
|
|
|
dbConf = scriptUtils.readConfig(dbConfigPath) |
|
|
|
dbConf["CONNECTION"] |
|
|
|
|
|
|
|
return pymongo.MongoClient( |
|
|
|
"mongodb://%s:%s@%s:%s/%s" |
|
|
|
% ( dbConf["CONNECTION"]["user"], |
|
|
|
dbConf["CONNECTION"]["pw"], |
|
|
|
dbConf["CONNECTION"]["url"], |
|
|
|
dbConf["CONNECTION"]["port"], |
|
|
|
dbConf["CONNECTION"]["database"]), |
|
|
|
ssl=True, |
|
|
|
ssl_cert_reqs=ssl.CERT_NONE) |
|
|
|
|
|
|
|
def __parseArguments(): |
|
|
|
parser = scriptUtils.ArgParser() |
|
|
|
|
|
|
|
parser.addArg(alias="instances", shortFlag="i", longFlag="instances", |
|
|
|
help="number of random kSAT instances", type=int, |
|
|
|
ignoreDatabaseConfig=True) |
|
|
|
|
|
|
|
parser.addArg(alias="variables", shortFlag="v", longFlag="variables", |
|
|
|
help="number of variables in the ksat instances", type=int, |
|
|
|
ignoreDatabaseConfig=True) |
|
|
|
|
|
|
|
parser.addArg(alias="clauses", shortFlag="c", longFlag="clauses", |
|
|
|
help="number of clauses in the ksat instances", type=int, |
|
|
|
ignoreDatabaseConfig=True) |
|
|
|
|
|
|
|
parser.addArg(alias="variablesPerClause", shortFlag="vpc", |
|
|
|
longFlag="variables_per_clause", |
|
|
|
help="variables per clause in the kSAT instances", type=int, |
|
|
|
default=3, ignoreDatabaseConfig=True) |
|
|
|
|
|
|
|
parser.addArg(alias="dbConfigPath", shortFlag="d", longFlag="db_config", |
|
|
|
help="path to the database config file", type=str, |
|
|
|
default="database.config", ignoreDatabaseConfig=True) |
|
|
|
|
|
|
|
return parser.parse() |
|
|
|
|
|
|
|
def __initFile(args): |
|
|
|
f = h5py.File(args["fileName"], "w") |
|
|
|
|
|
|
|
__SAT_TYPE__ = np.dtype([('bindings', (np.int32, (args["clauses"], |
|
|
|
args["variablesPerClause"])))]) |
|
|
|
|
|
|
|
instances = f.create_dataset(name="instances", |
|
|
|
shape=(args["instances"],), |
|
|
|
dtype=__SAT_TYPE__) |
|
|
|
|
|
|
|
return f, __SAT_TYPE__ |
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
|
main() |