use of org.btrplace.scheduler.choco.view.ChocoView in project scheduler by btrplace.
the class DefaultReconfigurationProblem method addContinuousResourceCapacities.
private void addContinuousResourceCapacities() {
TIntArrayList cUse = new TIntArrayList();
List<IntVar> iUse = new ArrayList<>();
for (int j = 0; j < getVMs().size(); j++) {
VMTransition a = vmActions.get(j);
if (a.getDSlice() != null) {
iUse.add(csp.intVar(1));
}
if (a.getCSlice() != null) {
cUse.add(1);
}
}
ChocoView v = getView(Cumulatives.VIEW_ID);
if (v == null) {
throw SchedulerModelingException.missingView(model, Cumulatives.VIEW_ID);
}
((Cumulatives) v).addDim(getNbRunningVMs(), cUse.toArray(), iUse.toArray(new IntVar[iUse.size()]));
}
use of org.btrplace.scheduler.choco.view.ChocoView in project scheduler by btrplace.
the class CRunningCapacity method injectContinuous.
private boolean injectContinuous(ReconfigurationProblem rp) throws SchedulerException {
Model csp = rp.getModel();
// 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);
}
int nbRunning = 0;
for (Node n : rp.getSourceModel().getMapping().getOnlineNodes()) {
nbRunning += rp.getSourceModel().getMapping().getRunningVMs(n).size();
}
int[] cUse = new int[nbRunning];
IntVar[] dUse = new IntVar[rp.getFutureRunningVMs().size()];
Arrays.fill(cUse, 1);
Arrays.fill(dUse, csp.intVar(1));
ChocoView v = rp.getView(AliasedCumulatives.VIEW_ID);
if (v == null) {
throw SchedulerModelingException.missingView(rp.getSourceModel(), Cumulatives.VIEW_ID);
}
((AliasedCumulatives) v).addDim(cstr.getAmount(), cUse, dUse, alias);
return true;
}
use of org.btrplace.scheduler.choco.view.ChocoView in project scheduler by btrplace.
the class DefaultReconfigurationProblem method linkCardinalityWithSlices.
private void linkCardinalityWithSlices() {
Stream<Slice> s = vmActions.stream().map(VMTransition::getDSlice).filter(Objects::nonNull);
IntVar[] ds = s.map(Slice::getHoster).toArray(IntVar[]::new);
int[] usages = new int[ds.length];
Arrays.fill(usages, 1);
ChocoView v = getView(Packing.VIEW_ID);
if (v == null) {
throw SchedulerModelingException.missingView(model, Packing.VIEW_ID);
}
((Packing) v).addDim("vmsOnNodes", vmsCountOnNodes, usages, ds);
}
use of org.btrplace.scheduler.choco.view.ChocoView 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().debug("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.getFutureVMAllocation(rp.getVM(vmId));
dUse.add(rp.fixed(m, "vmAllocation('", rcm.getResourceIdentifier(), "', '", vmId, "'"));
}
}
ChocoView v = rp.getRequiredView(AliasedCumulatives.VIEW_ID);
((AliasedCumulatives) v).addDim(cstr.getAmount(), cUse.toArray(), dUse.toArray(new IntVar[dUse.size()]), alias);
return true;
}
use of org.btrplace.scheduler.choco.view.ChocoView in project scheduler by btrplace.
the class InstanceSolverRunner method makeViews.
private List<ChocoView> makeViews() throws SchedulerException {
List<ChocoView> l = new ArrayList<>();
ChocoMapper mapper = params.getMapper();
origin.getViews().stream().filter(v -> mapper.viewHasMapping(v.getClass())).forEach(v -> l.add(mapper.get(v)));
return l;
}
Aggregations