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
ptidej_solver [2014/03/31 14:46]
yann [Problem Motifs Definitions]
ptidej_solver [2014/03/31 15:19]
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?​direct |}}
 +
   * ''​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)