Skip to content

Commit 90c7c28

Browse files
author
ctjoreilly
committed
- minor performance tweaks to OTTER Like theorem prover (delaying factoring and ordering of lightest clauses).
1 parent d11c553 commit 90c7c28

File tree

3 files changed

+30
-12
lines changed

3 files changed

+30
-12
lines changed

src/aima/logic/fol/inference/FOLOTTERLikeTheoremProver.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -253,21 +253,21 @@ private Set<Clause> infer(Clause clause, Set<Clause> usable) {
253253
// Remember to resolve with self
254254
Set<Clause> resolvents = clause.binaryResolvents(clause);
255255
for (Clause rc : resolvents) {
256-
resultingClauses.addAll(rc.getFactors());
256+
resultingClauses.add(rc);
257257
}
258258

259259
// * resolve clause with each member of usable
260260
for (Clause c : usable) {
261261
resolvents = clause.binaryResolvents(c);
262262
for (Clause rc : resolvents) {
263-
resultingClauses.addAll(rc.getFactors());
263+
resultingClauses.add(rc);
264264
}
265265

266266
// if using paramodulation to handle equality
267267
if (isUseParamodulation()) {
268268
Set<Clause> paras = paramodulation.apply(clause, c, true);
269269
for (Clause p : paras) {
270-
resultingClauses.addAll(p.getFactors());
270+
resultingClauses.add(p);
271271
}
272272
}
273273
}
@@ -304,8 +304,12 @@ private void process(OTTERAnswerHandler ansHandler, Set<Clause> clauses,
304304
// LightestClauseHeuristic to loop continuously
305305
// on the same pair of objects.
306306
if (!sos.contains(clause) && !usable.contains(clause)) {
307-
sos.add(clause);
308-
getLightestClauseHeuristic().addedClauseToSOS(clause);
307+
for (Clause ac : clause.getFactors()) {
308+
if (!sos.contains(ac) && !usable.contains(ac)) {
309+
sos.add(ac);
310+
getLightestClauseHeuristic().addedClauseToSOS(ac);
311+
}
312+
}
309313
}
310314

311315
// * if clause has one literal then look for unit refutation

src/aima/logic/fol/inference/otter/defaultimpl/DefaultLightestClauseHeuristic.java

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import java.util.Comparator;
66
import java.util.List;
77
import java.util.Set;
8+
import java.util.SortedSet;
9+
import java.util.TreeSet;
810

911
import aima.logic.fol.inference.otter.LightestClauseHeuristic;
1012
import aima.logic.fol.kb.data.Clause;
@@ -15,8 +17,8 @@
1517
*/
1618
public class DefaultLightestClauseHeuristic implements LightestClauseHeuristic {
1719

18-
private List<Clause> sos = new ArrayList<Clause>();
19-
private LightestClauseSorter lightestClauseSorter = new LightestClauseSorter();
20+
private LightestClauseSorter c = new LightestClauseSorter();
21+
private SortedSet<Clause> sos = new TreeSet<Clause>(c);
2022

2123
public DefaultLightestClauseHeuristic() {
2224

@@ -28,7 +30,7 @@ public Clause getLightestClause() {
2830
Clause lightest = null;
2931

3032
if (sos.size() > 0) {
31-
lightest = sos.get(0);
33+
lightest = sos.first();
3234
}
3335

3436
return lightest;
@@ -37,12 +39,10 @@ public Clause getLightestClause() {
3739
public void initialSOS(Set<Clause> clauses) {
3840
sos.clear();
3941
sos.addAll(clauses);
40-
Collections.sort(sos, lightestClauseSorter);
4142
}
4243

4344
public void addedClauseToSOS(Clause clause) {
4445
sos.add(clause);
45-
Collections.sort(sos, lightestClauseSorter);
4646
}
4747

4848
public void removedClauseFromSOS(Clause clause) {
@@ -55,8 +55,18 @@ public void removedClauseFromSOS(Clause clause) {
5555

5656
class LightestClauseSorter implements Comparator<Clause> {
5757
public int compare(Clause c1, Clause c2) {
58+
if (c1 == c2) {
59+
return 0;
60+
}
5861
int c1Val = c1.getNumberLiterals();
5962
int c2Val = c2.getNumberLiterals();
60-
return (c1Val < c2Val ? -1 : (c1Val == c2Val ? 0 : 1));
63+
return (c1Val < c2Val ? -1 : (c1Val == c2Val ? (compareEqualityIdentities(c1, c2)) : 1));
6164
}
62-
}
65+
66+
private int compareEqualityIdentities(Clause c1, Clause c2) {
67+
int c1Len = c1.getEqualityIdentity().length();
68+
int c2Len = c2.getEqualityIdentity().length();
69+
70+
return (c1Len < c2Len ? -1 : (c1Len == c2Len ? c1.getEqualityIdentity().compareTo(c2.getEqualityIdentity()): 1));
71+
}
72+
}

src/aima/logic/fol/kb/data/Clause.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -348,6 +348,10 @@ public boolean equals(Object othObj) {
348348

349349
return equalityIdentity.equals(othClause.equalityIdentity);
350350
}
351+
352+
public String getEqualityIdentity() {
353+
return equalityIdentity;
354+
}
351355

352356
//
353357
// PRIVATE METHODS

0 commit comments

Comments
 (0)