Inside the Optimization Model: Constraints, Objectives & Parameters

🎯 Who this is for: Schedulers and administrators who will configure Optimizer and need to understand exactly what the three levers — constraints, objectives, and parameters — do to the schedule the engine produces.

Series: Part 2 of 5 — Maximo Optimizer Implementation Playbook | Read time: 20 minutes

Three Levers, One Schedule

Part 1 established that Optimizer is a solver: it finds the best legal answer to the question you ask. This part is about the three levers you actually pull to ask that question. Every schedule Optimizer produces is the product of exactly three things:

  1. Constraints — the hard rules the schedule must not break.
  2. Objectives — what "best" means, and how much each goal matters.
  3. Parameters — the bounds and tuning that shape and limit the search.

Get all three honest and Optimizer produces schedules your operation will actually run. Get any one of them wrong and the engine produces a technically optimal answer to the wrong question — which is worse than no answer, because it looks authoritative. This part walks all three levers so that when a schedule surprises you, you know which lever to check.

🔒 The Nine Constraints

Constraints are the rules that define a feasible schedule. Optimizer will never knowingly violate one — a schedule that breaks a hard constraint is not a low-scoring schedule, it is an invalid one the engine discards. Optimizer considers all nine of the following when it builds a schedule:

ConstraintWhat it meansWhat it needs from your data
Work order priorityHigher-priority work is scheduled firstAccurate WO priority values
Required crafts / skillsMatch technician skills to the work requirementCraft and skill records on work and on people
Required toolsEnsure tools are available at the scheduled timeTool requirements and tool availability
Asset availabilitySchedule within the asset's downtime windowsAsset availability / downtime calendars
Technician availabilityRespect working hours, shifts, vacation, trainingShift calendars and absence records
Travel timeMinimize travel between work locationsLocation coordinates (see Part 4)
Work dependenciesHonor predecessor / successor relationshipsWO dependency links
SLA deadlinesComplete work before service-level deadlinesTarget/required dates on work orders
Parts availabilityOnly schedule when required parts are in stockInventory / parts reservation data

Read that table as a checklist of what has to exist as data for Optimizer to respect it. This is the bridge to Part 3: every constraint the engine cannot see, it cannot honor. If your work orders carry no craft requirement, the "required crafts" constraint is silently inert and the engine will happily send anyone to any job. If your assets have no coordinates, "travel time" is invisible and the schedule will zig-zag across the map. Constraints are not switches you turn on; they are data the engine reads.

💡 Key insight: A constraint with no data behind it does not fail loudly — it disappears. The engine does not warn you that "required crafts" is unenforceable; it just stops enforcing it. This is the single most common reason an optimized schedule looks wrong: a constraint everyone assumed was active was never populated in the data.

⚖️ The Five Objectives

If constraints define what is legal, objectives define what is good. Optimizer's engine supports five objective functions, and the crucial fact is that you can weight them to match your priorities:

ObjectiveWhat it optimizes
Minimize total costLabor cost + travel cost + penalty for late work
Maximize work completedComplete as many work orders as possible
Minimize travelReduce total travel time / distance
Balance workloadEven distribution across technicians
Minimize tardinessReduce late completions relative to target dates

Here is why weighting matters: these objectives conflict. Minimizing travel might mean batching all the work in one district and leaving another district's SLAs to slip — which is terrible for "minimize tardiness." Maximizing work completed might mean loading your fastest technicians to the ceiling — which wrecks "balance workload." There is no single schedule that is best on all five axes at once, so the engine needs to know how much you care about each.

That weighting is not a technical detail — it is your scheduling strategy, expressed as numbers. A utility restoring power after a storm weights "maximize work completed" and "minimize tardiness" heavily and barely cares about cost. A cost-pressured facilities team weights "minimize total cost" and "minimize travel." The same work orders, the same technicians, and two different weightings produce two legitimately different schedules — and both are correct, because they answer different questions.

💡 Key insight: There is no objectively best schedule, only the best schedule for your weighting. The most productive hour of an Optimizer rollout is often the meeting where operations, finance, and dispatch argue about the weights — because that argument surfaces the real priorities that were previously buried in a planner's judgment. Write the weights down; they are the policy.

👥 Crew Scheduling and Resource Leveling

Two capabilities keep the optimized schedule physically achievable rather than merely dense on paper.

Crew scheduling handles work that goes to a group rather than an individual. Optimizer can:

  • Assign work orders to crews — defined groups of technicians — rather than single people.
  • Balance workload across the members of a crew.
  • Respect crew composition rules, such as a lead-plus-apprentice pairing that must stay together.
  • Handle overtime and shift constraints at the crew level.

This matters because a lot of real maintenance work is not a one-person job. A schedule that treats a two-person lift as a single assignment, or that splits a crew that has to work together, is not runnable no matter how good its objective score is.

Resource leveling is the guardrail against over-allocation. It:

  • Prevents a technician from being double-booked — assigned to two places at once.
  • Smooths work distribution over time so you do not get a wall of work on Monday and an empty Thursday.
  • Identifies resource bottlenecks — the craft or shift that is the limiting factor.
  • Surfaces where you may need to hire or contract additional capacity.

Together, crew scheduling and resource leveling are what separate an optimized schedule from an optimistic one. The objectives push the engine to pack work in; leveling and crew rules push back so the packed schedule is one humans can actually execute.

🎛️ The Parameters That Bound the Search

Constraints and objectives define the problem. Parameters define how the solver searches it and how business intent gets translated into the model. These are the dials you tune, and Optimizer exposes a configurable set:

ParameterWhat it controlsExample values
Planning horizonThe time window to optimize1 day, 1 week, 2 weeks
Optimization time limitMaximum time the solver may run30 seconds, 5 minutes, 30 minutes
Priority weightsRelative importance of priorities 1-5P1=100, P2=50, P3=20, P4=10, P5=5
Travel speedAverage speed for distance calculations30 mph (urban), 60 mph (highway)
Work bufferBuffer time between assignments15 minutes, 30 minutes
Overtime allowedWhether the solver may schedule overtimeYes/No, with a max-hours cap
Skills matchingStrict exact match vs. closest matchStrict, Flexible

A few of these deserve a closer look because they trip teams up:

Planning horizon and optimization time limit are a trade-off. A longer horizon (two weeks) gives the engine more room to sequence work well, but the search space grows and the solver needs more time. A short time limit on a long horizon yields a rougher answer. Tune them together: a daily dispatch run might use a one-day horizon and a thirty-second limit; a shutdown plan might use a two-week horizon and let the solver run for thirty minutes.

Priority weights turn your 1-5 priority scale into real math. If P1 is weighted 100 and P2 is weighted 50, a single P1 job is worth two P2 jobs in the objective. Set these to reflect how your operation actually values priority tiers — and audit them, because a flat weighting quietly tells the engine that priority does not matter much.

Skills matching — strict versus flexible — is a lever with real consequences. Strict means only an exact craft match may do the job; it protects quality and compliance but can leave work unassigned when the perfectly skilled person is unavailable. Flexible lets the engine assign the closest match; it completes more work but can send a near-miss skill to a job that needed the exact one. Which you choose is a policy decision, not a technical default.

💡 Key insight: Parameters are where "the optimizer is too slow" and "the optimizer ignores priority" usually live. Too tight a time limit on too long a horizon produces rushed schedules; flat priority weights produce priority-blind ones; a strict skills setting on thin craft data produces mountains of unassigned work. When the output feels wrong, walk the parameter table before you touch anything else.

Reading a Bad Schedule as a Modeling Bug

Put the three levers together and you have a diagnostic method. When an Optimizer run produces something that makes a dispatcher wince, do not conclude the engine is broken — trace the surprise to a lever:

SymptomLikely leverThe fix
Wrong-skilled tech sent to a jobConstraint (craft data missing)Populate craft requirements on the work and skills on the person
Schedule zig-zags across the mapConstraint (no coordinates) or objective (travel un-weighted)Add location coordinates; weight "minimize travel"
Low-priority work done before highParameter (flat priority weights)Set priority weights to reflect real tiers
Lots of unassigned workParameter (strict skills) or constraint (thin capacity)Consider flexible matching; check resource leveling for bottlenecks
Solver too slow / rough answersParameter (horizon vs. time limit)Shorten the horizon or extend the time limit
SLAs slipping to save travelObjective (mis-weighted)Raise the weight on "minimize tardiness"

Every row points at a lever, and every lever is something you control. This is the practical payoff of understanding the model: it turns "the optimizer is bad" — an unactionable complaint — into "the model asked the wrong question" — a fixable one.

First-principles takeaway: Optimizer has no opinions. It faithfully returns the best legal answer to the exact question posed by your constraints, objectives, and parameters. Every schedule you dislike is a message about the model, not a defect in the engine. Learn to read the message and the tool becomes trustworthy.

Practical Checklist Before You Move On

Before you dig into the data in Part 3, confirm you can answer these:

  • Can you name the nine constraints and, for each, the data that has to exist for it to be enforced?
  • Have you agreed the objective weights with operations, finance, and dispatch — and written them down?
  • Do you understand crew rules and resource leveling well enough to know why a dense schedule can still be unrunnable?
  • Have you set a horizon and time limit appropriate to the run — short and fast for daily dispatch, long and patient for shutdown planning?
  • Have you made the strict-vs-flexible skills decision deliberately, knowing its effect on unassigned work?

If those answers exist, you understand the engine. The next question is whether your data can feed it — which is Part 3.

Key Takeaways

  • Optimizer schedules against nine constraints — priority, crafts, tools, asset windows, technician availability, travel, dependencies, SLA deadlines, and parts — and a constraint with no data behind it silently disappears.
  • You steer it with five weighted objectives — minimize cost, maximize work, minimize travel, balance workload, minimize tardiness — and the weighting is the strategy.
  • Crew scheduling assigns and balances groups; resource leveling prevents double-booking and smooths workload so the schedule stays achievable.
  • Parameters — horizon, time limit, priority weights, travel speed, buffer, overtime, strict-vs-flexible skills — bound both runtime and the shape of the answer.
  • A bad schedule is almost always a bad model: trace every surprise to a constraint, an objective weight, or a parameter.

References

Series Navigation

Previous:Part 1 — From Scheduler to Solver: What "Optimization" Actually Means
Next:Part 3 — The Data Optimizer Lives or Dies On

About TheMaximoGuys: We help Maximo developers and teams navigate the move to MAS 9 with practical, no-hype guidance grounded in how the platform actually behaves.

Published by TheMaximoGuys | July 2026