Search in sources :

Example 21 with Slice

use of org.btrplace.scheduler.choco.Slice in project scheduler by btrplace.

the class CResourceCapacity method injectContinuous.

private boolean injectContinuous(ReconfigurationProblem rp, CShareableResource rcm) throws SchedulerException {
    // The constraint must be already satisfied
    if (!cstr.isSatisfied(rp.getSourceModel())) {
        rp.getLogger().error("The constraint '{}' must be already satisfied to provide a continuous restriction", cstr);
        return false;
    }
    int[] alias = new int[cstr.getInvolvedNodes().size()];
    int i = 0;
    for (Node n : cstr.getInvolvedNodes()) {
        alias[i++] = rp.getNode(n);
    }
    TIntArrayList cUse = new TIntArrayList();
    List<IntVar> dUse = new ArrayList<>();
    for (VM vmId : rp.getVMs()) {
        VMTransition a = rp.getVMAction(vmId);
        Slice c = a.getCSlice();
        Slice d = a.getDSlice();
        if (c != null) {
            cUse.add(rcm.getSourceResource().getConsumption(vmId));
        }
        if (d != null) {
            int m = rcm.getVMAllocation(rp.getVM(vmId));
            dUse.add(rp.fixed(m, "vmAllocation('", rcm.getResourceIdentifier(), "', '", vmId, "'"));
        }
    }
    ChocoView v = rp.getView(AliasedCumulatives.VIEW_ID);
    if (v == null) {
        throw SchedulerModelingException.missingView(rp.getSourceModel(), AliasedCumulatives.VIEW_ID);
    }
    ((AliasedCumulatives) v).addDim(cstr.getAmount(), cUse.toArray(), dUse.toArray(new IntVar[dUse.size()]), alias);
    return true;
}
Also used : ChocoView(org.btrplace.scheduler.choco.view.ChocoView) Slice(org.btrplace.scheduler.choco.Slice) Node(org.btrplace.model.Node) VM(org.btrplace.model.VM) AliasedCumulatives(org.btrplace.scheduler.choco.view.AliasedCumulatives) TIntArrayList(gnu.trove.list.array.TIntArrayList) ArrayList(java.util.ArrayList) VMTransition(org.btrplace.scheduler.choco.transition.VMTransition) IntVar(org.chocosolver.solver.variables.IntVar) TIntArrayList(gnu.trove.list.array.TIntArrayList)

Example 22 with Slice

use of org.btrplace.scheduler.choco.Slice 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

Slice (org.btrplace.scheduler.choco.Slice)22 VMTransition (org.btrplace.scheduler.choco.transition.VMTransition)17 VM (org.btrplace.model.VM)16 ArrayList (java.util.ArrayList)12 IntVar (org.chocosolver.solver.variables.IntVar)11 Node (org.btrplace.model.Node)8 List (java.util.List)6 TIntArrayList (gnu.trove.list.array.TIntArrayList)5 TObjectIntMap (gnu.trove.map.TObjectIntMap)5 Collections (java.util.Collections)5 HashSet (java.util.HashSet)5 Map (java.util.Map)5 Objects (java.util.Objects)5 Set (java.util.Set)5 Instance (org.btrplace.model.Instance)5 Mapping (org.btrplace.model.Mapping)5 Model (org.btrplace.model.Model)5 ShareableResource (org.btrplace.model.view.ShareableResource)5 SchedulerException (org.btrplace.scheduler.SchedulerException)5 Parameters (org.btrplace.scheduler.choco.Parameters)5