Thesis Evaluation Workflow (Chapter 2)
This guide translates Rosalia Jaffray’s MASc proposal (Chapter 2: “Does FHOPS work, and does it close the gaps we identified in Chapter 1?”) into a repeatable workflow. Use it when preparing the thesis case-study experiments: assemble operational datasets, run FHOPS solvers, evaluate KPIs, and document trade-offs for Chapter 2 narratives.
Context & Goals
Chapter 1 (literature review) catalogues BC operational-planning gaps (data accessibility, solver transparency, mobilisation awareness, shift-level sequencing).
Chapter 2 must show that FHOPS can replicate and improve existing planning efforts via reproducible case studies on small-scale operations.
Deliverables for each case:
Validated FHOPS scenario (data contract-compliant, shift-aware, mobilisation-enabled).
Baseline solver runs (MIP + heuristics) with traceable KPIs.
Trade-off discussion (production vs mobilisation vs utilisation).
Documentation package (commands, telemetry, plots) that can be cited in the thesis.
Pipeline Overview
Curate the Case Dataset
Start from
examples/med42orexamples/large84as a template.Replace
data/*.csvwith the case-study inventory (blocks, machines, landings, calendars, production rates, optionalroad_construction).If the case uses known harvest systems, add a
harvest_system_idcolumn per block using IDs from Harvest System Registry.Record provenance notes (tenure, timeline, data sources) in
README.mdfor the case folder.
Validate the Scenario
fhops validate case_study/scenario.yaml
Fix reported errors (missing references, shift IDs, schema version) before running solvers.
Use
docs/howto/data_contract.rstif new columns/optional extras are required.
See also
fhops.cli.main.validate()– command reference for the scenario validator (includes all CLI options and schema checks).Run Baseline Solvers
MIP (reference solution):
fhops solve-mip case_study/scenario.yaml \ --out case_study/out/mip_solution.csv \ --driver auto --time-limit 1800
Simulated Annealing (fast heuristic):
fhops solve-heur case_study/scenario.yaml \ --out case_study/out/sa_solution.csv \ --iters 12000 --seed 42 \ --operator-preset explore \ --telemetry-log case_study/out/sa_telemetry.jsonl \ --show-operator-stats
Optional: add
fhops solve-ilsandfhops solve-tabufor comparative analysis.Document runtime, objective values, and solver settings (Chapter 2 must highlight reproducibility).
See also
fhops.cli.main.solve_mip_cmd(),fhops.cli.main.solve_heur_cmd(),fhops.cli.main.solve_ils_cmd(), andfhops.cli.main.solve_tabu_cmd()– each CLI entrypoint documents the complete option set, telemetry hooks, and solver-specific notes.Evaluate KPIs & Mobilisation Spend
fhops eval-playback case_study/scenario.yaml \ --assignments case_study/out/mip_solution.csv \ --shift-out case_study/out/mip_shift.csv \ --day-out case_study/out/mip_day.csv \ --summary-md case_study/out/mip_summary.md
Collect:
total_productionandcompleted_blocks.mobilisation_costandmobilisation_cost_by_machine(Chapter 1 gap: no cost audit).utilisation_ratio(shift/day),makespan.sequencing_violation_*counts (showing constraints hold).
Repeat for heuristic schedules. Compare KPI deltas in a table (include convergence rationale).
See also
fhops.cli.main.evaluate()for KPI-only summaries andfhops.cli.main.eval_playback()for shift/day playback exports (deterministic or stochastic).Benchmark Trade-offs
Run the benchmark harness to quantify solver differences and generate plots:
fhops bench suite --scenario case_study/scenario.yaml \ --include-ils --include-tabu --out-dir case_study/bench \ --time-limit 900 --sa-iters 12000 --tabu-iters 8000 --ils-iters 400 python scripts/render_benchmark_plots.py case_study/bench/summary.csv \ --out-dir case_study/bench/plots
Use the summary CSV/JSON to extract:
Objective gap vs best heuristic (evidence of improved solution quality).
Runtime ratios (feasibility for small-scale operators).
Operator telemetry (link back to mobilization-aware operators when discussing Chapter 1 needs).
See also
fhops.cli.benchmarks.bench_suite()– benchmark CLI helper that powersfhops bench suite.Synthesize Chapter 2 Materials
Insert KPI tables, mobilisation spend charts, and sequencing status into the chapter draft.
Reference appendix artefacts: telemetry logs, shift/day CSVs, benchmark plots.
Describe how FHOPS addresses Chapter 1 gaps (e.g., distance-aware mobilisation, shift calendars, open-source reproducibility).
Worked Example (med42 Template)
Copy
examples/med42tocase_study/; replacedata/with the case inventory.Run validation + solvers as above. Capture commands and seeds for thesis appendices.
Highlight insights:
kpi_mobilisation_costdecreased by X % when switching from default to mobilisation-focused operator preset.Sequencing violations remained zero, confirming registry accuracy for the target system.
Runtime remained under N minutes on lab hardware (relevant for small operations).
Discuss trade-offs (production vs mobilisation vs utilisation) with references to Chapter 1 gaps.
Tips & References
Maintain a
case_study/log.mdfile capturing every command, seed, and data edit (supports Chapter 2 audit trail).Include small screenshots or plots (generated from
case_study/bench/plots) to visualise KPI movement.Cite the proposal folders under
tmp/jaffray-rosalia-masc-*when referencing scope and motivation.Keep FHOPS docs updated (see
notes/sphinx-documentation.md) whenever new thesis-driven workflows appear.