User Tools

Site Tools


ptidej_solver

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
ptidej_solver [2014/03/31 14:46]
yann [Problem Motifs Definitions]
ptidej_solver [2014/03/31 15:18]
yann [Constraints Definitions]
Line 7: Line 7:
 Because it uses a constraint solver, Ptidej requires each motif to be defined as a constraint satisfaction problem. A simple example of problem follows: Because it uses a constraint solver, Ptidej requires each motif to be defined as a constraint satisfaction problem. A simple example of problem follows:
  
 +<​code>​
 public final class CompositionAndInheritanceTest { public final class CompositionAndInheritanceTest {
- public static final char[] SUPER_ENTITY = "​SuperEntity"​.toCharArray();​ 
- public static final char[] SUB_ENTITY = "​SubEntity"​.toCharArray();​ 
- 
  public static Problem getProblem(final List allEntities) {  public static Problem getProblem(final List allEntities) {
  final Problem pb =  final Problem pb =
Line 19: Line 17:
  
  final Variable subEntity =  final Variable subEntity =
- new Variable(pb, ​CompositionAndInheritanceTest.SUB_ENTITY, true);+ new Variable(pb, ​"​SubEntity"​.toCharArray(), true);
  final Variable superEntity =  final Variable superEntity =
- new Variable(pb, ​CompositionAndInheritanceTest.SUPER_ENTITY, true);+ new Variable(pb, ​"​SuperEntity"​.toCharArray(), true);
  
  pb.addVar(subEntity);​  pb.addVar(subEntity);​
  pb.addVar(superEntity);​  pb.addVar(superEntity);​
  
- final ​InheritancePathConstraint ​c1 = + final ​StrictInheritanceConstraint ​c1 = 
- new ​InheritancePathConstraint+ new ​StrictInheritanceConstraint
- "​SuperEntity ​-|>- ... -|>- SubEntity",​ + "​SuperEntity -|>- SubEntity",​ 
- "​throw new RuntimeException(\"​SuperEntity ​-|>- ... -|>- SubEntity\"​);",​+ "​throw new RuntimeException(\"​SuperEntity -|>- SubEntity\"​);",​
  subEntity,​  subEntity,​
  superEntity,​  superEntity,​
Line 49: Line 47:
  }  }
 } }
 +</​code>​
  
 +In this problem, two roles are defined: that of ''​SubClass''​ and of ''​SuperClass''​. For classes to play the roles of ''​SubClass''​ and ''​SuperClass'',​ the ''​SubClass''​ must inherit from the ''​SuperClass''​ (even if zero, one, or more entities stands between the ''​SubClass''​ and the ''​SuperClass''​ in the inheritance tree) and the ''​SubClass''​ must be composed of instances of the ''​SuperClass''​.
  
 ===== Constraints Definitions ===== ===== Constraints Definitions =====
Line 61: Line 61:
     * ''​int weight'':​ the weight of the constraint in the problem. The sum of the weights of all the constraints in a problem should equal 100;     * ''​int weight'':​ the weight of the constraint in the problem. The sum of the weights of all the constraints in a problem should equal 100;
     * ''​IApproximations approximations'':​ an instance of ''​ptidej.solver.approximation.IApproximations'',​ which returns and ordered array of constraint names, to try one after the other if the previous one cannot be verified;     * ''​IApproximations approximations'':​ an instance of ''​ptidej.solver.approximation.IApproximations'',​ which returns and ordered array of constraint names, to try one after the other if the previous one cannot be verified;
 +
 +{{ :​binaryconstraint.png?​nolink |}}
 +
   * ''​ptidej.solver.constraint.BinaryCounterConstraint'':​ for any binary constraint that count some properties between the two variables, for example a "​distance"​ in terms of number of relationships that must be followed to reach ''​v1''​ from ''​v0'';​   * ''​ptidej.solver.constraint.BinaryCounterConstraint'':​ for any binary constraint that count some properties between the two variables, for example a "​distance"​ in terms of number of relationships that must be followed to reach ''​v1''​ from ''​v0'';​
 +
 +{{ :​binarycounterconstraint.png?​nolink |}}
 +
   * ''​ptidej.solver.constraint.UnaryConstraint'':​ for any unary constraint, i.e., constraint on a single variable to verify a property of an entity, for example if an entity is an interface vs. a class.   * ''​ptidej.solver.constraint.UnaryConstraint'':​ for any unary constraint, i.e., constraint on a single variable to verify a property of an entity, for example if an entity is an interface vs. a class.
 +
 +{{ :​unaryconstraint.png?​nolink |}}
  
 ''​BinaryConstraint''​ has two sub-classes to specialise for inheritance and binary-class relationships. ''​BinaryConstraint''​ has two sub-classes to specialise for inheritance and binary-class relationships.
ptidej_solver.txt · Last modified: 2019/10/06 20:37 (external edit)