Atree release 2.0 ~~~~~~~~~~~~~~~~~ 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 Monroe M. Thomas