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));
}
Aggregations