Skip to content

Commit

Permalink
Fixed incorrect ranking of LHS classes of strict axioms bug pointed o…
Browse files Browse the repository at this point in the history
…ut by Arina in a simpler way.
  • Loading branch information
kodymoodley committed May 1, 2020
1 parent d21e937 commit 75dd820
Show file tree
Hide file tree
Showing 23 changed files with 2,078 additions and 1,791 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

<groupId>net.za.cair</groupId>
<artifactId>net.za.cair.dip</artifactId>
<version>1.3.2</version>
<version>1.3.3</version>
<packaging>bundle</packaging>

<name>Defeasible Inference Platform</name>
Expand Down
61 changes: 19 additions & 42 deletions src/main/java/net/za/cair/dip/DefeasibleInferenceComputer.java
Original file line number Diff line number Diff line change
@@ -1,17 +1,12 @@
package net.za.cair.dip;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import org.paukov.combinatorics3.Generator;
import org.semanticweb.HermiT.Configuration;
import org.semanticweb.HermiT.Reasoner;
//import org.semanticweb.owl.explanation.impl.blackbox.hst.HittingSetTree;
import org.semanticweb.owlapi.apibinding.OWLManager;
import org.semanticweb.owlapi.model.AxiomType;
import org.semanticweb.owlapi.model.OWLAxiom;
Expand Down Expand Up @@ -79,25 +74,18 @@ public class DefeasibleInferenceComputer {
public int noOfRanksInCCompatLR;
public int noOfRanksInCCompatMR;
public int noOfRanksInCCompatBR;

private Set<OWLClass> strictSuperClasses;
private Set<OWLClass> typicalSuperClasses;

public int axiomsInCCompatLR;
public int axiomsInCCompatMR;
public int axiomsInCCompatBR;

public int entailmentChecksLR;
public int entailmentChecksMR;
public int entailmentChecksBR;

public int entailmentChecksLC;

public int entailmentChecksRC;

public int entailmentChecksRelC;

public boolean queryHasInfiniteRank;//
public boolean queryHasInfiniteRank;
public boolean queryIsNonExceptional;
public int noOfAxiomsKeptFromProblematicRank;
public int cbasisSize;
Expand All @@ -123,10 +111,9 @@ public class DefeasibleInferenceComputer {
private ArrayList<OWLClassExpression> lexicographicRanking;
private Set<OWLAxiom> global_inconsBasis;
private Set<OWLAxiom> global_minInconsBasis;

private ManchesterOWLSyntaxOWLObjectRendererImpl man = new ManchesterOWLSyntaxOWLObjectRendererImpl();

public DefeasibleInferenceComputer(OWLReasonerFactory reasonerFactory){ // NO_UCD (unused code)
public DefeasibleInferenceComputer(OWLReasonerFactory reasonerFactory){
this.df = OWLManager.createOWLOntologyManager().getOWLDataFactory();
this.reasonerFactory = reasonerFactory;
helperClass = new DefeasibleInferenceHelperClass(reasonerFactory);
Expand All @@ -135,7 +122,8 @@ public DefeasibleInferenceComputer(OWLReasonerFactory reasonerFactory){ // NO_UC

public DefeasibleInferenceComputer(OWLReasonerFactory reasonerFactory, Ranking ranking){
this.df = OWLManager.createOWLOntologyManager().getOWLDataFactory();
this.ranking = ranking;
this.ranking = new Ranking(ranking.getRanking());
this.ranking.setInfiniteRank(ranking.getInfiniteRank());
this.reasonerFactory = reasonerFactory;
helperClass = new DefeasibleInferenceHelperClass(reasonerFactory, this.ranking);
this.prunedRanking = null;
Expand All @@ -145,7 +133,6 @@ public DefeasibleInferenceComputer(OWLReasonerFactory reasonerFactory, Ranking r
public DefeasibleInferenceComputer(OWLReasonerFactory reasonerFactory, OWLOntology ontology){
this.df = OWLManager.createOWLOntologyManager().getOWLDataFactory();
this.reasonerFactory = reasonerFactory;
//ontologyStructure = new OntologyStructure(ontology);
helperClass = new DefeasibleInferenceHelperClass(reasonerFactory, this.ranking);
this.ranking = null;
}
Expand All @@ -158,13 +145,12 @@ private Ranking setRanking(Ranking r){
for (Rank rank: ranks){
ArrayList<OWLAxiom> currentRankAxioms = new ArrayList<OWLAxiom>();
currentRankAxioms.addAll(rank.getAxioms());
Rank tmp = new Rank(currentRankAxioms);
Rank tmp = new Rank(currentRankAxioms, rank.getIndex());
result.add(tmp);
}

ArrayList<OWLAxiom> inf = new ArrayList<OWLAxiom>();
inf.addAll(r.getInfiniteRank().getAxioms());

Ranking finalResult = new Ranking(result);
finalResult.setInfiniteRank(new Rank(inf));

Expand Down Expand Up @@ -193,7 +179,6 @@ public Ranking pruneIrrelevantAxioms(Query query) throws OWLOntologyCreationExce
}

tmpOntology = man.createOntology(ontologyAxioms);

SyntacticLocalityModuleExtractor slme = new SyntacticLocalityModuleExtractor(man, tmpOntology, ModuleType.STAR);
Set<OWLAxiom> starmodule = slme.extract(signature);

Expand Down Expand Up @@ -229,13 +214,10 @@ private void computeLexicographicRanking(Ranking tmpRanking) {
lexicographicRanking = new ArrayList<OWLClassExpression>();
// Get hold of an OWLDataFactory to construct class expressions from OWL boolean operators
OWLDataFactory dataF = OWLManager.createOWLOntologyManager().getOWLDataFactory();

// Set rank index to 1 (first level)
int rankIndex = 1;

// Done: we have run through all ranks
boolean done = false;

// While not done
while (!done) {
// If we have run through all ranks, set done to true
Expand Down Expand Up @@ -325,11 +307,9 @@ public boolean hasSingleABoxExtension(Ranking rankingTmp, ReasoningType reasonin
do { // Line 3
int i = 1; // Line 4
OWLAxiom currAssertion = df.getOWLClassAssertionAxiom(helperClass.getE_i(rankingTmp, i), individuals.get(j));
//System.out.println("a: " + currAssertion);
while ((!isConsistent(abox, currAssertion, rankingTmp)) && (i <= n)) { // Line 5
i++; // Line 6
currAssertion = df.getOWLClassAssertionAxiom(helperClass.getE_i(rankingTmp, i), individuals.get(j));
//System.out.println("b: " + currAssertion);
}
if (i <= n) // Line 7
abox_D.add(currAssertion); // Line 8
Expand All @@ -340,7 +320,6 @@ public boolean hasSingleABoxExtension(Ranking rankingTmp, ReasoningType reasonin
if (isConsistent(abox_D, rankingTmp)) {
// assign abox_D to global variable (ABox extension)
singleExtension.addAll(abox_D);
//System.out.println(singleExtension);
return true;
}
else {
Expand Down Expand Up @@ -393,8 +372,6 @@ else if (reasoning_algorithm.equals(ReasoningType.LEXICOGRAPHIC)) {
System.out.println(man.render(a));
}
System.out.println();

//System.out.println(singleExtension);
return true;
}
else {
Expand Down Expand Up @@ -769,24 +746,24 @@ public NodeSet<OWLNamedIndividual> getInstances(OWLClassExpression cls) throws O
axioms.addAll(singleExtension); // A_D
axioms.addAll(ranking.getInfiniteRank().getAxiomsAsSet()); // T

System.out.println();
System.out.println("ABOX EXTENSION + STRICT AXIOMS:");
System.out.println("-------------------------------");
for (OWLAxiom axom: axioms) {
System.out.println(man.render(axom));
}
System.out.println();
// System.out.println();
// System.out.println("ABOX EXTENSION + STRICT AXIOMS:");
// System.out.println("-------------------------------");
// for (OWLAxiom axom: axioms) {
// System.out.println(man.render(axom));
// }
// System.out.println();

OWLOntologyManager ontologyManager = OWLManager.createOWLOntologyManager();
OWLOntology tmpOntology = ontologyManager.createOntology(axioms);
//Reasoner reasoner = new Reasoner(reasonerFactory, tmpOntology);
System.out.println();
System.out.println("ABOX EXTENSION + STRICT AXIOMS: (AFTER!)");
System.out.println("----------------------------------------");
for (OWLAxiom a: tmpOntology.getAxioms()) {
System.out.println(man.render(a));
}
System.out.println();
// System.out.println();
// System.out.println("ABOX EXTENSION + STRICT AXIOMS: (AFTER!)");
// System.out.println("----------------------------------------");
// for (OWLAxiom a: tmpOntology.getAxioms()) {
// System.out.println(man.render(a));
// }
// System.out.println();

//Reasoner reasoner = new Reasoner(new Configuration(), tmpOntology);
OWLReasoner reasoner = reasonerFactory.createNonBufferingReasoner(tmpOntology);
Expand Down
20 changes: 12 additions & 8 deletions src/main/java/net/za/cair/dip/DefeasibleInferenceHelperClass.java
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,11 @@ private Ranking setRanking(Ranking r){
for (Rank rank: ranks){
ArrayList<OWLAxiom> currentRankAxioms = new ArrayList<OWLAxiom>();
currentRankAxioms.addAll(rank.getAxioms());
Rank tmp = new Rank(currentRankAxioms);
Rank tmp = new Rank(currentRankAxioms, rank.getIndex());
// System.out.println();
// System.out.println(tmp.getIndex() + ":");
// System.out.println(tmp);
// System.out.println();
result.add(tmp);
}

Expand Down Expand Up @@ -278,7 +282,7 @@ public OWLClassExpression getLexicallyAdditiveConcept(List<Rank> compat, ArrayLi
for (OWLAxiom a: r.getAxioms()){
rankAxioms.add(a);
}
Rank tmp = new Rank(rankAxioms);
Rank tmp = new Rank(rankAxioms, r.getIndex());
cCompatibleSubset.add(tmp);
}

Expand Down Expand Up @@ -352,7 +356,7 @@ public ArrayList<Rank> getMRCCompatibleSubset(ArrayList<Rank> ranksVar, Query or
for (OWLAxiom a: r.getAxioms()){
newRankAxioms.add(a);
}
Rank tmp = new Rank(newRankAxioms);
Rank tmp = new Rank(newRankAxioms, r.getIndex());
ranks.add(tmp);
}
/**Maximally Relevant C-Compatibility calculation**/
Expand Down Expand Up @@ -415,7 +419,7 @@ public ArrayList<Rank> getMRCCompatibleSubset(ArrayList<Rank> ranksVar, Query or
ArrayList<Rank> newRanks = new ArrayList<Rank>();
for (Rank r: ranks){
if (!r.getAxioms().isEmpty()){
Rank tmp = new Rank(r.getAxioms());
Rank tmp = new Rank(r.getAxioms(), r.getIndex());
newRanks.add(tmp);
}
}
Expand All @@ -441,7 +445,7 @@ public ArrayList<Rank> getMRCCompatibleSubset(ArrayList<Rank> ranksVar, OWLClass
newRankAxioms.add(a);
}

Rank tmp = new Rank(newRankAxioms);
Rank tmp = new Rank(newRankAxioms, r.getIndex());
ranks.add(tmp);
}
/**Maximally Relevant C-Compatibility calculation**/
Expand Down Expand Up @@ -504,7 +508,7 @@ public ArrayList<Rank> getMRCCompatibleSubset(ArrayList<Rank> ranksVar, OWLClass
ArrayList<Rank> newRanks = new ArrayList<Rank>();
for (Rank r: ranks){
if (!r.getAxioms().isEmpty()){
Rank tmp = new Rank(r.getAxioms());
Rank tmp = new Rank(r.getAxioms(), r.getIndex());
newRanks.add(tmp);
}
}
Expand Down Expand Up @@ -600,7 +604,7 @@ public ArrayList<Rank> getCCompatibleSubset(ArrayList<Rank> ranksVar, OWLClassEx
for (OWLAxiom a: r.getAxioms()){
newRankAxioms.add(a);
}
Rank tmp = new Rank(newRankAxioms);
Rank tmp = new Rank(newRankAxioms, r.getIndex());
ranks.add(tmp);
}
/**C-Compatibility calculation**/
Expand Down Expand Up @@ -651,7 +655,7 @@ public ArrayList<Rank> getCCompatibleSubset(ArrayList<Rank> ranksVar, Query orig
for (OWLAxiom a: r.getAxioms()){
newRankAxioms.add(a);
}
Rank tmp = new Rank(newRankAxioms);
Rank tmp = new Rank(newRankAxioms, r.getIndex());
ranks.add(tmp);
}
/**C-Compatibility calculation**/
Expand Down
6 changes: 4 additions & 2 deletions src/main/java/net/za/cair/dip/model/Query.java
Original file line number Diff line number Diff line change
Expand Up @@ -109,8 +109,10 @@ private Ranking module(OWLAxiom axiom, Ranking r) throws OWLOntologyCreationExce
intersection.add(a);
}
intersection.retainAll(module);
if (!intersection.isEmpty())
ranks.add(new Rank(new ArrayList<OWLAxiom>(intersection)));
if (!intersection.isEmpty()) {
int last_index = ranks.size()-1;
ranks.add(new Rank(new ArrayList<OWLAxiom>(intersection), last_index+1));
}
}
Rank inf = r.getInfiniteRank();
Set<OWLAxiom> infAx = new HashSet<OWLAxiom>();
Expand Down
15 changes: 12 additions & 3 deletions src/main/java/net/za/cair/dip/model/Rank.java
Original file line number Diff line number Diff line change
Expand Up @@ -51,17 +51,26 @@ public class Rank implements Serializable{
private int index;

public Rank(ArrayList<OWLAxiom> rank, int index){
this.rank = rank;
this.rank = new ArrayList<OWLAxiom>();
for (OWLAxiom a: rank) {
this.rank.add(a);
}
this.index = index;
}

public Rank(ArrayList<OWLAxiom> rank){
this.rank = rank;
this.rank = new ArrayList<OWLAxiom>();
for (OWLAxiom a: rank) {
this.rank.add(a);
}
index = -1;
}

public void setRank(ArrayList<OWLAxiom> rankAxioms){
rank = rankAxioms;
rank = new ArrayList<OWLAxiom>();
for (OWLAxiom a: rankAxioms) {
rank.add(a);
}
}

public int getIndex(){
Expand Down
Loading

0 comments on commit 75dd820

Please sign in to comment.