\chapter{Licensing, Copying and Acknowledgments}
\label{LicenseCopyAcknowl}
\thispagestyle{empty}

SNNS is \copyright (Copyright) 1990-95 SNNS Group, Institute for
Parallel and Distributed High-Performance Systems (IPVR), University of
Stuttgart, Breitwiesenstrasse 20-22, 70565 Stuttgart, Fed.\ Rep.\ of
Germany.

SNNS is distributed by the University of Stuttgart as `Free Software'
in a licensing agreement similar in some aspects to the GNU General
Public License. There are a number of important differences, however,
regarding modifications and distribution of SNNS to third parties.
Note also that SNNS is not part of the GNU software nor is any of its
authors connected with the Free Software Foundation. We only share
some common beliefs about software distribution. Note further that
SNNS is NOT PUBLIC DOMAIN.

The SNNS License is designed to make sure that you have the freedom to
give away verbatim copies of SNNS, that you receive source code or can
get it if you want it and that you can change the software for your
personal use; and that you know you can do these things.

We protect your and our rights with two steps: (1)~copyright the
software, and (2)~offer you this license which gives you legal
permission to copy and distribute the unmodified software or modify it
for your own purpose.

In contrast to the GNU license we do not allow modified copies of our
software to be distributed. You may, however, distribute your
modifications as separate files (e.\,g.\ patch files) along with our
unmodified SNNS software. We encourage users to send changes and
improvements which would benefit many other users to us so that all
users may receive these improvements in a later version. The
restriction not to distribute modified copies is also useful to
prevent bug reports from someone else's modifications.

Also, for our protection, we want to make certain that everyone
understands that there is NO WARRANTY OF ANY KIND for the SNNS
software.

\clearpage

\section{SNNS License}
\index{Licensing and Copyright}
\label{Licension}

\begin{enumerate}

\item This License Agreement applies to the SNNS program and all
accompanying programs and files that are distributed with a notice
placed by the copyright holder saying it may be distributed under the
terms of the SNNS License.  ``SNNS'', below, refers to any such program
or work, and a ``work based on SNNS'' means either SNNS or any work
containing SNNS or a portion of it, either verbatim or with
modifications.  Each licensee is addressed as ``you''.

\item You may copy and distribute verbatim copies of SNNS's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of SNNS a copy of this license
along with SNNS.

\item You may modify your copy or copies of SNNS or any portion
of it only for your own use. You may not distribute modified copies of
SNNS\@.  You may, however, distribute your modifications as
separate files (e.\,g.\ patch files) along with the unmodified SNNS
software. We also encourage users to send changes and improvements
which would benefit many other users to us so that all users may
receive these improvements in a later version. The restriction not to
distribute modified copies is also useful to prevent bug reports from
someone else's modifications.

\item If you distribute copies of SNNS you may not charge anything
except the cost for the media and a fair estimate of the costs of
computer time or network time directly attributable to the copying.

\item You may not copy, modify, sub-license, distribute or transfer SNNS
except as expressly provided under this License.  Any attempt
otherwise to copy, modify, sub-license, distribute or transfer SNNS is
void, and will automatically terminate your rights to use SNNS under
this License.  However, parties who have received copies, or rights to
use copies, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.

\item By copying, distributing or modifying SNNS (or any work based
on SNNS) you indicate your acceptance of this license to do so,
and all its terms and conditions.

\item Each time you redistribute SNNS (or any work based on SNNS),
the recipient automatically receives a license from the original
licensor to copy, distribute or modify SNNS subject to these terms and
conditions.  You may not impose any further restrictions on the
recipients' exercise of the rights granted herein.

\item Incorporation of SNNS or parts of it in commercial programs
requires a special agreement between the copyright holder and the
Licensee in writing and usually involves the payment of license fees.
If you want to incorporate SNNS or parts of it in commercial programs
write to the author about further details.

\item Because SNNS is licensed free of charge, there is no warranty
for SNNS, to the extent permitted by applicable law. The copyright
holders and/or other parties provide SNNS ``as is'' without warranty of
any kind, either expressed or implied, including, but not limited to,
the implied warranties of merchantability and fitness for a particular
purpose. The entire risk as to the quality and performance of SNNS is
with you. Should the program prove defective, you assume the cost of
all necessary servicing, repair or correction.

\item In no event will any copyright holder, or any other party who
may redistribute SNNS as permitted above, be liable to you for
damages, including any general, special, incidental or consequential
damages arising out of the use or inability to use SNNS (including but
not limited to loss of data or data being rendered inaccurate or
losses sustained by you or third parties or a failure of SNNS to
operate with any other programs), even if such holder or other party
has been advised of the possibility of such damages.
\end{enumerate}


\section{How to obtain SNNS}
\index{Obtainment}
\label{Obtaining SNNS}
The SNNS simulator can be obtained via anonymous ftp from host
\begin{verbatim}
        ftp.informatik.uni-stuttgart.de  (129.69.211.2)
\end{verbatim}
in the subdirectory
\begin{verbatim}
        /pub/SNNS
\end{verbatim}
as file
\begin{verbatim}
        SNNSv4.1.tar.Z
\end{verbatim}
or in several parts as files
\begin{verbatim}
        SNNSv4.1.tar.Z.aa, SNNSv4.1.tar.Z.ab, ...
\end{verbatim}

These split files are each less than 1~MB and can be joined with the
Unix `cat' command into one file \verb#SNNSv4.1.tar.Z#.  Be sure to
set the ftp mode to \verb#binary# before transmission of the files.
Also watch out for possible higher version numbers, patches or Readme
files in the above directory \verb#/pub/SNNS#.
After successful transmission of the file move it to the directory
where you want to install SNNS, uncompress and untar the file with the
Unix command 
\begin{verbatim}
        uncompress < SNNSv4.1.tar.Z | tar xvf -
\end{verbatim}

This will extract SNNS in the current directory. The SNNS distribution
includes full source code, installation procedures for supported
machine architectures and some simple examples of trained networks.
The full English documentation as \LaTeX\ source code with PostScript
images included and a PostScript version of the documentation is also
available in the SNNS directory.

\clearpage

\section{Installation}
\label{Installation}

Note that SNNS has not been tested extensively in different computer
environments and is a research tool with frequent substantial changes.
It should be obvious that we don't guarantee anything. We are also not
staffed to answer problems with SNNS or to fix bugs quickly.

Since release 3.0, SNNS needs an ANSI-C compiler to run.
The Kernighan \& Ritchie standard is no longer supported.

\index{Installation}
To build SNNS in the directory in which you have moved it you first
have to generate the correct makefiles for your machine architecture
and window system used. To do this, simply call the shell script
\begin{verbatim}
        configure
\end{verbatim}
This prompts you for information about the machine architecture and
the window system and builds all necessary makefiles with this
information. It uses templates found in the directory {\tt
configuration} for this task. Under certain conditions the shell
script may not be able to traverse logical links. If you are sure
about the location of your X11 libraries and include files, but
configure can't locate them, respond by giving "unknown" as path. You
can later set the correct path in the Makefiles with any text editor.
At the end of this script, you will be told about the next step to
build the simulator.

The next step to build the simulator is usually to build the kernel
and the graphical user interface with the command
\begin{verbatim}
        build sim
\end{verbatim}
or with the two commands
\begin{verbatim}
        build kernel
        build xgui
\end{verbatim}
This script descends into the appropriate subdirectories and calls the
makefiles in these subdirectories to compile all necessary source
files and link the object files into one executable file. The
executable is located in
\begin{verbatim}
        <SNNS-dir.>/xgui/bin/<architecture>/xgui
\end{verbatim}
where {\tt <SNNS-dir.>} is the current SNNS directory and {\tt
<architecture>} is the machine architecture, e.g. {\tt dec\_alpha},,
{\tt hp\_ux}, {\tt sun\_os4x}, or {\tt others}.

We usually build a symbolic link named {\tt snns} to point to this
executable if we often work on the same machine architecture.
\begin{verbatim}
        ln -s  xgui/bin/<architecture>/xgui  snns
\end{verbatim}
This link may also be placed in the user home directory (with the
proper path prefix to SNNS) or in a directory of binaries in the
local users' search path.

The simulator is then called simply with
\begin{verbatim}
        snns
\end{verbatim}

If the tools accompanying the simulator and the RPC kernel files are
also to be built, use the commands
\begin{verbatim}
        build all
        build sim
\end{verbatim}
which call the four commands 
\begin{verbatim}
        build kernel
        build xgui
        build rpc
        build tools
\end{verbatim}
\vspace*{0.5cm}

Please note that the rpc modules need not be installed if SNNS is to
run only on distinct workstations without parallel training. It is
required only if you wish to train several networks on various
workstations in parallel while holding centralized control from a
single user interface. RPC is also not supported on several hardware
platforms. Please read chapter~\ref{rpcversion} for details.

{\bf \Large Important Note:}
\begin{quote}

  Since version 3.2, the SNNS pattern files are read with the help of
  a parser generator. However, the standard compiler-compiler for
  unix, yacc, is not powerful enough for this task, and the GNU
  utility program bison has to be used. For those sites that do not
  have bison installed, we have a precompiled file included in the
  distribution. These circumstances have two important consequences:

\begin{itemize}
\item The precompiled file kr\_pat\_parse.c was generated on a
DECStation. We have found that some compilers on other machines refuse
to process this file for various reasons. This is true for all
combinations of bison-machine\_A / gcc-machine\_B pairs, but the file
generated by the DEC bison seems to be the most widely accepted.

\item If you have a bison on your target machine, the first
installation of SNNS will overwrite our precompiled file. This is fine
as long as only this machine is used. If later on SNNS is to be
compiled for another machine though, this new file will be used if the
second machine does not have bison. In this case, the compatibility
problems mentioned above might block a successful compilation.

\item If you do not have bison installed and your compiler does not
like the precompiled file either, you have to install bison. Bison is
a GNU product and is not distributed by us. Please refer to the
various GNU ftp sites to obtain this program.
\end{itemize}
\end{quote}


For further details about calling the simulator and working with the
graphical user interface see chapter~\ref{XGUIManual}.

\section{Acknowledgments}
\label{Acknowledgemens}

\newenvironment{namensliste}[1]{%
  \list{}{\settowidth{\labelwidth}{#1}%
          \setlength{\leftmargin}{\labelwidth}
          \addtolength{\leftmargin}{\labelsep}
          \def\makelabel##1{##1\hfill}}%
}{%
  \endlist
}


SNNS is a joint effort of a number of people, computer science
students, research assistants as well as faculty members at the
University of Stuttgart, Institute for Parallel and Distributed High
Performance Systems (IPVR), Stuttgart, Germany.

The project to develop an efficient and portable neural network
simulator which later became SNNS was lead since 1989 by Dr.~Andreas
Zell, who designed the predecessor to the SNNS simulator and the SNNS
simulator itself and acted as advisor for more than two dozen
independent research and Master's thesis projects that made up the
SNNS simulator and some of its applications. Over time the SNNS source
grew to a total size of now 5.6MB in 190.000 lines of code. All the
research has been done under the supervision of Prof.~Dr.~Andreas
Reuter and Prof.~Dr.~Paul Levi. We are all grateful for their
continuing support and for providing us with the necessary computer
and network equipment.

The following persons were directly involved in the SNNS project. They
are listed in the order in which they joined the SNNS team.

\begin{namensliste}{Artemis HatzigeorgiouXX}
\item[Andreas Zell]
Design of the SNNS simulator, SNNS project team leader \\
\cite{Zelletal90b}, \cite{Zelletal91a} \cite{Zelletal91b}, 
\cite{Zelletal91c}

\item[Niels Mache]
SNNS simulator kernel (really the heart of SNNS) \cite{Mache90},
parallel SNNS kernel on MasPar MP-1216. 

\item[Tilman Sommer] 
original version of the graphical user interface XGUI
with integrated network editor \cite{Sommer90}, PostScript printing.

\item[Ralf H\"ubner]
SNNS simulator 3D graphical user interface \cite{Huebner92}, user
interface development (version 2.0 to 3.0). 

\item[Thomas Korb]
SNNS network compiler and network description language Nessus \cite{Korb90} 

\item[Michael Vogt]
Radial Basis Functions \cite{Vogt92}. Together with G{\"u}nter Mamier 
implementation of Time Delay Networks. Definition of the new pattern
format.

\item[G\"unter Mamier] SNNS visualization and analyzing tools
  \cite{Mamier92}. Implementation of the batch execution capability.
  Together with Michael Vogt implementation of the new pattern
  handling. Compilation and continuous update of the user manual.
  Maintenance of the ftp server. Bugfixes and installation of external
  contributions.

\item[Michael Schmalzl]
SNNS network creation tool Bignet, implementation of Cascade
Correlation, and printed character recognition with SNNS
\cite{Schmalzl90}

\item[Kai-Uwe Herrmann]
ART models ART1, ART2, ARTMAP and modification of the BigNet tool
\cite{Her92}.

\item[Artemis Hatzigeorgiou] 
Video documentation about the SNNS project,
learning procedure Backpercolation 1.\footnote{
\label{PercLicense}Backpercolation 1 was developed by JURIK RESEARCH
\& CONSULTING, PO 2379, Aptos, CA \hspace*{6mm}95001 USA. Any and all SALES of
products (commercial, industrial, or otherwise) that utilize the\\ \hspace*{5mm}
Backpercolation 1 process or its derivatives require a license from
JURIK RESEARCH \& CONSUL-\\ \hspace*{6mm}TING.  Write for details.}

\item[Dietmar Posselt] 
ANSI-C translation of SNNS.

\item[Sven D{\"o}ring] 
ANSI-C translation of SNNS and source code maintenance. Implementation
of distributed kernel for workstation clusters.

\item[Tobias Soyez]
Jordan and Elman networks, implementation of the network analyzer
\cite{soyez93}. 

\item[Tobias Schreiner]
Network pruning algorithms \cite{Schreiner94}

\item[Bernward Kett]
Redesign of C-code generator snns2c.

\item[Gianfranco Clemente]
Help with the user manual

\item[Henri Bauknecht]
Manager of the SNNS mailing list.

\item[Jens Wieland]
Design and implementation of batchman.

\end{namensliste}

\vspace*{2ex}
We are proud of the fact that SNNS is experiencing growing support from
people outside our university. There are many people who helped us
by pointing out bugs or offering bug fixes, both to us and other
users. Unfortunately they are to numerous to list here, so we restrict
ourselves to those who have made a major contribution to the source
code.

\begin{namensliste}{Artemis HatzigeorgiouXX}

\item[Martin Riedmiller, University of Karlsruhe]
~~\\ Implementation of RPROP in SNNS

\item[Martin Reczko, German Cancer Research Center (DKFZ)]
~~\\ Implementation of Backpropagation Through Time (BPTT),
BatchBackpropagation Through Time (BBPTT), and Quickprop Through Time (QPTT).

\item[Mark Seemann and Marcus Ritt, University of T{\"u}bingen]
~~\\ Implementation of self organizing maps.

\item[Jamie DeCoster, Purdue University]
~~\\ Implementation of auto-associative memory functions.

\item[Jochen Biedermann, University of G{\"o}ttingen]
~~\\ Help with the implementation of pruning Algorithms and non-contributing
units 

\item[Christian Wehrfritz, University of Erlangen]
~~\\ Original implementation of the projection tool, implementation of
the statistics computation and learning algorithm Pruned Cascade Correlation.

\item[Randolf Werner, University of Koblenz]
 ~~\\ Support for NeXT systems

\item[Joachim Danz, University of Darmstadt]
~~\\ Implementation of cross validation, simulated annealing and Monte Carlo
learning algorithms.

\item[Michael Berthold, University of Karlsruhe] 
~~\\ Implementation of enhanced RBF algorithms.

\item[Bruno Orsier, University of Geneva]
~~\\ Implementation of Scaled Conjugate Gradient learning.

\item[Till Brychcy, Technical University of Munich]
~~\\ Suplied the code to keep only the important parameters in the
control panel visible. 

\item[Joydeep Ghosh, University of Texas, Austin]
~~\\ Implenetation of WinSNNS, a MS-Windows front-end to SNNS batch
execution on unix workstations.

\item[Thomas Ragg, University of Karlsruhe] 
~~\\ Implementation of Genetic algorithm tool Enzo.

\end{namensliste}

\vspace*{1ex}

If you would like to contact the SNNS team via e-mail please write to
Andreas Zell at `zell@informatik.uni-stuttgart.de'.

The SNNS simulator is a successor to an earlier neural network
simulator called NetSim \cite{Zelletal89}, \cite{Zelletal90a} by
A.~Zell, T.~Sommer, T.~Korb and A.~Bayer, which was itself influenced
by the popular Rochester Connectionist Simulator RCS \cite{Goddard89}.

In September~1991 the Stuttgart Neural Network Simulator SNNS was
awarded the ``Deutscher Hochschul-Software-Preis~1991'' (German Federal
Research Software Prize) by the German Federal Minister for Science
and Education, Prof.\ Dr.\ Ortleb.

\section{New Features of Release 4.1}

Users already familiar with SNNS and its usage may be interested in
the differences between the versions 4.0 and 4.1. New users of SNNS
may skip this section and proceed with the next chapter.

New Features of Release 4.1:

\begin{enumerate}
  
\item New batch execution language batchman

\item Integration of the genetic algorithm tool Enzo. Enzo is
  available as seperate tar file on our ftp-server at the same
  location as SNNS. For all enquiries about Enzo please contact
  enzo-request@ira.uka.de.

\item Improved window handling. On re-opening of a SNNS window it gets
  put on top, instead of issuing an error message.

\item new learning algorithm 'scaled conjugated gradient' (SCG)

\item The parameter lists in the control panel adapt to the number of
  paramters required, i.e. all widgets present need to be filled out.

\item WinSNNS, a MS-Windows front-end to SNNS batch execution on unix
  workstations. WinSNNS is NOT part of our official SNNS distribution!
  It can be found at http://www.lans.ece.utexas.edu/winsnns.html.\\
  Please contact ghosh@pine.ece.utexas.edu for more information.

\item optional parameter `Teacher-Forcing' for Jordan networks
  introduced.

\item validation now possible for BPTT networks

\item Extensive debugging:
  \begin{enumerate}

  \item Seg-fault when trying to train a network without output units

  \item Seg-fault when pressing the info button without loaded patterns
  
  \item wrong feedback loops in associative memory nets deleted

  \item wrong activation functions in associative memory when
    constructed with bignet

  \item wrong initialization function in kohonen networks when
    constructed with bignet

  \item Wrong error computation in Hebbian learning

  \item Wrong error computation of analyze function band

  \item Wrong MSE computation for validation

  \item Better font size adaption of label widgets

  \item Pruning now allows validation with 0 cycles

  \item GRAPH panel could sometimes not be closed

  \item Wrong scanning of update parameters in snnsbat

  \item Error in the manual: Missing parameter of BackpropWeightDecay
  \end{enumerate}


\end{enumerate}

