Skip to main content
Version: 0.0.1-beta.5

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.

Screenshot: Data ribbon What-If group + Solver Parameters

Coming from Excel Solver

ExcelDesk
Data → Analyzer / SolverData → What-If → Solver
Data → What-If Analysis → Goal SeekData → What-If → Goal Seek
Solver ParametersSolver Parameters (same title)
Solver OptionsSolver Options (All Methods / GRG / Evolutionary tabs)
Solver ResultsSolver Results (Keep / Restore / Return to Parameters)
Add ConstraintAdd 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

FeatureStatus
Objective: Maximize / Minimize / Value OfYes
Decision variable cells and rangesYes
Constraints <= = >= int bin difYes — Add / Change / Delete per row; Add Another to enter several without closing
Variable bounds as constraintsYes
Make Unconstrained Variables Non-NegativeYes
Multiple named models per datasetYes
Reset AllYes
Load/Save Model to a Sheet rangeYes — 2-column OPTIMAEND block on the Sheet + .asbx optimaModels

Solving methods

MethodStatus
Simplex LPEngine (Fluxor) + Desk method picker
GRG Nonlinear + MultistartEngine + Options tab
EvolutionaryEngine + 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

FeatureStatus
Solve / Close / CancelYes (Cancel via status bar / Goal Seek Stop)
Status bar Optima: Solving…Yes (mlProgress / appProgress)
Keep / Restore / Return to ParametersYes
Outcome messages (Optimal, Infeasible, …)Yes
Answer / Sensitivity / Limits reportsYes — 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).

  1. Header — title, Sheet name, timestamp, status line
  2. Solver Engine — method, solution time, iterations (when the engine returns them)
  3. Solver Options — precision, max time, and other All Methods options from the model
  4. Objective Cell (Max/Min) — Cell / Name / Original / Final
  5. Variable Cells — plus Integer type (Contin / Integer / Binary / AllDiff)
  6. 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

  1. Models live on the active Dataset (optimaModels in .asbx).
  2. Solve calls Fluxor sheet_solve / sheet_goal_seek inside the analytics worker (in-WASM formula eval — not per-iteration JS cell writes). Cancel uses sheet_solver_request_cancel.
  3. 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.
  4. 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:

KeyValue
OPTIMAmodel name
objectiveA1
sensemax / min / value
targetnumber (Value Of)
variablesA1, B1:B3
methodsimplex_lp / grg_nonlinear / evolutionary
nonNegative1 / 0
CONSTRAINTS(marker)
cellop|rhs (e.g. >=|0)
END