OR POST common mistakes
OR POST · Understand the traps and how to avoid them.
When converting a word problem into a linear program, the candidate writes the objective and constraints without first defining decision variables, so a constraint like 'total hours used ≤ 40' silently mixes variables of different units (e.g., adds machine-hours to labor-hours) or omits a linking constraint between production quantities and setup indicators.
Under time pressure the candidate jumps straight to algebra, treating the word problem as a translation exercise rather than a modeling exercise. Units and dimensions are never checked, and the habit of writing 'Let x1 = ...' explicitly is skipped because it feels like wasted effort.
What to do instead
Before writing any equation, force yourself to write a one-line definition for every decision variable including its units, then write the objective in words ('maximize total contribution margin in dollars'), then each constraint in words with its units before symbolizing it. Do a dimensional audit: every term in a constraint must carry the same units as the right-hand side. For fixed-charge or logical conditions, explicitly list the linking constraints (x ≤ M·y) as a separate checklist item.
On a two-variable LP, the candidate identifies the optimal corner point graphically but reports a solution that violates a constraint, or fails to check whether the feasible region is unbounded or empty, and concludes 'optimal solution is X' when the problem is actually infeasible or unbounded.
Graphing is done quickly with rough intercepts, and the candidate trusts the picture instead of substituting the corner coordinates back into every constraint. Unboundedness and infeasibility are edge cases that are rarely practiced, so they are not on the candidate's mental checklist.
What to do instead
After finding candidate corner points, always substitute each one into all constraints and the objective, showing the arithmetic. Separately test the geometry: check whether the feasible region has a vertex in each direction, and if the objective improves indefinitely along an open ray, declare unboundedness. Practice constructing one infeasible and one unbounded two-variable example and writing the formal certificate (e.g., a nonnegative combination of constraints yielding 0 ≤ -1 for infeasibility).
The candidate solves the primal LP and then, when asked for the dual or for shadow prices, writes dual variables with the wrong sign, assigns them to the wrong constraints, or claims a shadow price equals the optimal objective value rather than the marginal rate of change.
Duality is memorized as a table of transposes (max↔min, ≤↔≥, variables↔constraints) without understanding that the dual variable of a constraint is the rate of change of the optimal value with respect to that constraint's right-hand side. Sign conventions for maximization versus minimization and for equality constraints are the first thing forgotten.
What to do instead
Derive the dual from first principles each time using the Lagrangian or the 'each primal constraint gets a dual variable' construction, and verify with complementary slackness on the solution you already have. Sanity-check every shadow price by perturbing the right-hand side by one unit and re-solving (or reasoning about the binding constraint): the objective should change in the direction and magnitude you claim, and the shadow price of a nonbinding constraint must be zero. Memorize the rule that dual variables of a max problem with ≤ constraints are ≥ 0.
When asked to solve a shortest-path, max-flow, or minimum-spanning-tree problem, the candidate applies Dijkstra's algorithm to a graph with negative edge weights, or reports a max-flow value without exhibiting a cut of equal capacity, or confuses the min-cut with the maximum flow value.
The algorithms are learned as procedures without their preconditions. Negative weights, residual graphs, and the max-flow min-cut theorem are treated as trivia rather than as the correctness argument, so the candidate does not notice when the precondition fails or when the answer is unverified.
What to do instead
Before running any algorithm, list its preconditions (Dijkstra: nonnegative weights; Bellman-Ford: no negative cycles reachable; Kruskal/Prim: undirected, connected). For every max-flow answer, produce the corresponding minimum cut and verify capacity equals flow. For shortest paths, verify optimality via the reduced-cost or potential condition on every edge. Practice one instance with a negative edge to see Dijkstra fail.
For an integer program, the candidate solves the LP relaxation, rounds the fractional solution to the nearest integers, and reports it as optimal, without checking feasibility or comparing to the true integer optimum; alternatively, the candidate declares a problem 'solved' by branch-and-bound at the first incumbent without proving the bound closes the gap.
Rounding feels like a harmless final step, and the LP relaxation bound is confused with the integer optimum. Branch-and-bound is often executed mechanically, so the pruning condition (bound worse than incumbent) is applied without tracking whether all nodes are fathomed.
What to do instead
Never round without checking: substitute the rounded solution into all constraints and compute its objective, then compare against the LP bound to quantify the gap. In branch-and-bound, maintain an explicit node list with bounds and only stop when every node is pruned by bound, infeasibility, or integrality; state the final gap. Recognize problem structures (knapsack, set cover, assignment) where rounding is provably bad and a specific algorithm or total unimodularity argument applies.
The candidate computes a queueing performance measure (e.g., L, Lq, W, Wq) using the wrong formula for the arrival process, for example applying M/M/1 results to an M/G/1 or M/M/c system, or using Little's Law with mismatched units (arrivals per hour with service time in minutes).
Formulas are memorized as a single blur of 'L = λW' and 'ρ = λ/μ' without the model assumptions (Poisson arrivals, exponential service, number of servers, stability condition ρ < 1). Unit conversion is treated as clerical and skipped.
What to do instead
Write the model identification first: arrival process, service distribution, number of servers, queue discipline, and check stability (λ < cμ). Then select the formula family and write it with symbols before substituting numbers. Convert all rates and times to a single consistent unit (e.g., hours) at the top of the calculation. Use Little's Law as a cross-check (L = λW, Lq = λWq) rather than as the primary formula, and for M/G/1 use the Pollaczek-Khinchine formula.
In a decision-analysis problem, the candidate computes an expected monetary value and recommends the EMV-maximizing alternative even when the problem specifies risk aversion or a nonlinear utility function, or the candidate builds a decision tree with probabilities that do not sum to one at a chance node or omits a branch.
EMV is the most practiced technique, so it becomes the default regardless of whether the decision maker is risk-neutral. Decision trees are drawn quickly, and probability normalization and branch completeness are not verified before folding back.
What to do instead
Read the problem for cues about risk attitude (utility function given, 'risk-averse', large stakes relative to wealth) and, when present, compute expected utility and convert back with the inverse utility. For every chance node, explicitly sum the branch probabilities to 1.00 and list the exhaustive outcome set before folding back. When both EMV and expected utility are computable, report both and explain the divergence.
The candidate sets up a discrete-event simulation but mishandles the event calendar or random-number usage: reusing the same random number stream across replications, failing to reset the clock and statistics between replications, or treating a single long run as independent replications for confidence intervals.
The mechanics of the event loop and the statistical independence assumptions of replication are learned separately, so the candidate does not see that correlated outputs invalidate the confidence interval. Random-number generation is treated as a black box.
What to do instead
Draw the event calendar explicitly for a small example (arrival, departure, end-of-run) and track the clock and state at each event. For output analysis, distinguish terminating from steady-state systems, use independent replications with separate streams (or a proper warm-up and batch-means for one long run), and compute the confidence interval from the replication means with the t-distribution. Verify the generator: state the seed and confirm streams are not reused.
In a nonlinear or dynamic programming problem, the candidate applies the KKT conditions but ignores the constraint qualification or sign of the multipliers, or sets up a DP recursion with the wrong stage, state definition, or boundary condition, so the recursion returns a plausible but incorrect value.
KKT is memorized as 'gradient equals lambda times gradient' without the complementary slackness, primal and dual feasibility, and nonnegativity conditions, and without checking that the constraint qualification holds. DP is error-prone because the state definition is the hard part and is often copied loosely from a similar problem.
What to do instead
Write all four KKT condition groups explicitly (stationarity, primal feasibility, dual feasibility, complementary slackness) and verify each candidate solution against all of them, including which constraints are active. For DP, write the stage, state, decision, transition, immediate reward, and boundary condition as a labeled table before writing the recursion, then verify by backward induction on a tiny instance and by checking the recursion against brute-force enumeration for small n.
When a problem involves ethical or professional-practice considerations (data use, conflict of interest, presenting model results to a client, safety-critical recommendations), the candidate gives a generic 'be honest and follow the code of ethics' answer without identifying the specific stakeholder, the specific conflicting obligation, and a concrete course of action.
Ethics questions feel like soft questions, so the candidate does not prepare a framework and defaults to platitudes. The exam expects identification of the affected parties, the relevant professional obligation, and a defensible action, which requires structured reasoning.
What to do instead
Use a fixed three-step template: (1) name the stakeholders and what each stands to gain or lose; (2) name the specific obligation at stake (competence, confidentiality, objectivity, disclosure of assumptions and limitations, avoidance of conflicts of interest); (3) state the concrete action (disclose, escalate, decline, document, or qualify the recommendation) and its justification. Practice applying this template to model-risk, data-privacy, and safety scenarios so the answer is specific rather than generic.