101 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#include <algorithm>
 | 
						|
#include <sstream>
 | 
						|
 | 
						|
#include "VarNode.h"
 | 
						|
#include "GraphicalModel.h"
 | 
						|
 | 
						|
using namespace std;
 | 
						|
 | 
						|
 | 
						|
VarNode::VarNode (const VarNode* v)
 | 
						|
{
 | 
						|
  varId_     = v->varId();
 | 
						|
  nrStates_  = v->nrStates();
 | 
						|
  evidence_  = v->getEvidence();
 | 
						|
  index_     = std::numeric_limits<unsigned>::max();
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
VarNode::VarNode (VarId varId, unsigned nrStates, int evidence)
 | 
						|
{
 | 
						|
  assert (nrStates != 0);
 | 
						|
  assert (evidence < (int) nrStates);
 | 
						|
  varId_     = varId;
 | 
						|
  nrStates_  = nrStates;
 | 
						|
  evidence_  = evidence;
 | 
						|
  index_     = std::numeric_limits<unsigned>::max();
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
bool
 | 
						|
VarNode::isValidState (int stateIndex)
 | 
						|
{
 | 
						|
  return stateIndex >= 0 && stateIndex < (int) nrStates_;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
bool
 | 
						|
VarNode::isValidState (const string& stateName)
 | 
						|
{
 | 
						|
  States states = GraphicalModel::getVariableInformation (varId_).states;
 | 
						|
  return find (states.begin(), states.end(), stateName) != states.end();
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
void
 | 
						|
VarNode::setEvidence (int ev) 
 | 
						|
{
 | 
						|
  assert (ev < (int) nrStates_);
 | 
						|
  evidence_ = ev;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
void
 | 
						|
VarNode::setEvidence (const string& ev) 
 | 
						|
{ 
 | 
						|
  States states = GraphicalModel::getVariableInformation (varId_).states;
 | 
						|
  for (unsigned i = 0; i < states.size(); i++) {
 | 
						|
    if (states[i] == ev) {
 | 
						|
      evidence_ = i;
 | 
						|
      return;
 | 
						|
    }
 | 
						|
  }
 | 
						|
  assert (false);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
string
 | 
						|
VarNode::label (void) const
 | 
						|
{
 | 
						|
  if (GraphicalModel::variablesHaveInformation()) {
 | 
						|
    return GraphicalModel::getVariableInformation (varId_).label;
 | 
						|
  }
 | 
						|
  stringstream ss;
 | 
						|
  ss << "x" << varId_;
 | 
						|
  return ss.str();
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
States
 | 
						|
VarNode::states (void) const
 | 
						|
{
 | 
						|
  if (GraphicalModel::variablesHaveInformation()) {
 | 
						|
    return GraphicalModel::getVariableInformation (varId_).states;
 | 
						|
  }
 | 
						|
  States states;
 | 
						|
  for (unsigned i = 0; i < nrStates_; i++) {
 | 
						|
    stringstream ss;
 | 
						|
    ss << i ;
 | 
						|
    states.push_back (ss.str());
 | 
						|
  }
 | 
						|
  return states;
 | 
						|
}
 | 
						|
 |