Darwin  1.10(beta)
drwnVarAssignment.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** DARWIN: A FRAMEWORK FOR MACHINE LEARNING RESEARCH AND DEVELOPMENT
3 ** Distributed under the terms of the BSD license (see the LICENSE file)
4 ** Copyright (c) 2007-2017, Stephen Gould
5 ** All rights reserved.
6 **
7 ******************************************************************************
8 ** FILENAME: drwnVarAssignment.h
9 ** AUTHOR(S): Stephen Gould <stephen.gould@anu.edu.au>
10 ** DESCRIPTION:
11 ** Data structures for encoding assignments to variables.
12 **
13 *****************************************************************************/
14 
21 #pragma once
22 
23 #include <cstdlib>
24 #include <cassert>
25 #include <vector>
26 #include <map>
27 
28 #include "drwnGraphUtils.h"
29 #include "drwnVarUniverse.h"
30 
31 using namespace std;
32 
33 // drwnFullAssignment ------------------------------------------------------
35 
36 typedef std::vector<int> drwnFullAssignment;
37 
38 // drwnLocalAssignment -----------------------------------------------------
41 
42 typedef std::vector<int> drwnLocalAssignment;
43 
44 // drwnPartialAssignment ---------------------------------------------------
46 
47 class drwnPartialAssignment : public std::map<int, int> {
48  public:
50  drwnPartialAssignment() { /* do nothing */ }
54  for (int i = 0; i < (int)a.size(); i++) {
55  if (a[i] >= 0) {
56  this->insert(make_pair(i, a[i]));
57  }
58  }
59  }
60 
64  for (drwnClique::const_iterator it = c.begin(); it != c.end(); ++it) {
65  if (a[*it] >= 0) {
66  this->insert(make_pair(*it, a[*it]));
67  }
68  }
69  }
70 
73  drwnPartialAssignment(const vector<int>& vars, const drwnLocalAssignment& vals) {
74  for (size_t i = 0; i < vars.size(); i++) {
75  this->insert(make_pair(vars[i], vals[i]));
76  }
77  }
78 
82  drwnClique c;
83  for (const_iterator it = begin(); it != end(); ++it) {
84  c.insert(it->first);
85  }
86  return c;
87  }
88 
91  drwnLocalAssignment toLocalAssignment(const vector<int>& vars) const {
92  drwnLocalAssignment a(vars.size());
93  for (size_t i = 0; i < vars.size(); i++) {
94  const_iterator it = this->find(vars[i]);
95  a[i] = (it == end()) ? -1 : it->second;
96  }
97  return a;
98  }
99 
103  return drwnFullAssignment(*this);
104  }
105 
108  operator drwnFullAssignment() const {
109  drwnFullAssignment a(this->rbegin()->first + 1, -1);
110  for (const_iterator it = begin(); it != end(); ++it) {
111  a[it->first] = it->second;
112  }
113  return a;
114  }
115 };
116 
117 // utility functions -------------------------------------------------------
118 
120 void successor(drwnFullAssignment& assignment, const drwnVarUniverse& universe);
122 void predecessor(drwnFullAssignment& assignment, const drwnVarUniverse& universe);
124 void successor(drwnPartialAssignment& assignment, const drwnVarUniverse& universe);
126 void predecessor(drwnPartialAssignment& assignment, const drwnVarUniverse& universe);
drwnFullAssignment toFullAssignment() const
convert a partial assignment to a full assignment (missing values are assigned -1) ...
Definition: drwnVarAssignment.h:102
std::vector< int > drwnLocalAssignment
defines an assignment to a subset of variables in the universe relative to some local scope (and fixe...
Definition: drwnVarAssignment.h:42
void successor(drwnFullAssignment &assignment, const drwnVarUniverse &universe)
next full assignment
Definition: drwnVarAssignment.cpp:24
drwnPartialAssignment(const drwnFullAssignment &a)
construct a partial assignment from a full assignment (values of -1 in the full assignment are ignore...
Definition: drwnVarAssignment.h:53
drwnPartialAssignment(const drwnFullAssignment &a, const drwnClique &c)
construct a partial assignment from a full assignment over a subset of the variables ...
Definition: drwnVarAssignment.h:63
void predecessor(drwnFullAssignment &assignment, const drwnVarUniverse &universe)
previous full assignment
Definition: drwnVarAssignment.cpp:36
drwnLocalAssignment toLocalAssignment(const vector< int > &vars) const
convert a partial assignment to a local assignment (missing values are assigned -1) ...
Definition: drwnVarAssignment.h:91
Data structure for definining the random variables (name and cardinality) for a given problem instanc...
Definition: drwnVarUniverse.h:29
std::set< int > drwnClique
variable clique
Definition: drwnGraphUtils.h:37
drwnPartialAssignment(const vector< int > &vars, const drwnLocalAssignment &vals)
construct a partial assignment from a partial assignment expressed using a vector of variables and a ...
Definition: drwnVarAssignment.h:73
std::vector< int > drwnFullAssignment
defines a complete assignment to all variables in the universe
Definition: drwnVarAssignment.h:36
defines an assignment to a subset of the variables
Definition: drwnVarAssignment.h:47
drwnClique getClique() const
return the clique of variables over which the partial assignment is defined
Definition: drwnVarAssignment.h:81
Generic graph utilities.
drwnPartialAssignment()
construct an empty partial assignment
Definition: drwnVarAssignment.h:50