Netica API

The Netica API is a complete library of functions for working with Bayes nets and influence diagrams that you can call from your own program.  It contains functions to build, learn, modify, transform, save and read nets, as well as a powerful inference engine.  There are versions of Netica API available for many different programming languages, such as Java, C, C++, C#, Visual Basic, etc.  For more information on the COM version of Netica API (mostly for C# and Visual Basic), see Netica COM Interface, and for other versions see www.norsys.com/netica_api.html

An exciting new addition to Netica API allows it to take advantage of the Netica Application user interface for displaying nets, entering findings, showing beliefs, etc.  More Info.

Programs that use the Netica API completely control it.  For example, Netica functions will not take any action until called, Netica will not do any I/O unless requested to, and its functions will not take an unpredictable amount of time before returning.

It may be used in conjunction with other C or C++ libraries (and it won't interfere with them), but it doesn't require any other library except the Standard C library.  Versions of the Netica API are available for MS Windows, Linux, Sun Sparc, Silicon Graphics, Macintosh and DOS, and each of these has an identical interface, so you can move your code between these platforms without changing anything to do with the Netica API.

Before releasing any new version of Netica API, it is put through a rigorous testing program to make sure it operates as designed.  Every function is exercised in multiple ways, and its behavior carefully checked.  Thousands of random nets are generated and solved in multiple ways to check the inference results, and hundreds of real nets are tested.  MemCheck™ and Purify™ are used to make sure there are no memory leaks or other memory faults.  In combination with a careful initial design, and base software having over ten years of extensive customer usage, this results in a rock solid product.

The Netica API has been designed to be easily extended in the future without changing what already exists.  Many new features are currently under development, and it will continue to be extended for years to come.

Features:

 Dynamic Construction:  Can build and modify nets "on the fly" in memory (to support working with dynamic Bayes nets), and can save/read them to file.

 Equations:  Probability tables may be conveniently expressed by equations, using a Java/C type syntax and taking advantage of an extensive library of built-in functions, including all the standard math functions and common probability distributions, as well as some functions and distributions specially suited to Bayes nets, such as noisy-or, noisy-max, noisy-sum, etc.

 Learning from Data:  Probability tables can be learned from case data, even while the net is being used for probabilistic inference.  Learning from data can be combined with manual construction of tables and representation by equations.  It can handle missing data and latent variables or hidden nodes.  Learning algorithms include: counting, sequential updating, fractional updating, EM (expectation maximization), and gradient descent.

 Database Connectivity:  Allows direct connection to most database software.

 Threadsafe:  Can be used safely in multi-threaded environments.

 Encryption:  Can save and read nets to file in encrypted form, which allows deploying solutions relying on Bayes nets kept private to an organization.

 Sensitivity:  Netica can efficiently measure the degree to which findings at any node can influence the beliefs at another node, given the findings currently entered.  The measures can be in the form of mutual information (entropy reduction), or the expected reduction of real variance.

 Advanced Decision Nets:  Can solve influence diagrams which have multiple utility and decision nodes to find optimal decisions and conditional plans, using a junction tree algorithm for speed.  Handles multi-stage decision problems, where later decisions depend on the outcomes of earlier ones, and on observations not initially known.  No-forgetting links need not be explicitly specified.

 Junction Tree Algorithm:  Can compile Bayes nets and influence diagrams into a junction tree of cliques for fast probabilistic inference.  An elimination order can be specified or Netica can determine one automatically, and Netica can report on the resulting junction tree.

 Soft Evidence:  Accepts likelihood findings (i.e., “virtual evidence”), and findings of the form that some variable is not is some state.

 Link Reversal:  Can reverse specified links or "sum out" (absorb) nodes of a Bayes net or influence diagram while maintaining the same overall joint probability distribution, properly accounting for any findings in the removed nodes or other nodes.

 Disconnected Links:  Links may be individually named and disconnected from parent or child nodes, thus making possible libraries of net fragments, which you may then copy and connect to other nets or node configurations.

 Case Support:  Can save/retrieve individual cases (i.e. sets of findings) to file or database, and manipulate files of cases.  Cases may be incomplete, uncertain, and may have an associated ID number and multiplicity.

 Simulation:  Can do sampling (i.e. simulation) to generate random cases with a probability distribution matching the Bayes net.  Can use a junction tree algorithm for speed, or direct sampling for nets too large to generate CPTs or a junction tree.

 User Data:  Every node and net can store by name arbitrary data fields defined by you.  These are saved to file when the object in question is being saved.  As well, there are fields not saved to file, which can contain a pointer to anything you wish.

 Error Handling:  Has a simple but powerful method for handling usage errors, which can generate very detailed error messages if desired.  It won’t throw exceptions (C++ version does).

 Argument Checking:  Allows programmers to control how carefully API functions check their arguments when they are called, including a "development mode" to extensively check everything passed to an API function.

 Compatibility:  Can work hand-in-hand with Netica Application standalone product (for example, sharing the same files), and with Netica API versions for other languages.

 Efficient:  Is optimized for speed, and is not too large (about 500 KB to 3 MB depending on platform/usage, 1 MB typical)

 Language Interface:  Usable by programs written in many languages, such as: C, C++, Java, Python, Perl, Visual Basic, Delphi Pascal, Lisp, CLisp, Fortran, Cobol, and Matlab.

 Many Platforms: Is available for a wide range of platforms including MS Windows (95/NT to XP), Linux, Macintosh (OS X and Classic), Sun Sparc, Silicon Graphics and DOS among others.

 Memory Limiting: You can set a bound on how much total heap space Netica API is allowed to allocate for large tables, thereby preventing virtual memory thrashing or the memory-starving of other parts of your application.

 More Features: A more extensive list of features is available from: http://www.norsys.com/netica_api.html and for those features specific to the C version: http://www.norsys.com/netica_c_api.htm