How to optimize for as-built performance

This article explains how to use the TOLR operand to perform an optimization that fully accounts for all manufacturing defects. The technique is robust, stable and takes full advantage of OpticStudio’s ability to run large calculations over multiple processors.

Authored By Mark Nicholson


Article Attachments


Tolerancing is a procedure to evaluate how the performance of a design degrades as a result of manufacturing defects such as element tip and tilts, surface irregularity, glass index errors etc.

Generally before a system is toleranced, it is optimized; but it is usually the case that an acceptably optimized system is overly sensitive to manufacturing tolerances. This is because none of the tolerances are considered when optimizing. 

This article describes an optimization technique in which manufacturing tolerances are explicitly included in the Merit Function definition so that they directly influence the optimization. That way, a manufacturable design is immediately produced and less iterations are required.

The Traditional Method

Imagine you have to design an air-spaced doublet lens, and because of the cost restrictions placed on the final system you have a good feel for what the manufacturing tolerances will have to be. Here is the traditional design process.

Note: all files referred to in this article are included in the zip archive that can be downloaded from the Downloads section of this article. The file TOLR999.TOP must be placed in your {Zemax}/Configs folder, the other files can be placed wherever you want.

Open the sample file Doublet_Starting_Point.zmx. This shows a rough starting point for our design, which is an air-spaced doublet operating over a small field of view and across the visible wavelength spectrum. A default Merit Function, which minimizes the RMS spot size across both field and wavelength, and which contains useful boundary conditions on the thickness ranges of both glass and air surfaces, has already been built. Optimize the lens, and you should get the following result:


The RMS spot size over field looks very good:

RMS spot size over field

However, we must now tolerance the lens to see what we can expect to get in production. A set of (rather loose) tolerances has already been built, and a compensator has been set on the back focal distance so that some refocus is attempted. Remove all the variables and the f/# solve on the last surface. Run the tolerancer by clicking on Tolerance...Tolerancing and press Load:


Navigate to the file TOLR999.TOP. This will configure the tolerancer as follows:


The Monte Carlo runs show a dramatic reduction in performance:


with these statistics:



The sensitivity analysis, which takes each tolerance individually, shows:


and it can be seen that the expected performance is ten times worse than the nominal performance. This means our design is far too delicate for the manufacturing tolerances we are going to use. 

Using TOLR

We will now repeat the design, but use the manufacturing tolerance data directly in the optimization. Recall that the sensitivity analysis reports two key numbers:


The nominal spot radius is what the design can achieve in the absence of manufacturing defects, and the estimated change is the amount by which this is degraded by the manufacturing defects. The estimated RMS spot radius is the sum of these, and represents what the design would achieve in production.

OpticStudio uses a Root Sum Square (RSS) assumption for computing the estimated changes in the performance. For each tolerance, the change in performance from the nominal is squared and then averaged between the min and max tolerance values. The resulting averaged squared values are then summed for all the tolerances, and the square root of the result is taken. The average of the min and max tolerances is taken because the min and the max tolerance cannot both occur simultaneously, and so summing the squares would result in an overly pessimistic prediction. The resulting RSS is the estimated change in performance.

The TOLR optimization operand allows you to access these three numbers directly from the Merit Function. To use TOLR, first optimize a design for reasonable starting performance. Then, define the relevant tolerance operands, limits, compensators, and criteria as described in the chapter on Tolerancing. Save the options of the tolerance dialog box; OpticStudio uses these saved options to compute the data returned by TOLR. To use a specific saved settings file, use an integer value between 1 and 999. The saved settings file name must be of the format TOLRnnn.TOP, where nnn is the 3 digit integer specified on the TOLR operand file argument. For example, if the desired tolerance settings are saved in a file named TOLR005.TOP, the integer file value should be 5.

As part of the tolerance sensitivity analysis, OpticStudio computes a nominal performance estimate, and predicts an RSS estimated change. The predicted total performance is the sum of nominal and estimated change. These values are computed and returned by the TOLR operand for optimization. TOLR values may be targeted and weighted as any other optimization operand.

Open the included sample file Doublet_starting_point_with_TOLR.zmx. This is exactly the same starting point as the previous design, but the Merit Function is different:


This Merit Function includes the effective focal length constraint, and the constraints on minimum & maximum glass thicknesses. However, the optical performance is specified by TOLR. Note the 'File' parameter is 999. This means that the tolerance settings file TOLR999.TOP will be used. This file must be in the {Zemax}/Configs folder.

TOLR with a data item of 1 computes the nominal performance, data item 0 the expected change and data item 2 the final performance (sum of these two). I chose the optimize this value to zero. This means that the nominal performance may not be as good as the previous case, but the as-built performance should be better. After just 10 cycles of optimization, we get:


You can see that the nominal performance is not as good as the previous design, which is to be expected. However, the estimated RMS spot is now 79µ, compared to the 120µ we obtained when the previous design was toleranced. Here is the nominal performance of the lens now:


and here is the overlay of 20 Monte-Carlo runs:


The as-built performance is almost twice as good as that produced by the two-step optimize & tolerance process. Here for comparison is the sensitivity analyses of the two methods:

Two-step optimize & tolerance:




Best Practice When Using TOLR

TOLR allows you to target the as-built performance of your lens directly. The only downside is that it is more computationally intensive than the traditional method, and so the optimization time is longer. The payback, however, is that the design so produced is much less sensitive to perturbation.

In order to get good results in as short a time as possible, the following are good practice:

  1. Use a multiple-processor machine. OpticStudio can support up to 64 CPU cores in a single machine, and support for more will be added as the hardware becomes available. Ray-tracing speed scales linearly with the number of processors (with a small overhead for managing the multiple processors).
  2. Produce a reasonable starting point first. Tolerancing cannot begin until the design is exceeding its required performance. Accounting for sensitivity to manufacturing errors is unnecessary during the early design stages.
  3. Run an initial sensitivity analysis, to determine if any tolerances are insignificant. It takes as long to compute the sensitivity of a design to an insensitive parameter as it does for a significant one! In the doublet used here, the design is most sensitive to tilts and decenters of one element with respect to the other, and has almost zero sensitivity to the glass refractive index changes. Intelligent pruning of the tolerance list can greatly reduce the calculation time.


Was this article helpful?
18 out of 18 found this helpful



Please sign in to leave a comment.