@Override
  public void add(ReconfigurationProblem rp) {
    List<DemandingSlice> dSlices = new ArrayList<DemandingSlice>(rp.getDemandingSlices());

    Collections.sort(
        dSlices, new SliceComparator(false, SliceComparator.ResourceType.cpuConsumption));

    int[][] sizes = new int[2][];
    sizes[0] = new int[dSlices.size()];
    sizes[1] = new int[dSlices.size()];

    IntDomainVar[] assigns = new IntDomainVar[dSlices.size()];
    for (int i = 0; i < dSlices.size(); i++) {
      sizes[0][i] = dSlices.get(i).getCPUheight();
      sizes[1][i] = dSlices.get(i).getMemoryheight();
      assigns[i] = dSlices.get(i).hoster();
    }

    Node[] ns = rp.getNodes();
    IntDomainVar[][] capas = new IntDomainVar[2][];
    capas[0] = new IntDomainVar[ns.length];
    capas[1] = new IntDomainVar[ns.length];

    for (int i = 0; i < ns.length; i++) {
      capas[0][i] = rp.getFreeCPU(ns[i]);
      capas[1][i] = rp.getFreeMem(ns[i]);
    }

    pack = new FastMultiBinPacking(rp.getEnvironment(), capas, sizes, assigns);
    rp.post(pack);

    Plan.logger.debug("SatisfyDemandingSlicesHeightsCustomBP branched");
  }