

Changelog  for Netica-J  versions 4.xx and later

Note that not all releases were made publicly available.


5.20  2015-10-07
- Fixed: When reading in a case file with line ends \r\r\n it hung.
- Fixed: When writing cases, it crashed if adding to an empty file (rather than creating its own file), or a file that consisted of just a comment.
- Fixed: Could crash when illegal parameters were passed to functions that get or set user fields.

5.19  No separate release
- When learning from a database, it first tries to match node name/title with column name case-sensitive, but if that doesnt work it checks case-insensitive.
- Fixed: Could throw an internal error if net encryption password length was from 57-64 chars.
- Time/etc stamp inside every bayes net file (and all files that get stamped) is now in UTC rather than local time.
- Hexadecimal digits are now printed in lower case by default.
- Fixed: When added or removed state levels of a compiled and updated net it could fire an assertion failure.

5.17  No separate release
- In printed reports, now uses kilobytes (KB) being 1000 bytes (kibibytes being 1024), megabytes (MB) as 1e6 bytes, etc.

5.15  No separate release
- Uses a new faster algorithm for finding junction trees, especially noticable for decision nets
- Fixed: (rare) Likelihood finding for a node with a deterministic equation getting a value from deterministic updating could fire assertion failure: BnMultiArray2,77 7
- Fixed: Unicode surrogate pairs weren't properly being put in html files, so SVG graphics involving them would create an illegal graphic
- Fixed: Function for node equations 'roundto' is supposed to take 2 arguments, but it was only taking 1
- Now input arg checking checks for nodes that have been removed but not yet freed (Bnet.is_removed was present in earlier versions, but was always being set to false)

5.14  No separate release
- Fixed: If a continuous discretized node had only one state, deleting it by State.delete() resulted in an assertion failure
- Getting expected value (e.g., Node.getExpectedValue) uses deterministic propagation to get the value when it can, independent of probabilistic belief updating
- Gives better error message if a corrupted .neta file is read
- Added a function for node equations to do PERT distributions: BetaPertDist
- Net.getAutoUpdate was returning 1 when updating turned on (as opposed to 0 for off), now it returns BELIEF_UPDATE (256)
- Fixed: When reading a .neta file from a memory Streamer, it would leave the Streamer modified.
- Significantly speeded up deterministic propagation.
- Improved printing of control characters in error messages, etc.

5.10  No separate release
- Netica Version startup message now also displays info on whether its a 32/64 bit version and which compiler was used
- Fixed: Generated error #3175 when trying to generate the visual part of a net (e.g. with Node.visual().setPosition) that didn't yet have any visual part, and the net had non-ascii unicode (occured rarely - seemed to only affect the Windows 64 bit version).

5.09  No separate release
- Node.getExpectedValue now also handles discrete nodes with no levels defined (uses state indexes as numeric point values).

5.08  No separate release
- Improved reading of cases from a database (i.e. a case-set created by Caseset.addCases(DatabaseManager)), especially from an Excel file, and the associated error messages.
- DatabaseManager.addNodes can handle database (but not text) case files with UVF format entries, to add all the states mentioned in likelihood findings.

5.07  No separate release
- Speeded up EM learning from data, and gradient ascent learning.
- Improved Net.createCustomReport:
    - Added Report tag 'foreach', and ability to loop over the nodes of a nodeset and nodes of a net.
    - Added Node tags: "ExpectedUtility", "ExpectedUtilityList", "BestChoice".
    - Added Net tag "UtilitiesTable", to be used for decision nodes instead of BeliefsTable.
    - Added tags  "StateLabel"  and  "Belief" to do a single state at a time.
    - Some arguments work differently, including "Absent", "Empty" (replaces "ShowMissing").
    - Defaults for TextFormat, HtmlFormat can be influenced by file extension
    - When making a list (e.g. BeliefsList), if no separator was specified, it used to concatenate, but now it separates with "  ".  If you want it to concatenate, you can put  Separator=""

5.06  No separate release
- Change in reading case files.  Now treats tabs as always separators, instead of sometimes as just whitespace (so 2 in a row will give an empty entry).
- Fixed: Case files with old MacOS line ends (ie, \r) didn't work (gave message that file had no cases).
- Fixed: Some case files with empty fields (eg, 2 commas in a row) didnt work
- Now does more accurate calculations for sensitivity variance reduction, especially the target node with itself.  Discretization intervals are averaged over.
- Fixed: The new functions Node.setInputDelay and Node.setPersistance just gave error #3537.
- Net.createCustomReport when producing report on overall net has wording changed slightly, and now its "Separate networks" value properly handles constant nodes with links.
- Node.visual().getStyle now returns "None" if there is no visual information, instead of "Default".
- Added built-in functions for equations:  logit, logistic (aka expit, sigmoid), LogisticDist, mag (aka hypot, vecmag), avg (which takes the average of its arguments).
- Net.createCustomReport:  Added "ExpectedValue", "Variance" and "StandardDeviation" keywords to custom report function.  Changed name of "VarianceReal" to "VarianceReduction" and "BeliefVariance" to "BeliefVarianceReduction".
- Speeded up some built-in equation functions.

5.05  No separate release
- Prevents compiling a net having a constant node with a link into or out of it by generating error #3647.  This is to make way for ver6, where those links will no longer be ignored.

5.04  2012-01-21
- Many major speed improvments, especially when operating in a multi-threaded environment.
- Further improvements to time-series net and dynamic bayes net (DBN) capability (e.g. titles of nodes are now augmented with their point in time during expansion).
  Improved or added functions Net.expandTimeSeries, Node.setInputDelay, Node.setPersistance, Net.getNodeAtTime.
- Can enter "action values" to nodes, which follow semantics of Pearl's do-calculus of causal intervention.  
  These are accessable via Node.action(), which works similar to Node.finding().
- Major improvements to Net.generateRandomCase (including more determinstic forward propagation for continuous real values), and fixing some bugs:
    Generating a random case by forward sampling didnt work right if there was a CPT with UNDEF_PROB, where the whole row wasnt UNDEF_PROB
    Generating a random case by join tree could fail with an error #2078
- Major upgrade to callback system in speed and functionality.  One result is that when nodes and nets are duplicated, now their listeners are duplicated as well.
- Improved reading values from case files and its error reporting.  Now handles ">70" if there is a discrete node with the state title ">70" (earlier it tried to interpret that as a UVF value)
- Fixed problem in the way versions 5.02 and 5.03 saved printer settings to file, that made it not readable by older versions of Netica (example 4.16).
- Expanded on the 'options' parameter for Net.copyNodes and Net copy constructor, which can control what gets copied.
- Reading a Bayes net file that was incorrectly constructed now usually generates warnings and continues, instead of throwing an exception
	
5.03  2011-08-11
- When entering a calibration finding that conflicts with the finding already at the node, now removes the original finding first.
- Can now learn from cases when starting with no CPT supplied, but experience value supplied (table with all entries the same).
- Net.createCustomReport can take for its options parameter "Developer: Errors Report", which prints out some version-specific debug info

5.02  2011-04-09
- Added Environ.controlConcurrency, and made all of Netica able to concurrently run Bayes nets in separate threads if desired.
- Major improvements to time-series net and dynamic bayes net (DBN) capability.  Now does a "burn-in" to generate initial-state probability distribution.  Added function Net.expandTimeSeries.
- Improved Netica's architecture for pseudo-random operations, and made it possible to act deterministically under multi-threading
  Added the RandomGenerator class and Net.setRandomGenerator.  Net.generateRandomCase can now be passed a RandomGenerator.  
- Keeps track of starting experience used for learning (normally 1), saved in NETA file for each node.  Adjusted when doing table hardening or softening.
- Equations now recognize discrete constant nodes with a state setting.
- Node.state(java.lang.String stateName) when passed null for 'stateName' crashed, also same for last argument to Node.switchParent
- Fixed a memory leak which occured (only) when reversing links in a net with visual information.
- Net.copyNodes options argument can now take "dont_return_list", in which case a list of the new nodes will not be returned.
- Node.getExpectedValue now forces a belief updating if one is needed, instead of just returning UNDEF_DBL.
- Internal graphics dimensions of fonts and strings changed.  Under Windows faster than it was, and under Linux gives better graphics than it did (especially for Arial font).
- While EM learning from a case file having a case inconsistent with the Bayes net, now puts the IDnum of the case in the error message.

5.01  2011-01-08
- EM learning now leaves any findings that were originally in the net while operating (and handles them properly; they can override the case file).
- EM learning now handles multiple CPT tables constrained to be the same (indicated by the node user field "CPT_ID" having the same value).
- Custom Reports now leaves "&nbsp;" without trying to replace it with character 160, so we don't get square box chars (missing font char) in HTML reports.
- All functions that take an 'options' string argument that is supposed to be empty (in other words, for future use), now allow that string to be non-empty (unless the argument checking level is COMPLETE_CHECK) and just ignore it.  This is just for forward compatibility.
- Major speedup across many functions, due to significant profiling and optimization effort.

4.18  2010-10-23
- Added function Node.enterCalibration.
		
4.17  2010-06-29
- Can now do probabilistic inference when there are disconnected links.
- Names of built-in node-sets are now preceded by colon (:) instead of dash (-).
- Custom Report templates can now take CaseProbability and CaseExpectedUtility tags, and now recognize correct spelling of "Separator".

4.16  2010-05-16
- When reading a case file, missing data symbols (empty, ' ', ?, *, N/A) will now instead be interpreted as a state, if the node has a state with an exactly matching state title.
- Got rid of a memory leak when constructing a case-set from a database.
- DatabaseManager.addNodes can now be passed null for columns and it will infer the columns.

4.15  2009-12-19
- Fixed problem which caused intermittent failures under multithreading on Red Hat Enterprise Linux.
- Fixed: When added states on the fly to a node with an experience table, it didn't re-normalize properly.

4.14  2009-11-10
- Added Net.createCustomReport function to generate user-customizable reports on a wide variety of things including: network, nodes, states, cases, findings, inference results, sensitivity, internal compiled structure.
- Within .dne files, it now uses a superior flat format for tables (which means the Bayes net files it creates cannot be completely read by very old versions of Netica (previous to 2.27 of 2003-05-02)).  But new versions of Netica can still read all the old .dne files, created by all previous versions of Netica.
- When reading UVF files, uncertain findings for states with an _ in their name caused 2878 error.
- When reading UVF files, extra spaces could cause errors.
- Net copy constructor now allows for "no_nodes" and "no_links" in its 'options' string, and Net.copyNodes now allows for "no_links" and "no_tables" in its 'options' string.
- Now API can compile and infer okay if nodes have some or all CPT entries or tables missing, the same way as Netica Application handles it.
- Net.generateRandomCase with METHOD=0, now does forward sampling if the net has no findings entered.
- Overloaded Net.readFindings with extra 'add' argument to indicate whether or not existing findings should be retracted first.
- Deprecated Net.reportJunctionTree, because now that can be done with Net.createCustomReport.
- Fixed: Whenever reporting an error while reading cases from an Excel file, it gave a line number 6 more than the Excel line number.
- Now accepts illegal IDnum in case file (makes it -1) (so now can read/skip blank lines in Excel).
- Fixed: Simulating a net to make a case file in the "full" format when there is a deterministic node threw an error #2437.
	
4.09  2009-01-30
- Fixed: When adding multiple states to a node, didn't always check the new state names for legality.
- Database: Improved error messages for DB SQL interactions that go wrong.
- Changed "markov_boundary" to "markov_blanket" as an option string, to match the documentation.

4.08  2008-06-18
- Fixed: When try to save a net with a CPT table (rather than a deterministic table) built from a deterministic equation, it threw error #3267.

4.07  2008-05-27
- Changed "hide_links" file field back to "hidelinks" in .dne and .neta net files (it got changed in version 3.05).  So Netica won't properly read the link hiding of Bayes nets made between 3.05 and 4.06.
	
4.02  2007-11-27
- Improved the algorithms for equation functions BetaDist and FDist to avoid internal overflow (which gave error like "error evaluating function:  BetaDist (0.05, 346.8, 1351.57)").
- Added NoisyOrMultiDist function, available from equations, to generalize the noisy-or to multiple states, in a way usually more fitting than noisy-max does.

4.00  2007-11-07
- Changed equation parsing so that a multichar operator can't end with #, so that it can handle things like:  A==#0
- Node.getStateFuncTable can now return other negative quantities beside UNDEF_STATE (such as IMPOSS_STATE and EVERY_STATE).








