1. Home
  2. Advanced Tools
  3. How the Solver Works
  1. Home
  2. Experimental Info - Recipes
  3. How the Solver Works

How the Solver Works

Uncountable’s Solver feature is a constraint optimization tool that adjusts ingredient amounts to satisfy one or more locked targets.

This article provides a high-level technical explanation of how the Solver interprets calculations, locks, and ingredient amounts, and why it behaves the way it does.


Solver-Compatible Calculations

The Solver only works with input calculations that follow a predictable, differentiable structure. These include:

  1. Weighted Sum / Weighted Average calculations
  2. Composite calculations

These calculation types behave linearly with respect to ingredient amounts, which allows the Solver to determine how changing each ingredient affects the final calculation.

If a calculation shows a lock icon in Solve Mode, it is solver-compatible. If no lock appears, the Solver cannot use that calculation as a constraint.

Additionally, in the Edit Calculations modal, a green f(x) in the top right corner indicates a Solver compatible calculation and a red f(x) indicates a non-Solver compatible calculation.

Why only these types?

Because they create mathematical expressions with a clear relationship between ingredient amounts and the calculated value. This allows the Solver to compute how to adjust ingredients to reach a target.


Locked Calculations Become Constraints

When you type a new value into a calculation and lock it, you are adding a precise mathematical condition: “This calculation must equal this target value in the final recipe.”

Examples:

  • Tg = 25 °C
  • NVM = 85%
  • OH Number = 150
  • Weight % of Monomer 3 = 40%

Column Calculations as Constraints

Column calculations represent ingredient-level contributions. When locked, they act as constraints for the overall solve.

  • Locking column values creates a constraint requiring all those row values to match their locked targets.
  • When locked, one constraint per ingredient row is added.
  • Column constraints combine with bottom calculations for complex solving.

Column solving is especially useful for setting percentage distributions or proportionality rules.


Locked vs. Unlocked Ingredients

Locked ingredient amounts must remain fixed. Unlocked ingredient amounts can be adjusted by the Solver and must have a starting value (cannot be blank). Solver solutions require enough unlocked ingredients (adjustable variables) to satisfy all locked constraints.


Infeasible Problems

The Solver will report that a problem is “infeasible” if there are too many constraints competing for too few adjustable variables. To resolve this, you can remove constraints or use the Tolerance Percent to give each constraint a percentage of flexibility.

Solver may also not be able to find a solution when:

  • A calculation is hidden but still has an active lock
  • A calculation is not solver-compatible
  • Constraints mathematically contradict one another
  • Column locks + calculation locks create implicit conflicts

Use the Solver/Locks side panel (Search Actions > “Solver/Locks”) to identify hidden or conflicting locks.


Optimization Objective = Closest Possible Formula

When more than one solution satisfies all constraints, the Solver chooses the one that is most similar to the original recipe.

Technically speaking, it minimizes the sum of squared changes to ingredient amounts (also known as an L2 norm or Euclidean distance minimization). This objective penalizes large changes more heavily than small ones.

Results

  • Solver avoids extreme or unintuitive adjustments
  • Changes are distributed across all unlocked ingredients
  • The solution feels “reasonable” to a formulator

For example, if changing one monomer by 230 g and changing four monomers 10-20g each are both possible solutions, the Solver will choose the second option.


Why Blank Ingredient Values Cannot Change

Solver requires a mathematical relationship between ingredient mass and calculated values. A blank value:

  • Represents no mass contribution
  • Has no differentiable effect on calculations
  • Cannot be modified within the optimization structure

Therefore, Solver always treats blank values as fixed, even if the lock icon is open. To allow Solver to adjust an ingredient, assign any placeholder amount (e.g., 0 or 1 g).


Normalization

After Solver finds ingredient amounts that satisfy all constraints, it performs a normalization step to ensure ingredient ratios and dependent calculations remain consistent if possible.

If it is not possible to satisfy all constraints while maintaining ingredient ratios, a banner will appear indicating “Ingredient ratios were modified by normalization”. This is expected behavior and indicates the Solver successfully balanced your constraints.


Advanced Settings

In the Solver/Locks sidepanel, under Advanced Settings, have a range of additional settings available that allow users to adapt the solver behavior to their use case.

Accept Optimal Inaccurate Solutions

This is particularly useful when working with high precision starting values, but wanted to allow for slight flexibility in precision of solutions.

Allow Fallback Objectives

Enabling this will allow you to rank multiple objectives to attempt to use.

The available objectives are Default, Proportional, and Custom (allows user to specify a target calculation to optimize for.

Optimize Mode

When constraints cannot be met fully, you can choose “Reset on Fail” which will make no changes to ingredient values or “Optimize on Fail” which will meet the constraints as closely as possible, but not exactly.

Tolerance Percent

Enables flexibility to all fixed value constraints of the percentage specified.

Epsilon Accuracy

This value overrides the default epsilon accuracy value (1e-5) used in the solver. Reducing this value can prevent degenerate solutions.

Values To Optimize

Users can choose whether to optimize ingredient values (standard) or process parameter values.

The Optimize Parameter Values option will treat all ingredient values as fixed and treat any process parameters involved in locked calculations as variables that the Solver can change.

Updated on December 1, 2025

Was this article helpful?

Related Articles