PowerSolver 2.0 Concepts Guide
2.0 — read first: The variable types are now only basic and list (no chained). The 1.x entities[] + valueRanges{} top-level split is replaced by a unified collections{} map. Time arithmetic is expressed via derived shadows (supplier expressions), NOT via TimeGrainConfig. The canonical scheduling pair: startTime = previous?.endTime ?? host.startTime and endTime = startTime + this.duration. The current source for this page is ../CONCEPTS_GUIDE.md.
What is PowerSolver?
PowerSolver is a planning optimization tool that automatically finds the best way to assign resources to tasks while following your business rules.
Think of it as: An intelligent assistant that considers thousands of possibilities and selects the best arrangement that meets all your requirements.
Example: Instead of spending hours manually creating a staff schedule, PowerSolver does it in seconds — ensuring no one works overlapping shifts, skills match requirements, and workload is balanced fairly.
The 6 Core Concepts
Every planning problem in PowerSolver consists of these six building blocks:
| Concept | Simple Definition | Example |
|---|---|---|
| Entity | The things you need to assign | Tasks, Shifts, Deliveries |
| Planning Variable | The decision you're making | "Which developer?" "Which time slot?" |
| Planning Value | The options you can choose from | Employees, Time slots, Vehicles |
| Constraint | Rules the solution must follow | "Don't exceed 8 hours/day" |
| Score | How good the solution is | 0hard/-50soft |
| Solution | The final assignments | Task 1 → Alice, Task 2 → Bob |
1. Entities — "What Needs to Be Assigned?"
Entities are the items that need decisions made about them.
Examples by Problem Type
| Problem Type | Entities Are... | You Need to Decide... |
|---|---|---|
| Task Assignment | Tasks | Who does each task? When? |
| Employee Rostering | Shifts | Who works each shift? |
| School Timetabling | Classes/Lessons | Which room? Which time? |
| Maintenance Scheduling | Maintenance Jobs | Which technician? When? |
| Vehicle Routing | Customer Stops | Which vehicle visits them? |
What Makes Up an Entity?
Each entity has properties that describe it:
Entity: "Task-001"
├── Name: "Implement Login Page"
├── Duration: 4 hours
├── Priority: High
├── Required Skills: ["JavaScript", "React"]
└── Deadline: January 15, 2026
Your job: Define what entities you have and what properties each one has.
Standard vs Custom Properties
PowerSolver supports two types of properties:
| Type | Examples | Description |
|---|---|---|
| Standard | id, name, skills, duration, deadline |
Built-in fields shown by default |
| Custom | requiredResourceType, cpuRequired, memoryRequired |
Domain-specific fields you define |
→ See: Custom Properties Reference for complete details on using custom properties with constraints.
2. Planning Variables — "What Decisions Are You Making?"
Planning Variables define what choices PowerSolver needs to make for each entity.
Simple Example
For a task assignment problem:
- Entity: Task
- Planning Variable: "Which developer is assigned to this task?"
- Result: Task-001 → Alice
Multiple Variables (N-Variable Planning)
PowerSolver supports 1 to 4 planning variables per entity:
| Variables | Example | What's Being Decided |
|---|---|---|
| 1 variable | Task → Developer | Who does this task? |
| 2 variables | Task → Developer + Time Slot | Who does it and when? |
| 3 variables | Task → Developer + Time Slot + Room | Who, when, and where? |
| 4 variables | Task → Developer + Time Slot + Room + Equipment | Who, when, where, with what? |
⚠️ CRITICAL: Two Types of Variables (BASIC vs LIST)
This is the most important concept to understand. PowerSolver supports two fundamentally different types of planning variables.
BASIC Variables — One Entity Gets One Value
Use for: Task Assignment, Employee Rostering, Timetabling, Maintenance Scheduling
How it works: Each entity is assigned to exactly ONE value per variable.
BASIC Variable Example (Task Assignment):
┌─────────────┐ ┌─────────────┐
│ Task 1 │───────▶│ Alice │
└─────────────┘ └─────────────┘
┌─────────────┐ ┌─────────────┐
│ Task 2 │───────▶│ Bob │
└─────────────┘ └─────────────┘
┌─────────────┐ ┌─────────────┐
│ Task 3 │───────▶│ Alice │
└─────────────┘ └─────────────┘
Each task → ONE developer
(Multiple tasks CAN go to the same developer)
LIST Variables — One Entity Gets Multiple Values
Use for: Vehicle Routing (and similar "collect multiple items" problems)
How it works: Each entity is assigned a LIST of values in a specific order.
LIST Variable Example (Vehicle Routing):
┌─────────────┐ ┌─────────────────────────────┐
│ Vehicle 1 │───────▶│ [Stop A, Stop B, Stop C] │
└─────────────┘ └─────────────────────────────┘
┌─────────────┐ ┌─────────────────────────────┐
│ Vehicle 2 │───────▶│ [Stop D, Stop E] │
└─────────────┘ └─────────────────────────────┘
Each vehicle → MULTIPLE stops (in order)
Each stop goes to exactly ONE vehicle
When to Use Which?
| Problem Type | Variable Type | Why |
|---|---|---|
| Task Assignment | BASIC | Each task is done by ONE person |
| Employee Rostering | BASIC | Each shift is worked by ONE employee |
| School Timetabling | BASIC | Each class happens in ONE room at ONE time |
| Maintenance Scheduling | BASIC | Each job is done by ONE technician |
| Vehicle Routing | LIST | Each vehicle visits MULTIPLE stops |
❌ Common Mistake: Using Wrong Variable Type
Using BASIC variables for Vehicle Routing
Vehicle 1 → Stop A ❌ Only one stop per vehicle!
Vehicle 2 → Stop B
Using LIST variables for Vehicle Routing
Vehicle 1 → [Stop A, Stop B, Stop C] ✅ Multiple stops per vehicle
Vehicle 2 → [Stop D, Stop E]
💡 Rule of Thumb: If each entity needs to "collect" or "visit" multiple things in order, use LIST. Otherwise, use BASIC.
Shadow Variables — Auto-Updating Labels
When PowerSolver schedules your tasks, you give it two kinds of facts: the people doing the work (with their start-of-day) and the tasks being done (with their durations). PowerSolver then has to make some decisions — who gets which task, in what order — but it also has to compute a bunch of follow-on facts you care about: when does this task start?, who's right before me in the queue?, which person did this task land on?.
Those follow-on facts are called shadow variables. They have three properties that make them useful:
- Computed automatically — you never type a value for one. PowerSolver fills them in.
- Always current — every time PowerSolver tries a different placement, all the shadow values update by themselves, so they match the current schedule.
- What everything else reads — the Solution Gantt, the Insights load chart, the Explain score breakdown all read shadow values, not the raw list.
Think of them as labels stuck on each task that rewrite themselves the moment the task moves.
The two you'll always see
For any "Consecutive on a host" problem, every task automatically carries these:
| Shadow | What it means |
|---|---|
host | The person / vehicle / crew this task ended up on. |
previous | The task that comes directly before this one on the same person's queue (empty if this task is first in the queue). |
You declare these by name when you turn on sequence mode (or click Apply default template in Step 3). PowerSolver maintains them for free as the schedule changes. Two more are available if you ever need them — next (the task after me) and index (my 0-based position in the queue) — but most scheduling problems don't.
Derived shadows — the ones with formulas
A derived shadow is a follow-on fact you describe, with a tiny formula. PowerSolver re-runs the formula every time the schedule changes, so the value is always up to date.
The two formulas that come with "Consecutive on a host" are:
startTime = previous?.endTime ?? host.startTime
endTime = startTime + this.duration
Read aloud:
- "My start time is the previous task's end time — or, if I'm first in the queue, my host's start-of-day."
- "My end time is my start time plus my own duration."
That pair is enough to roll a whole day's schedule forward, for any number of people and any number of tasks. You write nothing else, and startTime / endTime appear on every task in the output.
The formula language is intentionally small: you can read values along a path (previous.endTime), guard against missing values (?., ??), and do arithmetic on numbers, durations, and datetimes. No loops, no function calls. If a real problem needs something the formulas can't express, a new built-in rule is added in powersolver-api rather than complicating the formula language.
A derived shadow's formula must reference at least one moving part — meaning a built-in shadow (previous, host, next, index) or another derived shadow. If a formula only reads fixed facts the user typed (e.g. 5 - this.priority with no other path), PowerSolver rejects it at load time, because there's nothing for it to react to. Workaround: fold the fixed math directly into a formula that already has a moving part. For instance, instead of two separate shadows importance = 5 - this.priority and priorityCost = position * importance, write one: priorityCost = position * (5 - this.priority).
For a walk-through of a real placement — what the user types, what PowerSolver decides, and the exact startTime / endTime values the derived shadows produce — see Understanding "Consecutive on a host" in the Wizard Guide.
3. Planning Values — "What Are Your Options?"
Planning Values are the resources or options you can assign to entities.
Examples
| For This Variable... | Values Are... |
|---|---|
| Developer assignment | List of developers |
| Time slot assignment | List of available time slots |
| Room assignment | List of available rooms |
| Vehicle assignment | List of vehicles in your fleet |
What Makes Up a Value?
Each value has properties that affect constraints:
Value: "Alice Chen"
├── Skills: ["JavaScript", "React", "Python"]
├── Max Hours Per Day: 8
├── Availability: Mon-Fri, 9:00-17:00
└── Hourly Rate: $75
Your job: Define all available options and their properties.
4. Constraints — "What Are the Rules?"
Constraints are rules that your solution must follow (or should try to follow).
The Three Levels of Constraints
| Level | Icon | Meaning | If Violated... |
|---|---|---|---|
| Hard | 🔴 | MUST be satisfied | Solution is invalid — cannot use it |
| Medium | 🟡 | SHOULD be satisfied | Solution is valid but not ideal |
| Soft | 🟢 | NICE TO HAVE | Solution is valid, just less optimal |
Hard Constraints — Non-Negotiable Rules
These are your absolute requirements. A solution that violates ANY hard constraint is unusable.
Examples:
- ❌ "An employee cannot work two shifts at the same time"
- ❌ "A task requiring Java skills must be assigned to someone who knows Java"
- ❌ "Vehicle capacity cannot be exceeded"
- ❌ "All tasks must be completed before their deadlines"
Medium Constraints — Resource Management
These help when you have limited resources and can't satisfy everything.
Examples:
- 📊 "Assign as many tasks as possible" (when you don't have enough staff)
- 📊 "Cover as many shifts as possible" (when understaffed)
- 📊 "Visit as many customers as possible" (when fleet is limited)
Soft Constraints — Optimization Goals
These make your solution better but aren't mandatory.
Examples:
- ⭐ "Distribute workload evenly across employees"
- ⭐ "Minimize total travel distance"
- ⭐ "Honor employee shift preferences when possible"
- ⭐ "Minimize overtime costs"
Constraint Decision Guide
| Ask Yourself... | If Yes → | If No → |
|---|---|---|
| "Would violating this break the law?" | Hard | — |
| "Would violating this be physically impossible?" | Hard | — |
| "Would violating this make the solution unusable?" | Hard | — |
| "Is this very important but we could survive without it?" | — | Medium |
| "Is this a preference or optimization goal?" | — | Soft |
5. Score — "How Good Is This Solution?"
Every solution PowerSolver produces has a score that tells you how well it meets your constraints.
Score Format
Score: -2hard / -1medium / -350soft
│ │ │
│ │ └── Soft constraint penalties
│ └── Medium constraint violations
└── Hard constraint violations (MUST be 0!)
Understanding Scores
| Score | Meaning | Can You Use It? |
|---|---|---|
0hard / 0medium / 0soft |
Perfect! All constraints satisfied | ✅ Yes — optimal |
0hard / 0medium / -500soft |
Good. Some soft penalties | ✅ Yes — usable |
0hard / -3medium / -200soft |
Acceptable. Some medium issues | ✅ Yes — review medium violations |
-2hard / 0medium / -100soft |
Invalid! Hard constraints violated | ❌ No — fix the problem |
The Golden Rule
A solution is only valid (feasible) if the hard score is exactly 0.
If you see -1hard or worse, the solution violates must-have rules and cannot be used.
Comparing Scores
When comparing two valid solutions:
- First: Compare hard scores (must both be 0)
- Then: Compare medium scores (less negative is better)
- Finally: Compare soft scores (less negative is better)
Solution A: 0hard / -2medium / -500soft
Solution B: 0hard / -1medium / -800soft
Winner: Solution B (better medium score, even though soft is worse)
6. Solution — "The Final Result"
A solution is the complete set of assignments that PowerSolver produces.
What You Get
{
"score": "0hard / 0medium / -450soft",
"assignments": [
{ "entity": "Task-001", "developer": "Alice", "timeslot": "Monday 9:00" },
{ "entity": "Task-002", "developer": "Bob", "timeslot": "Monday 9:00" },
{ "entity": "Task-003", "developer": "Alice", "timeslot": "Monday 14:00" }
]
}
Solution States
| State | Score Pattern | Meaning |
|---|---|---|
| Feasible | 0hard/... |
Valid solution — can be implemented |
| Infeasible | -Xhard/... |
Invalid — violates must-have rules |
| Optimal | 0hard/0medium/0soft |
Perfect — all constraints satisfied |
Putting It All Together: A Complete Example
Scenario: Task Assignment (2 Variables)
Business Problem: Assign 3 development tasks to 2 developers in 2 time slots.
Step 1: Define Entities (Tasks)
| Task | Duration | Required Skill | Deadline |
|---|---|---|---|
| Task 1 | 4 hours | Java | Monday EOD |
| Task 2 | 2 hours | React | Monday EOD |
| Task 3 | 3 hours | Java | Tuesday EOD |
Step 2: Define Variables
| Variable | Type | What It Decides |
|---|---|---|
developer |
BASIC | Which developer does this task? |
timeslot |
BASIC | When is this task done? |
Step 3: Define Values
Developers:
| Developer | Skills | Max Hours/Day |
|---|---|---|
| Alice | Java, React | 8 |
| Bob | Java | 8 |
Time Slots:
| Slot | Day | Time |
|---|---|---|
| Slot 1 | Monday | 9:00-13:00 |
| Slot 2 | Monday | 14:00-18:00 |
| Slot 3 | Tuesday | 9:00-13:00 |
Step 4: Define Constraints
| Constraint | Level | Rule |
|---|---|---|
| Skill Match | Hard | Developer must have required skill |
| No Overlap | Hard | Same developer can't do 2 tasks at same time |
| Deadline | Hard | Task must be done before deadline |
| Balance Workload | Soft | Distribute tasks evenly |
Step 5: PowerSolver Finds Solution
Score: 0hard / 0medium / -50soft (feasible!)
Assignments:
Task 1 → Alice + Monday 9:00
Task 2 → Alice + Monday 14:00
Task 3 → Bob + Monday 9:00
Step 6: Verify the Solution
- ✅ Skill Match: Alice has Java (Task 1), Alice has React (Task 2), Bob has Java (Task 3)
- ✅ No Overlap: Alice does Task 1 at 9:00, Task 2 at 14:00 — no overlap
- ✅ Deadline: All tasks before their deadlines
- ⚠️ Balance: Alice has 2 tasks, Bob has 1 — small soft penalty
What PowerSolver Cannot Do (Limitations)
Understanding limitations helps you model problems correctly.
❌ Cannot Mix BASIC and LIST Variables on Same Entity
If you need LIST variables (Vehicle Routing), ALL variables must be designed for that pattern.
❌ Cannot Handle Infinite Options
You must define a finite list of values. PowerSolver cannot search infinite possibilities.
❌ Cannot Guarantee Perfect Solutions for Very Large Problems
With thousands of entities, PowerSolver finds very good solutions — but may not find the mathematically perfect one within the time limit.
❌ Cannot Make Business Decisions for You
PowerSolver optimizes within the rules you define. You must decide:
- What constraints matter
- How important each constraint is (hard/medium/soft)
- What trade-offs are acceptable
Quick Reference: Problem Type Modeling
| Problem Type | Entities | Variables | Type | Common Constraints |
|---|---|---|---|---|
| Task Assignment | Tasks | developer, timeslot | BASIC | Skill match, capacity, deadline |
| Employee Rostering | Shifts | employee | BASIC | No overlap, skills, availability |
| School Timetabling | Lessons | room, timeslot, teacher | BASIC | No conflicts, room capacity |
| Maintenance Scheduling | Jobs | technician, timeslot | BASIC | Skills, equipment availability |
| Vehicle Routing | Vehicles | visits (list of stops) | LIST | Capacity, time windows, distance |
Next Steps
Now that you understand the concepts:
- Quick Start Guide — Follow step-by-step tutorials
- User Guide — Learn how to use PowerSolver
- Wizard User Guide — Screen-by-screen walkthrough
The most important decision is choosing the right variable type (BASIC vs LIST) for your problem. When in doubt, refer to the table above or contact support.