Policies¶
Decision-making rules that control system behavior.
Overview¶
Policies define how the system makes decisions. They're configurable rules that determine behavior without changing code.
| Topic | Description |
|---|---|
| Task Allocation | Assigning tasks to robots |
| Station Assignment | Selecting stations for tasks |
| Batching | Grouping tasks for efficiency |
| Priority | Task and robot priority rules |
| Traffic Policies | Congestion and routing decisions |
Why Policies?¶
Flexibility¶
Same system, different behaviors:
# Configuration A: Speed-focused
policies:
task_allocation: nearest_idle
# Configuration B: Balance-focused
policies:
task_allocation: least_busy
Experimentation¶
Compare approaches easily:
waremax compare scenario.yaml \
--param policies.task_allocation=nearest_idle \
--param policies.task_allocation=least_busy
Optimization¶
Find best policy for your warehouse:
waremax sweep scenario.yaml \
--param "policies.task_allocation=[nearest_idle,least_busy,round_robin]"
Policy Categories¶
Operational Policies¶
Control day-to-day operations:
| Policy | Decisions |
|---|---|
| Task allocation | Which robot gets which task |
| Station assignment | Which station serves which task |
| Batching | How to group tasks |
Traffic Policies¶
Control robot movement:
| Policy | Decisions |
|---|---|
| Routing | Which path to take |
| Congestion response | Wait or reroute |
| Deadlock resolution | How to break deadlocks |
Resource Policies¶
Control resource usage:
| Policy | Decisions |
|---|---|
| Charging | When to charge |
| Maintenance | When to maintain |
| Station selection | Which charging/maintenance station |
Policy Structure¶
Configuration Format¶
policies:
category:
policy_name: value
# or
policy_name:
type: complex_type
param1: value1
param2: value2
Example¶
policies:
task_allocation:
type: nearest_idle
station_assignment:
type: shortest_queue
batching:
enabled: true
max_batch_size: 5
Policy Selection¶
Factors to Consider¶
| Factor | Consideration |
|---|---|
| Throughput | Which maximizes tasks/hour |
| Latency | Which minimizes task time |
| Fairness | Which balances robot utilization |
| Robustness | Which handles variability |
Trade-offs¶
Throughput
↑
│ ●A
│
│ ●B
│ ●C
│
└──────────────→ Fairness
A: High throughput, low fairness
B: Balanced
C: High fairness, lower throughput
Policy Comparison¶
Using Compare Command¶
waremax compare base.yaml \
--param policies.task_allocation=nearest_idle \
--param policies.task_allocation=least_busy
Key Metrics¶
- Tasks completed
- Average task time
- Robot utilization spread
- Wait time
Configuration Reference¶
Task Allocation¶
Station Assignment¶
Routing¶
Batching¶
Best Practices¶
Start Simple¶
Begin with default policies:
Measure Impact¶
Always compare before and after:
# Baseline
waremax run baseline.yaml -o baseline_results/
# With new policy
waremax run new_policy.yaml -o new_policy_results/
# Compare
waremax analyze baseline_results/ new_policy_results/
Consider Interactions¶
Policies interact with each other:
- Task allocation affects traffic patterns
- Traffic patterns affect routing effectiveness
- Routing affects task completion times