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:43]
yann [Constraints Definitions]
ptidej_solver [2014/03/31 15:19]
yann [Constraints Definitions]
Line 5: Line 5:
 ===== Problem Motifs Definitions ===== ===== Problem Motifs Definitions =====
  
-Because it uses a constraint solver, Ptidej requires each motif to be defined as a constraint satisfaction problem.+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 static Problem getProblem(final List allEntities) { 
 + final Problem pb = 
 + new Problem( 
 + 90, 
 + "​Composition and Strict Inheritance Test",​ 
 + allEntities);​ 
 + 
 + final Variable subEntity = 
 + new Variable(pb,​ "​SubEntity"​.toCharArray(),​ true); 
 + final Variable superEntity = 
 + new Variable(pb,​ "​SuperEntity"​.toCharArray(),​ true); 
 + 
 + pb.addVar(subEntity);​ 
 + pb.addVar(superEntity);​ 
 + 
 + final StrictInheritanceConstraint c1 = 
 + new StrictInheritanceConstraint( 
 + "​SuperEntity -|>- SubEntity",​ 
 + "​throw new RuntimeException(\"​SuperEntity -|>- SubEntity\"​);",​ 
 + subEntity,​ 
 + superEntity,​ 
 + 50, 
 + DefaultInheritanceApproximations.getDefaultApproximations());​ 
 + final ContainerCompositionConstraint c2 = 
 + new ContainerCompositionConstraint( 
 + "​SubEntity <#>​->​ SuperEntity",​ 
 + "​throw new RuntimeException(\"​SubEntity <#>​->​ SuperEntity\"​);",​ 
 + subEntity,​ 
 + superEntity,​ 
 + 100, 
 + DefaultNoApproximations.getDefaultApproximations());​ 
 + 
 + pb.post(c1);​ 
 + pb.post(c2);​ 
 + 
 + return pb; 
 +
 +
 +</​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 17: 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)