Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
/*
* Copyright 2015 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.drools.beliefs.bayes;
import org.drools.core.beliefsystem.BeliefSet;
import org.drools.core.beliefsystem.BeliefSystem;
import org.drools.core.beliefsystem.ModedAssertion;
import org.drools.core.beliefsystem.simple.SimpleLogicalDependency;
import org.drools.core.beliefsystem.simple.SimpleMode;
import org.drools.core.common.InternalFactHandle;
import org.drools.core.common.LogicalDependency;
import org.drools.core.common.NamedEntryPoint;
import org.drools.core.common.TruthMaintenanceSystem;
import org.drools.core.definitions.rule.impl.RuleImpl;
import org.drools.core.reteoo.ObjectTypeConf;
import org.drools.core.spi.Activation;
import org.drools.core.spi.PropagationContext;
import org.kie.api.runtime.rule.FactHandle;
public class BayesBeliefSystem> implements BeliefSystem {
private NamedEntryPoint ep;
private TruthMaintenanceSystem tms;
public BayesBeliefSystem(NamedEntryPoint ep,
TruthMaintenanceSystem tms) {
super();
this.ep = ep;
this.tms = tms;
}
@Override
public BeliefSet insert(LogicalDependency node, BeliefSet beliefSet, PropagationContext context, ObjectTypeConf typeConf) {
return insert( node.getMode(),
node.getJustifier().getRule(),
node.getJustifier(),
node.getObject(),
beliefSet,
context,
typeConf );
}
@Override
public BeliefSet insert( M mode, RuleImpl rule, Activation activation, Object ldPayload, BeliefSet beliefSet, PropagationContext context, ObjectTypeConf typeConf ) {
boolean wasEmpty = beliefSet.isEmpty();
boolean wasDecided = beliefSet.isDecided();
beliefSet.add( mode );
BayesHardEvidence evidence = beliefSet.getFirst();
PropertyReference propRef = (PropertyReference) ldPayload;
BayesFact bayesFact = (BayesFact) propRef.getInstance();
BayesInstance bayesInstance = bayesFact.getBayesInstance();
FactHandle fh = beliefSet.getFactHandle();
BayesVariable var = ( BayesVariable ) bayesInstance.getFieldNames().get( propRef.getName() );
if ( wasDecided && !beliefSet.isDecided() ) {
// was decided, not undecided
bayesInstance.setDecided(var, false);
bayesInstance.setLikelyhood( var,null );
} else {
// either it was empty, or it was undecided and now decided.
bayesInstance.setDecided(var, true);
bayesInstance.setLikelyhood( var, evidence.getDistribution() );
}
return beliefSet;
}
@Override
public void delete(LogicalDependency node,
BeliefSet beliefSet,
PropagationContext context) {
delete( node.getMode(), node.getJustifier().getRule(), node.getJustifier(), node.getObject(), beliefSet, context );
}
@Override
public void delete( M mode, RuleImpl rule, Activation activation, Object payload, BeliefSet beliefSet, PropagationContext context ) {
boolean wasDecided = beliefSet.isDecided();
beliefSet.remove( mode );
// if ( !wasUndecided && !beliefSet.isDecided() ) {
// // was decided before, still decided, so do nothing.
// return;
// }
PropertyReference propRef = (PropertyReference) payload;
BayesFact bayesFact = (BayesFact) propRef.getInstance();
BayesInstance bayesInstance = bayesFact.getBayesInstance();
BayesVariable var = ( BayesVariable ) bayesInstance.getFieldNames().get( propRef.getName() );
boolean empty = beliefSet.isEmpty();
if ( empty) {
// if the last one was just removed,
// then if there was a conflict it was resolved when the second to last was removed
bayesInstance.unsetLikelyhood( var );
return;
}
BayesHardEvidence evidence = beliefSet.getFirst();
if ( wasDecided && !beliefSet.isDecided() ) {
// was decided, now undecided
bayesInstance.setDecided(var, false);
bayesInstance.unsetLikelyhood( var );
} else if ( !wasDecided && beliefSet.isDecided() ) {
// was undecided, now decided
bayesInstance.setDecided(var, true);
bayesInstance.setLikelyhood( var, evidence.getDistribution() );
} // else no change
}
@Override
public void stage(PropagationContext context, BeliefSet beliefSet) {
}
@Override
public void unstage(PropagationContext context, BeliefSet beliefSet) {
}
@Override
public BeliefSet newBeliefSet(InternalFactHandle fh) {
return new NonConflictingModeSet(fh, this);
}
@Override
public LogicalDependency newLogicalDependency(Activation activation, BeliefSet beliefSet, Object object, Object value) {
BayesHardEvidence mode = (M) value;
SimpleLogicalDependency dep = new SimpleLogicalDependency( activation, beliefSet, object, (M) value );
mode.setLogicalDependency( dep );
return dep;
}
@Override
public void read(LogicalDependency node, BeliefSet beliefSet, PropagationContext context, ObjectTypeConf typeConf) {
}
@Override
public TruthMaintenanceSystem getTruthMaintenanceSystem() {
return null;
}
@Override
public M asMode( Object value ) {
return (M) value;
}
}