legalis-sim
Simulation engine for Legalis-RS.
Overview
This crate provides an ECS-like (Entity Component System) simulation engine for testing legal statutes against populations of agents. It uses Tokio for async parallel execution, enabling high-throughput law application simulations.
Features
- Async parallel simulation using Tokio
- Configurable population generation
- Comprehensive metrics collection
- Per-statute and aggregate statistics
Usage
Basic Simulation
use ;
use ;
// Define statutes
let statute = new
.with_precondition;
// Create population
let population = new
.generate_random
.build;
// Run simulation
let engine = new;
let metrics = engine.run_simulation.await;
println!;
Custom Entities
use BasicEntity;
let mut citizen = new;
citizen.set_attribute;
citizen.set_attribute;
citizen.set_attribute;
let population = new
.add_entity
.generate_random
.build;
Simulation Engine
Metrics
SimulationMetrics
StatuteMetrics
Example Output
=== Simulation Summary ===
Total applications: 10000
Deterministic: 7523 (75.2%)
Discretionary: 1834 (18.3%)
Void: 643
=== Per-Statute Breakdown ===
voting-rights: D=7523 / J=0 / V=2477
housing-subsidy: D=0 / J=1834 / V=8166
Condition Evaluation
The engine evaluates conditions with three possible outcomes:
- True: Condition is satisfied
- False: Condition is not satisfied
- Indeterminate: Cannot be evaluated (missing data, custom conditions)
Indeterminate results trigger JudicialDiscretion in the LegalResult.
License
MIT OR Apache-2.0