Skip to content
This repository was archived by the owner on May 23, 2022. It is now read-only.

Commit b7cecfe

Browse files
authored
Merge pull request #18 from manleviet/second_version
Second version
2 parents dc4e938 + 1269fba commit b7cecfe

File tree

26 files changed

+7285
-2961
lines changed

26 files changed

+7285
-2961
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,5 @@ buildNumber.properties
1010
# https://github.com/takari/maven-wrapper#usage-without-binary-jar
1111
.mvn/wrapper/maven-wrapper.jar
1212
.DS_Store
13+
/logs.log
14+
/.idea/

.idea/compiler.xml

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/copyright/manleviet.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/misc.xml

Lines changed: 45 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pom.xml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,21 @@
66

77
<groupId>at.tugraz.ist.ase</groupId>
88
<artifactId>choco-kb</artifactId>
9-
<version>1.0.5</version>
9+
<version>1.2</version>
1010
<packaging>jar</packaging>
1111

1212
<properties>
1313
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
1414
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
15-
<maven.compiler.source>16</maven.compiler.source>
16-
<maven.compiler.target>16</maven.compiler.target>
15+
<maven.compiler.source>17</maven.compiler.source>
16+
<maven.compiler.target>17</maven.compiler.target>
1717
</properties>
1818

1919
<dependencies>
2020
<dependency>
21-
<groupId>org.choco-solver</groupId>
22-
<artifactId>choco-solver</artifactId>
23-
<version>4.10.2</version>
21+
<groupId>at.tugraz.ist.ase</groupId>
22+
<artifactId>fm</artifactId>
23+
<version>1.2</version>
2424
</dependency>
2525
</dependencies>
2626

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/*
2+
* ChocoKB: Constraint-based Knowledge Bases for Choco Solver
3+
*
4+
* Copyright (c) 2021-2022
5+
*
6+
* @author: Viet-Man Le (vietman.le@ist.tugraz.at)
7+
*/
8+
9+
package at.tugraz.ist.ase.common;
10+
11+
import at.tugraz.ist.ase.knowledgebases.core.Constraint;
12+
import lombok.NonNull;
13+
import lombok.experimental.UtilityClass;
14+
15+
import java.util.List;
16+
import java.util.Set;
17+
import java.util.stream.Collectors;
18+
19+
@UtilityClass
20+
public final class ConstraintUtils {
21+
22+
public String convertToString(@NonNull Set<Constraint> ac) {
23+
return ac.stream().map(Constraint::toString).collect(Collectors.joining("\n"));
24+
}
25+
26+
public String convertToStringWithMessage(@NonNull List<Set<Constraint>> allDiag, @NonNull String mess) {
27+
StringBuilder sb = new StringBuilder();
28+
int count = 0;
29+
for (Set<Constraint> diag : allDiag) {
30+
count++;
31+
32+
sb.append(mess).append(" ").append(count).append(":\n");
33+
// System.out.println(mess + " " + count + ":");
34+
// sb.append(String.join("\n", diag));
35+
sb.append(convertToString(diag)).append("\n");
36+
// diag.forEach(System.out::println);
37+
}
38+
sb.deleteCharAt(sb.length() - 1);
39+
return sb.toString();
40+
}
41+
42+
public boolean isMinimal(Set<Constraint> diag, List<Set<Constraint>> allDiag) {
43+
return allDiag.stream().noneMatch(diag::containsAll);
44+
}
45+
46+
public boolean containsAll(List<Set<Constraint>> allDiag, Set<Constraint> diag) {
47+
return allDiag.stream().anyMatch(adiag -> adiag.containsAll(diag));
48+
}
49+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/*
2+
* ChocoKB: Constraint-based Knowledge Bases for Choco Solver
3+
*
4+
* Copyright (c) 2021-2022
5+
*
6+
* @author: Viet-Man Le (vietman.le@ist.tugraz.at)
7+
*/
8+
9+
package at.tugraz.ist.ase.knowledgebases.core;
10+
11+
import at.tugraz.ist.ase.common.LoggerUtils;
12+
import lombok.*;
13+
import lombok.extern.slf4j.Slf4j;
14+
import org.chocosolver.solver.variables.BoolVar;
15+
16+
@EqualsAndHashCode(callSuper = true)
17+
@Getter
18+
@Slf4j
19+
public class BoolVariable extends Variable implements Cloneable {
20+
private BoolVar chocoVar;
21+
22+
@Builder
23+
public BoolVariable(@NonNull String name, @NonNull Domain domain, @NonNull BoolVar chocoVar) {
24+
super(name, domain);
25+
this.chocoVar = chocoVar;
26+
27+
log.trace("{}Created BoolVariable [var={}]", LoggerUtils.tab, this);
28+
}
29+
30+
public String getValue() {
31+
return domain.getValue(getChocoValue());
32+
}
33+
34+
public int getChocoValue() {
35+
return chocoVar.getValue();
36+
}
37+
38+
@Override
39+
public BoolVariable clone() {
40+
BoolVariable clone = (BoolVariable) super.clone();
41+
clone.chocoVar = chocoVar;
42+
43+
log.trace("{}Cloned BoolVariable [var={}]", LoggerUtils.tab, clone);
44+
return clone;
45+
}
46+
}
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
/*
2+
* ChocoKB: Constraint-based Knowledge Bases for Choco Solver
3+
*
4+
* Copyright (c) 2021-2022
5+
*
6+
* @author: Viet-Man Le (vietman.le@ist.tugraz.at)
7+
*/
8+
9+
package at.tugraz.ist.ase.knowledgebases.core;
10+
11+
import at.tugraz.ist.ase.common.LoggerUtils;
12+
import lombok.Getter;
13+
import lombok.NonNull;
14+
import lombok.extern.slf4j.Slf4j;
15+
import org.chocosolver.solver.Model;
16+
17+
import java.util.LinkedList;
18+
import java.util.List;
19+
import java.util.Objects;
20+
21+
@Getter
22+
@Slf4j
23+
public class Constraint {
24+
private final String constraint;
25+
private final List<org.chocosolver.solver.constraints.Constraint> chocoConstraints;
26+
private final List<org.chocosolver.solver.constraints.Constraint> negChocoConstraints;
27+
28+
public Constraint(@NonNull String constraint) {
29+
this.constraint = constraint;
30+
chocoConstraints = new LinkedList<>();
31+
negChocoConstraints = new LinkedList<>();
32+
33+
log.trace("{}Created Constraint [cstr={}]", LoggerUtils.tab, constraint);
34+
}
35+
36+
public void addChocoConstraints(Model model, int startIdx, int endIdx, boolean hasNegativeConstraints) {
37+
org.chocosolver.solver.constraints.Constraint[] constraints = model.getCstrs();
38+
39+
if (hasNegativeConstraints) {
40+
endIdx = endIdx - 2;
41+
} else {
42+
endIdx = endIdx - 1;
43+
}
44+
45+
int index = startIdx;
46+
while (index <= endIdx) {
47+
addChocoConstraint(constraints[index]);
48+
if (hasNegativeConstraints) {
49+
addNegChocoConstraint(constraints[index]);
50+
}
51+
index++;
52+
}
53+
54+
addChocoConstraint(constraints[index]);
55+
if (hasNegativeConstraints) {
56+
addNegChocoConstraint(constraints[index + 1]);
57+
}
58+
}
59+
60+
public void addChocoConstraint(@NonNull org.chocosolver.solver.constraints.Constraint constraint) {
61+
chocoConstraints.add(constraint);
62+
63+
log.trace("{}Added a Choco constraint to Constraint [choco_cstr={}, cstr={}]", LoggerUtils.tab, constraint, this);
64+
}
65+
66+
public void addNegChocoConstraint(@NonNull org.chocosolver.solver.constraints.Constraint constraint) {
67+
negChocoConstraints.add(constraint);
68+
69+
log.trace("{}Added a negative Choco constraint to Constraint [choco_cstr={}, cstr={}]", LoggerUtils.tab, constraint, this);
70+
}
71+
72+
public boolean contains(@NonNull org.chocosolver.solver.constraints.Constraint constraint) {
73+
return chocoConstraints.contains(constraint);
74+
}
75+
76+
@Override
77+
public boolean equals(Object o) {
78+
if (this == o) return true;
79+
if (!(o instanceof Constraint that)) return false;
80+
return Objects.equals(constraint, that.constraint);
81+
}
82+
83+
@Override
84+
public int hashCode() {
85+
return Objects.hash(constraint);
86+
}
87+
88+
@Override
89+
public String toString() {
90+
return constraint;
91+
}
92+
}

0 commit comments

Comments
 (0)