Skip to content

Commit c03d342

Browse files
committed
added minimalDnfCover config flag in AdvancedSimplifierConfig
1 parent b783c19 commit c03d342

File tree

4 files changed

+36
-11
lines changed

4 files changed

+36
-11
lines changed

CHANGELOG.md

+6
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@
22

33
LogicNG uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
44

5+
## [2.6.0] - 2024-08-02
6+
7+
### Added
8+
9+
- Added configuration flag `minimalDnfCover` in `AdvancedSimplifierConfig` to set whether the step for computing the minimal DNF cover should be performed. Default is `true`.
10+
511
## [2.5.1] - 2024-07-31
612

713
### Changed

src/main/java/org/logicng/transformations/simplification/AdvancedSimplifier.java

+9-7
Original file line numberDiff line numberDiff line change
@@ -135,16 +135,18 @@ public Formula apply(final Formula formula, final boolean cache) {
135135
return config.returnIntermediateResult ? formula : null;
136136
}
137137
if (!backbone.isSat()) {
138-
return f.falsum();
138+
return f.falsum();
139139
}
140140
backboneLiterals.addAll(backbone.getCompleteBackbone());
141141
simplified = formula.restrict(new Assignment(backboneLiterals));
142142
}
143-
final Formula simplifyMinDnf = computeMinDnf(f, simplified, config);
144-
if (simplifyMinDnf == null) {
145-
return config.returnIntermediateResult ? addLiterals(simplified, backboneLiterals) : null;
143+
if (config.minimalDnfCover) {
144+
final Formula simplifyMinDnf = computeMinDnf(f, simplified, config);
145+
if (simplifyMinDnf == null) {
146+
return config.returnIntermediateResult ? addLiterals(simplified, backboneLiterals) : null;
147+
}
148+
simplified = simplifyWithRating(simplified, simplifyMinDnf, config);
146149
}
147-
simplified = simplifyWithRating(simplified, simplifyMinDnf, config);
148150
if (config.factorOut) {
149151
final Formula factoredOut = simplified.transform(new FactorOutSimplifier(config.ratingFunction));
150152
simplified = simplifyWithRating(simplified, factoredOut, config);
@@ -164,13 +166,13 @@ private static Formula addLiterals(final Formula formula, final SortedSet<Litera
164166

165167
private Formula computeMinDnf(final FormulaFactory f, final Formula simplified, final AdvancedSimplifierConfig config) {
166168
final PrimeResult primeResult =
167-
PrimeCompiler.getWithMinimization().compute(simplified, PrimeResult.CoverageType.IMPLICANTS_COMPLETE, config.optimizationConfig);
169+
PrimeCompiler.getWithMinimization().compute(simplified, PrimeResult.CoverageType.IMPLICANTS_COMPLETE, config.optimizationConfig);
168170
if (primeResult == null || config.optimizationConfig.aborted()) {
169171
return null;
170172
}
171173
final List<SortedSet<Literal>> primeImplicants = primeResult.getPrimeImplicants();
172174
final List<Formula> minimizedPIs = SmusComputation.computeSmusForFormulas(negateAllLiterals(primeImplicants, f),
173-
Collections.singletonList(simplified), f, config.optimizationConfig);
175+
Collections.singletonList(simplified), f, config.optimizationConfig);
174176
if (minimizedPIs == null || config.optimizationConfig.aborted()) {
175177
return null;
176178
}

src/main/java/org/logicng/transformations/simplification/AdvancedSimplifierConfig.java

+15
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
public class AdvancedSimplifierConfig extends Configuration {
4343

4444
boolean restrictBackbone;
45+
boolean minimalDnfCover;
4546
boolean factorOut;
4647
boolean simplifyNegations;
4748
boolean returnIntermediateResult;
@@ -52,6 +53,7 @@ public class AdvancedSimplifierConfig extends Configuration {
5253
public String toString() {
5354
return "AdvancedSimplifierConfig{" +
5455
"restrictBackbone=" + this.restrictBackbone +
56+
", minimalDnfCover=" + this.minimalDnfCover +
5557
", factorOut=" + this.factorOut +
5658
", simplifyNegations=" + this.simplifyNegations +
5759
", returnIntermediateResult=" + this.returnIntermediateResult +
@@ -67,6 +69,7 @@ public String toString() {
6769
private AdvancedSimplifierConfig(final Builder builder) {
6870
super(ConfigurationType.ADVANCED_SIMPLIFIER);
6971
this.restrictBackbone = builder.restrictBackbone;
72+
this.minimalDnfCover = builder.minimalDnfCover;
7073
this.factorOut = builder.factorOut;
7174
this.simplifyNegations = builder.simplifyNegations;
7275
this.returnIntermediateResult = builder.returnIntermediateResult;
@@ -88,6 +91,7 @@ public static Builder builder() {
8891
public static class Builder {
8992

9093
boolean restrictBackbone = true;
94+
boolean minimalDnfCover = true;
9195
boolean factorOut = true;
9296
boolean simplifyNegations = true;
9397
boolean returnIntermediateResult = false;
@@ -109,6 +113,17 @@ public Builder restrictBackbone(final boolean restrictBackbone) {
109113
return this;
110114
}
111115

116+
/**
117+
* Sets the flag for whether a minimal DNF cover should be computed. The
118+
* default is 'true'.
119+
* @param minimalDnfCover flag for the minimal DNF cover computation
120+
* @return the current builder
121+
*/
122+
public Builder minimalDnfCover(final boolean minimalDnfCover) {
123+
this.minimalDnfCover = minimalDnfCover;
124+
return this;
125+
}
126+
112127
/**
113128
* Sets the flag for whether the formula should be factorized. The
114129
* default is 'true'.

src/test/java/org/logicng/transformations/simplification/AdvancedSimplifierTest.java

+6-4
Original file line numberDiff line numberDiff line change
@@ -191,11 +191,13 @@ public void testAdvancedSimplifierConfig() {
191191
final FormulaFactory f = new FormulaFactory();
192192
final List<AdvancedSimplifierConfig> configs = Arrays.asList(
193193
AdvancedSimplifierConfig.builder().build(),
194-
AdvancedSimplifierConfig.builder().restrictBackbone(false).factorOut(false).simplifyNegations(false).build(),
194+
AdvancedSimplifierConfig.builder().restrictBackbone(false).minimalDnfCover(false).factorOut(false).simplifyNegations(false).build(),
195195
AdvancedSimplifierConfig.builder().factorOut(false).simplifyNegations(false).build(),
196196
AdvancedSimplifierConfig.builder().restrictBackbone(false).simplifyNegations(false).build(),
197+
AdvancedSimplifierConfig.builder().restrictBackbone(false).minimalDnfCover(false).build(),
197198
AdvancedSimplifierConfig.builder().restrictBackbone(false).factorOut(false).build(),
198199
AdvancedSimplifierConfig.builder().restrictBackbone(false).build(),
200+
AdvancedSimplifierConfig.builder().minimalDnfCover(false).build(),
199201
AdvancedSimplifierConfig.builder().factorOut(false).build(),
200202
AdvancedSimplifierConfig.builder().simplifyNegations(false).build());
201203

@@ -216,11 +218,11 @@ public void testAdvancedSimplifierConfig() {
216218
@Test
217219
public void testBackboneIntermediateResult() {
218220
final FormulaFactory f = new FormulaFactory();
219-
Formula formula = parse(f, "(a & b) | (a & c)");
220-
OptimizationHandler optHandler = mock(OptimizationHandler.class);
221+
final Formula formula = parse(f, "(a & b) | (a & c)");
222+
final OptimizationHandler optHandler = mock(OptimizationHandler.class);
221223
// abort simplification after successful backbone computation
222224
final AtomicInteger count = new AtomicInteger(0);
223-
when(optHandler.aborted()).then(invocationOnMock -> count.addAndGet(1) > 1);
225+
when(optHandler.aborted()).then(invocationOnMock -> count.addAndGet(1) > 1);
224226
testHandler(optHandler, formula, true, true);
225227
}
226228

0 commit comments

Comments
 (0)