index 009caec..8f5594e 100644 (file)
@@ -44,7 +44,7 @@ typedef matrix::index_array_type::const_iterator matrix_icit;
Factor BinaryFactor( const Var &n, double field ) {
assert( n.states() == 2 );
double buf[2];
-    buf[0] = exp(-field);
+    buf[0] = exp(-field);
buf[1] = exp(field);
return Factor(n, &buf[0]);
}
@@ -57,7 +57,7 @@ Factor BinaryFactor( const Var &n1, const Var &n2, double coupling ) {
double buf[4];
buf[0] = (buf[3] = exp(coupling));
buf[1] = (buf[2] = exp(-coupling));
-    return Factor(n1 | n2, &buf[0]);
+    return Factor( VarSet(n1, n2), &buf[0] );
}

@@ -70,7 +70,7 @@ Factor RandomFactor( const VarSet &ns, double beta ) {

Factor PottsFactor( const Var &n1, const Var &n2, double beta ) {
-    Factor fac( n1 | n2, 1.0 );
+    Factor fac( VarSet( n1, n2 ), 1.0 );
assert( n1.states() == n2.states() );
for( size_t s = 0; s < n1.states(); s++ )
fac[ s * (n1.states() + 1) ] = exp(beta);
@@ -79,27 +79,27 @@ Factor PottsFactor( const Var &n1, const Var &n2, double beta ) {

void MakeHOIFG( size_t N, size_t M, size_t k, double sigma, FactorGraph &fg ) {
-       vector<Var> vars;
-       vector<Factor> factors;
+    vector<Var> vars;
+    vector<Factor> factors;

vars.reserve(N);
-       for( size_t i = 0; i < N; i++ )
-               vars.push_back(Var(i,2));
-
-       for( size_t I = 0; I < M; I++ ) {
-               VarSet vars;
-               while( vars.size() < k ) {
-                       do {
-                               size_t newind = (size_t)(N * rnd_uniform());
-                               Var newvar = Var(newind, 2);
-                               if( !vars.contains( newvar ) ) {
-                                       vars |= newvar;
-                                       break;
-                               }
-                       } while( 1 );
-               }
+    for( size_t i = 0; i < N; i++ )
+        vars.push_back(Var(i,2));
+
+    for( size_t I = 0; I < M; I++ ) {
+        VarSet vars;
+        while( vars.size() < k ) {
+            do {
+                size_t newind = (size_t)(N * rnd_uniform());
+                Var newvar = Var(newind, 2);
+                if( !vars.contains( newvar ) ) {
+                    vars |= newvar;
+                    break;
+                }
+            } while( 1 );
+        }
factors.push_back( RandomFactor( vars, sigma ) );
-       }
+    }

fg = FactorGraph( factors.begin(), factors.end(), vars.begin(), vars.end(), factors.size(), vars.size() );
}
@@ -154,7 +154,7 @@ void MakeFullFG( size_t N, double mean_w, double mean_th, double sigma_w, double
void Make3DPotts( size_t n1, size_t n2, size_t n3, size_t states, double beta, FactorGraph &fg ) {
vector<Var> vars;
vector<Factor> factors;
-
+
for( size_t i1 = 0; i1 < n1; i1++ )
for( size_t i2 = 0; i2 < n2; i2++ )
for( size_t i3 = 0; i3 < n3; i3++ ) {
@@ -189,7 +189,7 @@ void MakeGridFG( long periodic, size_t n, double mean_w, double mean_th, double
WTh2FG( w, th, fg );
}

-
+
void MakeGridNonbinaryFG( bool periodic, size_t n, size_t states, double beta, FactorGraph &fg ) {
size_t N = n*n;

@@ -204,9 +204,9 @@ void MakeGridNonbinaryFG( bool periodic, size_t n, size_t states, double beta, F
for( size_t i = 0; i < n; i++ ) {
for( size_t j = 0; j < n; j++ ) {
if( i+1 < n || periodic )
-                factors.push_back( RandomFactor( vars[i*n+j] | vars[((i+1)%n)*n+j], beta ) );
+                factors.push_back( RandomFactor( VarSet( vars[i*n+j], vars[((i+1)%n)*n+j] ), beta ) );
if( j+1 < n || periodic )
-                factors.push_back( RandomFactor( vars[i*n+j] | vars[i*n+((j+1)%n)], beta ) );
+                factors.push_back( RandomFactor( VarSet( vars[i*n+j], vars[i*n+((j+1)%n)] ), beta ) );
}
}

@@ -237,7 +237,7 @@ void MakeLoopNonbinaryFG( size_t N, size_t states, double beta, FactorGraph &fg

factors.reserve( N );
for( size_t i = 0; i < N; i++ ) {
-        factors.push_back( RandomFactor( vars[i] | vars[(i+1)%N], beta ) );
+        factors.push_back( RandomFactor( VarSet( vars[i], vars[(i+1)%N] ), beta ) );
}

fg = FactorGraph( factors.begin(), factors.end(), vars.begin(), vars.end(), factors.size(), vars.size() );
@@ -267,7 +267,7 @@ void MakeDRegFG( size_t N, size_t d, double mean_w, double mean_th, double sigma
UEdgeVec g = RandomDRegularGraph( N, d );
for( size_t i = 0; i < g.size(); i++ )
w(g[i].n1, g[i].n2) = rnd_stdnormal() * sigma_w + mean_w;
-
+
for( size_t i = 0; i < N; i++ )
th[i] = rnd_stdnormal() * sigma_th + mean_th;

@@ -332,7 +332,7 @@ size_t order (int x, int p) {
do {
prod = (prod * x) % p;
n++;
-    } while( prod != 1 );
+    } while( prod != 1 );
return n;
}

@@ -444,10 +444,10 @@ const char *POTTS3D_TYPE = "potts3d";

int main( int argc, char *argv[] ) {
try {
-               size_t N, K, k, d, j, n1, n2, n3;
+        size_t N, K, k, d, j, n1, n2, n3;
size_t prime;
size_t seed;
-               double beta, sigma_w, sigma_th, noise, mean_w, mean_th;
+        double beta, sigma_w, sigma_th, noise, mean_w, mean_th;
string type;
size_t states = 2;

@@ -522,7 +522,7 @@ int main( int argc, char *argv[] ) {
cout << "interactions with <states> states and inverse temperature <beta>." << endl;
} else
cerr << "Unknown type (should be one of 'full', 'grid', 'grid_torus', 'dreg', 'loop', 'tree', 'hoi', 'ldpc_random', 'ldpc_group', 'ldpc_small', 'potts3d')" << endl;
-
+
if( type == FULL_TYPE || type == GRID_TYPE || type == GRID_TORUS_TYPE || type == DREG_TYPE || type == LOOP_TYPE || type == TREE_TYPE ) {
if( type == GRID_TYPE || type == GRID_TORUS_TYPE || type == LOOP_TYPE ) {
cout << "if <states> > 2: factor entries are exponents of Gaussians with mean 0 and standard deviation beta; otherwise," << endl;
@@ -530,7 +530,7 @@ int main( int argc, char *argv[] ) {
cout << "singleton interactions are Gaussian with mean <mean_th> and standard" << endl;
cout << "deviation <sigma_th>; pairwise interactions are Gaussian with mean" << endl;
cout << "<mean_w> and standard deviation <sigma_w>." << endl;
-                }
+                }
}
cout << endl << desc << endl;
return 1;
@@ -591,10 +591,10 @@ int main( int argc, char *argv[] ) {
MakeGridNonbinaryFG( periodic, n, states, beta, fg );
else
MakeGridFG( periodic, n, mean_w, mean_th, sigma_w, sigma_th, fg );
-
+
cout << "# n = " << n << endl;
cout << "# N = " << N << endl;
-
+
if( states > 2 )
cout << "# beta = " << beta << endl;
else {
@@ -758,7 +758,7 @@ int main( int argc, char *argv[] ) {

for( size_t i = 0; i < N; i++ )
-               factors.push_back( Factor(Var(i,2), likelihood + output[i]*2) );
+               factors.push_back( Factor(Var(i,2), likelihood + output[i]*2) );

// Construct Factor Graph
fg = FactorGraph( factors );
@@ -779,17 +779,9 @@ int main( int argc, char *argv[] ) {

cout << "# seed = " << seed << endl;
cout << fg;
-    }
-    catch(exception& e) {
-        cerr << "Error: " << e.what() << endl;
-        return 1;
-    }
-    catch(const char * e) {
+    } catch( const char *e ) {
cerr << "Error: " << e << endl;
return 1;
-    }
-    catch(...) {
-        cerr << "Exception of unknown type!" << endl;
}

return 0;