Analytica 4.6 beta Release Notes/Changes in

The following issues have been fix since the previously released 4.6 beta build (build

Starting up and crashes

  • Did not run on Windows XP.
  • Crash on start-up when the default printer name had more than 31 characters.
  • Changes to edit table cells would lose precision following a crash recovery. For example, if you entered 9 significant digits, the value after a crash recovery would have only 4 significant digits.


  • When a call to a COM method or property occurs in an optimization model, DefineOptimization was passing the linear-term or quadratic term structure as a parameter, where a number would normally be expected, causing weird things to happen. It now catches this as a non-linear, non-quadratic function.
  • Cascaded comparisons (like 1 <= x <= x+y <= y^2 <= 10)in constraints were sometimes not encoding all constraints, or encoding some constraints incorrectly.
  • The piecewise-linear encoding in an LP was adjusted to improve numeric stability in the presence of wildly different coefficients. The instabilities could cause some problems that should have feasible solutions to report either "no feasible solution" or "unbounded objective", and even a solution that is not the (theoretically) optimal one. These are caused from numeric round-off due to the finite precision of 64-bit floating point numbers used during the solve of an LP. The improved formulation has eliminated this on our test cases.
  • When DefineOptimization is applied to a non-linear optimization problem (NLP) and you do not specify the «type» parameter explicitly, it now preprocesses any linear constraints to infer (tighter) bounds on decision variables. In particular, when you encode a variable bound as a constraint, instead of in the domain of the variable, this pre-processing detects this and tightens the variable bound before sending the problem to the NLP solver engine. If also makes limited multi-step inferences, for example from the constraint X + Y ≤ 10 and X ≥1, it tightens Y's bound to Y ≤ 9. This preprocessing improves the performance of the Evolutionary and LSSQP engines, and of the "Multistart" option in GRG. The preprocessing is based on the results from the coefficient analysis, which is skipped when you specify type:"NLP" on type:"NSP", and hence, is only performed when that parameter is omitted.
  • A fix to the Structured Optimization Tools Library fixes a bug with Use_Opt_Decisions(). The function was dropping exogenous dimensions when copying the solutions to the decision variables. You will need to use Add Library..." (Merge) to re-add the fixed library to your model that are already using this library.


  • Balloon help not showing up in some bar graphs.
  • Poor Y-axis auto-scaling in bar graph with origin having nulls in origin in all but one column.
  • Messed up bar graph, with coordinates of plotted bars not matching data, when a continuous bar origin is used with a categorical Y-axis, and the same variable is used for both Y-axis and X-Axis.
  • Wrong bar origin used in some cases where bar-origin is null in some array-slices.
  • Key was missing from a bar graph with only one cluster.
  • Some pivots caused a graph to switch to a table. Some of these were fixed in this build. A few remaining have been fixed for the next build.


  • Layout of slicers at top of a MultiTable would not adjust completely to changes in dimensionality, leaving blank space in the header area.
  • Problem finding node (using Ctrl+F) based on title. Was not finding inputs or alias that had their own title attribute set differently.
  • When copying values between Analytica processes (or other programs), INF, NaN and -INF values would end up surrounded by quotes.
  • Expression Assist would incorrectly show completions for the name following the -> operator (COM method/property operator).
  • Added a capability to immediately accept changes to cells in an edit table or multi-table -- as if you'd pressed the green check button after entering. This is useful in MultiTables, where computed values show in the same table. With this set, when you change a cell, the computed cells update immediately without having to press the green check. To enable, you need to set bit 16 of the ProactivelyEvaluate attribute. If you set this bit on the MultiTable variable, then every entry cell in the MultiTable will immediately accept. If you set it on the parent table, then only the cells from the parent table immediately accept.

Expression evaluation and build-in functions

  • This build has a generalized speed-up of evaluation. We haven't performed formal systematic timing tests, but anecdotally most models seem to evaluate 10-15% faster. I saw one model (a version of ATEAM) that evaluated 30% faster!
  • HandleFromIdentifier(null) now returns null without issuing an error.
  • True and False now parse directly as 0 or 1. This means if you use these in a list, the IndexValue will be the numeric True (1) or False (0), and not a handle to the system variable named True or False.
  • The Aggregate function accepts "First" and "Last" for the «type» parameter. Type:"Last" is useful when aggregating stock variables, where the final value of the period should be rolled-up. This was possible previously by defining your own User-Defined Function named Last, but this change relieves you of having to do that, plus it is faster.
  • COMCreateObject was enhanced to recognize when the object created is an "ADE4.CAEngine" (an Analytica Decision Engine out-of-process server), and if so, it automatically calls CAEngine::MonitorProcess, so that the ADE instance will terminate if the Analytica process abnormally terminates.
  • In a certain model with a dynamic loop, a subscript operation was returning the special internal value Undefined when it should have returned Null.


  • Bug fixed is Use_Opt_Decisions() in the Structured Optimization library. When using this function in Analytica 4.6, you will need to replace the older library in your model with the newer one.
  • Implied_volatility_c (Implied volatility of a call option) returned 100% when the actual implied volatility exceeded 100%. Fixed this, plus changed function to accept Null values for parameters (returning Null in those cases). Similarly for Implied_volatility_p (implied volatility of a put option).

You are not allowed to post comments.