Search in sources :

Example 16 with Model

use of org.chocosolver.solver.Model in project scheduler by btrplace.

the class CResourceCapacity method injectWithSingleNode.

private boolean injectWithSingleNode(CShareableResource rcm, ReconfigurationProblem rp) {
    int amount = cstr.getAmount();
    Model csp = rp.getModel();
    Node n = cstr.getInvolvedNodes().iterator().next();
    int nIdx = rp.getNode(n);
    IntVar v = rcm.getVirtualUsage().get(nIdx);
    csp.post(csp.arithm(v, "<=", amount));
    // Continuous in practice ?
    if (cstr.isContinuous()) {
        if (cstr.isSatisfied(rp.getSourceModel())) {
            try {
                v.updateUpperBound(cstr.getAmount(), Cause.Null);
            } catch (ContradictionException e) {
                rp.getLogger().error("Unable to restrict to up to " + cstr.getAmount() + ", the maximum '" + rcm.getResourceIdentifier() + "' usage on " + n, e);
                return false;
            }
        } else {
            rp.getLogger().error("The constraint '{}' must be already satisfied to provide a continuous restriction", cstr);
            return false;
        }
    }
    return true;
}
Also used : ContradictionException(org.chocosolver.solver.exception.ContradictionException) Node(org.btrplace.model.Node) Model(org.chocosolver.solver.Model) IntVar(org.chocosolver.solver.variables.IntVar)

Example 17 with Model

use of org.chocosolver.solver.Model in project scheduler by btrplace.

the class CRunningCapacity method filterWithSingleNode.

private boolean filterWithSingleNode(ReconfigurationProblem rp) {
    Node n = cstr.getInvolvedNodes().iterator().next();
    IntVar v = rp.getNbRunningVMs().get(rp.getNode(n));
    Model csp = rp.getModel();
    csp.post(csp.arithm(v, "<=", cstr.getAmount()));
    return !cstr.isContinuous() || injectContinuous(rp);
}
Also used : Node(org.btrplace.model.Node) Model(org.chocosolver.solver.Model) IntVar(org.chocosolver.solver.variables.IntVar)

Example 18 with Model

use of org.chocosolver.solver.Model in project scheduler by btrplace.

the class CSequentialVMTransitions method inject.

@Override
public boolean inject(Parameters ps, ReconfigurationProblem rp) throws SchedulerException {
    List<VM> seq = cstr.getInvolvedVMs();
    List<VMTransition> ams = new ArrayList<>();
    for (VM vmId : seq) {
        VMTransition am = rp.getVMAction(vmId);
        // Avoid VMs with no action model or Transition that do not denotes a state transition
        if (am == null || am instanceof StayAwayVM || am instanceof RelocatableVM) {
            continue;
        }
        ams.add(am);
    }
    if (ams.size() > 1) {
        Iterator<VMTransition> ite = ams.iterator();
        VMTransition prev = ite.next();
        Model csp = rp.getModel();
        while (ite.hasNext()) {
            VMTransition cur = ite.next();
            csp.post(csp.arithm(prev.getEnd(), "<=", cur.getStart()));
            prev = cur;
        }
    }
    return true;
}
Also used : StayAwayVM(org.btrplace.scheduler.choco.transition.StayAwayVM) VM(org.btrplace.model.VM) RelocatableVM(org.btrplace.scheduler.choco.transition.RelocatableVM) StayAwayVM(org.btrplace.scheduler.choco.transition.StayAwayVM) VMTransition(org.btrplace.scheduler.choco.transition.VMTransition) Model(org.chocosolver.solver.Model) RelocatableVM(org.btrplace.scheduler.choco.transition.RelocatableVM)

Example 19 with Model

use of org.chocosolver.solver.Model in project scheduler by btrplace.

the class CSpread method precedenceIfOverlap.

/**
 * Establish the precedence constraint {@code c.getEnd() <= d.getStart()} if the two slices may overlap.
 */
private static void precedenceIfOverlap(ReconfigurationProblem rp, Slice d, Slice c) {
    Model csp = rp.getModel();
    // No need to place the constraints if the slices do not have a chance to overlap
    if (!(c.getHoster().isInstantiated() && !d.getHoster().contains(c.getHoster().getValue())) && !(d.getHoster().isInstantiated() && !c.getHoster().contains(d.getHoster().getValue()))) {
        BoolVar eq = csp.boolVar(rp.makeVarLabel(d.getHoster(), "", c.getHoster(), "?"));
        rp.getModel().arithm(d.getHoster(), "=", c.getHoster()).reifyWith(eq);
        org.chocosolver.solver.constraints.Constraint leqCstr = rp.getModel().arithm(c.getEnd(), "<=", d.getStart());
        ChocoUtils.postImplies(rp, eq, leqCstr);
    }
}
Also used : Model(org.chocosolver.solver.Model) BoolVar(org.chocosolver.solver.variables.BoolVar)

Example 20 with Model

use of org.chocosolver.solver.Model in project scheduler by btrplace.

the class CMinMTTRMig method postCostConstraints.

@Override
public void postCostConstraints() {
    // TODO: Delay insertion ?
    if (!costActivated) {
        rp.getLogger().debug("Post the cost-oriented constraints");
        costActivated = true;
        Model s = rp.getModel();
        costConstraints.forEach(s::post);
    }
}
Also used : StartOnLeafNodes(org.btrplace.scheduler.choco.constraint.mttr.StartOnLeafNodes) Parameters(org.btrplace.scheduler.choco.Parameters) Objects(java.util.Objects) Collections(java.util.Collections) Model(org.chocosolver.solver.Model)

Aggregations

Model (org.chocosolver.solver.Model)38 IntVar (org.chocosolver.solver.variables.IntVar)32 Test (org.testng.annotations.Test)20 BoolVar (org.chocosolver.solver.variables.BoolVar)17 Node (org.btrplace.model.Node)7 VM (org.btrplace.model.VM)7 ArrayList (java.util.ArrayList)6 VMTransition (org.btrplace.scheduler.choco.transition.VMTransition)4 TIntArrayList (gnu.trove.list.array.TIntArrayList)3 RelocatableVM (org.btrplace.scheduler.choco.transition.RelocatableVM)3 HashSet (java.util.HashSet)2 SchedulerModelingException (org.btrplace.scheduler.SchedulerModelingException)2 Task (org.chocosolver.solver.variables.Task)2 Collection (java.util.Collection)1 Collections (java.util.Collections)1 List (java.util.List)1 Objects (java.util.Objects)1 Among (org.btrplace.model.constraint.Among)1 SplitAmong (org.btrplace.model.constraint.SplitAmong)1 Parameters (org.btrplace.scheduler.choco.Parameters)1