import static choco.Choco.*; import choco.cp.model.CPModel; import choco.cp.solver.CPSolver; import choco.cp.solver.search.integer.varselector.StaticVarOrder; import choco.cp.solver.search.integer.varselector.MinDomain; import choco.kernel.model.Model; import choco.kernel.solver.Solver; import choco.kernel.model.variables.integer.IntegerVariable; import choco.kernel.solver.variables.integer.IntDomainVar; public class BIBD { public static void main(String[] args) { CPModel model = new CPModel(); int v = Integer.parseInt(args[0]); // # points int b = Integer.parseInt(args[1]); // # blocks int r = Integer.parseInt(args[2]); // every point occurs r times int k = Integer.parseInt(args[3]); // size (arity) of a block int lambda = 1; // every pair of points occurs lambda times IntegerVariable[][] A = new IntegerVariable[v][v]; // // A[i][j] = x <-> the pair of points (i,j) is in block x // NOTE: this forces each pair of points to occur once and once only! // i.e. lambda = 1. // for (int i=0;i block x contains point i // IntegerVariable[][] occurs = new IntegerVariable[v][b]; // // occurs[i][x] = 1 <-> i occurs in block x // for (int x=0;x block[k][i] && block[k][j] // i.e. pair (i,j) \in block k iff block[k][i] is true and block[k][j] is true // /* for (int i=0;i 4 && Boolean.parseBoolean(args[4])) for (int i=0;i