|
From: <tom...@us...> - 2008-04-02 21:11:27
|
Revision: 1199
http://jason.svn.sourceforge.net/jason/?rev=1199&view=rev
Author: tomklapiscak
Date: 2008-04-02 14:11:25 -0700 (Wed, 02 Apr 2008)
Log Message:
-----------
Bebops (Belief Base Operations Library) now standalone. Used by JASDL as .jar
Modified Paths:
--------------
trunk/applications/jasdl-owlapi/examples/travel_agent/travel_agent.asl
trunk/applications/jasdl-owlapi/src/jasdl/asSemantics/JasdlAgent.java
trunk/applications/jasdl-owlapi/src/jasdl/bb/JasdlBeliefBase.java
trunk/applications/jasdl-owlapi/src/jasdl/bridge/factory/SELiteralToAxiomConverter.java
Added Paths:
-----------
trunk/applications/jasdl-owlapi/src/jasdl/bb/JasdlIncisionFunction.java
trunk/applications/jasdl-owlapi/src/jasdl/bb/JasdlReasonerFactory.java
trunk/applications/jasdl-owlapi/src/jasdl/bb/TBoxAxiomKernelsetFilter.java
Modified: trunk/applications/jasdl-owlapi/examples/travel_agent/travel_agent.asl
===================================================================
--- trunk/applications/jasdl-owlapi/examples/travel_agent/travel_agent.asl 2008-04-02 19:40:02 UTC (rev 1198)
+++ trunk/applications/jasdl-owlapi/examples/travel_agent/travel_agent.asl 2008-04-02 21:11:25 UTC (rev 1199)
@@ -84,10 +84,11 @@
?ruralArea(somewhere)[o(travel)];
- +isLocatedAt(x, x)[o(travel)]; // rejected since isLocated at is irreflexive
+
.print("DL-based belief revision is enabled"); // without, the above test-goal will fail, since legacy mechanism simply removes incoming inconsistent beliefs
+
// since the classes destination and and contact are disjoint (and ruralArea is a subclass of destination),
// and since we trust ben less than tom, the belief addition below will fail (and tom's assertion above will persist),
// thus failing the whole plan.
Modified: trunk/applications/jasdl-owlapi/src/jasdl/asSemantics/JasdlAgent.java
===================================================================
--- trunk/applications/jasdl-owlapi/src/jasdl/asSemantics/JasdlAgent.java 2008-04-02 19:40:02 UTC (rev 1198)
+++ trunk/applications/jasdl-owlapi/src/jasdl/asSemantics/JasdlAgent.java 2008-04-02 21:11:25 UTC (rev 1199)
@@ -3,10 +3,9 @@
import static jasdl.util.Common.strip;
import jasdl.asSyntax.JasdlPlanLibrary;
import jasdl.bb.JasdlBeliefBase;
-import jasdl.bb.revision.BeliefBaseSemiRevisor;
-import jasdl.bb.revision.JasdlIncisionFunction;
-import jasdl.bb.revision.JasdlReasonerFactory;
-import jasdl.bb.revision.TBoxAxiomKernelsetFilter;
+import jasdl.bb.JasdlIncisionFunction;
+import jasdl.bb.JasdlReasonerFactory;
+import jasdl.bb.TBoxAxiomKernelsetFilter;
import jasdl.bridge.factory.AliasFactory;
import jasdl.bridge.factory.AxiomToSELiteralConverter;
import jasdl.bridge.factory.SELiteralFactory;
@@ -69,6 +68,8 @@
import org.semanticweb.owl.model.OWLOntologyManager;
import uk.ac.manchester.cs.owl.mansyntaxrenderer.ManchesterOWLSyntaxOWLObjectRendererImpl;
+import bebops.semirevision.BeliefBaseSemiRevisor;
+import bebops.util.exception.BebopsRevisionFailedException;
public class JasdlAgent extends JmcaAgent{
@@ -215,8 +216,8 @@
removeList.add(axiomToSELiteralConverter.convert((OWLIndividualAxiom)contract).getLiteral());
}
revisionApplied = true;
- }catch(RevisionFailedException e){
- throw e; // propagate upwards
+ }catch(BebopsRevisionFailedException e){
+ throw new RevisionFailedException(); // propagate upwards
}catch(NotEnrichedException e){
// can't perform DL-based belief revision on SN-Literals
addList.add(beliefToAdd);
Modified: trunk/applications/jasdl-owlapi/src/jasdl/bb/JasdlBeliefBase.java
===================================================================
--- trunk/applications/jasdl-owlapi/src/jasdl/bb/JasdlBeliefBase.java 2008-04-02 19:40:02 UTC (rev 1198)
+++ trunk/applications/jasdl-owlapi/src/jasdl/bb/JasdlBeliefBase.java 2008-04-02 21:11:25 UTC (rev 1199)
@@ -1,10 +1,6 @@
package jasdl.bb;
import jasdl.asSemantics.JasdlAgent;
-import jasdl.bb.revision.BeliefBaseContractor;
-import jasdl.bb.revision.JasdlIncisionFunction;
-import jasdl.bb.revision.JasdlReasonerFactory;
-import jasdl.bb.revision.TBoxAxiomKernelsetFilter;
import jasdl.bridge.seliteral.SELiteral;
import jasdl.bridge.seliteral.SELiteralAllDifferentAssertion;
import jasdl.util.exception.JasdlException;
@@ -32,6 +28,8 @@
import org.semanticweb.owl.model.OWLOntology;
import org.semanticweb.owl.model.RemoveAxiom;
+import bebops.contraction.BeliefBaseContractor;
+
public class JasdlBeliefBase extends DefaultBeliefBase{
private JasdlAgent agent;
Copied: trunk/applications/jasdl-owlapi/src/jasdl/bb/JasdlIncisionFunction.java (from rev 1196, trunk/applications/jasdl-owlapi/src/jasdl/bb/bbops/revision/JasdlIncisionFunction.java)
===================================================================
--- trunk/applications/jasdl-owlapi/src/jasdl/bb/JasdlIncisionFunction.java (rev 0)
+++ trunk/applications/jasdl-owlapi/src/jasdl/bb/JasdlIncisionFunction.java 2008-04-02 21:11:25 UTC (rev 1199)
@@ -0,0 +1,97 @@
+package jasdl.bb;
+
+import jasdl.asSemantics.JasdlAgent;
+import jasdl.bridge.seliteral.SELiteral;
+import jasdl.util.exception.JasdlException;
+import jason.asSyntax.Atom;
+import jason.asSyntax.ListTerm;
+import jason.asSyntax.Term;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.semanticweb.owl.model.OWLAxiom;
+import org.semanticweb.owl.model.OWLIndividualAxiom;
+
+import bebops.common.IncisionFunction;
+
+public class JasdlIncisionFunction implements IncisionFunction{
+
+
+ private JasdlAgent agent;
+ private SELiteral toAddLiteral;
+
+ /**
+ * The SELiteral to be added is required for a particularly inelegant hack that allows us
+ * to retrieve the annotations of the NOT YET ADDED axiom.
+ *
+ * @param agent required for getting trust ratings
+ * @param toAdd
+ * @param toAddAnnotations
+ */
+ public JasdlIncisionFunction(JasdlAgent agent, SELiteral toAddLiteral){
+ this.agent = agent;
+ this.toAddLiteral = toAddLiteral;
+ }
+
+ /**
+ * Chooses from each akernel axiom with lowest trust associated with it.
+ * Currently calculated using ASSERTED source annotations only.
+ * No source annotation is taken as trust = 0;
+ */
+ public Set<OWLAxiom> apply(Set<Set<OWLAxiom>> kernelset) {
+ try{
+ Set<OWLAxiom> chosen = new HashSet<OWLAxiom>();
+ for(Set<OWLAxiom> akernel : kernelset){
+ if(!akernel.isEmpty()){
+ OWLAxiom leastTrusted = null; // guaranteed to take a value
+ float minTrustRating = 1f;
+ for(OWLAxiom axiom : akernel){
+ float trustRating = getTrustRating(axiom);
+ agent.getLogger().finest("Trust rating of "+axiom+"="+trustRating);
+ if(trustRating <= minTrustRating){
+ minTrustRating = trustRating;
+ leastTrusted = axiom;
+ }
+ }
+ chosen.add(leastTrusted);
+ }
+ }
+ return chosen;
+ }catch(Exception e){
+ e.printStackTrace(); // TODO: introduce a seperate exception hierarchy once this package has been seperated from JASDL
+ return null;
+ }
+ }
+
+ /**
+ * Currently returns the trust rating of the most trusted source. Future work will look at better ways of calculating this.
+ * @param axiom
+ * @return
+ * @throws JasdlException
+ */
+ private float getTrustRating(OWLAxiom axiom) throws JasdlException{
+ ListTerm sources;
+ if(axiom.equals(toAddLiteral.createAxiom())){ // hack to get the annotations of the NOT YET ADDED toAdd axiom
+ sources = toAddLiteral.getLiteral().getSources();
+ }else{
+ SELiteral sl = agent.getAxiomToSELiteralConverter().convert((OWLIndividualAxiom)axiom); // kernel filter ensures axiom is an OWLIndividualAxiom
+ sources = sl.getLiteral().getSources();
+ }
+ agent.getLogger().finest("Sources of "+axiom+"="+sources);
+ float maxTrustRating = 0f; // if no sources available, trust is 0
+ for(Term source : sources){
+ if(!source.isAtom()){
+ throw new JasdlException("Invalid source annotation "+source);
+ }
+ Atom name = (Atom)source;
+ float trustRating = agent.getTrustRating(name);
+ if(trustRating > maxTrustRating){
+ maxTrustRating = trustRating;
+ }
+ }
+ return maxTrustRating;
+ }
+
+
+}
Copied: trunk/applications/jasdl-owlapi/src/jasdl/bb/JasdlReasonerFactory.java (from rev 1196, trunk/applications/jasdl-owlapi/src/jasdl/bb/bbops/revision/JasdlReasonerFactory.java)
===================================================================
--- trunk/applications/jasdl-owlapi/src/jasdl/bb/JasdlReasonerFactory.java (rev 0)
+++ trunk/applications/jasdl-owlapi/src/jasdl/bb/JasdlReasonerFactory.java 2008-04-02 21:11:25 UTC (rev 1199)
@@ -0,0 +1,30 @@
+package jasdl.bb;
+
+import org.mindswap.pellet.PelletOptions;
+import org.mindswap.pellet.owlapi.Reasoner;
+import org.semanticweb.owl.inference.OWLReasoner;
+import org.semanticweb.owl.model.OWLOntologyManager;
+
+import com.clarkparsia.explanation.ReasonerFactory;
+
+public class JasdlReasonerFactory implements ReasonerFactory{
+
+ public JasdlReasonerFactory() {
+ super();
+ }
+
+ public boolean requiresExplicitClassification() {
+ return false;
+ }
+
+ public OWLReasoner createReasoner(OWLOntologyManager manager) {
+ Reasoner pellet = new Reasoner(manager);
+ return pellet;
+ }
+
+ public String getReasonerName() {
+ return "reasoner";
+ }
+
+
+}
Added: trunk/applications/jasdl-owlapi/src/jasdl/bb/TBoxAxiomKernelsetFilter.java
===================================================================
--- trunk/applications/jasdl-owlapi/src/jasdl/bb/TBoxAxiomKernelsetFilter.java (rev 0)
+++ trunk/applications/jasdl-owlapi/src/jasdl/bb/TBoxAxiomKernelsetFilter.java 2008-04-02 21:11:25 UTC (rev 1199)
@@ -0,0 +1,14 @@
+package jasdl.bb;
+
+import org.semanticweb.owl.model.OWLAxiom;
+import org.semanticweb.owl.model.OWLIndividualAxiom;
+
+import bebops.common.KernelsetFilter;
+
+public class TBoxAxiomKernelsetFilter extends KernelsetFilter {
+
+ public boolean retain(OWLAxiom axiom) {
+ return (axiom instanceof OWLIndividualAxiom);
+ }
+
+}
Modified: trunk/applications/jasdl-owlapi/src/jasdl/bridge/factory/SELiteralToAxiomConverter.java
===================================================================
--- trunk/applications/jasdl-owlapi/src/jasdl/bridge/factory/SELiteralToAxiomConverter.java 2008-04-02 19:40:02 UTC (rev 1198)
+++ trunk/applications/jasdl-owlapi/src/jasdl/bridge/factory/SELiteralToAxiomConverter.java 2008-04-02 21:11:25 UTC (rev 1199)
@@ -21,7 +21,6 @@
import static jasdl.util.Common.RANGE;
import jasdl.asSemantics.JasdlAgent;
-import jasdl.bb.revision.IndividualAxiomToDescriptionConverter;
import jasdl.bridge.seliteral.SELiteral;
import jasdl.bridge.seliteral.SELiteralAllDifferentAssertion;
import jasdl.bridge.seliteral.SELiteralClassAssertion;
@@ -43,7 +42,9 @@
import org.semanticweb.owl.model.OWLObjectProperty;
import org.semanticweb.owl.model.OWLTypedConstant;
+import bebops.common.IndividualAxiomToDescriptionConverter;
+
/**
* Accepts an arbitrary SEliteral and, depending on its type, creates an OWLIndividualAxiom encoding of it.
* This factory can be used in one of two ways: for <i>creation</i> or for <i>retrieval</i>.<p>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|