added conflicts and degrees_of_variables to instance db entries
This commit is contained in:
		
							
								
								
									
										1
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							| @@ -6,6 +6,7 @@ | |||||||
| [submodule "contrib/iniParser/inih"] | [submodule "contrib/iniParser/inih"] | ||||||
| 	path = contrib/iniParser/inih | 	path = contrib/iniParser/inih | ||||||
| 	url = https://github.com/benhoyt/inih.git | 	url = https://github.com/benhoyt/inih.git | ||||||
|  |  | ||||||
| [submodule "contrib/mongoc/mongo-c-driver"] | [submodule "contrib/mongoc/mongo-c-driver"] | ||||||
| 	path = contrib/mongoc/mongo-c-driver | 	path = contrib/mongoc/mongo-c-driver | ||||||
| 	url = https://github.com/mongodb/mongo-c-driver.git | 	url = https://github.com/mongodb/mongo-c-driver.git | ||||||
|   | |||||||
| @@ -23,13 +23,52 @@ def __generateExperiment(args, dbContext): | |||||||
|                                            args["variables"], |                                            args["variables"], | ||||||
|                                            args["variablesPerClause"]) |                                            args["variablesPerClause"]) | ||||||
|          |          | ||||||
|         instanceId = dbContext["instances"].insert_one(sat.writeJSONLike()).inserted_id |          | ||||||
|  |         instanceId = dbContext["instances"].insert_one(__packDocument(sat)).inserted_id | ||||||
|          |          | ||||||
|         experimentScope["instances"].append(instanceId) |         experimentScope["instances"].append(instanceId) | ||||||
|  |  | ||||||
|     dbContext["experimentScopes"].insert_one(experimentScope) |     dbContext["experimentScopes"].insert_one(experimentScope) | ||||||
|  |  | ||||||
|  | def __packDocument(instance): | ||||||
|  |     doc = instance.writeJSONLike(); | ||||||
|      |      | ||||||
|  |     doc["degrees_of_variables"] = __packDegreesOfVariables(instance) | ||||||
|  |      | ||||||
|  |     doc["conflicts"] = __packConflicts(instance) | ||||||
|  |      | ||||||
|  |     return doc | ||||||
|  |  | ||||||
|  | def __packDegreesOfVariables(instance): | ||||||
|  |     doc = [] | ||||||
|  |      | ||||||
|  |     for var, degree in instance.getDegreesOfVariables().items(): | ||||||
|  |         doc.append({"var": var, "deg": degree}) | ||||||
|  |      | ||||||
|  |     return doc | ||||||
|  |  | ||||||
|  | def __packConflicts(instance): | ||||||
|  |     doc = [{"var": i + 1, | ||||||
|  |             "clauses": { | ||||||
|  |                 "pos_lit": [], | ||||||
|  |                 "neg_lit": []}} for i in range(instance.getNumberOfVariables())] | ||||||
|  |      | ||||||
|  |     for conflict in instance.getConflicts(): | ||||||
|  |          | ||||||
|  |         for binding in conflict: | ||||||
|  |             clause = binding[0] | ||||||
|  |             lit = binding[1] | ||||||
|  |             varIndex = abs(lit) - 1 | ||||||
|  |              | ||||||
|  |             if lit > 0: | ||||||
|  |                 if clause not in doc[varIndex]["clauses"]["pos_lit"]: | ||||||
|  |                     doc[varIndex]["clauses"]["pos_lit"].append(clause) | ||||||
|  |             else: | ||||||
|  |                 if clause not in doc[varIndex]["clauses"]["neg_lit"]: | ||||||
|  |                     doc[varIndex]["clauses"]["neg_lit"].append(clause) | ||||||
|  |                  | ||||||
|  |      | ||||||
|  |     return doc | ||||||
|  |  | ||||||
| def __prepareExperimentScope(args): | def __prepareExperimentScope(args): | ||||||
|     experimentScope = {} |     experimentScope = {} | ||||||
|   | |||||||
| @@ -41,9 +41,6 @@ int main(int argc, char** argv) | |||||||
| 	{ | 	{ | ||||||
|         satlab::MinisatSolver solver(satlab::types::convert<satlab::KSATinstance>(doc)); |         satlab::MinisatSolver solver(satlab::types::convert<satlab::KSATinstance>(doc)); | ||||||
|          |          | ||||||
|         bool modelFound = solver.solve(); |  | ||||||
|          |  | ||||||
|          |  | ||||||
|         auto result = satlab::convert<bsoncxx::builder::stream::document>( |         auto result = satlab::convert<bsoncxx::builder::stream::document>( | ||||||
|                         solver.getResult() |                         solver.getResult() | ||||||
|                       ); |                       ); | ||||||
|   | |||||||
| @@ -11,30 +11,6 @@ | |||||||
|  |  | ||||||
| namespace satlab | namespace satlab | ||||||
| { | { | ||||||
| /* |  | ||||||
| using BSON2KSATCLAUSE_CONVERTER = Converter<KSATinstance::CLAUSE, |  | ||||||
|                                             bsoncxx::array::element>; |  | ||||||
|                                              |  | ||||||
| template<> |  | ||||||
| class Converter<KSATinstance::CLAUSE, bsoncxx::array::element> |  | ||||||
| { |  | ||||||
| public: |  | ||||||
|     KSATinstance::CLAUSE convert(const bsoncxx::array::element& docView); |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| KSATinstance::CLAUSE |  | ||||||
| BSON2KSATCLAUSE_CONVERTER::convert(const bsoncxx::array::element& docView) |  | ||||||
| { |  | ||||||
|     KSATinstance::CLAUSE clause; |  | ||||||
|      |  | ||||||
|     for(auto lit : static_cast<bsoncxx::array::view>(docView.get_array())) |  | ||||||
|     { |  | ||||||
|         clause.push_back(lit.get_int32()); |  | ||||||
|     } |  | ||||||
|      |  | ||||||
|     return clause; |  | ||||||
| } |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| namespace types | namespace types | ||||||
| { | { | ||||||
|   | |||||||
| @@ -35,34 +35,6 @@ KSATinstance convert(const bsoncxx::document::view& docView) | |||||||
| } | } | ||||||
|  |  | ||||||
| } | } | ||||||
| /* |  | ||||||
| using BSON2KSAT_CONVERTER = Converter<KSATinstance, bsoncxx::document::view>; |  | ||||||
|  |  | ||||||
| template<> |  | ||||||
| class Converter<KSATinstance, bsoncxx::document::view> |  | ||||||
| { |  | ||||||
| public: |  | ||||||
|     KSATinstance convert(const bsoncxx::document::view& docView); |  | ||||||
|      |  | ||||||
| private: |  | ||||||
|     BSON2KSATCLAUSE_CONVERTER clauseConverter; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| KSATinstance BSON2KSAT_CONVERTER::convert(const bsoncxx::document::view& docView) |  | ||||||
| { |  | ||||||
|     KSATinstance ksat; |  | ||||||
|      |  | ||||||
|     bsoncxx::array::view clauses = docView["clauses"].get_array(); |  | ||||||
|      |  | ||||||
|     for(auto clause : clauses) |  | ||||||
|     { |  | ||||||
|         ksat.addClause(clauseConverter.convert(clause)); |  | ||||||
|     } |  | ||||||
|      |  | ||||||
|      |  | ||||||
|     return ksat; |  | ||||||
| } |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -3,14 +3,6 @@ | |||||||
|  |  | ||||||
| namespace satlab | namespace satlab | ||||||
| { | { | ||||||
| /* |  | ||||||
| template<typename TARGET_T, typename SOURCE_T> |  | ||||||
| class Converter |  | ||||||
| { |  | ||||||
| public: |  | ||||||
|     TARGET_T convert(const SOURCE_T& source); |  | ||||||
| }; |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| namespace types | namespace types | ||||||
| { | { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user