PDP++ (new features)

From emergent
Jump to: navigation, search

Back to PDP++

PDP++ Features by Release

Release 3.1 (10/2003)

  • This is primarily a bug fix release -- see the ChangeLog for details (there were lots of them). A few significant bugs were fixed with leabra++, including fixing a problem that resulted in the accumulation of roundoff errors in the weight values, to the point that it could affect training results on some especially sensitive models (esp those using shared weights). Also, all new types defined in a css script (e.g., new classes, enums, etc) are now local to a given script scope, instead of being globally shared among all scripts, as was the case previously. This prevents numerous unintentional conflicts between scripts, and sharing of types across scripts is such a tenuous and bad idea that it was never really used anyway.

Release 3.0 (4/2003)

    • If you have a stopping criterion set on a MonitorStat (e.g., stopping when MAX activation exceeds some threshold in the output layer), then this stopping criterion will be lost when you load the project. If you look in the spew of messages generated during the load process, you'll see a message like this:
      • Member: mon not found in type: MonitorStat (this is likely just harmless version skew) <<err_skp -="">>{name="max_act_Output": disp_opts=" ": is_string=false: vec_n=0: val=0: str_val="": stopcrit={flag=true: rel=GREATERTHAN: val=.5: cnt=1: n_met=0: }: };<<- err_skp>></err_skp>

Just get the stopcrit value (val=.5 in this example) and relationship (GREATERTHAN) from this and enter it into the first element in the mon_vals list in the appropriate MonitorStat in the opened project to restore function (or replace this stat entirely with a new ActThreshRTStat).

    • GraphLog FIXED ranges will be lost upon loading: there is now a fix_min and fix_max flag inline with the ranges that will need to be clicked as appropriate (the range values are preserved, just the flag to fix them is missing). Look for FIXED messages in the spew as per above.
    • SelectEdit (.edits) labels will be lost upon loading, and can be recovered in the same manner as above.
    • NetView Layer fonts will be smaller than before -- use View:Actions/Set Layer Font to set a larger font. The new default for new views is 18 point.
    • For your additional C++ code: El() function on Lists/Groups/Arrays renamed to SafeEl() to better reflect its function (index range checking), and [] operator changed to FastEl() (no index range checking) instead of SafeEl(), to better reflect typical usage.
    • Error functions in BP: if you've written your own, see comments in ChangeLog (search for date 2002-09-13).
    • Wizard that automates the construction of simulation objects: creates commonly-used configurations of neworks, environments, processes, stats and logs.
    • Distributed-memory parallel processing via MPI (instead of pthread): DMEM can be much more efficient than pthread, and is much more flexible in that it works in both shared and distributed memory architectures. Support for distributing computation across both connections and across events is provided, by setting the number of processors in the Network and the EpochProcess. In both cases, each processor runs everything redundantly except for a subset of events or connections -- this makes for relatively little extra code required to support dmem -- connections/events are divided across processes, and results are synchronized to keep everything consistent.
    • Additional analysis functions: PCA (principal components analysis) and MDS (multidimensional scaling), and Cluster Plot efficiency vastly improved to handle large data sets. Also added processes for automatically computing these functions over hidden layers, etc. Other new analysis routines include automatic generation of statistics on environment frequencies -- useful for validating environments.
    • Much improved GraphLog, focusing on discriminating overlapping line traces (repeated passes through the same set of X axis values -- eg. multiple settles of a network, multiple training runs, etc). Traces can be color-coded (line_type = TRACE_COLORS), incremented (producing a 3D-like effect) via trace_incr, and stacked (vertical = STACK_TRACES). A spike-raster-like plot, or even a continuous color-coded version, can be achieved by not displaying any vertical axis values at all (vertical = NO_VERTICAL) and using either VALUE_COLORS (continuous color-coded) or THRESH_POINTS (thresholded spike raster). Also, columns of data can be plotted row-wise instead (e.g., for monitored activations, or COPY aggregators), and the view_bufsz value is now actually respected, so you can scroll through large amounts of data instead of seeing it all.
    • Log displays are now much more robust when you add or remove data to be logged -- you should now spend much less time reconfiguring the log views.
    • Color-coded edit dialogs and view window backdrops based on an enhanced (and customizable) Project view color scheme.
    • Ability to save view displays to a JPEG or TIFF file (in addition to existing Postscript), including automatic saving at each update for constructing animations.
    • Incremental reading of events from a file during processing (FromFileEnv).
    • Automatic SimLog creation whenever project is saved -- helps you keep track of what each project is.
    • - Added two new algorithms: Long Short Term Memory (Hochreiter, Schmidhuber et al) implemented as lstm++ (works really well on sequential learning problems in general), and RNS++, written by Josh Brown: RNS++ website.
    • Support for g++ 3.x compilers (default for CYGWIN, DARWIN, use config/Makefile.LINUX.3 for LINUX instead of LINUX.2 -- see README.linux for important details on compiling under LINUX, including a sstream include file fix for gcc 2.9x (e.g., RedHat 7.x)). zlib now used instead of forking to call gzip for loading/saving compressed files: should be much faster and more reliable under CYGWIN (MS Windows). Check your Makefile.in for $(X11_LIB) instead of -lX11 if you get link errors involving zlib or jpeg lib calls. Also, the SIM_NONSHARED makefile variables have been eliminated -- these were included by default in mk_new_pdp Makefile.in files, and need to just be cut out of the makefile.
    • Numerous small processes and statistics to facilitate auotomation of common tasks. Also, a better interface for interactive environments where subsequent events depend on current network outputs (see demo/leabra/nav.proj.gz for an example).
    • Mersenne Twister random number generator now used for all random number calls (by Makoto Matsumoto and Takuji Nishimura, MT website)
    • Easier access to view configuration variables through view menu functions; support for window manager close button; SelectEdit can include Methods (Functions) in addition to member data; Net log view usability considerably improved; Added buttons for graphing activation functions, etc on relevant specs.

Release 2.2 (1/2002)

    • If you've tried to use the layer lesion flag, it has been broken since the parallel-threading code was introduced in 2.1! It failed to accurately record the layer indexes to run when skipping over lesioned layers.
    • Big memory leak in gcc version 2.96 shipped with red hat linux 7.1/2 fixed: causes it to not call the appropriate Destroy() function for the array template destructor, so FreeArray_() is never called.
    • DARWIN: had the same problem that the CYGWIN code had with random seeds -- NewInit returns nearly the same value each time.. Fixed in the same way as CYGWIN. doh.
    • rbp: the real_time flag was not working properly, causing a BP to occur *every trial* instead of at the end of the sequence..
    • Several other smaller bugs fixed too -- see ChangeLog for details.
  • Configuration files for both the "Settings" menu (taMisc) and the pdp root object are now savable and automatically loaded from users home directory as $HOME/.taconfig and $HOME/.pdpconfig. This makes it much more automatic and easy to set up your own personal configuration options.
  • Added window position offsets (in Settings/taMisc) to correct for differences between window managers in window placement (I find that KDE requires X offset of -4 and Y of 24 to match the original fvwm and other wm locations).
  • Default number of colors in a color colorscale (taMisc::color_scale_size, in the Settings menu) increased from 32 to 128 -- assumes people are probably using 16 bit color these days If you are running on an 8 bit color display, you can set it back to 32 and save the configuration! Also fixed the way that colorscales are constructed.
  • Non-default values are now shown with a bright yellow highlight. This is useful esp. for algorithms such as Leabra that have a large number of parameters that are usually at their default values. Default values are shown in the help message obtained by clicking on field name -- these messages are now much more informative by including help messages for all sub-fields and enums where applicable.
  • Windows now automatically scroll while manipulating objects (e.g., resizing/moving layers, event specs, grid log headers, etc), so you no longer have to drag outside the window! Also, weird displacement of mouse relative to manipulated object bug is now fixed.
  • TimeUsed information automatically tracked on processes and pthread code: easy to get detailed timing data.
  • Added a number of useful buttons in various of the displays and other minor improvements -- see ChangeLog for details.

Release 2.1 (9/2001)

  • Mac OSX (Darwin) fully supported, using XFree86 X windows server. See README.darwin for details.
  • SMP parallel processing (pthread-based) for several algos. This works by compiling a list of layers for each thread to process, based on the number of connections and units in the layers (separate list for each). The allocation algorithm tries to distribute the computation as evenly as possible. This is relatively fine-grained parallelism, and due to the overhead involved in managing the threads, it only speeds up relatively large networks (i.e., > 50 units per layer, >= 4 layers). Speedups can by upwards of 1.67 times as fast on dual pentium III systems.

Activate by editing the network and setting the n_threads value. You can also restrict parallelism to only connection-level computations --- unit level speedup is quite small (but measurable..)

Many of the other major improvements have to do with important (but perhaps small) improvements in the usability of the interface:

  • Added a mechanism for consolidating a variety of different parameters from different objects in to one edit dialog. This is ideal for playing with various parameters that tend to be scattered across various different Specs in pdp++. This was done by adding .edits to Project -- this contains new SelectEdit objects that can be configured to edit selected fields from any other objects. Every object now contains a SelectForEdit menu option in their Objects menu, which asks for which member (field) of the object to stick onto a SelectEdit object.
  • Added a way to make it clearer when there are parameters that are conditional on others --- if parameters are not currently relevant for the current setting of a flag variable, then they are not editable.
  • Direct analysis of log data via new Analyze menu: you can get a cluster plot or distance matrix of monitored state values, or copy the data over to an environment for further analysis. This may be easier than using the CopyToEnvStat for ad-hoc analyses.
  • Duplicate, ChangeType now works for everything: layers, units, sched procs. Go crazy!
  • Confirmation now obtained for most destructive acts.
  • New buttons for easy control of process stepping level: Step Up moves the step process up one level, and, critically, removes the previous step process as a network updater. Step Dn moves down one level, and adds this new level to the network updater. Therefore, if you want to single-step through cycling for a specific trial, but skip over previous trials, you can Step at the trial level until you find the right trial, then Step Dn to the cycle level and step there, then Step Up to trial again and zip through other trials, then step down to cycle, etc. Previously, this would have required coordinated setting of step proc via a menu and the AddUpdater and RemoveUpdater functions on the network. Also, even when you manually set the step proc, it now autotmatically ensures that this proc is updating the network. Basically, you shouldn't find the need to manually do AddUpdater, etc on the network any more.
  • Enviro View GUI enhancements:
    • Event groups are now displayed with their own buttons in the view, and they can thus be manipulated, events transfered into them, etc. Clicking twice will select the sub-events within the group. Also, new buttons were added for duplicating, transfering, changing the types and setting the specs for events/groups. This makes it much easier to perform all common manipulations of events in the gui. Also, the Disp toggle now affects display of event patterns, so you can turn off Disp to operate on large numbers of events without having to actually display them all.
    • If there is only one EventSpec, then when you Edit Spec(s), it is automatically selected. Also, if only one event spec is selected for editing, then all clicking actions skip the event spec level, saving one level of clicking to select patterns, etc. This should all be very intuitive.
    • New buttons: Layout/Updt allows you to either do a linear layout of all the patterns (stacked one atop the other with one space between -- useful if you've got a messy layout), or to update the positions and geometries of all the patterns to correspond with the current configuration of their corresponding layers. This latter function should prove extremely convenient. New Child, Copy From, Duplicate buttons also available.
    • middle mouse button now always sets pattern value to 0 (previously was an undo)
  • Project View GUI enhancements:
    • New buttons to create top-level groups for procs/specs (for organizing them), and for creating procs/specs so that these can be created directly from the interface.
    • Transfer, ChangeType enabled for specs, other minor fixes.
  • As always, many bug fixes, including window iconification bug with KDE window manager environment.

Release 2.01 (10/04/2000) (CYGWIN ONLY)

  • Fixed NewInit bug for CYGWIN -- wasn't getting a new random seed properly.

Release 2.0 (8/2000)


  • A number of object members have been removed or renamed, so you should expect a large number of "xxx not found" warnings when loading old projects -- these can all be ignored.
  • Older projects didn't set the other_idx indexes in con groups, which point to the corresponding sending/receiving con group. These are now checked for and if not set, nothing can be run. So, you need to either reconnect your network (ConnectAll) or run FixPrjnIndexes on the network (avail in the Network Actions menu). A warning will prompt you to do this.


  • First and foremost, all known reliable means of crashing the software have been fixed! Please report any further reliable crashes you find so they can also be fixed.
  • Help option added to every object -- pulls up netscape by default and points it at relevant section of pdp manual.
  • New Project View -- provides overall view of the principal objects in the project (Networks, Environments, Processes, Stats, Logs), or all of the specs, so you can see what is there at one glance, and everything can be manipulated just like in the NetView. This is most important for processes -- you can view/modify what the processes are connected to, how all the stats are arranged, what logs they send to, etc. Should make configuring processes much easier. The spec editing is very useful for more complex setups.
  • Environment View totally rewritten -- allows interactive editing of event specs that control layout of the events, much in the way networks can be constructed in the NetView. Display of event information is now *much* more efficient and crashproof. Use SetToLayer in spec editing to automatically configure a pattern to fit a given network layer.
  • GridLog totally rewritten -- used to crash when resized, etc. Now can arrange display in the header using left mouse button to move, middle to resize, and right to edit.
  • "Grid View Weights" option in Network/Actions menu -- displays network weights for an entire layer of units in a grid log view.
  • "Dist Matrix Grid" and "Env To Grid" options in Environment. First displays distance matrix between all items in a grid log, second sends all patterns to a grid log for easier, more configurable viewing.
  • Cluster Plot in Environment now displays in a Graph Log (used to require xgraph). Graph Log can now display text data using Y axis as immediately preceding data column.
  • Many improvements to the basic View technology used in the NetView, EnviroView, and GridLogView:
    • Selecting and manipulating (resizing, moving) objects is much more intuitive. Whatever is current selected is manipulated. Things that cannot be manipulated are automatically not selected for manipulation. To manipulate a subobject, just click and release -- the release will select the next level down (e.g., units within a unit group), and then the next click will manipulate that object. Previous system required major finger gymnastics to get the right thing selected.
    • Editing of textual stuff can be accomplished by clicking right mouse button on the object, which will pull up an edit dialog.
    • Images no longer migrate across to different views.
    • Display is automatically Init-ialized after moving, resizing, etc.
  • NetView/Network improvements:
    • much better projection arrow positioning algorithm.
    • confusion between View and Select mode minimized because only units can be selected for Viewing (viewing weights).
    • listing of network variables now has weights first, then unit-level stuff, so it is easier to switch between weights and activation, esp for algoirthms that have a lot of unit-level variables.
    • New Disp Mode menu on right for selecting how to display values.
    • Height-field displays now actually work as expected -- nice for displaying continuously-varying variables (e.g., Kohonen-style activation blobs -- see demo/so/som.proj.gz).
    • Text display is no longer done with separate objects -- much more efficient and prevents problems View-ing unit weights with text displayed.
    • Netview is automatically updated when network objects are removed outside of the netview.
    • Left mouse now moves in the X (horiz) and Z (vert) planes, while right button does X and Y (depth). X-Z is much more common.
    • Moved CopyWeights, WriteWeights, ReadWeights to the Network Object menu instead of the Actions menu -- all basic I/O should be in the Object menu.
    • Imported graphic displays (made by idraw) now work (can be manipulated, saved, etc w/out crashing)
  • Read/WriteOldPDP on Environment changed to Read/WriteText, and rewritten so they actually work. # endgroup comment is now superfluous.
  • New Object menu options for all objects:
    • Duplicate will duplicate object (used to only be on groups)
    • CopyTo and CopyFrom used for copying, works even with subclasses and super-classes of given object
    • ChangeType will replace current object with one of a different (related) type, copying exisiting info.
  • With too many items to fit in menus, used to get "Over Max-menu" and that was it, but now you can select an object from a file-chooser like object-chooser dialog that shows all the objects.
  • Object-chooser also available as a Browse function on root object -- you can traverse the entire object heirarchy and edit anything.
  • No more view:: submenu in lots of menus -- was never used anyway.
  • Edit dialogs all have a Show menu that enables controlling of what level of detail is viewed. A Detail level of viewing is now present, and these details are not visible by default, making it easier to find the high-priority stuff. If you want to access something that is not visible, use the Show menu.
  • EpochProcesses much more robust to changes in environments during an epoch -- no more crashing!

See the ChangeLog.2.0 file for more detailed descriptions of changes.

Release 1.3 (continuous releases)

These were mostly bug fixes and smaller improvements. See the ChangeLog.1.3 file for changes made during 1.3 releases.

Release 1.2 (4/97)

  • All significant css bugs fixed (esp. with class-based code)
  • Css IV edit dialog interface improved
  • Added 'PresentEvent' button for presenting selected events to network
  • Added support for 'final_procs' added in SchedProcess types
  • Added support for creating sub-groups in ReadOldPDP environment importing
  • Generalized Distance metrics for float_RArray, more Enviro generate funs
  • Improved projection specs, and weight init via projections now fully supported
  • Fixed bugs for zero range data in graph log, resizing crash fixed for text, grid logs
  • Lots of bug fixes, minor improvements, etc..
  • (see the ChangeLog file for more details).

Release 1.1 and 1.11 (6/96)

  • Improved GridLog
  • Linux and AIX binaries and libraries
  • Improved Graph numbering and coloring
  • Improved EnviroView (better layout, edit variables)
  • Several interface improvements
  • Extended pattern flag editing in the EnviroView
  • Noisy Patterns
  • Better window placement
  • More flexible process control with added InitProcs sub processes
  • Improved load/save speed using Unix pipe un/compression of files
  • Extended selection of objects in the NetView
  • Improved Makefiles
  • Added functionality for importing network files from the original PDP software
  • More flexible copyright
  • Read/Write weights and pattern functions
  • New NetLogView for viewing statistics in the NetView
  • Improved default process creation
  • CSS is much more reliable, supports classes, arrays better
  • Lots of bug fixes, purification, vastly reduced memory leaks
  • (see the ChangeLog file for more details).

Release 1.01 (9/95)

  • Better support for sub-groups of units within a Layer (including better interface support).
  • Fixed and much more flexible 'ReadOldPDP' function for importing environments (pattern files).
  • Improved documentation for compiling the software.
  • Pre-compiled InterViews libraries for g++ now available (in addition to cfront-based ones).
  • Added a bpso++ executable, which allows creation of mixed backpropagation and self-organizing networks.
  • Lots of bug fixes.

Release 1.0b

  • Shared libraries for HP800 and SGI.
  • Improved efficiency of graph drawing.
  • Several bugs fixed (including one that would lead to a crash in some relatively rare circumstances)