/*
* File: BasicHomogeneousHandler.java
* Authors: Jeremy D. Wendt
* Company: Sandia National Laboratories
* Project: Cognitive Foundry
*
* Copyright 2016, Sandia Corporation.
* Under the terms of Contract DE-AC04-94AL85000, there is a non-exclusive
* license for use of this work by or on behalf of the U.S. Government.
* Export of this program may require a license from the United States
* Government. See CopyrightHistory.txt for complete details.
*
*/
package gov.sandia.cognition.graph.inference;
import gov.sandia.cognition.graph.DirectedNodeEdgeGraph;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Simple class created for multiple tests that tests homogenous systems.
*
* @author jdwendt
* @param <NodeLabelType> The type for the nodes
*/
public class BasicHomogeneousHandler<NodeLabelType>
implements
GraphWrappingEnergyFunction.PotentialHandler<Integer, NodeLabelType>
{
private final Map<Integer, Double> equalsProb;
public BasicHomogeneousHandler()
{
equalsProb = new HashMap<>();
}
public void setSpecialUnaryPotential(NodeLabelType node,
DirectedNodeEdgeGraph<NodeLabelType> graph,
double prob)
{
equalsProb.put(graph.getNodeId(node), prob);
}
@Override
public double getPairwisePotential(
DirectedNodeEdgeGraph<NodeLabelType> graph,
int edgeId,
Integer ilabel,
Integer jlabel)
{
if (ilabel.equals(jlabel))
{
return 0.99;
}
else
{
return 0.01;
}
}
@Override
public double getUnaryPotential(
DirectedNodeEdgeGraph<NodeLabelType> graph,
int i,
Integer label,
Integer assignedLabel)
{
if (assignedLabel != null)
{
if (assignedLabel.equals(label))
{
if (equalsProb.containsKey(i))
{
return equalsProb.get(i);
}
return 0.9999999;
}
else
{
if (equalsProb.containsKey(i))
{
return 1 - equalsProb.get(i);
}
return 0.0000001;
}
}
else
{
return 0.5;
}
}
@Override
public List<Integer> getPossibleLabels(
DirectedNodeEdgeGraph<NodeLabelType> graph,
int nodeId)
{
List<Integer> ret = new ArrayList<>(2);
ret.add(0);
ret.add(1);
return ret;
}
}