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