Skip to content

Commit ae239e9

Browse files
committed
Modifications of the signature of some methods concerning the constraint Element
1 parent bb00a7a commit ae239e9

File tree

7 files changed

+693
-978
lines changed

7 files changed

+693
-978
lines changed

src/main/java/org/xcsp/modeler/api/ProblemAPI.java

Lines changed: 668 additions & 934 deletions
Large diffs are not rendered by default.

src/main/java/org/xcsp/modeler/definitions/ICtr.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -449,11 +449,11 @@ default DefXCSP defXCSP() {
449449
}
450450

451451
public interface ICtrElement extends ICtr {
452-
static ICtrElement buildFrom(IVar[] scope, String list, Integer startIndex, Object index, TypeRank rank, Object value) {
452+
static ICtrElement buildFrom(IVar[] scope, String list, Integer startIndex, Object index, TypeRank rank, Condition condition) {
453453
return new ICtrElement() {
454454
@Override
455455
public Map<String, Object> mapXCSP() {
456-
return map(SCOPE, scope, LIST, list, START_INDEX, startIndex, INDEX, index, RANK, rank, VALUE, value);
456+
return map(SCOPE, scope, LIST, list, START_INDEX, startIndex, INDEX, index, RANK, rank, CONDITION, condition);
457457
}
458458
};
459459
}
@@ -469,7 +469,7 @@ default DefXCSP defXCSP() {
469469
def.add(INDEX);
470470
else
471471
def.addSon(INDEX, def.map.get(INDEX), RANK, ((TypeRank) def.map.get(RANK)).name().toLowerCase());
472-
return def.add(VALUE);
472+
return def.add(CONDITION);
473473
}
474474
}
475475

src/main/java/org/xcsp/modeler/implementation/ProblemIMP.java

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -861,19 +861,13 @@ public final CtrAlone extensionDisjunction(List<XNodeParent<IVar>> trees) {
861861
// ***** Constraint element
862862
// ************************************************************************
863863

864-
public abstract CtrEntity element(Var[] list, int value);
864+
public abstract CtrEntity element(Var[] list, Condition condition);
865865

866-
public abstract CtrEntity element(Var[] list, Var value);
866+
public abstract CtrEntity element(Var[] list, int startIndex, Var index, TypeRank rank, Condition condition);
867867

868-
public abstract CtrEntity element(Var[] list, int startIndex, Var index, TypeRank rank, int value);
868+
public abstract CtrEntity element(int[] list, int startIndex, Var index, TypeRank rank, Condition condition);
869869

870-
public abstract CtrEntity element(Var[] list, int startIndex, Var index, TypeRank rank, Var value);
871-
872-
public abstract CtrEntity element(int[] list, int startIndex, Var index, TypeRank rank, Var value);
873-
874-
public abstract CtrEntity element(int[][] matrix, int startRowIndex, Var rowIndex, int startColIndex, Var colIndex, Var value);
875-
876-
public abstract CtrEntity element(Var[][] matrix, int startRowIndex, Var rowIndex, int startColIndex, Var colIndex, int value);
870+
public abstract CtrEntity element(int[][] matrix, int startRowIndex, Var rowIndex, int startColIndex, Var colIndex, Condition condition);
877871

878872
// ************************************************************************
879873
// ***** Constraint channel

src/main/java/org/xcsp/modeler/implementation/ProblemIMP3.java

Lines changed: 9 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -509,40 +509,24 @@ public CtrEntity minimum(XNode<IVar>[] trees, Condition condition) {
509509
// ************************************************************************
510510

511511
@Override
512-
public CtrEntity element(Var[] list, int value) {
513-
return post(ICtrElement.buildFrom(list, varEntities.compact(list), null, null, null, value));
512+
public CtrEntity element(Var[] list, Condition condition) {
513+
return post(ICtrElement.buildFrom(list, varEntities.compact(list), null, null, null, condition));
514514
}
515515

516516
@Override
517-
public CtrEntity element(Var[] list, Var value) {
518-
return post(ICtrElement.buildFrom(scope(list, value), varEntities.compact(list), null, null, null, value));
517+
public CtrEntity element(Var[] list, int startIndex, Var index, TypeRank rank, Condition condition) {
518+
return post(ICtrElement.buildFrom(scope(list, index), varEntities.compactOrdered(list), startIndex, index, rank, condition));
519519
}
520520

521521
@Override
522-
public CtrEntity element(Var[] list, int startIndex, Var index, TypeRank rank, int value) {
523-
return post(ICtrElement.buildFrom(scope(list, index), varEntities.compactOrdered(list), startIndex, index, rank, value));
522+
public CtrEntity element(int[] list, int startIndex, Var index, TypeRank rank, Condition condition) {
523+
return post(ICtrElement.buildFrom(scope(index, condition), Utilities.join(list), startIndex, index, rank, condition));
524524
}
525525

526526
@Override
527-
public CtrEntity element(Var[] list, int startIndex, Var index, TypeRank rank, Var value) {
528-
return post(ICtrElement.buildFrom(scope(list, index, value), varEntities.compactOrdered(list), startIndex, index, rank, value));
529-
}
530-
531-
@Override
532-
public CtrEntity element(int[] list, int startIndex, Var index, TypeRank rank, Var value) {
533-
return post(ICtrElement.buildFrom(scope(index, value), Utilities.join(list), startIndex, index, rank, value));
534-
}
535-
536-
@Override
537-
public CtrEntity element(int[][] matrix, int startRowIndex, Var rowIndex, int startColIndex, Var colIndex, Var value) {
538-
return post(ICtrElementMatrix.buildFrom(vars(rowIndex, colIndex, value), ICtrExtension.tableAsString(matrix), startRowIndex, rowIndex, startColIndex,
539-
colIndex, value));
540-
}
541-
542-
@Override
543-
public CtrEntity element(Var[][] matrix, int startRowIndex, Var rowIndex, int startColIndex, Var colIndex, int value) {
544-
return post(ICtrElementMatrix.buildFrom(vars(matrix, rowIndex, colIndex), varEntities.compactMatrix(matrix), startRowIndex, rowIndex, startColIndex,
545-
colIndex, value));
527+
public CtrEntity element(int[][] matrix, int startRowIndex, Var rowIndex, int startColIndex, Var colIndex, Condition condition) {
528+
return post(ICtrElementMatrix.buildFrom(vars(rowIndex, colIndex, condition), ICtrExtension.tableAsString(matrix), startRowIndex, rowIndex,
529+
startColIndex, colIndex, condition));
546530
}
547531

548532
// ************************************************************************

src/main/java/org/xcsp/modeler/problems/Warehouse.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ public void model() {
2626
Var[] open = array("open", size(nWarehouses), dom(0, 1), "open[i] is 1 if the ith warehouse is open");
2727

2828
forall(range(nWarehouses), i -> atMost(sw, takingValue(i), warehouseCapacities[i])).note("Capacities of warehouses must not be exceeded.");
29-
forall(range(nStores), i -> element(open, at(sw[i]), takingValue(1))).note("The warehouse supplier of the ith store must be open.");
30-
forall(range(nStores), i -> element(storeSupplyCosts[i], at(sw[i]), takingValue(sc[i]))).note("Computing the cost of supplying the ith store.");
29+
forall(range(nStores), i -> element(open, at(sw[i]), condition(EQ, 1))).note("The warehouse supplier of the ith store must be open.");
30+
forall(range(nStores), i -> element(storeSupplyCosts[i], at(sw[i]), condition(EQ, sc[i]))).note("Computing the cost of supplying the ith store.");
3131

3232
int[] coeffs = vals(repeat(1, nStores), repeat(fixedCost, nWarehouses));
3333
minimize(SUM, vars(sc, open), weightedBy(coeffs)).note("minimizing the overall cost");

src/main/java/org/xcsp/parser/callbacks/SolutionChecker.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -732,7 +732,7 @@ public void buildCtrElement(String id, XVarInteger[] list, Condition condition)
732732
controlConstraint(IntStream.of(solution.intValuesOf(list)).anyMatch(v -> evaluateCondition(v, condition)));
733733
}
734734

735-
private void controlElement2(String id, int[] list, int startIndex, XVarInteger index, TypeRank rank, Condition condition) {
735+
private void controlElement(String id, int[] list, int startIndex, XVarInteger index, TypeRank rank, Condition condition) {
736736
int i = solution.intValueOf(index) - startIndex;
737737
checkCondition(list[i], condition);
738738
controlConstraint(rank != TypeRank.FIRST || !IntStream.range(0, i - 1).anyMatch(j -> evaluateCondition(list[j], condition)));
@@ -741,12 +741,12 @@ private void controlElement2(String id, int[] list, int startIndex, XVarInteger
741741

742742
@Override
743743
public void buildCtrElement(String id, XVarInteger[] list, int startIndex, XVarInteger index, TypeRank rank, Condition condition) {
744-
controlElement2(id, solution.intValuesOf(list), startIndex, index, rank, condition);
744+
controlElement(id, solution.intValuesOf(list), startIndex, index, rank, condition);
745745
}
746746

747747
@Override
748748
public void buildCtrElement(String id, int[] list, int startIndex, XVarInteger index, TypeRank rank, Condition condition) {
749-
controlElement2(id, list, startIndex, index, rank, condition);
749+
controlElement(id, list, startIndex, index, rank, condition);
750750
}
751751

752752
@Override

src/main/java/org/xcsp/parser/loaders/CtrLoaderInteger.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,10 @@ else if (c.childs[1].value instanceof XVarInteger[])
420420
// mix between variables and nodes
421421
XNode<XVarInteger>[] trees = Stream.of((Object[]) c.childs[0].value)
422422
.map(obj -> obj instanceof XVarInteger ? new XNodeLeaf<>(TypeExpr.VAR, obj) : (XNode) obj).toArray(XNode[]::new);
423-
xc.buildCtrSum(c.id, trees, trIntegers(c.childs[1].value), condition); // System.out.println(o);
423+
if (c.childs.length == 2)
424+
xc.buildCtrSum(c.id, trees, condition); // System.out.println(o);
425+
else
426+
xc.buildCtrSum(c.id, trees, trIntegers(c.childs[1].value), condition);
424427
}
425428
}
426429

0 commit comments

Comments
 (0)