Skip to content
Snippets Groups Projects
Select Git revision
  • d8dbc68e841a93b40d2a5005bd69bdd1cbb1778a
  • master default protected
  • nlf-fixes
  • DSMH
  • OneStep2
  • SMC
  • online-filter-as-a-sampler
  • nonlinear-filter-fixes
  • SMCsamplers
  • smc-sampler
  • 4.5
  • dynamic-striated
  • occbin
  • exo_steady_state
  • filter_initial_state
  • declare_vars_in_model_block
  • exceptions
  • rmExtraExo
  • julia
  • error_msg_undeclared_model_vars
  • static_aux_vars
  • 4.5.6
  • 4.5.5
  • 4.5.4
  • 4.5.3
  • 4.5.2
  • 4.5.1
  • 4.5.0
  • 4.4.3
  • 4.4.2
  • 4.4.1
  • 4.4.0
  • 4.4-beta1
  • 4.3.3
  • 4.3.2
  • 4.3.1
  • 4.3.0
  • 4.2.5
  • 4.2.4
  • 4.2.3
  • 4.2.2
41 results

DataTree.cc

Blame
  • Forked from Dynare / dynare
    Source project has a limited visibility.
    ModelTree.cc 47.44 KiB
    /*
     * Copyright (C) 2003-2010 Dynare Team
     *
     * This file is part of Dynare.
     *
     * Dynare is free software: you can redistribute it and/or modify
     * it under the terms of the GNU General Public License as published by
     * the Free Software Foundation, either version 3 of the License, or
     * (at your option) any later version.
     *
     * Dynare is distributed in the hope that it will be useful,
     * but WITHOUT ANY WARRANTY; without even the implied warranty of
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     * GNU General Public License for more details.
     *
     * You should have received a copy of the GNU General Public License
     * along with Dynare.  If not, see <http://www.gnu.org/licenses/>.
     */
    
    #include <cstdlib>
    #include <cassert>
    #include <cmath>
    #include <iostream>
    #include <fstream>
    
    #include "ModelTree.hh"
    #include "MinimumFeedbackSet.hh"
    #include <boost/graph/adjacency_list.hpp>
    #include <boost/graph/max_cardinality_matching.hpp>
    #include <boost/graph/strong_components.hpp>
    #include <boost/graph/topological_sort.hpp>
    
    using namespace boost;
    using namespace MFS;
    
    bool
    ModelTree::computeNormalization(const jacob_map &contemporaneous_jacobian, bool verbose)
    {
      const int n = equation_number();
    
      assert(n == symbol_table.endo_nbr());
    
      typedef adjacency_list<vecS, vecS, undirectedS> BipartiteGraph;
    
      /*
        Vertices 0 to n-1 are for endogenous (using type specific ID)
        Vertices n to 2*n-1 are for equations (using equation no.)
      */
      BipartiteGraph g(2 * n);
    
      // Fill in the graph
      set<pair<int, int> > endo;
    
      for (jacob_map::const_iterator it = contemporaneous_jacobian.begin(); it != contemporaneous_jacobian.end(); it++)
        add_edge(it->first.first + n, it->first.second, g);
    
      // Compute maximum cardinality matching
      vector<int> mate_map(2*n);
    
    #if 1
      bool check = checked_edmonds_maximum_cardinality_matching(g, &mate_map[0]);
    #else // Alternative way to compute normalization, by giving an initial matching using natural normalizations
      fill(mate_map.begin(), mate_map.end(), graph_traits<BipartiteGraph>::null_vertex());
    
      multimap<int, int> natural_endo2eqs;
      computeNormalizedEquations(natural_endo2eqs);
    
      for (int i = 0; i < symbol_table.endo_nbr(); i++)
        {
          if (natural_endo2eqs.count(i) == 0)