Atree release 2.7
~~~~~~~~~~~~~~~~~
Changes in 2.7:

    - Got rid of LFBATCH.EXE, allow LFEDIT.EXE to process and run 
      large files, just not edit them.  This is because a Windows 3.1
      multiline edit control can only handle about 48K of text.
      Building my own editor to handle larger files is beyond the
      purpose of the atree package. (This limitation should disappear
      in Windows NT, since it uses flat 32bit memory model.)

    - Now use comman dialogs in LFEDIT.EXE.  This should work under
      Windows 3.0 as well, since I've included commdlg.dll with the
      package.

    - Fixed some display bugs and exit problems in the OCR demo.

    - Used Borland C++ 3.1 for compilation with full speed 
      optimizations in the Windows IDE.  Nice product, BC++ 3.1!  If 
      we release another version of this demo software, it'll be for 
      Windows 3.1 only, and probably 386 or better only.  Which means 
      we can gain additional optimizations and speed increases.

    - Fixed some documentation errors in atree.hlp, and added a more
      indepth explanation of the training algorithm.

    - Finally had the time to really figure out Program Manager DDE,
      so now setup.exe installs the appropriate icons and nice icon
      titles.

Changes in 2.6:

    - Moved all documentation into atree.hlp.  Documentation updated
      and clarified.  New introduction section.

    - Fixed small bug in atree_train relating to getting rid of Status
      box when Cancel was pressed.

    - Redid the OCR demo.  Now you can draw your own characters.
      Added rotation and translation to make it an authentic OCR demo.
      It is very impressive!  Although training time can be longer, 
      since we are trainingh on 3 characters instead of 1.

Changes in 2.51:

    - Added a setup program to add Program Manager groups.

Changes in 2.5:

    - Big new addition:  A character recognition demo that recognizes
      the letter S in extreme noise, and is able to differentiate
      between a noisy S and a noisy 5.  Training is very fast, about
      15-20 minutes, compared to days for a backprop net on similar
      hardware.

    - Removed memory mangement routines we wrote for 2.0, now use the
      Borland C++ 3.0 memory management routines, which are about a
      zillion times faster.  So, no more waiting for encoding
      building; should take at most a minute on VERY large problems.

    - Reworked a lot of the I/O routines that are now more compatible
      with the UNIX version, again due to improved Windows support in
      BC++ 3.0.

    - Fixed bug in reading in boolean encodings; it used to set high
      and low to 1.0 and 0.0 automatically, but now preserves high and
      low as specified in the training set. After all -1 and 1, or 100
      and 0 are just as valid representations of the two boolean
      states as 1 or 0.

    - Fixed bug in boolean bit vector memory allocation.

    - The atree Status Window is MUCH improved, and no longer is ill
      behaved.  Now has a cancel button!  Now you don't have to exit
      out of the program to stop training!

    - LF rewritten to only keep one tree in memory at a time during 
      training, and only _voter_ number of trees in memory during 
      evaluation.  Evaluation is done using fast trees.

    - The parser code for LF has been changed dramatically to allow it
      to be well behaved under Windows.  It was not re-entrant before,
      and caused all kinds of problems if you tried to run a buggy
      program twice from the same session of LFEDIT.

    - LFEDIT will now highlight parse errors in the edit window.

    - Renamed LF.EXE to LFBATCH.EXE to differentiate it better from
      LFEDIT.EXE.

    - Added Lf Status Dialog to track progress of train set building
      and test set evaluation.  Has cancel button enabled during test
      evaluation.

    - LF improved semantically.  Added 4 example files that show how
      to use every lf language feature, with documentation.

    - Removed sphere.lf.  Just too darn big.

    - Added abs_sine.lf.  Learning the absolute value of sine is
      something backprop has trouble with.

    - Runs well under Windows 3.1, and I haven't had a UAE or GPF in
      days.  Testing has been a lot more extensive for this product.


Changes in 2.0:

    - Added several new functions to the atree library, including tree
      and coding I/O, see atree.h.

    - The atree structures have been totally revamped, and now can fit
      into 12 bytes (for nodes) and 4 bytes (for leaves).

    - atree_train() has been changed to present the whole training set
      during one epoch, although in a shuffled form.  Before, we just
      randomly picked vectors out of the training set, leaving the
      possiblity of a large number of vectors not being presented
      during an epoch.  Also, we check our estimate of success after
      adaptation against the whole training set (with no adaptation)
      to give the ACTUAL number correct.  This step only occurs when 
      training has reached the maximum allowed number of epochs, or
      when the estimator indicates the tree has gotten the necessary 
      amount of vectors correct.  If the actual is lower than the
      estimate, we keep training for another epoch, up until the
      maximum number of epochs has been reached.

    - Memory allocation for trees now the same as for bit vectors (and
      every other dynamically allocated object!): the WinMem_Malloc
      routine is used!  Thanks to Rolf Manderschied for coming up with
      a better build_tree!  Trees are now allocated from free lists,
      and are returned to the free lists when destroyed.

    - Changed the multiplexor function in mult.exe: can now specify
      the number of control bits at compile time.

    - Because of the C library I/O routines, the atree library is no
      longer in a .DLL.  Instead, atree.c must be compiled into
      applications.  Sorry!  But I didn't feel like rewriting the
      whole standard C I/O library to index data by the data segment
      only, instead of the stack segment (in .DLL's, ds != ss).

    - As a result of the above, applications need no longer include
      every atree library function in the IMPORTS section of their
      .def files.  However, you DO need to include VERBOSITYWNDPROC in
      the EXPORTS section, along with whatever other Window Procedures
      your application is exporting.

    - Improvements to the atree Status window (verbosity output).  It
      doesn't hang around after training is finished.  It flickers
      quite noticeably, though, when calls to atree_train() occur
      rapidly!  If anyone has a better idea... let me know!

    - Documentation updated.

    - I still don't know how atree.c compiles with Microsoft C...  can
      anyone doing this please contact me?


Changes in 1.2:

    - Redid atree_train verbosity output, no longer have to click
      after every epoch - scrolling window flaky when training two
      trees simultaneously (because of storage of strings in global
      variables - a quick fix, to be sure, but much better than the
      old MessageBoxes!)

    - Mult.exe is not a two-bit multiplexor, it's a three-bit
      multiplexor!  Boy, do I feel embarrased!  2^11 elements in
      domain, instead of 2^6, which means that it is a lot harder
      problem than I thought, and would explain the longer training
      times than one would expect from a two-bit multiplexor.

    - minor macro name changes to keep Dr. Armstrong happy.


Changes in 1.1:

    - Bug in atree_free() fixed, will free all subtrees now.

    - Modified ????_flag assignments in build_tree() that caused flaky 
      learning if memory wasn't initialized to zero first.

    - Mult.exe now has verbosity level 1, so it doesn't look like it's
      just sitting there doing nothing.


-- END --
