Analytica 4.0 beta Release Notes/

Changes in


Important: Please uninstall previous builds before running the installer for Otherwise, the libraries and example models aren't updated. Despite lots of effort, we still haven't solved this installer glitch.


  • First drafts of Analytica 4.0 User Guide and Analytica 4.0 Optimizer Guide. Please let us know of bugs or inconsistencies you find in these manuals.


  • Individual cell checking. The Check attribute is now evaluated on a cell-by-cell basis as you enter data into the cells of an edit table. If data is entered that fails the check, it is flagged immediately so the user can re-enter a valid value. Note that the check is not evaluated when:
    • An expression is in the cell, and the expression may require expensive evaluation of other variables.
    • The expression in the check attribute operate over the table's indexes. (If the check expression reasons about the table's indexes, then it appears to be a consistency check on the entire table, rather than on individual cells).

If you want to customize the message that appears when the a value fails the check, call the Error(msg) function from within the Check attribute.


  • The random seed used by the optimizer, for selecting MultiStart points, seeding the initial population by the Evolutionary solver, or randomly mutating or recombining points in a generation by the Evolutionary solver, is now tied to Analytica's internal random seed. Thus, even though there are stochastic elements to some optimization searches, they will be repeatable when you load your model fresh and run the same sequence of evaluations.
  • NlpDefine is now Dynamic aware. It is now possible to embed NlpDefine within a dynamic loop, where elements of the optimization problem at time t depend on the solution to an optimization problem solved at Time t-1. When you do this, you'll want a call to LpSolution() to be within the same dynamic loop, and your expressions will refer to the result of LpSolution() at the previous time. It is not, however, possible to use SetContext at the same time on other parametric dimensions; therefore, if you need to array abstract across other parametric dimensions within a Dynamic NLP, the encapsulation as a UDF, as demonstrated in the Optimizer Guide, is still the preferred technique.
  • The SetContext parameter of NlpDefine, which can be used to tell NlpDefine how to efficiently array abstract during an optimization, can now be used without having the Over parameter also specified.
  • When an objective, jacobian or gradient contains a spurious dimension that shouldn't be there, the error message now includes a list of the spurious indices.

OLE Linking

  • OLE links are now re-established following a crash-recovery.
  • Changes to the moniker or updateLink attributes immediately take effect. If you know the symbolic moniker, you can create an OLE link from a button script simply by changing the moniker attribute. You can also break links, or change the source, from typescript by changing the moniker attribute.
  • Several OLE-linking-related bug fixes. Gibberish in cells, crash when breaking OLE links, crash when changing OLE link from manual to automatic, re-establishing links when Update button is pressed when the source has been closed after the link had been previously established.


  • We're still working on problems related to printing Object Windows and Result Graphs. They are printing a bit better now in this build, but work on these issues continues.
  • Fixed crashes that occurred after print previewing outline windows.


  • Made improvements to the measurement of time profiling. There is more time resolution now, and the timings in EvaluationTime are more accurate. Previously, there was some computation time not being accounted for.
  • The profiler now tallies time spent evaluating button scripts.


  • When the probabilities to ChanceDist are all zero, an embedded warning, rather than a hard error, is now issued. This makes it a bit easier to with that condition using If-Then-Else or IgnoreWarnings.
  • LogNormal was extended to permit parameters of zero (or gsdev of 1) without issuing an error. For example, LogNormal(mean:5,stddev:0) creates a constant sample of all 5's without error. When zeros are present, the parameters must be consistent -- LogNormal(median:0,stddev:2) would still issue an error, since median:0 implies that stddev must be zero. This extra flexibility is useful when its parameters are sampled or otherwise computed, since the occassional zero doesn't cause it to break.

Error messages

  • In several error and warning messages that occur inside a Dynamic loop, the time step in which the error occurred will now appear in the error message.


Note: Due to installShield headaches, you may need not get the newest libraries if you have a previous 4.0 beta installed when you run the installer. It "upgrades" automatically, but does not refresh the libraries. Select Control Panel → Add remove programs → Analytica 4.0 &rarr Change/Remove → Repair to ensure you have latest libraries and example models.


You are not allowed to post comments.