import java.util.*; import java.io.*; import static choco.Choco.*; import choco.cp.model.CPModel; import choco.cp.solver.CPSolver; import choco.kernel.model.Model; import choco.cp.solver.search.integer.varselector.StaticVarOrder; import choco.cp.solver.search.integer.valiterator.DecreasingDomain; import choco.kernel.solver.Solver; import choco.kernel.model.variables.integer.IntegerExpressionVariable; import choco.kernel.model.variables.integer.IntegerVariable; public class CPBinPack { private int[] data; // the data to be packed private Model model; // a model object, to attach variables and constraints private IntegerVariable inBin[][]; // inBin[i][j] = 1 iff jth number is in ith bin private IntegerVariable inBinT[][]; // transpose of inBin[i][j] private IntegerVariable load[]; // load[i] is sum of the numbers in ith bin private IntegerVariable binUsed[]; // binUsed[i] = 1 iff load[i] > 0 private IntegerVariable totBinsUsed; // total number of bins used private int c; // the capacity of each bin private int n; // number of items to pack private int m; // number of bins you have private String id; // an identification for the problem public CPBinPack(String fname,int numberOfItems,int numberOfBins,int capacity) throws Exception { n = numberOfItems; m = numberOfBins; c = capacity; id = fname; data = new int[n]; model = new CPModel(); inBin = new IntegerVariable[m][n]; inBinT = new IntegerVariable[n][m]; load = new IntegerVariable[m]; binUsed = new IntegerVariable[m]; totBinsUsed = makeIntVar("totBinsUsed",0,m); for (int i=0;i 0 // for (int i=0;i0;i--) for (int j=0;j