?? bayes++.html
字號:
observed.<BR>Both the state and the observations have additional nonobserved (singular) states. Model sizes, coupling parameters andmodel types can be varied for additional tests. All schemes aretested over 5 iterations of the model. The SIR scheme istested with 1000 samples.<BR>Because the different numericalimplementations results are not expected to be identical betweenSchemes. Therefore testing requires:<BR>Regression testing :-Changed in output for any Scheme from the previousrelease.<BR>Consistency testing :- Comparison of the output forScheme pairs know to produce numerically similar results.</P><LI><P>SLAM test: testFastSLAM<BR>Consistency testing :- Comparisonof FastSLAM result with 1,000,000 samples with Kalman SLAM.Deviations of state and covariance expected to be approx 1/1000th.</P></OL><H2>FAQ</H2><H4>Does Bayes++ do Kalman Filtering?</H4><P>Yes, there are many Kalman filter implementations in Bayes++. InBayes++, the Kalman Filter and the Extended Kalman Filter (EKF) areimplemented by the <I>Covariance_filter</I> Scheme.</P><H4>How fast is Bayes++?</H4><P>Pretty quick! Depends on the filter Scheme used. The <I>UD_filter</I>is smallest and fastest Scheme. The best way to speed things up is towork on optimised use of uBLAS and to optimized uBLAS itself for youcompiler.</P><H4>What is a 'Scheme'?</H4><P>A 'Scheme' is the term used in Bayes++ to define a particularnumerical implementation of a filter. Each Scheme is based on one ofa few statistical representations of state. Different schemes work onthese statistics using different numerical techniques. The aim ofBayes++ is to provides common interfaces to Schemes so you can pickan choose which to use.</P><H4>Why should I use Bayes++? After all, writing a Kalman filter inMatlab is not too hard.</H4><P>For a simple test this may be true. If you have ever tried to dealwith the wide variety of numerical failures and normalizationsrequired to deal with discontinues model, you will realize that thereis more to implementing a Kalman filter then a hand full of linearalgebra equations!</P><P>Many DIY Kalman filter implementations fail as they do notmaintain the symmetry of matrices. If this is problem is corrected,they usually use numerically inaccurate algorithms and also willsilently continue to operate even when the results no longer makesense. The matrices are ill conditioned! All these hard problems havebeen solved for you by Bayes++.</P><P>However Bayes++ most powerful feature is <B>not</B> that it justdoes things correctly! It provides a consistent methodology to applymultiple Bayesian filtering techniques. Once you have codified themodels that represent a problem you can solve your problem with manydifference Bayesian filtering techniques. These may be simple linearfilters such as the <I>Information_filter</I> scheme, or even aparticle filter such as the <I>SIR_filter</I> scheme.</P><H4>Is Bayes++ stable?</H4><P>Although many things have been added to Bayes++ over the last twoyears they have only added to the variety of implementations.Bayes++'s interface has now reached a very mature stage with littleor no change required to add new Schemes. Be aware however that theMatrix support implementation (anything in namespaceBayesian_filter_matrix) may change to accommodate matrix librarychanges.</P><P>The implementations of filtering Schemes included in the webrelease, have all been tested with a standard range angle observationproblem. I also use the filtering Schemes for my own work, and so doothers at the <A HREF="http://www.acfr.usyd.edu.au/">AustralianCentre for Field Robotics</A> and all over the world.</P><H4>Do I need to program in C++ to use Bayes++?</H4><P>Yes! Bayes++ was developed to provide the maximum functionality inC++. A good C++ text book will help you understand how Bayes++ works.There is no need to learn C programming first. Learning C is not agood introduction to modern C++ programming techniques used inBayes++. I would recommend Deitel and Deitel, "C++: How toProgram", Second Edition, Prentice Hall, ISBN 0-13-528910-6. Itis an excellent beginners book; and includes many useful tips and athorough understanding of the language.</P><H4>Where are the PDFs?</H4><P>Bayes rule is usually defined in term of Probability DensityFunctions. However PDFs never appear in Bayes++. They are alwaysrepresented by their statistics. This is for good reason, thereis very little that can be done algorithmically with such a function.However the sufficient statistics, given the assumptions of a filter,can be easily manipulated to implement Bayes rule. This is essentialwhat Kalman developed for linear systems.</P><P>Each filter scheme is derived from one or more virtual baseclasses that represent the statistics used. For example the<I>Kalman_state_filter</I> and <I>Sample_filter</I> base classes.</P><H4>What Matrix library do you recommend?</H4><P>As of version 1_29_0 <A HREF="http://www.boost.org/"><B>Boost</B></A>includes a public release of the <A HREF="http://www.boost.org/libs/numeric/ublas/doc/index.htm"><B>uBLAS</B></A>library. This an excellent basic linear algebra library. Theinterface and syntax are easy to use. It provides a wide variety ofmatrix and vector containers and a complete set of Basic LinearAlgebra operations. The implementation and structure can incorporatemany future enhancements and efficiency improvements. The more I useuBLAS the more I like it! See also my note on <A HREF="http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?Effective_UBLAS">EffectiveuBLAS</A> on the Boost Wiki.</P><P>Credit for uBLAS goes to Joerg Walter and Mathias Koch. Manythanks!</P><P>Older releases of Bayes++ support both uBLAS and <A HREF="http://www.osl.iu.edu/research/mtl/">MTLthe Matrix Template Library</A>. Future releases of MTL may also beof interest to Bayes++. However at present nothing is being publiclyreleases so I will await the outcome.</P><P>In principle it is possible to use a different matrix library whenBayes++ is built. This just requires a new version of <I>matSubSup.hpp</I>to be found before the one supplied in Bayes++ itself. HoweverBayes++ makes extensive use of uBLAS syntax, so a change is asignificant task.</P><H2><A NAME="whatsnew"></A>What's new in Bayes++ 2003.8-5</H2><P>Support for and requires <B>Boost 1_33_0</B>.</P><H3>Compiler support</H3><P>The list of compilers for which Bayes++ is built and tested hasbeen update.<H2>What's new in Bayes++ 2003.8-4</H2><P>New Documentation and support for <B>Boost 1_32_0</B>.</P><P>Sample covariances are now computed using the definition for the Maximum Likelihood (biased) estimate. This estimate simplydevides by 1/n the number of samples, rather then 1/(n-1). See <A href="http://en.wikipedia.org/wiki/Bias_(statistics)"> Sample Statistics in Wikipedia</A>.</P><H3>Compiler support</H3><P>The list of compilers for which Bayes++ is built and tested hasbeen update.<H2>Bayes++ 2003.8-3</H2><P>Corrects documentation and support for Boost Build (version 1).</P><P>SLAM has been updated from the current development version.</P><H3>Compiler support</H3><P>GCC 3.4 requires a coupleof <I>typename</I> fixes to uBLAS (Boost_1_31_0 or earlier).</P><H2>Bayes++ 2003.8-2</H2><H3>New Boost Support</H3><P>Bayes++ is tested with both <B>Boost-1.30.2</B> and <B>Boost_1_31_0</B>.</P><P>Jens Mauer has been working hard on getting <B>boost::random</B>accepted as part of the future C++ standard library. To this endthere have been substantial changes to its interface. The new libraryis now part of Boost_1_31_0. The Bayes++ examples make use ofboost::random. So things migrate smoothly I have added a new"test/random.hpp" header which hides the interface changes.</P><P>The very excellent <B>Boost Build system version 2 </B>hasadvanced a great deal recently. Bayes++ is built with standard BoostBuild system. To select the version 2 build system, simply use "bjam--v2". Bayes++ has all the necessary "Jamfiles.v2" touse the new system.</P><H3>Scheme extensions</H3><P>The UD_scheme observe functions have had their numericalcapabilities extended. It is now possible to work with singular (zerovariance) covariance matrices.</P><P>The Unscented_scheme has additional function init_XX() andupdate_XX() to allow access to an Unscented state representation.</P><H3>Numeric fixes</H3><P>An error in <I>SIR_kalman_schemes</I> covariance calculation hasbeen fixed. This error also effected the <I>Fast_kalman_SLAM</I>implementation. The error was significant for small small sizes.</P><H2>Bayes++ 2003-5</H2><H3>'noalias' assignment</H3><P>For efficiency it is important to avoid creating temporary matrixand vector copies. Unless told otherwise it is not possible for <B>uBLAS</B>to determine if the same matrix or vector variable is specifiedon both the left and right hand side of an assignment operation. Ifsuch variable does appear it is said to be an <I>alias</I>. Becauseassignment involves more then one element, the presence of an aliasrequires that an assignment first compute a temporary result beforethe aliased variable is modified.</P><P><B>uBLAS</B>'s default behavior is to create such a temporary. Ifthe assignment is know to be free of an alias this should be avoided.Previously such an optimized assignment was specified with the<B>.assign()</B> member functions. To improve the readability of codeI have added a new syntax for assignment. Where no aliases ofvariable assigned to (lvalue) appears in the expression on the righthand side of the assignment use:</P><PRE STYLE="margin-bottom: 0.5cm"> noalias(lvalue) = expression;</PRE><P>This new syntax is experimental but will probably be part of a future<B>uBLAS</B> release. At present the implementation introduces asmall overhead on the supported compilers. This includes GCC 3.2.</P><H2>Bayes++ 2003-3</H2><H3>Filters are named <I>_filter</I>, Schemes are named <I>_scheme</I></H3><P>Abstract filters and numeric schemes previously all had namesending in <I>_filter</I>. To make things simpler the naming has beenchanged to make a clear separation in what is a two level hierarchy.</P><P>Filters lie at the base of the hierarchy. Schemes are alwaysderived from one of more filters. Filters represent abstractconcepts, such as the statistics of state representation and modelinterface. Schemes are concrete implementations of a filter with allthe numeric details and interfaces completed.</P><P>As part of this change the statistics of state representation havebeen made <B>virtual base classes</B>. This change is designed toallow multiple schemes combined together (using multiple inheritance)and share their representation. The change adds a little more work ifyou choose to derive from a scheme class. The constructors for thederived class must call the constructors for the virtual base classesdirectly.</P><H3>Covariance Intersect Scheme added</H3><P>Finally the <B>CI</B> algorithm has been implemented as a Schemein Bayes++. CI is interesting as it provides a weaker but more robustfusion then traditional covariance based method such as the Kalmanfilter. It estimates state and an upper bound of what its covariancecould be.<BR><BR>Actually only the matrix algebra associated with CIhas is included. The CI_filter scheme provides a virtual functionwhere the user must define the actual optimization algorithm to beused.</P><H3>Importance Resampling infrastructure added</H3><P>The flexibility of the <I>SIR_filter </I>has been greatlyimproved. A new class <I>Importance_resampler</I> has been added.Whenever <I>SIR_filter </I>need to re-sample it uses andImportance_resampler parameter. Therefore by changing this parameter,different re-samplers can be used.</P><P>Two implementation are provided. The <I>Standard_resampler</I> andthe <I>Systematic_resampler</I>. See the referenced publications forfurther discussion of these methods.</P><H3>Gappy Matrices</H3><P>The matrix interface has been further improved. These improvementrequire uBLAS from boost_1_30_0. With this version there isexperimental support for using uBLAS <B>gappy</B> matrices andvectors (sparse, compressed, coordinate).</P><P>The experimental support makes all of Bayes++ use a selected uBLASstorage type. Check <B>matSupSub.hpp </B>for macro's required toenable this. The algorithms used is Bayes++ are being upgraded toperform better with sparse types.</P><P>The mult_SPD products are no longer supported. They are replacedwith the prod_SPD interface.</P><H3><A NAME="References1"></A>Copyright</H3><P ALIGN=LEFT>Copyright (c) 2003, 2004, 2005 Michael Stevens. This document ispart of the Bayes++ library - see licensing section for copyrightlicense details.</P></BODY></HTML>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -