|  |  | @ -17,7 +17,7 @@ std::string westUpdate(const AgentName &a)  { return "(x"+a+"'=x"+a+"-1)"; } | 
			
		
	
		
			
				
					|  |  |  | namespace prism { | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |   PrismModulesPrinter::PrismModulesPrinter(std::ostream& os, const ModelType &modelType, const coordinates &maxBoundaries, const cells &boxes, const cells &balls, const cells &lockedDoors, const cells &unlockedDoors, const cells &keys, const std::map<std::string, cells> &slipperyTiles, const AgentNameAndPositionMap &agentNameAndPositionMap, std::vector<Configuration> config, const float probIntended, const float faultyProbability) | 
			
		
	
		
			
				
					|  |  |  |     : os(os), modelType(modelType), maxBoundaries(maxBoundaries), boxes(boxes), balls(balls), lockedDoors(lockedDoors), unlockedDoors(unlockedDoors), keys(keys), slipperyTiles(slipperyTiles), agentNameAndPositionMap(agentNameAndPositionMap), configuration(config), probIntended(probIntended), faultyProbability(faultyProbability), viewDirectionMapping({{0, "East"}, {1, "South"}, {2, "West"}, {3, "North"}}) { | 
			
		
	
		
			
				
					|  |  |  |     : os(os), modelType(modelType), maxBoundaries(maxBoundaries), boxes(boxes), balls(balls), lockedDoors(lockedDoors), unlockedDoors(unlockedDoors), keys(keys), slipperyTiles(slipperyTiles), agentNameAndPositionMap(agentNameAndPositionMap), configuration(config), probIntended(probIntended), faultyProbability(faultyProbability) { | 
			
		
	
		
			
				
					|  |  |  |       numberOfPlayer = agentNameAndPositionMap.size(); | 
			
		
	
		
			
				
					|  |  |  |       size_t index = 0; | 
			
		
	
		
			
				
					|  |  |  |       for(auto begin = agentNameAndPositionMap.begin(); begin != agentNameAndPositionMap.end(); begin++, index++) { | 
			
		
	
	
		
			
				
					|  |  | @ -25,7 +25,7 @@ namespace prism { | 
			
		
	
		
			
				
					|  |  |  |       } | 
			
		
	
		
			
				
					|  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |   std::ostream& PrismModulesPrinter::printModelType(const ModelType &modelType) { | 
			
		
	
		
			
				
					|  |  |  |   void PrismModulesPrinter::printModelType(const ModelType &modelType) { | 
			
		
	
		
			
				
					|  |  |  |     switch(modelType) { | 
			
		
	
		
			
				
					|  |  |  |       case(ModelType::MDP): | 
			
		
	
		
			
				
					|  |  |  |         os << "mdp"; | 
			
		
	
	
		
			
				
					|  |  | @ -35,7 +35,6 @@ namespace prism { | 
			
		
	
		
			
				
					|  |  |  |         break; | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |     os << "\n\n"; | 
			
		
	
		
			
				
					|  |  |  |     return os; | 
			
		
	
		
			
				
					|  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |   std::ostream& PrismModulesPrinter::print() { | 
			
		
	
	
		
			
				
					|  |  | @ -73,68 +72,21 @@ namespace prism { | 
			
		
	
		
			
				
					|  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |   std::ostream& PrismModulesPrinter::printConfiguration(std::ostream& os, const std::vector<Configuration>& configurations) { | 
			
		
	
		
			
				
					|  |  |  |   void PrismModulesPrinter::printConfiguration(const std::vector<Configuration>& configurations) { | 
			
		
	
		
			
				
					|  |  |  |     for (auto& configuration : configurations) { | 
			
		
	
		
			
				
					|  |  |  |       if (configuration.overwrite_ || configuration.type_ == ConfigType::Module) { | 
			
		
	
		
			
				
					|  |  |  |         continue; | 
			
		
	
		
			
				
					|  |  |  |       } | 
			
		
	
		
			
				
					|  |  |  |       os << configuration.expression_ << std::endl; | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |     return os; | 
			
		
	
		
			
				
					|  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |   std::ostream& PrismModulesPrinter::printConstants(std::ostream &os, const std::vector<std::string> &constants) { | 
			
		
	
		
			
				
					|  |  |  |   void PrismModulesPrinter::printConstants(const std::vector<std::string> &constants) { | 
			
		
	
		
			
				
					|  |  |  |     for (auto& constant : constants) { | 
			
		
	
		
			
				
					|  |  |  |       os << constant << std::endl; | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |     return os; | 
			
		
	
		
			
				
					|  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |   std::ostream& PrismModulesPrinter::printInitStruct(std::ostream &os, const AgentNameAndPositionMap &agents, const KeyNameAndPositionMap &keys, const cells &lockedDoors, const cells &unlockedDoors, prism::ModelType modelType) { | 
			
		
	
		
			
				
					|  |  |  |     /*
 | 
			
		
	
		
			
				
					|  |  |  |     os << "init\n"; | 
			
		
	
		
			
				
					|  |  |  |     os << "\t"; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     bool first = true; | 
			
		
	
		
			
				
					|  |  |  |     for (auto const& agent : agents) { | 
			
		
	
		
			
				
					|  |  |  |       if (first) first = false; | 
			
		
	
		
			
				
					|  |  |  |       else os << " & "; | 
			
		
	
		
			
				
					|  |  |  |       os << "(!" << agent.first << "IsInGoal & !" << agent.first << "IsInLava & !" << agent.first << "Done & !" << agent.first << "IsOnWall & "; | 
			
		
	
		
			
				
					|  |  |  |       os << "x" << agent.first << "=" << agent.second.second << " & y" << agent.first << "=" << agent.second.first << ")"; | 
			
		
	
		
			
				
					|  |  |  |       os << " & !" << agent.first << "_is_carrying_object"; | 
			
		
	
		
			
				
					|  |  |  |         // os << " & ( !AgentIsOnSlippery ) ";
 | 
			
		
	
		
			
				
					|  |  |  |       } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |       for (auto const& key : keys) { | 
			
		
	
		
			
				
					|  |  |  |          os << " & ( !" << agent.first << "_has_" << key.first << "_key )"; | 
			
		
	
		
			
				
					|  |  |  |       } | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     for (auto const& key : keys) { | 
			
		
	
		
			
				
					|  |  |  |       os << " & ( xKey" << key.first << "="<< key.second.second<< ")"; | 
			
		
	
		
			
				
					|  |  |  |       os << " & ( yKey" << key.first << "=" << key.second.first << ")"; | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     for (auto const& locked : lockedDoors) { | 
			
		
	
		
			
				
					|  |  |  |       os << " & (Door" << locked.getColor() << "locked & !Door" << locked.getColor() << "open)"; | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     for (auto const& unlocked : unlockedDoors) { | 
			
		
	
		
			
				
					|  |  |  |       os << " & (!Door" << unlocked.getColor() << "locked & !Door" << unlocked.getColor() << "open)"; | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     if (modelType == ModelType::SMG) { | 
			
		
	
		
			
				
					|  |  |  |       os << " & move=0"; | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     os << "\nendinit\n\n"; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     */ | 
			
		
	
		
			
				
					|  |  |  |     return os; | 
			
		
	
		
			
				
					|  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |   void PrismModulesPrinter::printPortableObjectModule(const cell &object) { | 
			
		
	
		
			
				
					|  |  |  |     std::string identifier = capitalize(object.getColor()) + object.getType(); | 
			
		
	
		
			
				
					|  |  |  |     os << "\nmodule " << identifier << std::endl; | 
			
		
	
	
		
			
				
					|  |  | @ -506,7 +458,7 @@ namespace prism { | 
			
		
	
		
			
				
					|  |  |  |     os << "endmodule\n\n"; | 
			
		
	
		
			
				
					|  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |   std::ostream& PrismModulesPrinter::printConfiguredActions(std::ostream &os, const AgentName &agentName) { | 
			
		
	
		
			
				
					|  |  |  |   void PrismModulesPrinter::printConfiguredActions(const AgentName &agentName) { | 
			
		
	
		
			
				
					|  |  |  |     for (auto& config : configuration) { | 
			
		
	
		
			
				
					|  |  |  |       if (config.type_ == ConfigType::Module && !config.overwrite_ && agentName == config.module_) { | 
			
		
	
		
			
				
					|  |  |  |         os << config.expression_ ; | 
			
		
	
	
		
			
				
					|  |  | 
 |