Science Blog





Original article:

http://bayesclasses.sourceforge.net/Bayes++.html

Bayes ++

Deschide Clasele Source Bayesian de filtrare

Michael Stevens

Filtrarea Bayesian este o tehnica probabilistic pentru fuziunea datelor. Tehnica combina o formulare matematică concisă a unui sistem cu observații ale sistemului. Probabilitățile sunt folosite pentru a reprezenta starea unui sistem, funcții probabilitatea de a reprezenta relatiile lor. În această formă inferență Bayesian poate fi aplicat și probabilități suplimentare legate de dedus. Vezi Wikipedia pentru informații privind teoria probabilităților, teorema Bayes, inferenta Bayesian.

Pentru sistemele discrete rezultatele formulare Bayesian într-o soluție de fuziune date natural iterativ. Pentru sisteme dinamice există o clasă de soluții, filtre discrete, care combina rezultate observate ale sistemului cu model dinamic al sistemului. Un estimator calculează o estimare a statului sistemelor cu fiecare observație a sistemului. Estimativi liniare, cum ar fi Filtrul Kalman sunt de obicei aplicate.

Bayes ++ este o bibliotecă open source de C ++ clase. Aceste clase reprezintă și să pună în aplicare o varietate de algoritmi numerici pentru Bayesian Filtrarea sistemelor discrete. Clasele oferă metode numerice testate și coerente și ierarhia de clasă reprezintă în mod explicit varietatea de algoritmi de filtrare si tipuri de modele de sistem.

Exemplu simplu

Acesta este exemplu foarte simplu; pentru cei care nu au utilizat niciodată clase Bayesian de filtrare înainte. Dacă doriți să vedeți cât de simplu este de a folosi Bayes++ atunci Vezi Sursa.

Exemplul arată cum sunt create două clase. Primul este modelul de predicție, al doilea model de observație. În acest exemplu reprezintă o problemă simplă liniară cu un singur stat zgomote modele variabile și constante. Un filtru siguranțe rezultatele predicție și observare.

Vezi clasele Bayesian de filtrare pentru o descriere a claselor utilizate și toate cele trei exemple prevăzute cu Bayes++.

Compilarea Exemple

În primul rând descărca și extrage Bayes ++ și, de asemenea, biblioteca Boost. Boost este folosit pentru a furniza independență compilator, și un sistem comun construi. Sunt utilizate două biblioteci antet Boost: uBLAS pentru algebra liniară, și aleatorie pentru PV și exemplele QuadCalib. Anteturile Boost poate fi plasat oriunde în raport cu Bayes++, dar este ușor dacă urmați această structură:

…sourceDirectory

Bayes++
BayesFilter
PV
QuadCalib
Simple
Test
boost_1_55_0
boost
etc

 

Utilizarea sistemului de versiunea Boost Build 2 este cea mai bună modalitate de a compila exemple. Utilizați b2 (Boost gem) Programul pentru a construi Bayes ++ într-o singură etapă. Documentația în copie descărcat de Boost explică modul de a obține și instala cea mai recentă versiune a sistemului de Build Boost tine. Pentru ca totul sa lucreze executa b2 cu set de instrumente necesare, precum și locația în care ați instalat Boost.
Pentru a construi Bayes ++ și exemplele cu GCC simplu executa: (Bayes ++ ar trebui să fie directorul curent)

b2 toolset=gcc link=static cxxflags=-Wno-unused-local-typedefs -sBOOST_ROOT="../boost_1_55_0"

OR pentru Visual C ++ executa:

b2 toolset=msvc link=static -sBOOST_ROOT="../boost_1_55_0"

Este posibil să se lucreze fără variabila BOOST_ROOT fie prin crearea unui fișier build_build.jam in sourceDirectory (sau mai sus), fie prin stabilirea o ca o variabilă de mediu.

Locație de exemple compilate și biblioteci

Executabilele pentru cele trei exemple vor fi plasate într-un nume țintă director ierarhie. Biblioteci statice pentru depanare și eliberarea construiește bibliotecii BayesFilter sunt plasate în țintă/BayesFilter. Directorul țintă și subdirectoarele sale sunt create automat.

Visual C ++ soluție

Pentru Visual C ++ 2008, etc, puteți utiliza, de asemenea, Bayes ++. Soluția SLN și configurația activ uBLAS Debug. Opțiunile de compilare trebuie să fie stabilită astfel încât Boost include fișierele pot fi găsite. Că este, includ calea trebuie să conțină directorul de bază de Boost. În acest caz, directorul impuls local. In VC7.1 ar trebui să faceți acest lucru prin alegerea Tools/Options/Proiecte/VC ++ Directoare opțiunea.

Visual C ++ 7.0 necesită utilizarea Boost versiune 1_32_0. Visual C ++ 7.1 (sau mai târziu) necesită Boost versiunea 1_33_0 (sau mai târziu) .I

Licensing

Fișierele cod sursă Toate Bayes ++ sunt drepturi de autor cu condițiile de licență ca dată aici. Anunțul de autor este că a licenței MIT. Acest restricționează în nici un fel utilizarea comercială ați putea dori să utilizați codul nostru sursă. Atâta timp cât vă respecte condițiile de autor și licențe, Michael Stevens și Centrul Australian de teren Robotica sunt fericiți să vă să-l folosească în orice mod doriți.

Bayes ++ Filtrare Biblioteca Bayesian

Copyright (c) 2003,2004,2005,2006,2011,2012,2014 Michael Stevens, Copyright (c) 2002 Michael Stevens și australian Centrul de teren Robotica

Permisiunea este acordată prin prezenta, cu titlu gratuit, oricărei persoane care obține o copie a acestui software și a fișierelor de documentație asociate (“Software-ul”), pentru a face față în software-ul fără restricție, inclusiv, dar fără a se limita la drepturile de a folosi, copia, modifica, uni , publica, distribui, sublicenția și / sau vinde copii ale software-ului, și de a permite persoanelor cărora Software-ul este mobilat să facă acest lucru, în următoarele condiții:

Notificare de copyright și prezentul aviz permisiune trebuie incluse în toate copiile sau porțiunile substanțiale ale Software-ului.

SOFTWARE-UL ESTE OFERIT “CA ATARE”, FĂRĂ NICIUN FEL DE GARANȚIE, EXPLICITĂ SAU IMPLICITĂ, INCLUSIV, DAR FĂRĂ A SE LIMITA LA GARANȚII DE COMERCIALIZARE, POTRIVIRE PENTRU UN ANUMIT SCOP ȘI NEÎNCĂLCĂRII. ÎN NICI UN CAZ autorilor sau COPYRIGHT DEȚINĂTORII VOR FI RESPONSABILI PENTRU ORICE REVENDICARE, DAUNE SAU ALTE RĂSPUNDERE, FIE ÎN ACȚIUNE DE CONTRACT SAU ALTFEL, PROVENITE DIN, DIN SAU ÎN LEGĂTURĂ CU SOFTWARE-UL SAU UTILIZAREA SAU ALTE tranzacții cu astfel de SOFTWARE.

SLAM: Sediu simultană și Cartografie

SLAM este una dintre cele mai interesante probleme în filtrarea Bayesian. Este structura implică faptul că nu pot fi rezolvate în mod corect, fără a utiliza abordarea stocastice. Acest lucru se datorează statelor mapate fiind dependentă de alte state mapate și statul localizare. Această dependență face, de asemenea, complexul problema, prin urmare, o abordare simplă, cum ar fi, reprezentând toate corelațiile nu este maleabil pentru un număr mare de state.

Bayes ++ a fost folosit pentru a implementa diverse simplu și unele soluții mai avansate SLAM. În special, a fost pusă în aplicare o implementare completă a FastSLAM. Această tehnică este descrisă în lucrarea “FastSLAM: luat soluție pentru simultane localizarea și Mapping problema”, M. Montemerlo, S. Thrun S, D. Koller, B. Wegbreit, Proceedings ale Conferinței Naționale AAAI pe Inteligenta Artificiala 2002.

Implementare Bayes ++ de FastSLAM și foarte simplu de punere în aplicare SLAM Kalman (corelație complet) este disponibil ca parte a celui mai recent descărcarea.

Scilab, Matlab, MuPAD

Aceste instrumente matematice sunt deosebit de utile pentru vizualizarea rezultatelor filtrare. Cu toate acestea toate sunt destul de lent, și este foarte ușor de a produce foarte slab implementat filtre în limbile lor de programare. Din fericire, toate aceste instrumente oferă mecanisme de extindere cu programele externe. Exemplu cod interfață este prevăzută în repertoriul Bayes ++ GIT pentru Matlab.

Portabilitate

Bayes ++ face uz de ISO C ++ standardului numai. Codul sursă folosește moderat avansa construcții C ++. Se face uz restricționată de C ++ sistemul șablon direct numai. Cu toate acestea bibliotecile Boost utilizate (în special uBLAS) să folosească pe scară largă a tehnicilor de șablon. Boost include, de asemenea multe soluții pentru deficiențe compilator. Prin urmare, cu câteva modificări Bayes ++ ar trebui să lucreze cu orice compilator C ++ moderne susținută de Boost.

Bayes ++ este testat cu: GCC 4.x, și VisualC ++ 2008

Versiunile ulterioare ale 3.x GCC și GCC 4.x ar trebui să ruleze, de asemenea, Bayes ++ fără probleme. Cu toate acestea GCC 3.3.0 este cunoscut a fi incompatibile cu uBLAS și pentru a produce cod incorect cu -O2 optimizare.

VisualC ++ 7.1 necesită adesea opțiunea/Zm pentru a fi utilizate pentru a putea compila antete complexe.

Criterii de eliberare

Aceasta eliberează este validat folosind compilatoare și versiunile Boost enumerate mai sus, utilizând următoarele teste.

  1. Sistemul construi: Compatibilitatea cu Boost Build versiunea 2.
    Construi cu succes complet de biblioteci implicite și exemple.
    Construi cu succes completă a sistemului SLAM.
  2. Exemple de testare: simpleExample, PV, QuadCalib
    Compila depanare și eliberare construiește (folosind Boost Build versiunea 2): – fără erori și fără avertismente.
    Ieșire executie: – Identic la rezultate de referință așteptate.
  3. Teste numerice: rtheta – unghi Range observator.
    Un unghi gamă de testare observator non-linear. Observatorul se mișcă într-un spațiu stare dimensional 2. Predictie mișcare apare cu un model liniar cu aditiv de zgomot. Cele două state sunt cuplate atât în ​​modelul și aditiv de zgomot. Se observă Gama și unghiul de o țintă fixă. Ținta este plasată astfel întrerupe sunt respectate unghiuri.
    Atât de stat și observațiile au observat stări suplimentare care nu sunt singulare (). Dimensiunile modelului, parametrii de cuplare și tipuri de modele poate fi variat pentru teste suplimentare. Toate sistemele sunt testate peste 5 iterații ale modelului. Schema de SIR este testat cu 1000 probe.
    Deoarece diferite implementări rezultatele numerice nu sunt de așteptat să fie identice între sistemele. De aceea Testarea necesită:
    Testarea de regresie: – Changed in ieșire pentru orice sistem de versiunea precedentă.
    Testarea consistență: – Compararea a producției pentru perechile Schema știu să producă rezultate numeric similare.
  4. Încercare SLAM: testFastSLAM
    Testarea consistență: – Compararea FastSLAM duce cu 1.000.000 de probe cu Kalman SLAM. Abaterile de stat și covarianței de așteptat să fie de aproximativ 1/1000th.

FAQ

Întrebări au răspuns în Bayes ++ FAQ

Ce este nou în Bayes ++ 2014.5-1

Testat cu Boost 1.55.0 și-gcc 4.8.

Document care b2 necesită link = opțiune static atunci când compilarea exemple.

Recomanda utilizarea CXXFLAGS = -Wno-neutilizate-locale-typedefs pentru set de instrumente GCC, pentru a evita o mulțime de texte de avertizare cu GCC 4.8.

Ce este nou în Bayes ++ 2,012.5-1

Redenumit toate clasele care au fost denumite anterior “addative” să fie numit “aditiv”.

Testat cu Boost 1.49.0.

Comentariile de curatare in sursa.

Ce este nou în Bayes ++ 2,010.8-1

Documentație Cleanup și de a construi fișiere pentru a face lucrurile construi cu ușurință.

Ce este nou în Bayes ++ 2,003.8-5

Suport pentru și necesită Boost 1_33_0.

Sprijin compilator

Lista compilatoare pentru care Bayes ++ este construit și testat a fost de actualizare.

Ce este nou în Bayes ++ 2,003.8-4

Noi de documentare și de sprijin pentru Boost 1_32_0.

Covarianțe propoziții sunt acum calculate folosind definiția pentru Risc estimarea maximă (părtinitoare). Această estimare simplu devides cu 1 / n numărul de probe, mai degrabă decât 1 / (n-1). Vezi Statisticile propoziții din Wikipedia.

Sprijin compilator

Lista compilatoare pentru care Bayes ++ este construit și testat a fost de actualizare.

Bayes ++ 2,003.8-3

Corectează documentație și suport pentru Build Boost (versiunea 1).

SLAM a fost actualizat la versiunea curentă de dezvoltare.

Sprijin compilator

GCC 3.4 necesită un cuplu de remedieri typename la uBLAS (Boost_1_31_0 sau mai devreme).

Bayes ++ 2,003.8-2

Noi Suport Boost

Bayes ++ este testat cu ambele Boost-1.30.2 și Boost_1_31_0.

Jens Mauer a lucrat din greu la obtinerea impuls :: aleatoare acceptat ca parte a viitorului C ++ biblioteca standard. În acest scop, au fost modificări substanțiale interfața sa. Noua bibliotecă este acum parte a Boost_1_31_0. Exemple Bayes ++ folosi boost :: aleatoare. Deci lucruri migreaza bine am adaugat un nou “test / random.hpp” header care ascunde modificările de interfață.

Foarte excelent sistem Boost Build Versiunea 2 a avansat foarte mult recent. Bayes ++ este construit cu sistem standard Boost Build. Bayes ++ are toate necesare “Jamfiles.v2″ a fi construit cu sistemul Boost Build.

Extensii Schema

UD_scheme respecte funcții au avut capacitățile lor numerice prelungit. Acum este posibil de a lucra cu singular (varianta zero) matrici covarianță.

Unscented_scheme are funcție suplimentară init_XX () și update_XX () pentru a permite accesul la o reprezentare de stat Unscented.

Remedieri numerice

O eroare în calcul covarianță SIR_kalman_schemes a fost stabilit. Această eroare efectuat, de asemenea, punerea în aplicare Fast_kalman_SLAM. Eroarea a fost semnificativa pentru dimensiuni mici mici.

Bayes ++ 2003-5

Misiune “noalias”

Pentru o eficiență este important să se evite crearea de matrice și vectori copii temporare. Cu excepția cazului în a spus altfel nu este posibil ca uBLAS pentru a determina dacă aceeași matrice sau vector variabila este specificat atât în ​​partea stângă și dreaptă a unei operațiuni de atribuire. Dacă apare o astfel variabilă este declarat a fi un alias. Deoarece atribuire implică mai mult de un element, prezența unui alias impune ca o misiune calcula mai întâi un rezultat temporar înainte variabila alias este modificat.

Comportamentul implicit uBLAS este de a crea un astfel de temporare. Dacă cesiunea este cunoscut a fi liber de alias acest lucru ar trebui evitat. Anterior un astfel de cesiune optimizat a fost specificată cu .assign () funcțiile membre. Pentru a îmbunătăți lizibilitatea codului am adaugat un nou sintaxă pentru misiune. În cazul în care nu alias de variabile atribuite (lvalue) apare în expresia de pe partea dreaptă de utilizare atribuire:

noalias (lvaloare) = expresie;
Această nouă sintaxă este experimental, dar va fi, probabil, parte dintr-o versiune viitoare uBLAS. În prezent, punerea în aplicare introduce o deasupra capului mic de pe compilatoare acceptate. Aceasta include GCC 3.2.

Bayes ++ 2003-3

Filtrele sunt numite _filter, sistemele sunt numite _scheme

Filtre abstracte și scheme numerice anterior a avut toate numele care se termină în _filter. Pentru a face lucrurile mai simple, numirea a fost schimbat pentru a face o separare clară în ceea ce este o ierarhie de două nivel.

Filtre află la baza ierarhiei. Schemele sunt întotdeauna derivate din una sau mai multe filtre. Filtre reprezintă concepte abstracte, cum ar fi statisticile de reprezentare de stat și de interfață model. Scheme sunt implementări concrete ale unui filtru cu toate detaliile numerice și interfețele finalizate.

Ca parte a acestei schimbări statisticile de reprezentare de stat au fost efectuate cursuri de bază virtuale. Această schimbare este proiectat pentru a permite mai multor sisteme de combinate (folosind moștenire multiplă) și cota de reprezentare a acestora. Schimbarea adaugă un pic mai mult de lucru, dacă alegeți pentru a obține dintr-o clasă sistem. Constructorii de clasa derivată trebuie să apeleze constructorii pentru clasele de bază virtuale direct.

Schema Intersect covarianță adăugat

În cele din urmă algoritmul CI a fost implementat ca un sistem în Bayes ++. CI este interesant deoarece oferă o fuziune mai slabă, dar mai robust atunci metoda tradițională covarianță bazează, cum ar fi filtrul Kalman. Se estimează de stat și o limită superioară de ceea ce ar putea fi covarianță sale.

De fapt, doar algebra matrice asociată cu CI a este inclus. Schema CI_filter oferă o funcție virtuală unde utilizatorul trebuie să definească algoritmul real optimizare să fie utilizate.

Infrastructura importanță Reeșantionarea adăugat

Flexibilitatea SIR_filter a fost mult îmbunătățit. Un nou Importance_resampler clasa a fost adăugat. Ori de câte ori SIR_filter trebuie să re-proba se utilizează și parametri Importance_resampler. Prin urmare, prin modificarea acestui parametru, diferite re-eșantionarea poate fi folosit.

Punere în aplicare două sunt furnizate. Standard_resampler și Systematic_resampler. Vezi publicațiile referință pentru discuții suplimentare a acestor metode.

Gappy Matrice

Interfața matrice a fost îmbunătățit în continuare. Acestea îmbunătățire necesită uBLAS din boost_1_30_0. Cu această versiune este suportul experimental pentru utilizarea uBLAS matrice gappy si vectori (rare, comprimat, coordonate).

Suportul experimental face toate Bayes ++ folosesc un tip de stocare uBLAS selectat. Verifica matSupSub.hpp pentru macro de necesară pentru a permite acest lucru. Algoritmii utilizați este Bayes ++ sunt modernizate pentru a efectua mai bine cu tipuri rare.

Produsele mult_SPD nu mai sunt suportate. Acestea sunt înlocuite cu interfața prod_SPD.

Drepturi de autor

Copyright (c) 2003, 2004, 2005 Michael Stevens. Acest document este parte a bibliotecii Bayes ++ – vezi licențiere secțiunea pentru detalii licență de autor.

 

  • Cars World
  • Dreams Interpretations