Motivations Numerous CP modeling languages and platforms have been - - PowerPoint PPT Presentation

motivations
SMART_READER_LITE
LIVE PREVIEW

Motivations Numerous CP modeling languages and platforms have been - - PowerPoint PPT Presentation

On T esting C onstraint P rograms Nadjib LAZAAR* , Arnaud GOTLIEB*, Yahia LEBBAH** *INRIA Rennes Bretagne Atlantique ** Universit d'Oran Es-Senia CP2010 St -Andrews, Scotland 08 september 1 /21 Motivations Numerous CP modeling


slide-1
SLIDE 1

On Testing Constraint

Programs

Nadjib LAZAAR*, Arnaud GOTLIEB*, Yahia LEBBAH**

*INRIA Rennes Bretagne Atlantique ** Université d'Oran Es-Senia

1

CP’2010 St-Andrews, Scotland 08 september

/21

slide-2
SLIDE 2

Motivations

 Numerous CP modeling languages and platforms have been developed

(OPL, SICStus Prolog, ZINC, GECODE, CHOCO…) for solving combinatorial problems that arise in optimization, planning, scheduling…

2 /21

slide-3
SLIDE 3

Motivations

 Numerous CP modeling languages and platforms have been developed

(OPL, SICStus Prolog, ZINC, GECODE, CHOCO…) for solving combinatorial problems that arise in optimization, planning, scheduling…

 CP programs begin to be used in business-critical systems (e.g., combinatorial

auctions)

2 /21

slide-4
SLIDE 4

Motivations

 Numerous CP modeling languages and platforms have been developed

(OPL, SICStus Prolog, ZINC, GECODE, CHOCO…) for solving combinatorial problems that arise in optimization, planning, scheduling…

 CP programs begin to be used in business-critical systems (e.g., combinatorial

auctions)

 Refinement in CP

2 /21

slide-5
SLIDE 5

Motivations

 Numerous CP modeling languages and platforms have been developed

(OPL, SICStus Prolog, ZINC, GECODE, CHOCO…) for solving combinatorial problems that arise in optimization, planning, scheduling…

 CP programs begin to be used in business-critical systems (e.g., combinatorial

auctions)

 Refinement in CP

2

SPEC

/21

slide-6
SLIDE 6

Motivations

 Numerous CP modeling languages and platforms have been developed

(OPL, SICStus Prolog, ZINC, GECODE, CHOCO…) for solving combinatorial problems that arise in optimization, planning, scheduling…

 CP programs begin to be used in business-critical systems (e.g., combinatorial

auctions)

 Refinement in CP

2

SPEC

/21

slide-7
SLIDE 7

Motivations

 Numerous CP modeling languages and platforms have been developed

(OPL, SICStus Prolog, ZINC, GECODE, CHOCO…) for solving combinatorial problems that arise in optimization, planning, scheduling…

 CP programs begin to be used in business-critical systems (e.g., combinatorial

auctions)

 Refinement in CP

2

SPEC

/21

slide-8
SLIDE 8

Motivations

 Numerous CP modeling languages and platforms have been developed

(OPL, SICStus Prolog, ZINC, GECODE, CHOCO…) for solving combinatorial problems that arise in optimization, planning, scheduling…

 CP programs begin to be used in business-critical systems (e.g., combinatorial

auctions)

 Refinement in CP

2

SPEC

/21

slide-9
SLIDE 9

3 /21

Golomb Rulers

slide-10
SLIDE 10

3 /21

Golomb Rulers

slide-11
SLIDE 11

using CP; int m=...; dvar int x[1..m] in 0..m*m; minimize x[m]; subject to { (1) forall (i in 1..m-1) x[i] < x[i+1]; (2) forall (i in 1..m, j in 1..m, k in 1..m, l in 1..m: (i < j, k < l)) x[j] - x[i] != x[l] - x[k]; }

M

Golomb Rulers in Optimization Programming Language

4 /21

slide-12
SLIDE 12

using CP; int m=...; dvar int x[1..m] in 0..m*m; minimize x[m]; subject to { (1) forall (i in 1..m-1) x[i] < x[i+1]; (2) forall (i in 1..m, j in 1..m, k in 1..m, l in 1..m: (i < j, k < l)) x[j] - x[i] != x[l] - x[k]; } using CP; int m=...; tuple indexerTuple {int i; int j;} {indexerTuple} indexes1 = {<i, j> | ordered i,j in 1..m}; {indexerTuple} indexes2 = {<i, j> | ordered i,j in 1..m div 2}; dvar int x[1..m] in 0..m*m; dvar int d[indexes1]; minimize x[m]; subject to { (1) x[1]==0; (2) forall (i in (1)..m-1) x[i] < x[i+1]; (3) forall(ind in indexes1) d[ind] == x[ind.i]-x[ind.j]; (4) x[m] >= (m * (m - 1)) / 2; (5) x[2] <= x[m]-x[m-1]; (6) forall(ind1,ind2,ind3:(ind1.i==ind2.i)&&(ind2.j==ind3.i)&& (ind1.j==ind3.j)&&( ind1.i < ind2.j < ind1.j)) d[ind1]==d[ind2]+d[ind3]; (7) forall(ind1,ind2,ind3,ind4 in indexes2 : (ind1.i==ind2.i)&&(ind1.j==ind3.j)&&(ind2.j==ind4.j) &&(ind3.i==ind4.i)&&(ind1.i<m-1)&&(3<ind1.j<m+1) &&(2<ind2.j<m)&&(1<ind3.i<m-1)&& (ind1.i < ind3.i < ind2.j < ind1.j)) d[ind1]==d[ind2]+d[ind3]-d[ind4]; (8) forall(ind in indexes2, k in 1..m div 2) x[ind.i+1]==x[ind.i]+k => x[ind.j+1] != x[ind.j]+k; }

M P

4 /21

Golomb Rulers in Optimization Programming Language

slide-13
SLIDE 13

using CP; int m=...; dvar int x[1..m] in 0..m*m; minimize x[m]; subject to { (1) forall (i in 1..m-1) x[i] < x[i+1]; (2) forall (i in 1..m, j in 1..m, k in 1..m, l in 1..m: (i < j, k < l)) x[j] - x[i] != x[l] - x[k]; } using CP; int m=...; tuple indexerTuple {int i; int j;} {indexerTuple} indexes1 = {<i, j> | ordered i,j in 1..m}; {indexerTuple} indexes2 = {<i, j> | ordered i,j in 1..m div 2}; dvar int x[1..m] in 0..m*m; dvar int d[indexes1]; minimize x[m]; subject to { (1) x[1]==0; (2) forall (i in (1)..m-1) x[i] < x[i+1]; (3) forall(ind in indexes1) d[ind] == x[ind.i]-x[ind.j]; (4) x[m] >= (m * (m - 1)) / 2; (5) x[2] <= x[m]-x[m-1]; (6) forall(ind1,ind2,ind3:(ind1.i==ind2.i)&&(ind2.j==ind3.i)&& (ind1.j==ind3.j)&&( ind1.i < ind2.j < ind1.j)) d[ind1]==d[ind2]+d[ind3]; (7) forall(ind1,ind2,ind3,ind4 in indexes2 : (ind1.i==ind2.i)&&(ind1.j==ind3.j)&&(ind2.j==ind4.j) &&(ind3.i==ind4.i)&&(ind1.i<m-1)&&(3<ind1.j<m+1) &&(2<ind2.j<m)&&(1<ind3.i<m-1)&& (ind1.i < ind3.i < ind2.j < ind1.j)) d[ind1]==d[ind2]+d[ind3]-d[ind4]; (8) forall(ind in indexes2, k in 1..m div 2) x[ind.i+1]==x[ind.i]+k => x[ind.j+1] != x[ind.j]+k; }

M P

Does P conform to M

4 /21

Golomb Rulers in Optimization Programming Language

slide-14
SLIDE 14

using CP; int m=...; dvar int x[1..m] in 0..m*m; minimize x[m]; subject to { (1) forall (i in 1..m-1) x[i] < x[i+1]; (2) forall (i in 1..m, j in 1..m, k in 1..m, l in 1..m: (i < j, k < l)) x[j] - x[i] != x[l] - x[k]; } using CP; int m=...; tuple indexerTuple {int i; int j;} {indexerTuple} indexes1 = {<i, j> | ordered i,j in 1..m}; {indexerTuple} indexes2 = {<i, j> | ordered i,j in 1..m div 2}; dvar int x[1..m] in 0..m*m; dvar int d[indexes1]; minimize x[m]; subject to { (1) x[1]==0; (2) forall (i in (1)..m-1) x[i] < x[i+1]; (3) forall(ind in indexes1) d[ind] == x[ind.i]-x[ind.j]; (4) x[m] >= (m * (m - 1)) / 2; (5) x[2] <= x[m]-x[m-1]; (6) forall(ind1,ind2,ind3:(ind1.i==ind2.i)&&(ind2.j==ind3.i)&& (ind1.j==ind3.j)&&( ind1.i < ind2.j < ind1.j)) d[ind1]==d[ind2]+d[ind3]; (7) forall(ind1,ind2,ind3,ind4 in indexes2 : (ind1.i==ind2.i)&&(ind1.j==ind3.j)&&(ind2.j==ind4.j) &&(ind3.i==ind4.i)&&(ind1.i<m-1)&&(3<ind1.j<m+1) &&(2<ind2.j<m)&&(1<ind3.i<m-1)&& (ind1.i < ind3.i < ind2.j < ind1.j)) d[ind1]==d[ind2]+d[ind3]-d[ind4]; (8) forall(ind in indexes2, k in 1..m div 2) x[ind.i+1]==x[ind.i]+k => x[ind.j+1] != x[ind.j]+k; }

M P

Does P conform to M

4

m=8 X= [0 1 3 6 10 26 27 28]

/21

Golomb Rulers in Optimization Programming Language

slide-15
SLIDE 15

using CP; int m=...; dvar int x[1..m] in 0..m*m; minimize x[m]; subject to { (1) forall (i in 1..m-1) x[i] < x[i+1]; (2) forall (i in 1..m, j in 1..m, k in 1..m, l in 1..m: (i < j, k < l)) x[j] - x[i] != x[l] - x[k]; } using CP; int m=...; tuple indexerTuple {int i; int j;} {indexerTuple} indexes1 = {<i, j> | ordered i,j in 1..m}; {indexerTuple} indexes2 = {<i, j> | ordered i,j in 1..m div 2}; dvar int x[1..m] in 0..m*m; dvar int d[indexes1]; minimize x[m]; subject to { (1) x[1]==0; (2) forall (i in (1)..m-1) x[i] < x[i+1]; (3) forall(ind in indexes1) d[ind] == x[ind.i]-x[ind.j]; (4) x[m] >= (m * (m - 1)) / 2; (5) x[2] <= x[m]-x[m-1]; (6) forall(ind1,ind2,ind3:(ind1.i==ind2.i)&&(ind2.j==ind3.i)&& (ind1.j==ind3.j)&&( ind1.i < ind2.j < ind1.j)) d[ind1]==d[ind2]+d[ind3]; (7) forall(ind1,ind2,ind3,ind4 in indexes2 : (ind1.i==ind2.i)&&(ind1.j==ind3.j)&&(ind2.j==ind4.j) &&(ind3.i==ind4.i)&&(ind1.i<m-1)&&(3<ind1.j<m+1) &&(2<ind2.j<m)&&(1<ind3.i<m-1)&& (ind1.i < ind3.i < ind2.j < ind1.j)) d[ind1]==d[ind2]+d[ind3]-d[ind4]; (8) forall(ind in indexes2, k in 1..m div 2) x[ind.i+1]==x[ind.i]+k => x[ind.j+1] != x[ind.j]+k; }

M P

Does P conform to M

4

m=8 X= [0 1 3 6 10 26 27 28] 1 1 Fault detected in P !

/21

Golomb Rulers in Optimization Programming Language

slide-16
SLIDE 16

Contributions

  • A first framework for testing constraint programs

Definitions of testing notions Conformity relations:

  • Constraint solving problem
  • Optimization problem
  • A method and a tool, called CPTEST to detect non-

conformities (e.g., X= [0 1 3 6 10 26 27 28] )

  • An experimental validation on two classical benchmarks

(Golomb rulers, car sequencing)

5 /21

slide-17
SLIDE 17

Notations

Model- Oracle

Mx(k)

6 /21

slide-18
SLIDE 18

Notations

Model- Oracle

Mx(k)

CPUT Pz(k)

6 /21

slide-19
SLIDE 19

Notations

Model- Oracle

Mx(k)

CPUT Pz(k) Conformity Relation

6 /21

slide-20
SLIDE 20

Conformity relation in constraint solving problem

 One Solution (conf k

  • ne)

7 /21

slide-21
SLIDE 21

Conformity relation in constraint solving problem

 One Solution (conf k

  • ne)

7

non-conform

/21

M: solutions set of M P: solutions set of P

slide-22
SLIDE 22

Conformity relation in constraint solving problem

 One Solution (conf k

  • ne)

7

non-conform

/21

M: solutions set of M P: solutions set of P

slide-23
SLIDE 23

Conformity relation in constraint solving problem

 One Solution (conf k

  • ne)

7

non-conform

/21

M: solutions set of M P: solutions set of P

slide-24
SLIDE 24

Conformity relation in constraint solving problem

 One Solution (conf k

  • ne)

7

non-conform

/21

M: solutions set of M P: solutions set of P

slide-25
SLIDE 25

Conformity relation in constraint solving problem

 One Solution (conf k

  • ne)

7

conform

/21

M: solutions set of M P: solutions set of P

slide-26
SLIDE 26

Conformity relation in constraint solving problem

 All Solutions (conf k

all)

8 /21

slide-27
SLIDE 27

Conformity relation in optimization problem

9 /21

slide-28
SLIDE 28

Conformity relation in optimization problem

9 /21

slide-29
SLIDE 29

Conformity relation in optimization problem

9 /21

slide-30
SLIDE 30

Conformity relation in optimization problem

9 /21

slide-31
SLIDE 31

Conformity relation in optimization problem

9 /21

slide-32
SLIDE 32

Conformity relation in optimization problem

9 /21

slide-33
SLIDE 33

Conformity relation in optimization problem

10 /21

slide-34
SLIDE 34

Conformity relation in optimization problem

10 /21

slide-35
SLIDE 35

Conformity relation in optimization problem

10

non-conform

/21

M: set of global minima BM: bounds set of M BP: bounds set of P

slide-36
SLIDE 36

Conformity relation in optimization problem

10

non-conform

/21

M: set of global minima BM: bounds set of M BP: bounds set of P

slide-37
SLIDE 37

Conformity relation in optimization problem

10

non-conform

/21

M: set of global minima BM: bounds set of M BP: bounds set of P

slide-38
SLIDE 38

Conformity relation in optimization problem

10

conform

/21

M: set of global minima BM: bounds set of M BP: bounds set of P

slide-39
SLIDE 39

Conformity relation in optimization problem

10 /21

slide-40
SLIDE 40

Conformity relation in optimization problem

10 /21

slide-41
SLIDE 41

Conformity relation in optimization problem

10 /21

slide-42
SLIDE 42

Conformity Relations

Model- Oracle Mx(k) CPUT Px(k)

Conformity Relation

11 /21

slide-43
SLIDE 43

Conformity Relations

Model- Oracle Mx(k) CPUT Px(k)

Conformity Relation

11 /21

slide-44
SLIDE 44

Conformity Relations

Model- Oracle Mx(k) CPUT Px(k)

Conformity Relation

11 /21

slide-45
SLIDE 45

How to find a non-conformity?

The one_negated purpose requires that:

12

One solution:

/21

slide-46
SLIDE 46

How to find a non-conformity?

The one_negated purpose requires that:

12

One solution:

/21

slide-47
SLIDE 47

How to find a non-conformity?

The one_negated purpose requires that:

12

One solution:

/21

slide-48
SLIDE 48

How to find a non-conformity?

The one_negated purpose requires that:

12

One solution:

/21

slide-49
SLIDE 49

How to find a non-conformity?

The one_negated purpose requires that:

12

One solution:

/21

slide-50
SLIDE 50

The one_negated algorithm

13 /21

slide-51
SLIDE 51

The one_negated algorithm

13 /21

Projection

slide-52
SLIDE 52

The one_negated algorithm

13 /21

Projection Constraint negation

slide-53
SLIDE 53

Projection (Local variable problem)

14 /21

dvar int x,y,z; subject to { x-y != x-z; x-y != y-z; x-z != y-z; }

M

dvar int x,y,z; dvar int d[1..3]; subject to { C1: x-y == d[1]; C2: x-z == d[2]; C3: y-z == d[3]; C4: AllDifferent( d ); }

P

Equivalent

slide-54
SLIDE 54

Projection (Local variable problem)

14 /21

dvar int x,y,z; subject to { x-y != x-z; x-y != y-z; x-z != y-z; }

M

dvar int x,y,z; dvar int d[1..3]; subject to { C1: x-y == d[1]; C2: x-z == d[2]; C3: y-z == d[3]; C4: AllDifferent( d ); }

P

Equivalent

The array d is out of the scope of M!!  Projection!!

slide-55
SLIDE 55

Constraint negation

15 /21

slide-56
SLIDE 56

Constraint negation

15 /21

slide-57
SLIDE 57

Constraint negation

15 /21

inverse(all[R](i in R) g[i], all[S](j in S) f[j]); forall(i in S) g[f[i]]==i; forall(j in R) f[g[j]]==j;

slide-58
SLIDE 58

Constraint negation

15 /21

inverse(all[R](i in R) g[i], all[S](j in S) f[j]); forall(i in S) g[f[i]]==i; forall(j in R) f[g[j]]==j;

  • r(i in S)

g[f[i]]!=i;

  • r(j in R)

f[g[j]]!=j;

slide-59
SLIDE 59

The one_negated algorithm

16 /21

slide-60
SLIDE 60

17 /21

slide-61
SLIDE 61

 Manual fault injection

Validation (Golomb Rulers)

18

using CP; int m=...; tuple indexerTuple {int i; int j;} {indexerTuple} indexes1 = {<i, j> | ordered i,j in 1..m}; {indexerTuple} indexes2 = {<i, j> | ordered i,j in 1..m div 2}; dvar int x[1..m] in 0..m*m; dvar int d[indexes1]; minimize x[m]; subject to { (1) x[1]==0; (2) forall (i in (1)..m-1) x[i] < x[i+1]; (3) forall(ind in indexes1) d[ind] == x[ind.i]-x[ind.j]; (4) x[m] >= (m * (m - 1)) / 2; (5) allDifferent(all(ind in indexes1 ) (d[ind])); (6) x[2] <= x[m]-x[m-1]; (7) forall(ind1,ind2,ind3:(ind1.i==ind2.i)&&(ind2.j==ind3.i)&& (ind1.j==ind3.j)&&( ind1.i < ind2.j < ind1.j)) d[ind1]==d[ind2]+d[ind3]; (8) forall(ind1,ind2,ind3,ind4 in indexes2 : (ind1.i==ind2.i)&&(ind1.j==ind3.j)&&(ind2.j==ind4.j) &&(ind3.i==ind4.i)&&(ind1.i<m-1)&&(3<ind1.j<m+1) &&(2<ind2.j<m)&&(1<ind3.i<m-1)&& (ind1.i < ind3.i < ind2.j < ind1.j)) d[ind1]==d[ind2]+d[ind3]-d[ind4]; (9) forall(ind in indexes2, k in 1..m div 2) x[ind.i+1]==x[ind.i]+k => x[ind.j+1] != x[ind.j]+k; }

P

/21

slide-62
SLIDE 62

 Manual fault injection

Validation (Golomb Rulers)

18

using CP; int m=...; tuple indexerTuple {int i; int j;} {indexerTuple} indexes1 = {<i, j> | ordered i,j in 1..m}; {indexerTuple} indexes2 = {<i, j> | ordered i,j in 1..m div 2}; dvar int x[1..m] in 0..m*m; dvar int d[indexes1]; minimize x[m]; subject to { (1) x[1]==0; (2) forall (i in (1)..m-1) x[i] < x[i+1]; (3) forall(ind in indexes1) d[ind] == x[ind.i]-x[ind.j]; (4) x[m] >= (m * (m - 1)) / 2; (5) allDifferent(all(ind in indexes1 ) (d[ind])); (6) x[2] <= x[m]-x[m-1]; (7) forall(ind1,ind2,ind3:(ind1.i==ind2.i)&&(ind2.j==ind3.i)&& (ind1.j==ind3.j)&&( ind1.i < ind2.j < ind1.j)) d[ind1]==d[ind2]+d[ind3]; (8) forall(ind1,ind2,ind3,ind4 in indexes2 : (ind1.i==ind2.i)&&(ind1.j==ind3.j)&&(ind2.j==ind4.j) &&(ind3.i==ind4.i)&&(ind1.i<m-1)&&(3<ind1.j<m+1) &&(2<ind2.j<m)&&(1<ind3.i<m-1)&& (ind1.i < ind3.i < ind2.j < ind1.j)) d[ind1]==d[ind2]+d[ind3]-d[ind4]; (9) forall(ind in indexes2, k in 1..m div 2) x[ind.i+1]==x[ind.i]+k => x[ind.j+1] != x[ind.j]+k; }

P

/21

slide-63
SLIDE 63

 Manual fault injection

Validation (Golomb Rulers)

18

using CP; int m=...; tuple indexerTuple {int i; int j;} {indexerTuple} indexes1 = {<i, j> | ordered i,j in 1..m}; {indexerTuple} indexes2 = {<i, j> | ordered i,j in 1..m div 2}; dvar int x[1..m] in 0..m*m; dvar int d[indexes1]; minimize x[m]; subject to { (1) x[1]==0; (2) forall (i in (1)..m-1) x[i] < x[i+1]; (3) forall(ind in indexes1) d[ind] == x[ind.i]-x[ind.j]; (4) x[m] >= (m * (m - 1)) / 2; (5) allDifferent(all(ind in indexes1 ) (d[ind])); (6) x[2] <= x[m]-x[m-1]; (7) forall(ind1,ind2,ind3:(ind1.i==ind2.i)&&(ind2.j==ind3.i)&& (ind1.j==ind3.j)&&( ind1.i < ind2.j < ind1.j)) d[ind1]==d[ind2]+d[ind3]; (8) forall(ind1,ind2,ind3,ind4 in indexes2 : (ind1.i==ind2.i)&&(ind1.j==ind3.j)&&(ind2.j==ind4.j) &&(ind3.i==ind4.i)&&(ind1.i<m-1)&&(3<ind1.j<m+1) &&(2<ind2.j<m)&&(1<ind3.i<m-1)&& (ind1.i < ind3.i < ind2.j < ind1.j)) d[ind1]==d[ind2]+d[ind3]-d[ind4]; (9) forall(ind in indexes2, k in 1..m div 2) x[ind.i+1]==x[ind.i]+k => x[ind.j+1] != x[ind.j]+k; }

P

/21

cc10: forall(i in m..3*m) Count(all(j in indexes1)d[j],i)==1;

slide-64
SLIDE 64

Validation (Golomb Rulers)

19

Intel Core 2 Duo CPU, 2.39 GHz, 2.00 Go RAM

/21

timeout = 5 400s

slide-65
SLIDE 65

Validation (Golomb Rulers)

19

Intel Core 2 Duo CPU, 2.39 GHz, 2.00 Go RAM

/21

timeout = 5 400s

slide-66
SLIDE 66

Validation (Golomb Rulers)

19

Intel Core 2 Duo CPU, 2.39 GHz, 2.00 Go RAM

/21

timeout = 5 400s

slide-67
SLIDE 67

20

Intel Core 2 Duo CPU, 2.39 GHz, 2.00 Go RAM

Validation (Car Sequencing)

timeout = 5 400s

/21

slide-68
SLIDE 68

20

Intel Core 2 Duo CPU, 2.39 GHz, 2.00 Go RAM

Validation (Car Sequencing)

timeout = 5 400s

/21

slide-69
SLIDE 69

20

Intel Core 2 Duo CPU, 2.39 GHz, 2.00 Go RAM

Validation (Car Sequencing)

timeout = 5 400s

/21

slide-70
SLIDE 70

20

Intel Core 2 Duo CPU, 2.39 GHz, 2.00 Go RAM

Validation (Car Sequencing)

timeout = 5 400s

/21

slide-71
SLIDE 71

Conclusion

  • Experimental validation of our CPTEST framework: non-

conformities automatically and quickly detected !

  • Test process based on a sound and complete algorithm

(one_negated)

  • Need further work on global constraint negation

21 /21

slide-72
SLIDE 72

Conclusion

  • Experimental validation of our CPTEST framework: non-

conformities automatically and quickly detected !

  • Test process based on a sound and complete algorithm

(one_negated)

  • Need further work on global constraint negation
  • Fault localization in constraint programs
  • Black box solver  White box solver (e.g., Gecode)

21 /21

Perspectives

slide-73
SLIDE 73

Conclusion

  • Experimental validation of our CPTEST framework: non-

conformities automatically and quickly detected !

  • Test process based on a sound and complete algorithm

(one_negated)

  • Need further work on global constraint negation
  • Fault localization in constraint programs
  • Black box solver  White box solver (e.g., Gecode)

21 /21

Perspectives

slide-74
SLIDE 74

Existing debugging tools

 Syntax checking

(OPL studio [IBM ILOG]…)

 Host’s language debuggers

(gdb for Gecode, jdb for Choco…)

 Post-mortem trace analyzers

(Codeine for Prolog[Langevine03], Morphine for

Mercury,[Jahier02], ILOG Gentra4CP[Deransart 04], [Jussien96] Jpalm/Jchoco …)

 Trace visualization

(CLPGUI[Fages04],CP-VIZ[Simonis10] …)

slide-75
SLIDE 75

One_negated_constraint purpose

The one_negated purpose requires that:

One solution: All solutions: Bounds: