Browse Source

added walls to PrismFormulaPrinter

also renamed methods for surrounding cells to adjacent
pull/1/head
sp 11 months ago
parent
commit
48a90f0739
  1. 2
      util/Grid.cpp
  2. 21
      util/PrismFormulaPrinter.cpp
  3. 7
      util/PrismFormulaPrinter.h

2
util/Grid.cpp

@ -158,7 +158,7 @@ void Grid::printToPrism(std::ostream& os, std::vector<Configuration>& configurat
[](const std::map<AgentNameAndPosition::first_type,AgentNameAndPosition::second_type>::value_type &pair){return pair.first;}); [](const std::map<AgentNameAndPosition::first_type,AgentNameAndPosition::second_type>::value_type &pair){return pair.first;});
std::string agentName = agentNames.at(0); std::string agentName = agentNames.at(0);
prism::PrismFormulaPrinter formulas(os, wallRestrictions, boxes, balls, lockedDoors, unlockedDoors, keys, slipperyTiles, lava, goals);
prism::PrismFormulaPrinter formulas(os, wallRestrictions, walls, boxes, balls, lockedDoors, unlockedDoors, keys, slipperyTiles, lava, goals);
prism::PrismModulesPrinter modules(os, modelType, maxBoundaries, boxes, balls, lockedDoors, unlockedDoors, keys, slipperyTiles, agentNameAndPositionMap, configuration, faultyProbability); prism::PrismModulesPrinter modules(os, modelType, maxBoundaries, boxes, balls, lockedDoors, unlockedDoors, keys, slipperyTiles, agentNameAndPositionMap, configuration, faultyProbability);
modules.printModelType(modelType); modules.printModelType(modelType);

21
util/PrismFormulaPrinter.cpp

@ -33,17 +33,18 @@ std::string objectPositionToConjunction(const AgentName &agentName, const std::s
return "x" + agentName + xOffset + "=x" + identifier + "&y" + agentName + yOffset + "=y" + identifier + "&view" + agentName + "=" + std::to_string(viewDirection); return "x" + agentName + xOffset + "=x" + identifier + "&y" + agentName + yOffset + "=y" + identifier + "&view" + agentName + "=" + std::to_string(viewDirection);
} }
std::map<ViewDirection, coordinates> getSurroundingCells(const cell &c) {
std::map<ViewDirection, coordinates> getAdjacentCells(const cell &c) {
return {{1, c.getNorth()}, {2, c.getEast()}, {3, c.getSouth()}, {0, c.getWest()}}; return {{1, c.getNorth()}, {2, c.getEast()}, {3, c.getSouth()}, {0, c.getWest()}};
} }
std::map<ViewDirection, std::pair<int, int>> getRelativeSurroundingCells() {
std::map<ViewDirection, std::pair<int, int>> getRelativeAdjacentCells() {
return { {1, {0,+1}}, {2, {-1,0}}, {3, {0,-1}}, {0, {+1,0}} }; return { {1, {0,+1}}, {2, {-1,0}}, {3, {0,-1}}, {0, {+1,0}} };
} }
namespace prism { namespace prism {
PrismFormulaPrinter::PrismFormulaPrinter(std::ostream &os, const std::map<std::string, cells> &restrictions, const cells &boxes, const cells &balls, const cells &lockedDoors, const cells &unlockedDoors, const cells &keys, const std::map<std::string, cells> &slipperyTiles, const cells &lava, const cells &goals)
: os(os), restrictions(restrictions), boxes(boxes), balls(balls), lockedDoors(lockedDoors), unlockedDoors(unlockedDoors), keys(keys), slipperyTiles(slipperyTiles), lava(lava), goals(goals)
PrismFormulaPrinter::PrismFormulaPrinter(std::ostream &os, const std::map<std::string, cells> &restrictions, const cells &walls, const cells &boxes, const cells &balls, const cells &lockedDoors, const cells &unlockedDoors, const cells &keys, const std::map<std::string, cells> &slipperyTiles, const cells &lava, const cells &goals)
: os(os), restrictions(restrictions), walls(walls), boxes(boxes), balls(balls), lockedDoors(lockedDoors), unlockedDoors(unlockedDoors), keys(keys), slipperyTiles(slipperyTiles), lava(lava), goals(goals)
{ } { }
void PrismFormulaPrinter::print(const AgentName &agentName) { void PrismFormulaPrinter::print(const AgentName &agentName) {
@ -63,7 +64,7 @@ namespace prism {
std::string identifier = capitalize(ball.getColor()) + ball.getType(); std::string identifier = capitalize(ball.getColor()) + ball.getType();
printRelativeRestrictionFormulaWithCondition(agentName, identifier, "!" + identifier + "PickedUp"); printRelativeRestrictionFormulaWithCondition(agentName, identifier, "!" + identifier + "PickedUp");
portableObjects.push_back(agentName + "Carrying" + identifier); portableObjects.push_back(agentName + "Carrying" + identifier);
for(auto const c : getSurroundingCells(ball)) {
for(auto const c : getAdjacentCells(ball)) {
std::cout << ball << std::endl; std::cout << ball << std::endl;
std::cout << "dir:" << c.first << " column" << c.second.first << " row" << c.second.second << std::endl; std::cout << "dir:" << c.first << " column" << c.second.first << " row" << c.second.second << std::endl;
@ -84,14 +85,14 @@ namespace prism {
for(const auto& door : unlockedDoors) { for(const auto& door : unlockedDoors) {
std::string identifier = capitalize(door.getColor()) + door.getType(); std::string identifier = capitalize(door.getColor()) + door.getType();
printRestrictionFormulaWithCondition(agentName, identifier, getSurroundingCells(door), "!" + identifier + "Open");
printIsNextToFormula(agentName, identifier, getSurroundingCells(door));
printRestrictionFormulaWithCondition(agentName, identifier, getAdjacentCells(door), "!" + identifier + "Open");
printIsNextToFormula(agentName, identifier, getAdjacentCells(door));
} }
for(const auto& door : lockedDoors) { for(const auto& door : lockedDoors) {
std::string identifier = capitalize(door.getColor()) + door.getType(); std::string identifier = capitalize(door.getColor()) + door.getType();
printRestrictionFormulaWithCondition(agentName, identifier, getSurroundingCells(door), "!" + identifier + "Open");
printIsNextToFormula(agentName, identifier, getSurroundingCells(door));
printRestrictionFormulaWithCondition(agentName, identifier, getAdjacentCells(door), "!" + identifier + "Open");
printIsNextToFormula(agentName, identifier, getAdjacentCells(door));
} }
if(conditionalMovementRestrictions.size() > 0) { if(conditionalMovementRestrictions.size() > 0) {
@ -162,7 +163,7 @@ namespace prism {
std::string PrismFormulaPrinter::buildDisjunction(const AgentName &agentName, const std::string &reason) { std::string PrismFormulaPrinter::buildDisjunction(const AgentName &agentName, const std::string &reason) {
std::string disjunction = ""; std::string disjunction = "";
bool first = true; bool first = true;
for(auto const [viewDirection, relativePosition] : getRelativeSurroundingCells()) {
for(auto const [viewDirection, relativePosition] : getRelativeAdjacentCells()) {
if(first) first = false; if(first) first = false;
else disjunction += " | "; else disjunction += " | ";
disjunction += "(" + objectPositionToConjunction(agentName, reason, relativePosition, viewDirection) + ")"; disjunction += "(" + objectPositionToConjunction(agentName, reason, relativePosition, viewDirection) + ")";

7
util/PrismFormulaPrinter.h

@ -12,13 +12,13 @@ std::string vectorToDisjunction(const std::vector<std::string> &formulae);
std::string cellToConjunction(const AgentName &agentName, const cell &c); std::string cellToConjunction(const AgentName &agentName, const cell &c);
std::string coordinatesToConjunction(const AgentName &agentName, const coordinates &c, const ViewDirection viewDirection); std::string coordinatesToConjunction(const AgentName &agentName, const coordinates &c, const ViewDirection viewDirection);
std::string objectPositionToConjunction(const AgentName &agentName, const std::string &identifier, const std::pair<int, int> &relativePosition, const ViewDirection viewDirection); std::string objectPositionToConjunction(const AgentName &agentName, const std::string &identifier, const std::pair<int, int> &relativePosition, const ViewDirection viewDirection);
std::map<ViewDirection, coordinates> getSurroundingCells(const cell &c);
std::map<ViewDirection, std::pair<int, int>> getRelativeSurroundingCells();
std::map<ViewDirection, coordinates> getAdjacentCells(const cell &c);
std::map<ViewDirection, std::pair<int, int>> getRelativeAdjacentCells();
namespace prism { namespace prism {
class PrismFormulaPrinter { class PrismFormulaPrinter {
public: public:
PrismFormulaPrinter(std::ostream &os, const std::map<std::string, cells> &restrictions, const cells &boxes, const cells &balls, const cells &lockedDoors, const cells &unlockedDoors, const cells &keys, const std::map<std::string, cells> &slipperyTiles, const cells &lava, const cells &goals);
PrismFormulaPrinter(std::ostream &os, const std::map<std::string, cells> &restrictions, const cells &walls, const cells &boxes, const cells &balls, const cells &lockedDoors, const cells &unlockedDoors, const cells &keys, const std::map<std::string, cells> &slipperyTiles, const cells &lava, const cells &goals);
void print(const AgentName &agentName); void print(const AgentName &agentName);
@ -36,6 +36,7 @@ namespace prism {
std::ostream &os; std::ostream &os;
std::map<std::string, cells> restrictions; std::map<std::string, cells> restrictions;
cells walls;
cells boxes; cells boxes;
cells balls; cells balls;
cells lockedDoors; cells lockedDoors;

Loading…
Cancel
Save