Skip to content

Commit 963d9a1

Browse files
committed
BinPacking finalized
1 parent de9add4 commit 963d9a1

File tree

7 files changed

+30
-18
lines changed

7 files changed

+30
-18
lines changed

src/main/java/org/xcsp/common/Types.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,8 @@ public static enum TypeChild {
205205
machines,
206206
conditions,
207207
sizes,
208-
capacities,
208+
limits,
209+
loads,
209210
weights,
210211
profits,
211212
balance,

src/main/java/org/xcsp/parser/XParser.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
import static org.xcsp.common.Types.TypeChild.FINAL;
3737
import static org.xcsp.common.Types.TypeChild.arcs;
3838
import static org.xcsp.common.Types.TypeChild.balance;
39-
import static org.xcsp.common.Types.TypeChild.capacities;
4039
import static org.xcsp.common.Types.TypeChild.coeffs;
4140
import static org.xcsp.common.Types.TypeChild.colOccurs;
4241
import static org.xcsp.common.Types.TypeChild.condition;
@@ -50,7 +49,9 @@
5049
import static org.xcsp.common.Types.TypeChild.image;
5150
import static org.xcsp.common.Types.TypeChild.index;
5251
import static org.xcsp.common.Types.TypeChild.lengths;
52+
import static org.xcsp.common.Types.TypeChild.limits;
5353
import static org.xcsp.common.Types.TypeChild.list;
54+
import static org.xcsp.common.Types.TypeChild.loads;
5455
import static org.xcsp.common.Types.TypeChild.machines;
5556
import static org.xcsp.common.Types.TypeChild.mapping;
5657
import static org.xcsp.common.Types.TypeChild.matrix;
@@ -1144,8 +1145,10 @@ private void parseCumulative(Element elt, Element[] sons) {
11441145
private void parseBinPacking(Element elt, Element[] sons) {
11451146
addLeaf(list, parseSequence(sons[0]));
11461147
addLeaf(sizes, parseSequence(sons[1]));
1147-
if (isTag(sons[2], capacities))
1148-
addLeaf(capacities, parseSequence(sons[2]));
1148+
if (isTag(sons[2], limits))
1149+
addLeaf(limits, parseSequence(sons[2]));
1150+
else if (isTag(sons[2], loads))
1151+
addLeaf(loads, parseSequence(sons[2]));
11491152
else if (isTag(sons[2], condition))
11501153
addLeaf(condition, parseCondition(sons[2]));
11511154
else

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -723,12 +723,12 @@ public void buildCtrBinPacking(String id, XVarInteger[] list, int[] sizes, Condi
723723
}
724724

725725
@Override
726-
public void buildCtrBinPacking(String id, XVarInteger[] list, int[] sizes, int[] limits) {
726+
public void buildCtrBinPacking(String id, XVarInteger[] list, int[] sizes, int[] capacities, boolean loads) {
727727
unimplementedCase(id); // for the moment, not accepted for the competition
728728
}
729729

730730
@Override
731-
public void buildCtrBinPacking(String id, XVarInteger[] list, int[] sizes, XVarInteger[] loads) {
731+
public void buildCtrBinPacking(String id, XVarInteger[] list, int[] sizes, XVarInteger[] capacities, boolean loads) {
732732
unimplementedCase(id); // for the moment, not accepted for the competition
733733
}
734734

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1006,14 +1006,16 @@ public void buildCtrBinPacking(String id, XVarInteger[] list, int[] sizes, Condi
10061006
}
10071007

10081008
@Override
1009-
public void buildCtrBinPacking(String id, XVarInteger[] list, int[] sizes, int[] limits) {
1010-
Condition[] conditions = IntStream.of(limits).mapToObj(v -> Condition.buildFrom(TypeConditionOperator.LE, v)).toArray(Condition[]::new);
1009+
public void buildCtrBinPacking(String id, XVarInteger[] list, int[] sizes, int[] capacities, boolean loads) {
1010+
TypeConditionOperator op = loads ? TypeConditionOperator.EQ : TypeConditionOperator.LE;
1011+
Condition[] conditions = IntStream.of(capacities).mapToObj(v -> Condition.buildFrom(op, v)).toArray(Condition[]::new);
10111012
buildCtrBinPacking(id, list, sizes, conditions, 0);
10121013
}
10131014

10141015
@Override
1015-
public void buildCtrBinPacking(String id, XVarInteger[] list, int[] sizes, XVarInteger[] loads) {
1016-
Condition[] conditions = Stream.of(loads).map(v -> Condition.buildFrom(TypeConditionOperator.EQ, v)).toArray(Condition[]::new);
1016+
public void buildCtrBinPacking(String id, XVarInteger[] list, int[] sizes, XVarInteger[] capacities, boolean loads) {
1017+
TypeConditionOperator op = loads ? TypeConditionOperator.EQ : TypeConditionOperator.LE;
1018+
Condition[] conditions = Stream.of(capacities).map(v -> Condition.buildFrom(op, v)).toArray(Condition[]::new);
10171019
buildCtrBinPacking(id, list, sizes, conditions, 0);
10181020
}
10191021

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1817,10 +1817,11 @@ void buildCtrElement(String id, XVarInteger[][] matrix, int startRowIndex, XVarI
18171817

18181818
void buildCtrBinPacking(String id, XVarInteger[] list, int[] sizes, Condition condition);
18191819

1820-
void buildCtrBinPacking(String id, XVarInteger[] list, int[] sizes, int[] limits); // capacities given as limits
1820+
// if loads=true, capacities are loads (operator =), otherwise capacities are limits (operator <=)
18211821

1822-
void buildCtrBinPacking(String id, XVarInteger[] list, int[] sizes, XVarInteger[] loads); // capacities given as
1823-
// loads
1822+
void buildCtrBinPacking(String id, XVarInteger[] list, int[] sizes, int[] capacities, boolean loads);
1823+
1824+
void buildCtrBinPacking(String id, XVarInteger[] list, int[] sizes, XVarInteger[] capacities, boolean loads);
18241825

18251826
void buildCtrBinPacking(String id, XVarInteger[] list, int[] sizes, Condition[] conditions, int startIndex);
18261827

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -649,12 +649,12 @@ default void buildCtrBinPacking(String id, XVarInteger[] list, int[] sizes, Cond
649649
}
650650

651651
@Override
652-
default void buildCtrBinPacking(String id, XVarInteger[] list, int[] sizes, int[] limits) {
652+
default void buildCtrBinPacking(String id, XVarInteger[] list, int[] sizes, int[] capacities, boolean loads) {
653653
unimplementedCase(id);
654654
}
655655

656656
@Override
657-
default void buildCtrBinPacking(String id, XVarInteger[] list, int[] sizes, XVarInteger[] loads) {
657+
default void buildCtrBinPacking(String id, XVarInteger[] list, int[] sizes, XVarInteger[] capacities, boolean loads) {
658658
unimplementedCase(id);
659659
}
660660

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

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -748,11 +748,16 @@ private void binPacking(XCtr c) {
748748
CChild[] childs = c.childs;
749749
XVarInteger[] list = (XVarInteger[]) childs[0].value;
750750
int[] sizes = trIntegers(c.childs[1].value);
751-
if (childs[2].type == TypeChild.capacities) {
751+
if (childs[2].type == TypeChild.limits) {
752752
if (childs[2].value instanceof XVarInteger[])
753-
xc.buildCtrBinPacking(c.id, list, sizes, (XVarInteger[]) childs[2].value);
753+
xc.buildCtrBinPacking(c.id, list, sizes, (XVarInteger[]) childs[2].value, false);
754754
else
755-
xc.buildCtrBinPacking(c.id, list, sizes, trIntegers(childs[2].value));
755+
xc.buildCtrBinPacking(c.id, list, sizes, trIntegers(childs[2].value), false);
756+
} else if (childs[2].type == TypeChild.loads) {
757+
if (childs[2].value instanceof XVarInteger[])
758+
xc.buildCtrBinPacking(c.id, list, sizes, (XVarInteger[]) childs[2].value, true);
759+
else
760+
xc.buildCtrBinPacking(c.id, list, sizes, trIntegers(childs[2].value), true);
756761
} else if (childs[2].type == TypeChild.condition)
757762
xc.buildCtrBinPacking(c.id, list, sizes, (Condition) childs[2].value);
758763
else

0 commit comments

Comments
 (0)