| 
    realroot_doc 0.1.1 
   | 
 
#include <system_method.hpp>
  
 Definition at line 58 of file system_method.hpp.
| typedef system::creal_t creal_t | 
Definition at line 60 of file system_method.hpp.
| typedef system::interval_t interval_t | 
Definition at line 61 of file system_method.hpp.
| typedef system::sz_t sz_t | 
Definition at line 62 of file system_method.hpp.
| void accept | ( | ) |  [inline, virtual] | 
        
Implements method_base.
Definition at line 72 of file system_method.hpp.
References mmx::realroot::C_ACCEPT, and method< system, _strgy_, _rdslv_, _sbdrl_ >::m_state.
| void check_pstack | ( | system * | sys | ) |  [inline] | 
        
Definition at line 110 of file system_method.hpp.
    {
      for ( sz_t v = 0; v < sys->nvr(); v ++ )
        {
          //      std::cout << "projection : " << v << std::endl;
        };
    };
| void error | ( | const char * | sysmsg | ) |  [inline, virtual] | 
        
Implements method_base.
Definition at line 78 of file system_method.hpp.
References mmx::realroot::D_REJECT, mmx::realroot::E_CTRL, mmx::realroot::E_INIT, mmx::realroot::E_RDSLV, mmx::realroot::E_SBDRL, mmx::realroot::E_STRGY, method< system, _strgy_, _rdslv_, _sbdrl_ >::m_dbg, method< system, _strgy_, _rdslv_, _sbdrl_ >::m_state, method_debug::output(), mmx::realroot::R_ERROR, and mmx::realroot::R_FAIL.
Referenced by method< system, _strgy_, _rdslv_, _sbdrl_ >::launch().
    {
      char msg[ 200 ];
      switch( m_state )
        {
        case E_CTRL:
          sprintf(msg,"domain control:\n\t%s\n",sysmsg);
          break;
        case E_STRGY:
          sprintf(msg,"strategy:\n\t%s\n",sysmsg);
          break;
        case E_RDSLV:
          sprintf(msg,"reduction(solveur):\n\t%s\n",sysmsg);
          break;
        case E_SBDRL:
          sprintf(msg,"subdivision:\n\t%s\n",sysmsg);
          break;
        case E_INIT:
          sprintf(msg,"initialisation:\n\t%s\n",sysmsg);
          break;
        case R_ERROR:
          sprintf(msg,"reduction:\n\t%s\n",sysmsg);
          break;
        case R_FAIL:
          sprintf(msg,"%s","reduction: projection stack is empty !\n");
          break;
        case D_REJECT:
          sprintf(msg,"%s","rejection: pb in pop()\n");
        };
      m_dbg->output( msg );
    };    
| void launch | ( | system * | sys, | 
| Prm & | prm, | ||
| Bounds * | inits, | ||
| method_debug * | dbg = 0  | 
        ||
| ) |  [inline] | 
        
Definition at line 159 of file system_method.hpp.
References mmx::realroot::C_ACCEPT, mmx::realroot::D_REJECT, mmx::realroot::E_CTRL, mmx::realroot::E_INIT, mmx::realroot::E_SBDRL, mmx::realroot::E_STRGY, method< system, _strgy_, _rdslv_, _sbdrl_ >::error(), method< system, _strgy_, _rdslv_, _sbdrl_ >::m_dbg, method< system, _strgy_, _rdslv_, _sbdrl_ >::m_dbgdefault, method< system, _strgy_, _rdslv_, _sbdrl_ >::m_niter, method< system, _strgy_, _rdslv_, _sbdrl_ >::m_nsbd, method< system, _strgy_, _rdslv_, _sbdrl_ >::m_sbdrl, method< system, _strgy_, _rdslv_, _sbdrl_ >::m_seq, method< system, _strgy_, _rdslv_, _sbdrl_ >::m_state, method< system, _strgy_, _rdslv_, _sbdrl_ >::m_strgy, mmx::realroot::R_FAIL, mmx::realroot::R_ISOK, mmx::realroot::R_REJECT, mmx::realroot::R_WEAK, and method< system, _strgy_, _rdslv_, _sbdrl_ >::reduction().
Referenced by solver< C, ProjRd< MTH > >::run(), and solver< C, ProjRd< MTH > >::solve_monomial().
    {
      m_seq   = 0;
      m_niter = 0;
      m_nsbd  = 0;
      /* si la stream de debug n'est pas fourni on utilise celle donnée par défaut */
      m_dbg = (dbg)?dbg:&m_dbgdefault;
      unsigned answ;
      sys->receiver(this);       /* la methode ecoute les messages du systeme */
      m_state = E_INIT;
      sys->init( inits );  /* initialisation du domaine de recherche    */
      /* tant que la pile de domaines n'est pas vide */
      while ( sys->current() ) /* tant que la pile de domaines n'est pas vide */
        {
          // 12
          //      if ( m_niter == 12 ) std::cout << "POPO\n";
          m_niter++;
          m_seq ++;
          sys->reset();
          /* on passe le domaine à la classe de contrôle */
          m_state = E_CTRL;
          //      vctops::print(sys->current(),sys->nvr());
          answ = prm.check(sys->current(),sys->nvr());
          /* si elle retourne false on rejette le domaine */
          m_state = D_REJECT; if ( !answ ) { sys->pop(); continue; };
          /* on applique la strategie qui consiste à remplir la pile de projection */
          m_state = E_STRGY, answ = m_strgy.process(sys);
          /* pour une raison inconnue la strategie veut que l'on accepte le domaine*/
          if ( m_state == C_ACCEPT ) { 
            //      std::cout << " ACCEPT = STRGY\n";
            prm.output(sys->current(),sys->nvr()); sys->pop();  continue; };
          /* la strategie peut rejeter le domaine                                  */
          m_state = D_REJECT; if ( !answ ) { sys->pop(); continue; };
          /* phase de réduction du domaine par l'utilisation de la pile de projection          */
          if ( sys->thickness()  ) { 
            //      std::cout << "ACCEPT = THICK \n";
            prm.output(sys->current(),sys->nvr()); sys->pop();  continue; };
          switch(reduction(sys))
            {
            case R_REJECT:  /* le domaine est à rejeter */
              m_state = R_REJECT;
              sys->pop(); 
              continue;
            case R_ISOK:      /* le domaine est réduit    */
              m_state = R_ISOK;
              break;
            case R_WEAK:   /* la réduction n'est pas acceptée */
              break;
            case R_FAIL:   /* échec de la réduction    */
              m_state = R_FAIL;
              error("");
              break;
            };
          
          if ( m_state == R_ISOK ) { sys->dreset(); };
          
          if ( sys->prc() < sys->peps() )
            {
              //              std::cout << " ACCEPT = PREC\n";
              prm.output(sys->current(),sys->nvr());
              sys->pop();
            }
          else
            {
              if ( m_state != R_ISOK )
                {
                  m_seq = 0;
                  m_nsbd ++;
                  m_state = E_SBDRL;
                  if ( !m_sbdrl.process(sys) ) { 
                    //          std::cout << " ACCEPT = SBD\n";
                    prm.output(sys->current(),sys->nvr()); sys->pop(); 
                  };
                };
            };
        };
    };
| int reduction | ( | system * | sys | ) |  [inline] | 
        
Definition at line 126 of file system_method.hpp.
References mmx::realroot::E_RDSLV, method< system, _strgy_, _rdslv_, _sbdrl_ >::m_rdslv, method< system, _strgy_, _rdslv_, _sbdrl_ >::m_state, mmx::vctops::max(), mmx::min(), mmx::realroot::R_FAIL, mmx::realroot::R_ISOK, mmx::realroot::R_REJECT, and mmx::realroot::R_WEAK.
Referenced by method< system, _strgy_, _rdslv_, _sbdrl_ >::launch().
    {
      std::vector<interval_t> ri[ sys->nvr() ];
      m_state = R_FAIL;
      for ( sz_t v = 0; v < sys->nvr(); v ++ )
        {
          if ( sys->projections(v).nbp()  ==  0 ) continue;
          m_state = E_RDSLV;
          creal_t prc = sys->current()[v].size();
          creal_t eps = std::min(std::max(sys->peps()/(10*prc),(creal_t)1e-4),(creal_t)1e-2);
          if ( ! m_rdslv.process(ri[v],sys->projections(v),eps) ) return R_REJECT;
        };      
      
      if ( m_state == R_FAIL ) { 
        return R_FAIL;
      };
      /* on propose les réductions au système, c'est à lui de disposer */
      return  sys->reduce(ri,sys->nvr())?R_ISOK:R_WEAK;
    };
| void subdivision | ( | system * | sys | ) |  [inline] | 
        
Definition at line 147 of file system_method.hpp.
References mmx::realroot::E_SBDRL, method< system, _strgy_, _rdslv_, _sbdrl_ >::m_sbdrl, and method< system, _strgy_, _rdslv_, _sbdrl_ >::m_state.
Definition at line 63 of file system_method.hpp.
Referenced by method< system, _strgy_, _rdslv_, _sbdrl_ >::error(), and method< system, _strgy_, _rdslv_, _sbdrl_ >::launch().
Definition at line 64 of file system_method.hpp.
Referenced by method< system, _strgy_, _rdslv_, _sbdrl_ >::launch().
| int m_niter | 
Definition at line 151 of file system_method.hpp.
Referenced by method< system, _strgy_, _rdslv_, _sbdrl_ >::launch().
| int m_nsbd | 
Definition at line 154 of file system_method.hpp.
Referenced by method< system, _strgy_, _rdslv_, _sbdrl_ >::launch().
| _rdslv_<system> m_rdslv | 
Definition at line 67 of file system_method.hpp.
Referenced by method< system, _strgy_, _rdslv_, _sbdrl_ >::reduction().
| _sbdrl_<system> m_sbdrl | 
Definition at line 68 of file system_method.hpp.
Referenced by method< system, _strgy_, _rdslv_, _sbdrl_ >::launch(), and method< system, _strgy_, _rdslv_, _sbdrl_ >::subdivision().
| int m_seq | 
Definition at line 155 of file system_method.hpp.
Referenced by method< system, _strgy_, _rdslv_, _sbdrl_ >::launch().
| int m_state | 
Definition at line 70 of file system_method.hpp.
Referenced by method< system, _strgy_, _rdslv_, _sbdrl_ >::accept(), method< system, _strgy_, _rdslv_, _sbdrl_ >::error(), method< system, _strgy_, _rdslv_, _sbdrl_ >::launch(), method< system, _strgy_, _rdslv_, _sbdrl_ >::reduction(), and method< system, _strgy_, _rdslv_, _sbdrl_ >::subdivision().
| _strgy_ m_strgy | 
Definition at line 66 of file system_method.hpp.
Referenced by method< system, _strgy_, _rdslv_, _sbdrl_ >::launch().