A rule-based model for Sisyphus-I

The constraints (or rules) below are a step toward a constraint satisfaction oriented (declarative) representation of the problem solving knowledge needed to solve the Sisyphus-I problem. They would thus be a replacement for our procedural approach. The ontology and the data set are the same as for the procedural approach.

However, here are additional declarations needed for representing the constraints.

Description > Goal_or_constraint;   Goal_or_constraint > Goal Constraint;
For the 1st kinds of solutions
  Thing > Value;   Value > Number;  Value(Goal_or_constraint,Value);
For the 2nd kinds of solutions
  Mandatory(Goal_or_constraint); Optional(Goal_or_constraint);






The head of group should rather be placed in a large central office

1st solution [Goal: [Group_head]->(In)->[Large_central_office] ]->(Value)->[Value:10]; [Goal: [Group_head]->(In)->[Large_and_not_central_office] ]->(Value)->[Value:9]; [Goal: [Group_head]->(In)->[Small_central_office] ]->(Value)->[Value:8]; [Goal: [Group_head]->(In)->[Small_and_not_central_office] ]->(Value)->[Value:7]; Example of representation in Formalised English: [A group_head is in a Large_central_office](Value 10). 2nd solution [Constraint: [Group_head]->(In)->[Large_central_office] ]->(Mandatory); Example of representation in Formalised English: [A group_head is in a Large_central_office](Mandatory).

Secretaries should rather share an office near the head of group

1st solution [Goal: [Office]- { <-(In)<-[Secretary: *x]; <-(In)<-[Secretary: *y!=*x]; (->(Near)->[Office]->)*N ->(Near)->[Office]<-(In)<-[Group_head]; } ]->(Value)->[Value:10-N]; Three unusual notations are introduced here: 1) "*y!=*x" meaning that the variables do not refer to the same individual, 2) "(->(Near)->[Office]->)*N" which refers to a path composed of N sequences of the chain "->(Near)->[Office]", 3) "10-N" which subtracts N to 10 so that the value of the goal is maximum when N is 0. [Goal: [Office]- { <-(In)<-[Secretary: *x]; (->(Near)->[Office]->;)*N ->(Near)->[Office]<-(In)<-[Group_head]; } ]->(Value)->[Value:9-N]; This goal has a lower value because the secretary is alone in the office.

A manager should rather be in a small central office near the head of group

1st solution [Goal: [Small_central_office]- { <-(In)<-[Manager: *x]; (->(Near)->[Office]->;)*N ->(Near)->[Office]<-(In)<-[Group_head]; } ]->(Value)->[Value:10-N];

An head of large project should rather be in a single office near the head of group

1st solution [Goal: [Small_office]- { <-(In)<-[Large_project_head: *x]; (->(Near)->[Office]->;)*N ->(Near)->[Office]<-(In)<-[Group_head]; } ]->(Value)->[Value:10-N];

A smoker and a non-smoker should not share an office

1st solution [Goal: [Large_office]- { <-(In)<-[Smoker: *x]; <-(In)<-[Smoker: *y!=*x]; } ]->(Value)->[Value:10]; [Goal: [Large_office]- { <-(In)<-[Non_smoker: *x]; <-(In)<-[Non_smoker: *y!=*x]; } ]->(Value)->[Value:9]; For the sake of simplicity, the types Smoker and Non_smoker are used. Instead, according to our ontology, [Smoker: *x] should be replaced by "[Simple_researcher: *x]<-(Agent)<-[Smoke]" and [Non_smoker: *x] by [Simple_researcher: *x]. 2nd solution [Constraint: [Large_office]- { <-(In)<-[Smoker: *x]; <-(In)<-[Smoker: *y!=*x]; } ]->(Mandatory); [Constraint: [Large_office]- { <-(In)<-[Non_smoker: *x]; <-(In)<-[Non_smoker: *y!=*x]; } ]->(Mandatory); 3rd solution [Goal: [Large_office]- { <-(In)<-[Smoker: *x]; <-(In)<-[Non_smoker: *y!=*x]; } ]->(Value)->[Value:-10];

A hacker and a non-hacker should rather not share an office

1st solution [Goal: [Large_office]- { <-(In)<-[Hacker: *x]; <-(In)<-[Hacker: *y!=*x]; } ]->(Value)->[Value:10]; [Goal: [Large_office]- { <-(In)<-[Non_hacker: *x]; <-(In)<-[Non_hacker: *y!=*x]; } ]->(Value)->[Value:10]; As above, for the sake of simplicity, the types Hacker and Non_hacker are used.

Researchers of a same project should rather not share an office

1st solution [Goal: [Large_office]- { <-(In)<-[Simple_researcher:*x]->(Project)->[Project:*p1]; <-(In)<-[Simple_researcher:*y!=*x]->(Project)->[Project:*p2!=*p1]; } ]->(Value)->[Value:10]; [Goal: [Large_office]- { <-(In)<-[Simple_researcher:*x]->(Project)->[Project:*p1]; <-(In)<-[Simple_researcher:*y!=*x]->(Project)->[Project:*p2==*p1]; } ]->(Value)->[Value:9]; 2nd solution [Constraint: [Large_office]- { <-(In)<-[Simple_researcher:*x]->(Project)->[Project:*p1]; <-(In)<-[Simple_researcher:*y!=*x]->(Project)->[Project:*p2!=*p1]; } ]->(Mandatory);