Release Notes – Version 9.1.1

Handling Nonlinear Constraints of Input Variables

In previous releases, solutions provided by OptQuest for evaluation always adhered to linear constraints of input variables but did not adhere to nonlinear constraints of input variables. For problems where there were nonlinear constraints of input variables, OptQuest would send solutions that were infeasible with respect to those nonlinear constraints out for evaluation. This was a waste of simulation runs and computational effort.

Now, the OptQuest Engine will attempt to solve non-linear constraints that contain only COptQuestVariable objects (i.e. they do not contain COptQuestUserControlledVariable objects). With this update, solutions are not provided for evaluation that do not meet non-linear constraints of problem inputs. If OptQuest cannot find any feasible solutions and there are infeasible non-linear constraints of inputs, then a COptQuestException.EXCEPT_NONLINEAR_CONSTRAINTINFEASIBLE exception will be thrown.

This process of handling nonlinear constraints will increase the amount of time it takes OptQuest to generate solutions. However, the added time will not be noticeable for most users. If your simulation runs very fast and you do not want OptQuest to handle non-linear constraints, then you can turn this feature off. A flag is now provided with SetHandleNonLinear() that allows a user to turn off this new feature. Handling nonlinear constraints of inputs is turned on by default in this new release. If it is turned off, then OptQuest will generate solutions for evaluation as it did in the past, without considering any nonlinear constraints involving only input variables.

OptQuest Internal Generation Time Speed Improvements

In most cases, the time it takes OptQuest to determine solutions to evaluate is much smaller than the time it takes to execute the simulation model. However, improvements in the speed of OptQuest’s decision making saves computational cycles and is a significant advantage for very fast running simulation models or when OptQuest is being used to generate solutions to evaluate in parallel. In this new version of OptQuest, the time to generate solutions is 20% faster on average.

Demo License Updates

The Demo license restrictions have been changed to limit total iterations to 50. Other previous restrictions on number of variables, constraints, and objectives have been removed. The intent of the demo license is to let a user see what an OptQuest problem setup and results look like. For small, simple problems, the old demo iteration limit of 500 would produce useful results.

Java Jar Compiled with Java 17

The Java jar version of OptQuest is now baselined and built on the Java 17 Long Term Support (LTS) release. Previously the OptQuest jar was baselined and built on the Java 8 LTS release.

C# DLL Compiled with .NET Version 4.6.1

The C# DLL version of OptQuest is now compiled with .NET version 4.6.1.

New User Controlled Optimization Pattern

A new pattern of user interaction with OptQuest has been added in this release. Standard use of OptQuest using the COptQuestOptimization class follows a push-based pattern which involves implementing an Evaluate() method to perform evaluation of solutions provided by OptQuest and a MonitorStatus() method to collect solution information at the end of each evaluation cycle. Using this pattern OptQuest pushes a solution out for evaluation and pushes a final solution out to allow a user to make updates in their user interface.

The new class COptQuestUserControlledOptimization provides a new pull-based pattern for interaction with OptQuest in which the user requests a solution for evaluation using the GetNextSolution() method when ready to perform an evaluation, calls ReturnEvaluatedSolution() when an evaluation is complete, and can use a series of getter methods to request current state of the optimization and make updates to the user interface when desired.

Added Support for Replication Batching

Some simulations that support replications have significant start up and tear down time whenever one or more replications are requested, so requesting a batch of replications can save computational expense. However, when using OptQuest to manage dynamic replications based on desired confidence levels, it is most efficient to add replications one at a time. To allow a user to balance these tradeoffs, OptQuest now supports the concept of batching while doing dynamic replication management. The new method SetReplicationBatchSize() is used to set a replication batch size. As an example, a user could specify a minimum of 10 replications, and a maximum of 50 replications, and a batch size of 10 replications. With these settings OptQuest would run 10, 20, 30, 40, or 50 replications, stopping after the batch of 10 replications that yielded the desired confidence level.

Python Interface for OptQuest

There is now a native Python interface for OptQuest. The interface and documentation can be found in the Python Package Index (PyPi). Contact OptTek for more details if you are interested in using the Python interface for OptQuest in your product.

Web API Available for OptQuest

There is now a Java web service version of OptQuest available for use by web applications. Contact OptTek for more details if you are interested in using the OptQuest web service in your product.


Several minor bug fixes are also included in this release. Contact your OptQuest representative for more details.

What can OptTek do for you?

Solving the world's most complex challenges through optimization and analytics for over 30 years.