Optima (Solver)
Optima is Desk’s Excel-familiar Solver and Goal Seek plugin. In the marketplace the package is named Optima; on the ribbon and in dialogs you see the words Excel users already know: What-If, Solver, Goal Seek.
Coming from Excel Solver
| Excel | Desk |
|---|---|
| Data → Analyzer / Solver | Data → What-If → Solver |
| Data → What-If Analysis → Goal Seek | Data → What-If → Goal Seek |
| Solver Parameters | Solver Parameters (same title) |
| Solver Options | Solver Options (All Methods / GRG / Evolutionary tabs) |
| Solver Results | Solver Results (Keep / Restore / Return to Parameters) |
| Add Constraint | Add Constraint (<= = >= int bin dif) |
Product copy may say “compatible with Excel Solver workflows.” Desk does not imply Microsoft or Frontline affiliation.
Install Optima from Preferences → Plugins (search solver, goal seek, or optima). Entitlement id: plugin.com.anthrena.optima. Without the plugin: Install Optima to use Solver.
Feature matrix (v1 quality bar)
Model definition
| Feature | Status |
|---|---|
| Objective: Maximize / Minimize / Value Of | Yes |
| Decision variable cells and ranges | Yes |
Constraints <= = >= int bin dif | Yes — Add / Change / Delete per row; Add Another to enter several without closing |
| Variable bounds as constraints | Yes |
| Make Unconstrained Variables Non-Negative | Yes |
| Multiple named models per dataset | Yes |
| Reset All | Yes |
| Load/Save Model to a Sheet range | Yes — 2-column OPTIMA…END block on the Sheet + .asbx optimaModels |
Solving methods
| Method | Status |
|---|---|
| Simplex LP | Engine (Fluxor) + Desk method picker |
| GRG Nonlinear + Multistart | Engine + Options tab |
| Evolutionary | Engine + Options tab |
Options
All Methods: Constraint Precision, Automatic Scaling, Show Iteration Results, Max Time, Iterations, Ignore Integer Constraints, Integer Optimality %.
GRG: Convergence, Derivatives (Forward / Central), Multistart, Population Size, Random Seed, Require Bounds (default off, Excel parity). Non-negative alone is not enough when Require Bounds is on — add upper bounds (e.g. D5:F7 <= 9) or leave the option off.
Evolutionary: Convergence, Mutation Rate, Population Size, Random Seed, Max Time without Improvement, Max Subproblems, Max Feasible Solutions, Require Bounds (default off).
Solve lifecycle
| Feature | Status |
|---|---|
| Solve / Close / Cancel | Yes (Cancel via status bar / Goal Seek Stop) |
Status bar Optima: Solving… | Yes (mlProgress / appProgress) |
| Keep / Restore / Return to Parameters | Yes |
| Outcome messages (Optimal, Infeasible, …) | Yes |
| Answer / Sensitivity / Limits reports | Yes — Answer Report previews in Solver Results. Keep (with Answer available) opens it as a Report page (optimaDoc) in the Pages rail — not a Sheet tab. Sensitivity / Limits may still create Sheet tabs when checked |
Goal Seek
Set cell / To value / By changing cell; precision & max iterations; success / cannot find messaging.
Sheet cell / range pick
Focus a ref field (or click Pick) in Solver Parameters, Add Constraint, Goal Seek, or Load/Save Model. The dialog docks aside, the Sheet stays clickable, and click/drag inserts A1 or A1:B3 into that field (same replace-while-dragging behavior as the formula bar). The active field shows a jade highlight and “Select cells on the Sheet.”
Move the dialog
Drag the title bar (dialog heading) to reposition Solver, Goal Seek, and related Optima windows. The cursor shows grab/grabbing on the title. Position is kept while Desk stays open (including after you close and reopen that dialog). In pick mode the window docks top-right so the Sheet is clear — you can still drag the title bar from there. Each Optima dialog shows a small jade role icon beside the title (matches the What-If ribbon glyphs for Solver / Goal Seek).
Digit text in text columns is fine for Optima — the engine and sheet formulas (SUM, etc.) parse numeric-looking text. Change a column to Decimal only if you want the header number icon.
Formulas required: Solver only sees cells that hold = formulas (expression bar / cellFormulas). If F6 is a typed number like 1900 or 1.9K, changing E4:E5 cannot change the objective — Solve will error instead of leaving values unchanged. Use e.g. F4=D4*E4, F5=D5*E5, F6=F4+F5.
Objective must move with the variables: Either the objective cell is inside By Changing Variable Cells (Excel Magic Square often minimizes a corner of the square), or it holds a formula that references those cells. Copying Excel’s $B$4 while your square sits at D5:F7 fails — set Objective to e.g. D5 instead.
Integer / alldifferent (Magic Square): With int + dif on a small variable range (≤9 cells), Optima uses a permutation search over 1…n (works with GRG Nonlinear selected). Larger discrete models use Evolutionary search. Optional: add D5:F7 >= 1 and D5:F7 <= 9 for the classic 1–9 square.
Limits (honesty)
Integer / binary models are not a full MIP / branch-and-bound solver. Desk may use LP relaxation + round, Evolutionary search, or permutation search (≤9 cells with int+dif). Successful solves on those paths report Feasible (constraints held; optimality not proven) — only continuous Simplex LP and completed small permutation searches claim Optimal. For high-stakes decisions, verify the solution on the Sheet and, if needed, try Evolutionary or tighten bounds.
Answer Report (Results + Report page)
After Solve, Solver Results can preview an Excel-style Anthrena Report document (Desk branding of Excel’s Answer Report). Keep (when Answer is checked and the engine returned an answer) commits solution values on the Sheet and adds a Report page named Anthrena Report N in the Pages rail (kind: optimaDoc). That page shows the same document full-bleed with the Desk logo — not a datasheet grid. Rename / delete the page like any other Report page tab. Use the PDF control on the page to download that report as a PDF (same export gate as File → Export as PDF).
- Header — title, Sheet name, timestamp, status line
- Solver Engine — method, solution time, iterations (when the engine returns them)
- Solver Options — precision, max time, and other All Methods options from the model
- Objective Cell (Max/Min) — Cell / Name / Original / Final
- Variable Cells — plus Integer type (
Contin/Integer/Binary/AllDiff) - Constraints — Cell Value, Formula, Status (
Binding/Not Binding), Slack
Name uses the cell address when Desk has no separate label. Missing engine fields show as —. The snapshot persists on the page in .asbx.
How it runs
- Models live on the active Dataset (
optimaModelsin.asbx). - Solve calls Fluxor
sheet_solve/sheet_goal_seekinside the analytics worker (in-WASM formula eval — not per-iteration JS cell writes). Cancel usessheet_solver_request_cancel. - Before solve, Desk snapshots decision cells; Keep commits the applied solution and, when Answer is available, opens an Answer Report page on the Pages rail (not a Sheet tab). Sensitivity / Limits may still write Sheet tabs when those report checkboxes are on; Restore writes the snapshot back.
- Show Iteration Results pauses after each GRG/Evolutionary step (
pauseEachIteration); Continue re-runs from the applied trial values.
Load/Save model block (Sheet range)
Two columns starting at the range anchor:
| Key | Value |
|---|---|
OPTIMA | model name |
objective | A1 |
sense | max / min / value |
target | number (Value Of) |
variables | A1, B1:B3 |
method | simplex_lp / grg_nonlinear / evolutionary |
nonNegative | 1 / 0 |
CONSTRAINTS | (marker) |
| cell | op|rhs (e.g. >=|0) |
END |