Search in sources :

Example 1 with DisjointMultiple

use of org.btrplace.scheduler.choco.extensions.DisjointMultiple in project scheduler by btrplace.

the class CSplit method inject.

@Override
public boolean inject(Parameters ps, ReconfigurationProblem rp) throws SchedulerException {
    List<List<IntVar>> groups = new ArrayList<>();
    List<List<VM>> vmGroups = new ArrayList<>();
    for (Collection<VM> grp : cstr.getSets()) {
        List<IntVar> l = new ArrayList<>();
        List<VM> vl = new ArrayList<>();
        for (VM vm : grp) {
            if (rp.getFutureRunningVMs().contains(vm)) {
                Slice s = rp.getVMAction(vm).getDSlice();
                l.add(s.getHoster());
                vl.add(vm);
            }
        }
        if (!l.isEmpty()) {
            groups.add(l);
            vmGroups.add(vl);
        }
    }
    Model csp = rp.getModel();
    int nbNodes = rp.getNodes().size();
    IntVar[][] vars = new IntVar[groups.size()][];
    for (int i = 0; i < groups.size(); i++) {
        vars[i] = groups.get(i).toArray(new IntVar[groups.get(i).size()]);
    }
    csp.post(new DisjointMultiple(vars, nbNodes));
    return !(cstr.isContinuous() && !injectContinuous(rp, vmGroups));
}
Also used : TIntArrayList(gnu.trove.list.array.TIntArrayList) ArrayList(java.util.ArrayList) IntVar(org.chocosolver.solver.variables.IntVar) Slice(org.btrplace.scheduler.choco.Slice) VM(org.btrplace.model.VM) Model(org.chocosolver.solver.Model) TIntArrayList(gnu.trove.list.array.TIntArrayList) ArrayList(java.util.ArrayList) List(java.util.List) DisjointMultiple(org.btrplace.scheduler.choco.extensions.DisjointMultiple)

Aggregations

TIntArrayList (gnu.trove.list.array.TIntArrayList)1 ArrayList (java.util.ArrayList)1 List (java.util.List)1 VM (org.btrplace.model.VM)1 Slice (org.btrplace.scheduler.choco.Slice)1 DisjointMultiple (org.btrplace.scheduler.choco.extensions.DisjointMultiple)1 Model (org.chocosolver.solver.Model)1 IntVar (org.chocosolver.solver.variables.IntVar)1