- the marginal probability for any variable in a Bayesian network.
- the expectations for univariate functions (for example, the expected value of a variable).
- configurations with maximum a posteriori probability.

Another typical situation is that the user specifies some
evidence and asks which are the values of non-evidence variables
that lead to the maximum possible posterior probability for
the evidence. A configuration with such optimal characteristics has
been called an *explanation* for the available evidence.
When an optimal configuration is produced, the variables in the network
are *estimated* in the sense that their ``best'' values are found,
where ``best'' is measured in terms of posterior probability.
It is possible to specify a group of variables in the network to be
estimated, or to estimate all variables in the network at once.

*JavaBayes* can produce marginal distributions and
expectations using two different algorithms: variable
elimination and bucket tree elimination. In the first case,
inferences are generated from scratch for each query; in
the second case, a data-structure (bucket tree) is generated
once and several queries can be generated directly from
the bucket tree. Variable elimination consumes less memory,
but it may take longer if several queries are made to the same
network with the same collection of observations.

A capability of *JavaBayes*, which sets it apart from
other inference engines, is the ability to conduct robustness
analysis on top of inferences. Bayesian robustness analysis is
an on-going research topic, where sets of distributions are
associated to variables: the size of these sets indicates the
"uncertainty" in the modeling process. *JavaBayes* can use
models with sets of distributions to calculate intervals of
posterior distributions or intervals of expectations. The larger
these intervals, the less robust are the inferences with respect
to the model.

*JavaBayes* is distributed under the
GNU License;
if you want to distribute *JavaBayes* to someone,
you have to package the whole distribution *including*
the GNU license.
If you need to include the Bayesian network engine in some
application, you must also make a request; the engine might
be available to you under the Lesser General Public License.

The *JavaBayes* distribution is available
in the internet; the various Java packages
that compose the system are provided in source
and bytecode forms. The Java packages can be used in other applications
or applets (provided that the GNU license is respected)
as a tool for probabilistic reasoning.
The complete system, with graphical interface, can be used to construct
and experiment with Bayesian networks, as a teaching and/or development tool.

Note that *JavaBayes* is distributed as bytecodes
that are executable in the standard Java Virtual Machine
as specified by Sun Microsystems Inc. Modification of the source
code and generation of bytecode from modified source code
is allowed under the restrictions specified by the
GPL (the GNU license),
but compilation of the source files to generate other types
of executables or non-standard bytecode is not covered by the license
and is *not* allowed. This is emphasized so that *JavaBayes*
is always distributed as a portable, architecture-neutral system;
if you are interested in generating non-portable executables from
*JavaBayes*, then you must
contact me.
Generation/commercialization of such executables requires a
specific license which must be negotiated. Again, this is emphasized
to avoid the confusion that would occur if several unauthorized types
of compiled code were to be generated from the source.

This manual is an on-going effort to document the *JavaBayes*
system. There are directions for dowloading the system
from the internet, a brief description of how
to run the system, and a brief description
of how to compile the system.
From there,
a step-by-step description of the system
is presented.
This manual also discusses the several data formats
that are understood and generated by the system, and
finishes with several miscellaneous items.
You can also find a description of the inference algorithm used
by *JavaBayes* in the system's web site.

There are some other projects that use Java with Bayesian networks:

- The Bayes applet produced by Dawid Poole and his group.
- The user interface of the new Hugin system is written in Java.
- There was a Bayesian Net Simulator implemented by Yoichi Motomura, and a discussion about Bayesian networks using Java applets by Joel Martin, but these pages seem to not exist anymore.

- The Association for Uncertainty in AI has a homepage filled with interesting pointers. The association's interests are very broad but in fact most of what it does is related to Bayesian theory in one way or another.
- The excellent list of free systems for manipulation of Bayesian networks and the nice tutorial on Bayes nets by Kevin Murphy.
- The International Society for Bayesian Analysis is a valuable resource.