#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.
00111 { 00112 for ( sz_t v = 0; v < sys->nvr(); v ++ ) 00113 { 00114 // std::cout << "projection : " << v << std::endl; 00115 }; 00116 };
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().
00079 { 00080 char msg[ 200 ]; 00081 switch( m_state ) 00082 { 00083 case E_CTRL: 00084 sprintf(msg,"domain control:\n\t%s\n",sysmsg); 00085 break; 00086 case E_STRGY: 00087 sprintf(msg,"strategy:\n\t%s\n",sysmsg); 00088 break; 00089 case E_RDSLV: 00090 sprintf(msg,"reduction(solveur):\n\t%s\n",sysmsg); 00091 break; 00092 case E_SBDRL: 00093 sprintf(msg,"subdivision:\n\t%s\n",sysmsg); 00094 break; 00095 case E_INIT: 00096 sprintf(msg,"initialisation:\n\t%s\n",sysmsg); 00097 break; 00098 case R_ERROR: 00099 sprintf(msg,"reduction:\n\t%s\n",sysmsg); 00100 break; 00101 case R_FAIL: 00102 sprintf(msg,"%s","reduction: projection stack is empty !\n"); 00103 break; 00104 case D_REJECT: 00105 sprintf(msg,"%s","rejection: pb in pop()\n"); 00106 }; 00107 m_dbg->output( msg ); 00108 };
void launch | ( | system * | sys, | |
Prm & | prm, | |||
Bounds * | inits, | |||
method_debug * | dbg = 0 | |||
) | [inline] |
Definition at line 169 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().
00172 { 00173 m_seq = 0; 00174 m_niter = 0; 00175 m_nsbd = 0; 00176 /* si la stream de debug n'est pas fourni on utilise celle donnée par défaut */ 00177 m_dbg = (dbg)?dbg:&m_dbgdefault; 00178 unsigned answ; 00179 sys->receiver(this); /* la methode ecoute les messages du systeme */ 00180 m_state = E_INIT; 00181 sys->init( inits ); /* initialisation du domaine de recherche */ 00182 /* tant que la pile de domaines n'est pas vide */ 00183 while ( sys->current() ) /* tant que la pile de domaines n'est pas vide */ 00184 { 00185 // 12 00186 // if ( m_niter == 12 ) std::cout << "POPO\n"; 00187 m_niter++; 00188 m_seq ++; 00189 sys->reset(); 00190 /* on passe le domaine à la classe de contrôle */ 00191 m_state = E_CTRL; 00192 // vctops::print(sys->current(),sys->nvr()); 00193 answ = prm.check(sys->current(),sys->nvr()); 00194 /* si elle retourne false on rejette le domaine */ 00195 m_state = D_REJECT; if ( !answ ) { sys->pop(); continue; }; 00196 /* on applique la strategie qui consiste à remplir la pile de projection */ 00197 m_state = E_STRGY, answ = m_strgy.process(sys); 00198 /* pour une raison inconnue la strategie veut que l'on accepte le domaine*/ 00199 if ( m_state == C_ACCEPT ) { 00200 // std::cout << " ACCEPT = STRGY\n"; 00201 prm.output(sys->current(),sys->nvr()); sys->pop(); continue; }; 00202 /* la strategie peut rejeter le domaine */ 00203 m_state = D_REJECT; if ( !answ ) { sys->pop(); continue; }; 00204 /* phase de réduction du domaine par l'utilisation de la pile de projection */ 00205 00206 if ( sys->thickness() ) { 00207 // std::cout << "ACCEPT = THICK \n"; 00208 prm.output(sys->current(),sys->nvr()); sys->pop(); continue; }; 00209 00210 switch(reduction(sys)) 00211 { 00212 case R_REJECT: /* le domaine est à rejeter */ 00213 m_state = R_REJECT; 00214 sys->pop(); 00215 continue; 00216 case R_ISOK: /* le domaine est réduit */ 00217 m_state = R_ISOK; 00218 break; 00219 case R_WEAK: /* la réduction n'est pas acceptée */ 00220 break; 00221 case R_FAIL: /* échec de la réduction */ 00222 m_state = R_FAIL; 00223 error(""); 00224 break; 00225 }; 00226 00227 if ( m_state == R_ISOK ) { sys->dreset(); }; 00228 00229 if ( sys->prc() < sys->peps() ) 00230 { 00231 // std::cout << " ACCEPT = PREC\n"; 00232 prm.output(sys->current(),sys->nvr()); 00233 sys->pop(); 00234 } 00235 else 00236 { 00237 if ( m_state != R_ISOK ) 00238 { 00239 m_seq = 0; 00240 m_nsbd ++; 00241 m_state = E_SBDRL; 00242 if ( !m_sbdrl.process(sys) ) { 00243 // std::cout << " ACCEPT = SBD\n"; 00244 prm.output(sys->current(),sys->nvr()); sys->pop(); 00245 }; 00246 }; 00247 }; 00248 }; 00249 00250 };
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().
00127 { 00128 int nvrTemp = sys->nvr(); 00129 00130 // std::vector<interval_t> ri[nvrTemp]; 00131 00132 std::vector<interval_t> *ri = new std::vector<interval_t>[nvrTemp]; 00133 00134 m_state = R_FAIL; 00135 for ( sz_t v = 0; v < sys->nvr(); v ++ ) 00136 { 00137 if ( sys->projections(v).nbp() == 0 ) continue; 00138 m_state = E_RDSLV; 00139 creal_t prc = sys->current()[v].size(); 00140 creal_t eps = std::min(std::max(sys->peps()/(10*prc),(creal_t)1e-4),(creal_t)1e-2); 00141 if ( ! m_rdslv.process(ri[v],sys->projections(v),eps) ) return R_REJECT; 00142 }; 00143 00144 if ( m_state == R_FAIL ) { 00145 delete ri; 00146 return R_FAIL; 00147 }; 00148 /* on propose les réductions au système, c'est à lui de disposer */ 00149 int r = sys->reduce(ri,sys->nvr())?R_ISOK:R_WEAK; 00150 00151 delete ri; 00152 00153 return r; 00154 };
void subdivision | ( | system * | sys | ) | [inline] |
Definition at line 157 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 161 of file system_method.hpp.
Referenced by method< system, _strgy_, _rdslv_, _sbdrl_ >::launch(), and solver< C, ProjRd< MTH > >::solve_monomial().
int m_nsbd |
Definition at line 164 of file system_method.hpp.
Referenced by method< system, _strgy_, _rdslv_, _sbdrl_ >::launch(), and solver< C, ProjRd< MTH > >::solve_monomial().
_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 165 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().