How does Optimisation work in Silico?
The optimisation of model inputs to achieve a particular outcome is a powerful capability that allows Silico users to explore the space of possible decisions and quickly arrive at an optimum.
Silico automates the exploration of the space of decisions by generating a grid of possible model parameterisations, executing the model once for each parameterisation, and selecting the parameterisation which results in the maximal (or minimal) value of the objective.
There are many different kinds of optimisation. At the moment Silico provides users with the ability to perform "constrained allocation", explained below. Additional functionality and flexibility will be added to this space in the near future.
A constrained allocation optimisation refers to a case where the space of possible decisions is restricted in the following way: In order for a possible decision (or, parameterisation) to be valid, the parameters must all sum to a given fixed quantity (called the "total allocation").
The screenshot below depicts a user setting an optimisation configuration such that:
- Each point in the space of possible parameterisations satisfies the allocation constraint
"Dept A" + "Dept B" + "Dept C" = 100
- The space of possible decisions is sampled at 300 such valid points.
- The optimisation algorithm will seek the maximum value of the objective element "Total output" across all of those 300 points.
At the moment, the accuracy of the optimisation results is determined largely by the sample budget. A lower sample budget means optimisations are quicker to run, but operate on a lower resolution sampling of the parameter space. For highly non-linear models, this means there is a possibility that they will miss minima/maxima that are not part of the sample space. In these cases, it is recommended that higher sample budgets are used.
It may be that a particular parameterisation results in unforseen numerical errors in the model. For example, divisions by zero, or roots of negative numbers.
If Silico detects these events, it will disregard the result from the set of candidates for optimal parameterisations, and notify the user as to which parameterisations generated the errors.
This feature is currently in beta testing. We would greatly value your testing and feedback. Please don't hesitate to get in touch. We'd also be interested in hearing about potential use cases for this feature outside of what we have imagined.
Please also note that use of the optimiser with segmented models requires the user to ensure the objective and parameters are all scalar valued (that is, non-segmented).