ROS 2 / K8S LAB
SCENARIO 04 · P2 / SIMULATOR RESEARCH

Fair Multi-Robot Task Assignment with Jev Advisory Ranking

Three simulated robots have different capabilities, reservations and energy budgets. Who should get the next task—and how can we measure fairness?

Proposal · not benchmarkedMSc → PhDCPU-only fixtures first
CONCEPTUAL WORKFLOW / NOT LIVEROBOTICS · CLOUD · AI
SIMULATED / RESEARCH BLUEPRINTNO ACTUATION

See the idea in a minute

Three simulated robots can each do a different job, and a dispatcher picks who gets the next task. Compare two ways of choosing, one step at a time. The tasks are made up and no result has been measured.

Who gets the next task?

Illustration · synthetic
Two ways to hand out tasks to three simulated robots Three lanes of waiting tasks feed three simulated robots: a scout for inspect tasks, a carrier for parcel tasks and an arm for grasp tasks. A bar beside each robot shows how long its tasks have waited, with no unit. First a naive policy always takes the quickest task: the scout and carrier are served, the arm is starved and its bar fills completely. Then a fair-share policy lets each task type take a turn: all three robots are served and the three waiting bars end up close in length. The tasks are synthetic, this is a simulation idea only, and no measured result exists. Same tasks, two policies Naive policy: quickest task first Fair share: each type takes a turn Waiting tasksRobotWaiting so far Inspect tasks Scoutcamera served Parcel tasks Carrierparcels served Grasp tasks Armgrasping waitingstarvedserved Simulation, synthetic tasks. No measured result exists. Bars have no unit.
Step 1 of 5

Simulation with synthetic tasks. The bars have no unit and are not data. A real study would compute fairness in code from a seeded simulator run. No measured result exists.

Plain-language guide

  • Dispatcher: the scheduler code that picks which waiting task goes to which robot.
  • Eligible robot: a robot that has the needed capability, is not reserved elsewhere and has enough energy. The scheduler removes all others first.
  • Fairness: whether every robot and task type gets served, instead of one waiting far longer than the rest. The plan is to compute Jain's fairness index in code.
  • Jev ranking: optional qualitative advice that ranks only eligible robots. The deterministic scheduler keeps the final say.
01 / What are we studying?

One real research question, not a product claim.

In a fictional lab, a scout robot can inspect markers, a carrier delivers mock parcels and an arm manipulates objects in simulation. A scheduler must first remove unavailable or incapable robots before asking which candidate best fits.

Research hypothesis

Question: Does Jev's qualitative ranking among eligible simulated robots improve task fit and completion compared with constrained round-robin or cost-aware deterministic schedulers?

Null hypothesis: Jev's rank offers no reproducible improvement after controlling for task feasibility, arrival order, reservations and resource overhead.

Alternative: Jev helps choose semantic fit in ambiguous cases while a deterministic scheduler alone enforces feasibility, fairness and capacity.

Audience & learning targets

Multi-agent systems · OR · robotics researchers · MSc → PhD · CPU-only fixtures first

  • Model robotic capabilities and authorization as hard constraints.
  • Compare round-robin, greedy and cost-aware scheduling baselines.
  • Use seeded task arrivals and congestion to measure fairness.
  • Record invalid suggestions and no-eligible-robot outcomes.
Interactive explanation

Step through one shared queue under three policies

Several robots send model requests to the same worker. One robot sends a burst. Step through what first-in-first-out, earliest-deadline-first and deficit round robin do with the same arrivals, then see two inputs the simulator refuses. This follows the serving-queue simulator in experiments/model-serving-fairness. The capability filter shown in the walkthrough further down is a separate step that simulator does not model.

  • Status: simulated
  • Storyboard: illustrative, hand-authored
  • Measured results: N/A (not run)
  • Registry status: planned, nothing measured
  1. plain codeConfig check
  2. plain codeAdmission
  3. plain codeQueue policy
  4. plain codeWorker
  5. plain codeReport

FIFO baseline

With first-in-first-out, the quiet robot waits behind the whole burst and misses its deadline.

Declared inputs (made up for teaching, not measured)
workers1
service time per request0.1 s
noisy-f burst6 requests, from 0 s to 0.005 s
robot-a request1 request, at 0.01 s
noisy-f deadline0.8 s
robot-a deadline0.6 s
policyfifo
robot-a finishes at (by hand)0.7 s
robot-a absolute deadline0.61 s
  1. The config is valid passed

    fifo is one of the three schedulers: fifo, edf, drr.

    scheduler: fifo
  2. Every request is admitted passed

    No queue_capacity is set, so nothing is rejected on arrival.

  3. FIFO orders by arrival info

    Robot-a arrived at 0.01 s, after the six burst requests, so it goes last.

    order: noisy-f x6, then robot-a
  4. Robot-a misses its deadline deadline missed

    The worker takes 0.1 s per request, so robot-a finishes at 0.7 s. Its deadline was 0.61 s (0.01 s plus 0.6 s).

    robot-a: finish 0.7 s > deadline 0.61 s
  5. Fairness and miss-rate: N/A N/A (not run)

    This toy is arithmetic on declared inputs. Real metrics come from running the simulator on a full scenario, and are SIMULATED.

Outcome: baseline FIFO lets a burst delay a quiet robot past its deadline. That is the problem the other policies are tested against.

EDF: tight deadline first

Earliest-deadline-first lets the request with the nearest deadline overtake the burst.

Declared inputs (made up for teaching, not measured)
workers1
service time per request0.1 s
noisy-f burst6 requests, from 0 s to 0.005 s
robot-a request1 request, at 0.01 s
noisy-f deadline0.8 s
robot-a deadline0.6 s
policyedf
robot-a starts at (by hand)0.1 s
robot-a finishes at (by hand)0.2 s
  1. The config is valid passed

    edf is an allowed scheduler.

    scheduler: edf
  2. Every request is admitted passed

    No queue_capacity is set.

  3. EDF orders by absolute deadline info

    The first burst request starts at 0 s, before robot-a arrives. At 0.1 s robot-a's deadline is the earliest, so it is next.

    next: robot-a (earliest deadline)
  4. Robot-a finishes on time passed

    It runs from 0.1 s to 0.2 s, well before its 0.6 s deadline. The burst follows and still finishes inside its 0.8 s deadline.

    robot-a: finish 0.2 s
  5. Fairness and miss-rate: N/A N/A (not run)

    A question for the experiment: could a flood of tight-deadline requests push others back the same way? Not measured.

Outcome: accepted EDF helped robot-a in this toy because its deadline was tighter. Whether it is fair in general is a question, not a finding.

DRR: take turns

Deficit round robin gives each backlogged robot a turn, so the burst cannot hold the worker for long.

Declared inputs (made up for teaching, not measured)
workers1
service time per request0.1 s
noisy-f burst6 requests, from 0 s to 0.005 s
robot-a request1 request, at 0.01 s
noisy-f deadline0.8 s
robot-a deadline0.6 s
policydrr
drr_quantum0.1 s
client weight1 each
robot-a starts at (by hand)0.2 s
robot-a finishes at (by hand)0.3 s
  1. The config is valid passed

    drr is an allowed scheduler and drr_quantum is 0.1 s.

    scheduler: drr
    drr_quantum: 0.1
  2. Every request is admitted passed

    No queue_capacity is set.

  3. DRR serves each backlogged robot in turn info

    Each turn adds the quantum, 0.1 s, to a robot's deficit. A request costs its service time, 0.1 s, so each turn serves one request.

    ring: noisy-f, robot-a
  4. Robot-a is served after one burst request passed

    At 0.1 s noisy-f takes one turn. At 0.2 s it is robot-a's turn, so robot-a runs 0.2 s to 0.3 s and meets its deadline.

    robot-a: finish 0.3 s
  5. Fairness and miss-rate: N/A N/A (not run)

    Jain fairness is computed over each robot's on-time ratio. When DRR delays the noisy robot, the index can go down even though the quiet robot now meets its deadline, so a higher index is not simply fairer. Read it next to the quiet-robot miss rate. Both would be SIMULATED values from a full run, and none are shown.

Outcome: accepted DRR bounded the quiet robot's wait without looking at deadlines. Its cost, such as longer delays and tail latency for the noisy robot, is exactly what a full run would have to measure.

Misspelled config

A config with an unknown scheduler name or an unknown key is refused as a whole. No partial run happens.

Declared inputs (made up for teaching, not measured)
scheduler valueround_robin
extra keydrr_quantun
allowed schedulersfifo, edf, drr
  1. Unknown scheduler and unknown key rejected

    round_robin is not one of fifo, edf, drr, and drr_quantun is not a known key. Typos fail loudly instead of falling back to a default.

    ConfigError: scheduler must be one of ('fifo', 'edf', 'drr')
  2. No report is produced N/A (not run)

    Admission, queueing and the worker never start, so there is nothing to report.

Outcome: config rejected Rejected before anything ran. The runner documents a distinct exit status for invalid input.

Queue full: shared limit

A single shared queue limit rejects arrivals when it is full, and the quiet robot can be rejected because of someone else's burst.

Declared inputs (made up for teaching, not measured)
workers1
service time per request0.1 s
noisy-f burst6 requests, from 0 s to 0.005 s
robot-a request1 request, at 0.01 s
noisy-f deadline0.8 s
robot-a deadline0.6 s
policyfifo
queue_capacity4
  1. The config is valid passed

    queue_capacity of 4 is a valid whole number of at least 1.

    queue_capacity: 4
  2. The sixth burst request and robot-a are rejected rejected

    The first burst request starts at once. The next four fill the queue to 4. The sixth burst request is rejected, and so is robot-a's request at 0.01 s, because the limit is shared by all robots.

    rejected: noisy-f #6, robot-a #1
  3. Four queued requests remain info

    FIFO serves the first burst requests that were admitted.

  4. Rejected requests never run info

    A rejected request has no queue wait and no completion.

  5. Goodput: N/A N/A (not run)

    The metrics definitions count rejected requests against goodput. No value is computed here.

Outcome: rejected Admission control protected the queue but not the quiet robot. Per-robot limits are not part of this simulator.

What gets rejected, and why

Each row is a negative case in the storyboard above. Reason names are proposals for this study, not an implemented interface, unless the simulator source below defines them.

Rejections in the storyboard
CaseStopped atReasonWhat it guards against
FIFO baselineWorker (deadline)Not a rejection: robot-a finished late.Nothing is rejected, which is part of the point.
Misspelled configConfig checkConfigError: unknown scheduler and unknown keyTypos that would silently change the experiment.
Queue full: shared limitAdmissionQueue at queue_capacityArrivals while the shared queue is full, including a quiet robot's.

Experimental protocol

  1. Write the scenario as a config: robots as clients, their arrival patterns, deadlines and the models they use. Every number is an assumption, not a measurement.
  2. Run fifo, edf and drr on the same seeds, with first_idle and cache_aware worker placement. Use the default fleet for queue disciplines and the cache-pressure scenario for placement.
  3. Read deadline-miss rate, nearest-rank latency percentiles, starved requests, cache hit rate and Jain fairness together, never one alone.
  4. Inject a worker-down window to test recovery, and report only what a recorded run produced.

Everything the simulator prints is labelled SIMULATED, from assumed parameters. Jain fairness is computed over per-robot on-time ratios, so it can fall when a fair scheduler pushes the noisy robot late. Read it together with the quiet-robot miss rate and the goodput rate. Worker placement (first_idle or cache_aware) only matters when models compete for cache space, which is what the cache-pressure scenario is for. See also the experiment blueprint on this page.

Measured values

Every value is N/A until a reviewed run exists
MetricValueWhy
Simulated task completion and fairness (registry primary metric)N/ANo published run.
Quiet-robot deadline-miss rateN/ANot run.
Overall deadline-miss rateN/ANot run.
Jain fairness indexN/ANot run. Not a simple higher-is-better score.
Starved requestsN/ANot run.

See the evidence registry. Nothing on this page is a benchmark.

Where the real code and tests live

Paths are relative to the repository root and the links open the main branch on GitHub. A link resolves once the change that adds the path has been merged.

Illustration only. The steps are fixed text written by hand. This page runs no model, sends no network request, publishes no ROS 2 message and moves no robot. Use the Pause decorative motion button near the top of the page to stop all motion; the player never starts by itself.

02 / Interactive walkthrough

Follow an illustrative decision trace.

Select a fabricated case and trace where conventional code, an optional Jev judgment, and human review belong. This animation is preauthored educational content: it performs no inference, no API call, and no robot action.

SYNTHETIC ONLY
In a fictional lab, a scout robot can inspect markers, a carrier delivers mock parcels and an arm manipulates objects in simulation. A scheduler must first remove unavailable or incapable robots before asking which candidate best fits.

Illustrative stage 1 of 4: Synthetic fleet + incoming task

Visual explanation only; Jev probabilities and experimental outcomes are intentionally absent.

Keyboard users: select a case or activate any stage button. The animation can be paused in the header, and system reduced-motion preferences are supported.

03 / Experiment blueprint

Variables, baselines and measurements.

Before anyone reports performance, the task, failure cases, comparison methods and test split must be fixed. Keep negative results and rejected advice visible.

Research dimensionProposed measurement contract
FleetFictional scout (camera), arm (grasp) and carrier (parcel) with fixed capability and reserve states.
BaselineConstrained round-robin, greedy shortest estimated task time, capacity/fairness heuristic.
VariablesTask arrival mix, reservations, simulated low battery, robot outage, queue size and uncertain task semantics.
Failure casesIneligible capability, insufficient reserve, conflicting exclusive tasks, spoofed state, no available robot.
Primary metricsSimulator task completion, queue wait, invalid suggestion rate, utilization, Jain's fairness index computed in code.
ReproducibilitySeeded workload generator, queue and capability matrices, fixed schedule budget, full task-allocation trace.

Suggested experiment procedure

  1. Define a tiny synthetic, licensed fleet/task schema with hard capabilities and budget constraints.
  2. Implement deterministic eligible-set filtering plus a no-JeV allocation baseline.
  3. Prepare fixed task-arrival seeds, failure injection and fair-scheduling comparison definitions.
  4. Optionally use Jev Choice only among eligible robot IDs and record advice vs actual assignment.
  5. Execute a verified simulator study before reporting completion or fairness results; preserve negative runs.

What a contribution should produce

  • Synthetic robot capability and task-arrival fixture definitions
  • Constraint-aware baseline scheduler tests
  • Simulator trace/run manifest with seeds (later)
  • Plots of fairness, waiting time and task success after verified runs

Required before publishing a result: independent run ID, method, seed, source/model revisions, environment, raw measurements, executable analysis, errors/limitations and human review.

04 / Evidence not marketing

Current results: not measured.

No verified experiment results yet

No Jev-vs-baseline accuracy, latency, energy, fairness or simulator task-success result is available for this scenario. The website does not fabricate graphs or sample performance numbers. Future evidence must include raw data and replay instructions.

Open results registry ↗

Dependencies and research honesty

Follow existing research work #69 and the broader scenario epic #83. The legacy Vagrant/Foxy manifests and current Jazzy image-local test do not establish multi-worker DDS or physical robot integration.

Safety: no actuator commands, unrestricted cluster operations, or vendor data collection from this static demonstration.