diff --git a/.github/workflows/automated-experiment-result-checker.yml b/.github/workflows/automated-experiment-result-checker.yml new file mode 100644 index 000000000..ee1982586 --- /dev/null +++ b/.github/workflows/automated-experiment-result-checker.yml @@ -0,0 +1,62 @@ +--- +name: Automated Experiment Result Checker + +# yamllint disable-line rule:truthy +on: + pull_request: + types: [opened, reopened, synchronize] + +concurrency: + group: ${{ github.ref }}-automated-experiment-result-checker + cancel-in-progress: true + +permissions: + contents: write + pull-requests: write +jobs: + automated-experiment-result-checker: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + ref: ${{ github.event.pull_request.head.sha }} + fetch-depth: 0 + + - name: Install system dependencies + run: | + sudo apt-get update + sudo apt-get install -y libmagickwand-dev imagemagick + + - name: Set up Ruby + uses: ruby/setup-ruby@v1.267.0 + with: + ruby-version: "3.4" + bundler-cache: true + + - name: Build semian native extension + run: | + set -e + cd "$(git rev-parse --show-toplevel)" + + echo "๐Ÿ”ง Installing semian dependencies and building native extension..." + bundle install + bundle exec rake compile + + - name: Run experiments and check for performance regressions + run: | + set -e + cd "$(git rev-parse --show-toplevel)/experiments" + + echo "๐Ÿ“Š Running all experiments..." + bundle install + bundle exec ruby run_all_experiments.rb + + echo "" + echo "๐Ÿ” Checking for performance regressions..." + ruby detect_regressions.rb + + echo "โœ… No performance regressions detected!" + + + diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b56c62c6b..bad6e200b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -6,7 +6,7 @@ on: push: branches: [ main ] pull_request: - branches: [ main ] + branches: [ "**" ] workflow_call: concurrency: diff --git a/Gemfile b/Gemfile index 96b2a9e1c..f38e232e9 100644 --- a/Gemfile +++ b/Gemfile @@ -15,6 +15,7 @@ group :test do gem "pry-byebug", require: false gem "toxiproxy" gem "webrick" + gem "rubystats" gem "bigdecimal" gem "mutex_m" diff --git a/Gemfile.lock b/Gemfile.lock index af0bd1c8c..6cd9a2d58 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -88,6 +88,7 @@ GEM language_server-protocol (3.17.0.5) lint_roller (1.1.0) logger (1.7.0) + matrix (0.4.3) memory_profiler (1.1.0) method_source (1.1.0) minitest (5.26.2) @@ -161,6 +162,8 @@ GEM rubocop-ast (>= 1.44.0, < 2.0) ruby-progressbar (1.13.0) ruby2_keywords (0.0.5) + rubystats (0.4.1) + matrix securerandom (0.4.1) stringio (3.1.7) timeout (0.4.4) @@ -181,6 +184,7 @@ PLATFORMS arm64-darwin-22 arm64-darwin-23 arm64-darwin-24 + arm64-darwin-25 x86_64-darwin-21 x86_64-darwin-22 x86_64-linux @@ -210,6 +214,7 @@ DEPENDENCIES rubocop-rake rubocop-shopify (~> 2) rubocop-thread_safety + rubystats semian! toxiproxy trilogy (~> 2.9) diff --git a/README.md b/README.md index 4c8ccc42e..1575963b5 100644 --- a/README.md +++ b/README.md @@ -576,6 +576,52 @@ It is possible to disable Circuit Breaker with environment variable For more information about configuring these parameters, please read [this post](https://shopify.engineering/circuit-breaker-misconfigured). +#### Adaptive Circuit Breaker (Experimental) + +Semian also includes an experimental adaptive circuit breaker that uses a [PID controller](https://en.wikipedia.org/wiki/Proportional%E2%80%93integral%E2%80%93derivative_controller) +to dynamically adjust the rejection rate based on real-time error rates. Unlike the +traditional circuit breaker with fixed thresholds, the adaptive circuit breaker continuously +monitors error rates and adjusts its behavior accordingly. + +##### How It Works + +The adaptive circuit breaker uses the error function: +``` +P = (error_rate - ideal_error_rate) - (1 - (error_rate - ideal_error_rate)) * rejection_rate +``` + +This formula ensures that: +- Rejection rate increases when the service is unhealthy +- Rejection rate decreases when the service recovers +- The system finds an equilibrium that protects against cascading failures while allowing recovery + +##### Adaptive Circuit Breaker Configuration + +To enable the adaptive circuit breaker, simply set: + +- **adaptive_circuit_breaker**. Enable adaptive circuit breaker instead of traditional. Defaults to `false`. + +Example configuration: +```ruby +Semian.register( + :my_service, + adaptive_circuit_breaker: true, # Use adaptive instead of traditional + bulkhead: false # Can be combined with bulkhead +) +``` + +The adaptive circuit breaker uses carefully tuned internal parameters based on extensive testing: +- PID controller gains optimized for stability and responsiveness +- 10-second window for rate calculations +- 1-hour history for ideal error rate calculation (p90) +- 1-second interval for background health checks + +The adaptive circuit breaker can be disabled with the environment variable +`SEMIAN_ADAPTIVE_CIRCUIT_BREAKER_DISABLED=1`. + +**Note**: When `adaptive_circuit_breaker: true` is set, traditional circuit breaker +parameters (`error_threshold`, `error_timeout`, etc.) are ignored. + ### Bulkheading For some applications, circuit breakers are not enough. This is best illustrated diff --git a/examples/dual_circuit_breaker_demo.rb b/examples/dual_circuit_breaker_demo.rb new file mode 100644 index 000000000..e2b6fa4b7 --- /dev/null +++ b/examples/dual_circuit_breaker_demo.rb @@ -0,0 +1,175 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +require "bundler/setup" +require "semian" + +# Example: Dual Circuit Breaker Demo +# This demonstrates how to use both legacy and adaptive circuit breakers +# simultaneously, switching between them at runtime based on a callable. + +# Simulate a feature flag that can be toggled +module ExperimentFlags + @enabled = false + + def enable_adaptive! + @enabled = true + end + + def disable_adaptive! + @enabled = false + end + + def use_adaptive_circuit_breaker? + @enabled + end +end + +# Helper function to print state of all Semian objects between each phase +def print_semian_state + puts "\n=== Semian Resources State ===\n" + Semian.resources.values.each do |resource| + puts "Resource: #{resource.name}" + + # Bulkhead info + if resource.bulkhead + puts " Bulkhead: tickets=#{resource.tickets}, count=#{resource.count}" + else + puts " Bulkhead: disabled" + end + + # Circuit breaker info + cb = resource.circuit_breaker + if cb.nil? + puts " Circuit Breaker: disabled" + elsif cb.is_a?(Semian::DualCircuitBreaker) + puts " Circuit Breaker: DualCircuitBreaker" + metrics = cb.metrics + puts " Active: #{metrics[:active]}" + puts " Classic: state=#{metrics[:classic][:state]}, open=#{metrics[:classic][:open]}, half_open=#{metrics[:classic][:half_open]}" + puts " Adaptive: rejection_rate=#{metrics[:adaptive][:rejection_rate]}, error_rate=#{metrics[:adaptive][:error_rate]}" + elsif cb.is_a?(Semian::AdaptiveCircuitBreaker) + puts " Circuit Breaker: AdaptiveCircuitBreaker" + puts " open=#{cb.open?}, closed=#{cb.closed?}, half_open=#{cb.half_open?}" + else + puts " Circuit Breaker: Legacy" + puts " state=#{cb.state&.value}, open=#{cb.open?}, closed=#{cb.closed?}, half_open=#{cb.half_open?}" + puts " last_error=#{cb.last_error&.class}" + end + puts "" + end + puts "=== END STATE OUTPUT ===\n\n" +end + +# Register a resource with dual circuit breaker mode +resource = Semian.register( + :my_service, + # Enable dual circuit breaker mode + dual_circuit_breaker: true, + + # Legacy circuit breaker parameters (required) + success_threshold: 2, + error_threshold: 3, + error_timeout: 10, + + # Adaptive circuit breaker parameters (optional, has defaults) + seed_error_rate: 0.01, + + # Common parameters + tickets: 5, + timeout: 0.5, + exceptions: [RuntimeError], +) + +experiment_flags = ExperimentFlags.new +Semian::DualCircuitBreaker.adaptive_circuit_breaker_selector(->(_resource) { experiment_flags.use_adaptive_circuit_breaker? }) + +puts "=== Dual Circuit Breaker Demo ===\n\n" + +# Helper to simulate service calls +def simulate_call(success: true) + if success + "Success!" + else + raise "Service error" + end +end + +# Test with legacy circuit breaker (use_adaptive returns false) +puts "Phase 1: Using LEGACY circuit breaker (use_adaptive=false)" +puts "The first 3 requests will succeed, the rest will fail." +puts "-" * 50 + +experiment_flags.disable_adaptive! + +10.times do |i| + result = Semian[:my_service].acquire do + simulate_call(success: i < 3) # First 3 succeed, rest fail + end + puts " Request #{i + 1}: #{result}" +rescue => e + puts " Request #{i + 1}: Failed - #{e.class.name}: #{e.message}" +end + +print_semian_state + +# Reset both circuit breakers +puts "\n" + "=" * 50 +puts "Resetting circuit breakers..." +resource.circuit_breaker.reset + +# Test with adaptive circuit breaker (use_adaptive returns true) +puts "\nPhase 2: Using ADAPTIVE circuit breaker (use_adaptive=true)" +puts "The first 3 requests will succeed, then the rest will be failures." +puts "The adaptive circuit breaker is not expected to open yet." +puts "-" * 50 + +experiment_flags.enable_adaptive! + +10.times do |i| + begin + result = Semian[:my_service].acquire do + simulate_call(success: i < 3) # First 3 succeed, rest fail + end + puts " Request #{i + 1}: #{result}" + rescue => e + puts " Request #{i + 1}: Failed - #{e.class.name}: #{e.message}" + end + sleep 0.05 # Small delay to see adaptive behavior +end + +print_semian_state + +# Demonstrate dynamic switching +puts "\n" + "=" * 50 +puts "Phase 3: Dynamic switching between circuit breakers" +puts "-" * 50 + +5.times do |i| + # Toggle every 2 requests + if i.even? + experiment_flags.disable_adaptive! + puts " Switched to LEGACY" + else + experiment_flags.enable_adaptive! + puts " Switched to ADAPTIVE" + end + + begin + result = Semian[:my_service].acquire do + simulate_call(success: true) + end + puts " Request #{i + 1}: #{result}" + rescue => e + puts " Request #{i + 1}: Failed - #{e.class.name}" + end +end + +puts "\n=== Demo Complete ===\n" +puts "Both circuit breakers tracked all requests, but only the active one" +puts "was used for decision-making based on the adaptive_circuit_breaker_selector callable." + +print_semian_state + +# Cleanup +Semian.destroy(:my_service) diff --git a/experiments/Gemfile b/experiments/Gemfile index 2afa2ed38..c5590cb32 100644 --- a/experiments/Gemfile +++ b/experiments/Gemfile @@ -2,8 +2,9 @@ source "https://rubygems.org" +gemspec path: ".." + # Graphing library for visualization gem "gruff", "~> 0.23" - -# Alternative: Use rubyplot for pure Ruby plotting (no ImageMagick dependency) -# gem 'rubyplot', '~> 0.1' +gem "logger" +gem "csv" diff --git a/experiments/Gemfile.lock b/experiments/Gemfile.lock index 66ebe6986..4ab2cb787 100644 --- a/experiments/Gemfile.lock +++ b/experiments/Gemfile.lock @@ -1,12 +1,21 @@ +PATH + remote: .. + specs: + semian (0.26.6) + concurrent-ruby + GEM remote: https://rubygems.org/ specs: bigdecimal (3.3.0) + concurrent-ruby (1.3.5) + csv (3.3.5) gruff (0.29.0) bigdecimal (>= 3.0) histogram rmagick (>= 5.5) histogram (0.2.4.1) + logger (1.7.0) observer (0.1.2) pkg-config (1.6.4) rmagick (6.1.4) @@ -18,7 +27,10 @@ PLATFORMS ruby DEPENDENCIES + csv gruff (~> 0.23) + logger + semian! BUNDLED WITH 2.6.9 diff --git a/experiments/README_BASELINE_COLLECTION.md b/experiments/README_BASELINE_COLLECTION.md new file mode 100644 index 000000000..2cadf5ed2 --- /dev/null +++ b/experiments/README_BASELINE_COLLECTION.md @@ -0,0 +1,145 @@ +# Automated Baseline Collection Script + +## Overview + +Detailed guide for the `collect_baseline_data.rb` script - automates gathering baseline data for regression detection by running all experiments multiple times and organizing the results. + +๐Ÿ“‹ **For the complete regression detection system**: See [`REGRESSION_DETECTION.md`](REGRESSION_DETECTION.md) + +## Usage + +### Simple Usage +```bash +# Run all experiments 5 times (minimum recommended) +ruby collect_baseline_data.rb 5 + +# Run all experiments 10 times (better for stable baselines) +ruby collect_baseline_data.rb 10 + +# Run all experiments 10 times (most stable baselines) +ruby collect_baseline_data.rb 15 +``` + + +## What It Does + +1. **Runs all experiments at once** using `run_all_experiments.rb` (already optimized with threading) +2. **Copies all generated CSV files** to their respective baseline directories +3. **Names files systematically**: `run_001_time_analysis.csv`, `run_002_time_analysis.csv`, etc. +4. **Repeats the process N times** (where N is your parameter) +5. **Leaves original CSV files unchanged** in `results/csv/` directory + +## Example Output + +```bash +$ ruby collect_baseline_data.rb 3 + +๐Ÿš€ Starting baseline data collection... +๐ŸŽฏ Using run_all_experiments.rb (much simpler and faster!) + +๐ŸŽฏ Collecting baseline data using run_all_experiments.rb +๐Ÿ“Š Running all experiments 3 times +โฐ Estimated time: ~45 minutes (assuming ~15 min per run) +============================================================ + +๐Ÿ”„ Run 1/3 +---------------------------------------- + ๐Ÿงช Running all experiments... + โœ… All experiments completed successfully + ๐Ÿ“‹ Copied 18/18 CSV files to baseline directories + โœ… Run 1: 18 experiments copied to baselines + +๐Ÿ”„ Run 2/3 +---------------------------------------- + ๐Ÿงช Running all experiments... + โœ… All experiments completed successfully + ๐Ÿ“‹ Copied 18/18 CSV files to baseline directories + โœ… Run 2: 18 experiments copied to baselines + +๐Ÿ”„ Run 3/3 +---------------------------------------- + ๐Ÿงช Running all experiments... + โœ… All experiments completed successfully + ๐Ÿ“‹ Copied 18/18 CSV files to baseline directories + โœ… Run 3: 18 experiments copied to baselines + +============================================================ +๐Ÿ“ˆ BASELINE COLLECTION SUMMARY + โœ… Successful runs: 3/3 + ๐Ÿ“Š Total experiment files copied: 54 + +๐ŸŽ‰ Baseline data collection completed! +๐Ÿ“‹ Next steps: + 1. Run: ruby compute_baselines.rb + 2. Run: ruby detect_regressions.rb +``` + +## File Organization + +After running, your structure will look like: + +``` +experiments/ +โ””โ”€โ”€ results/ + โ”œโ”€โ”€ csv/ # Original files (unchanged) + โ”‚ โ”œโ”€โ”€ gradual_increase_adaptive_time_analysis.csv + โ”‚ โ”œโ”€โ”€ gradual_increase_time_analysis.csv + โ”‚ โ”œโ”€โ”€ sudden_error_spike_100_adaptive_time_analysis.csv + โ”‚ โ””โ”€โ”€ [other experiments]_time_analysis.csv + โ””โ”€โ”€ baseline/ # Organized baseline data + โ”œโ”€โ”€ gradual_increase_adaptive/ # Folder name matches CSV name + โ”‚ โ”œโ”€โ”€ run_001_time_analysis.csv # Run 1 + โ”‚ โ”œโ”€โ”€ run_002_time_analysis.csv # Run 2 + โ”‚ โ”œโ”€โ”€ run_003_time_analysis.csv # Run 3 + โ”‚ โ””โ”€โ”€ computed_baseline.txt # (after compute_baselines.rb) + โ”œโ”€โ”€ gradual_increase/ # Non-adaptive version + โ”‚ โ”œโ”€โ”€ run_001_time_analysis.csv + โ”‚ โ”œโ”€โ”€ run_002_time_analysis.csv + โ”‚ โ””โ”€โ”€ run_003_time_analysis.csv + โ”œโ”€โ”€ sudden_error_spike_100_adaptive/ + โ”‚ โ”œโ”€โ”€ run_001_time_analysis.csv + โ”‚ โ”œโ”€โ”€ run_002_time_analysis.csv + โ”‚ โ””โ”€โ”€ run_003_time_analysis.csv + โ””โ”€โ”€ [other experiments]/ +``` + +## Next Steps + +After collecting baseline data: + +1. **Compute baselines**: `ruby compute_baselines.rb` +2. **See full system documentation**: [`REGRESSION_DETECTION.md`](REGRESSION_DETECTION.md) + +**๐Ÿ’ก Much faster and simpler!** Uses the existing `run_all_experiments.rb` which already handles parallel execution efficiently. + +## Error Handling + +The script will: +- โœ… Continue if individual experiment runs fail +- โœ… Report partial success (e.g., 4/5 runs successful) +- โœ… Create baseline directories automatically +- โœ… Skip copying CSV if experiment failed +- โŒ Exit with error code if no experiments succeeded + +## Tips + +1. **Run during off-hours** - Experiments are resource-intensive +2. **Start small** - Try 5 runs first, then increase if needed +3. **Monitor progress** - Each experiment takes ~15 minutes +4. **Stable baselines** - More runs = more stable percentile calculations +5. **One-time setup** - You only need to run this when initially setting up or updating baselines + +## Troubleshooting + +**"No experiment files found"** +- Make sure you're running from the `experiments/` directory +- Verify experiment files exist: `ls experiments/experiment_*_adaptive.rb` + +**Experiments failing** +- Check individual experiment files can run: `ruby experiments/experiment_gradual_increase_adaptive.rb` +- Ensure dependencies are installed +- Check system resources (CPU/memory) + +**CSV files not found** +- Verify experiments are generating `*_time_analysis.csv` files in `results/csv/` +- Check experiment output for errors diff --git a/experiments/REGRESSION_DETECTION.md b/experiments/REGRESSION_DETECTION.md new file mode 100644 index 000000000..cfc544662 --- /dev/null +++ b/experiments/REGRESSION_DETECTION.md @@ -0,0 +1,212 @@ +# Circuit Breaker Regression Detection System + +## Overview + +Automated system to detect performance regressions in circuit breaker experiments using **percentile-based statistical control charts**. Eliminates manual visual comparison by providing boolean pass/fail decisions based on historical baseline data. + +**๐Ÿค– Fully Automated**: Runs via GitHub Actions on every pull request - no manual intervention required. + +## How It Works + +1. **Baseline Collection**: Collect 5-10 historical "good" experiment runs for each experiment type +2. **Percentile Analysis**: Calculate 5th, 55th, and 95th percentiles for key metrics +3. **Control Limits**: Set bounds at 5th-95th percentile range (covers ~90% of historical variation) +4. **Violation Detection**: Flag experiment if >30% of time windows fall outside percentile bounds +5. **Multi-metric Evaluation**: Check deviation from target, error rates, and rejection rates +6. **Automated CI Integration**: GitHub Actions automatically runs full pipeline on every PR + +## Quick Start + +### 1. Collect Baseline Data + +```bash +# Automated collection (recommended) +ruby collect_baseline_data.rb 5 +``` + +๐Ÿ“‹ **For detailed instructions, examples, and troubleshooting**: See [`README_BASELINE_COLLECTION.md`](README_BASELINE_COLLECTION.md) + +### 3. Compute Baselines +```bash +# Calculate percentiles from historical data +ruby compute_baselines.rb +``` + +### 4. Run Regression Detection +```bash +# Check current experiments against baselines +ruby detect_regressions.rb +``` + +### 5. CI Integration (Automated) +The GitHub Actions workflow automatically runs on every pull request: +```yaml +# .github/workflows/automated-experiment-result-checker.yml +- name: Run experiments and check for performance regressions + run: | + cd experiments + bundle install + bundle exec ruby run_all_experiments.rb + ruby detect_regressions.rb +``` + +## Complete Workflow + +### One-Time Setup +```bash +# Step 1: Collect baseline data - see README_BASELINE_COLLECTION.md for details +ruby collect_baseline_data.rb 15 + +# Step 2: Compute percentile baselines +ruby compute_baselines.rb +``` + +### Automated CI Usage +The regression detection runs automatically on every pull request via GitHub Actions: + +1. **Automatic Trigger**: Runs on PR open, reopen, or new commits +2. **Full Pipeline**: Executes all experiments + regression detection +3. **Pass/Fail Results**: CI passes โœ… if no regressions, fails โŒ if regressions detected + +**Manual Local Testing** (optional): +```bash +# Test locally before pushing +cd experiments +bundle install +bundle exec ruby run_all_experiments.rb +ruby detect_regressions.rb +``` + +## Configuration & Tuning + +All thresholds are easily adjustable in `regression_config.rb`: + +```ruby +module RegressionConfig + # Percentile bounds for control limits + LOWER_PERCENTILE = 5 + UPPER_PERCENTILE = 95 + + # Violation thresholds (what % of time windows can violate bounds) + DEVIATION_VIOLATION_THRESHOLD = 8 + ERROR_RATE_VIOLATION_THRESHOLD = 0.8 + REJECTION_RATE_VIOLATION_THRESHOLD = 0.8 + + # Minimum baseline runs needed + MIN_BASELINE_RUNS = 10 +end +``` + +### Tuning Guidelines + +**More Sensitive Detection** (catch smaller regressions): +- Tighten percentile bounds: `LOWER_PERCENTILE = 10`, `UPPER_PERCENTILE = 90` +- Lower violation thresholds: `DEVIATION_VIOLATION_THRESHOLD = 0.10` (10%) + +**Less False Positives** (more tolerant of variation): +- Widen percentile bounds: `LOWER_PERCENTILE = 2`, `UPPER_PERCENTILE = 98` +- Raise violation thresholds: `DEVIATION_VIOLATION_THRESHOLD = 0.20` (20%) + +**Different Experiments Need Different Sensitivity**: +- Modify per-experiment configs (future enhancement) +- For now, use conservative settings that work across all experiments + +## File Structure + +``` +experiments/ +โ”œโ”€โ”€ regression_config.rb # โœ… Tunable configuration +โ”œโ”€โ”€ collect_baseline_data.rb # โœ… Automated baseline data collection (creates directories automatically) +โ”œโ”€โ”€ compute_baselines.rb # โœ… Calculate percentiles from historical data +โ”œโ”€โ”€ detect_regressions.rb # โœ… Main regression detection +โ””โ”€โ”€ results/ + โ”œโ”€โ”€ baseline/ # Historical "good" runs + โ”‚ โ”œโ”€โ”€ gradual_increase_adaptive/ + โ”‚ โ”‚ โ”œโ”€โ”€ run_001_time_analysis.csv + โ”‚ โ”‚ โ”œโ”€โ”€ run_002_time_analysis.csv + โ”‚ โ”‚ โ”œโ”€โ”€ run_003_time_analysis.csv + โ”‚ โ”‚ โ””โ”€โ”€ computed_baseline.txt # Calculated percentiles + โ”‚ โ””โ”€โ”€ [other experiment types]/ + โ””โ”€โ”€ csv/ # Current experiment results + โ”œโ”€โ”€ gradual_increase_adaptive_time_analysis.csv + โ””โ”€โ”€ [other experiments]_time_analysis.csv +``` + +## Exit Codes + +- **0**: All experiments passed (no regressions detected) +- **1**: Regressions detected + +## Metrics Analyzed + +For each 1-second time window: + +1. **Deviation from Target** (Primary): `|actual_rate - target_rate| / target_rate * 100` +2. **Error Rate**: Raw error percentage +3. **Rejection Rate**: Raw rejection percentage + +## Interpreting Results + +### โœ… PASS Example +``` +โœ… gradual_increase_adaptive: All metrics within expected bounds + Violation rates: Dev 5.2%, Err 3.1%, Rej 8.7% +``` +All violation rates < 15% threshold. + +### โŒ FAIL Example +``` +โŒ sudden_error_spike_100: Violations: deviation (23.5% > 15%) + Violation rates: Dev 23.5%, Err 12.1%, Rej 14.2% +``` +Deviation violation rate exceeded 15% threshold - potential regression detected. + +### โš ๏ธ SKIP Example +``` +โš ๏ธ oscillating_errors: No baseline found. Run compute_baselines.rb first. +``` +Need to establish baseline data for this experiment. + +## Updating Baselines + +When experiments legitimately improve (not regressions): + +1. **Collect new baseline data**: `ruby collect_baseline_data.rb 15` (see [`README_BASELINE_COLLECTION.md`](README_BASELINE_COLLECTION.md)) +2. **Recompute baselines**: `ruby compute_baselines.rb` +3. **Commit updated baseline files** to repository + +## Troubleshooting + +**"No baseline found"** - See [`README_BASELINE_COLLECTION.md`](README_BASELINE_COLLECTION.md) for detailed setup instructions + +**Too many false positives** - System is too sensitive: +1. Increase violation thresholds in `regression_config.rb` +2. Widen percentile bounds (e.g., 2nd-98th percentile) +3. Collect more baseline data for stable percentiles + +**Missing real regressions** - System not sensitive enough: +1. Decrease violation thresholds +2. Tighten percentile bounds (e.g., 10th-90th percentile) +3. Consider experiment-specific tuning + +## Technical Details + +**Why Percentiles vs Normal Distribution?** +- Circuit breaker data is **not normally distributed** (phase-based, bounded, heavy tails) +- Percentiles work with **any data distribution** +- More **robust to outliers** than mean ยฑ standard deviation + +**Why 5th-95th Percentiles?** +- Covers ~90% of historical variation +- Balances sensitivity vs false positive rate +- Industry standard for performance monitoring + +**Why 15% Violation Threshold?** +- Allows some natural variation in experiment timing +- Based on analysis of your actual experiment data +- Configurable based on your tolerance for sensitivity + +## Future Enhancements + +- [ ] Per-experiment threshold configuration +- [ ] Trend detection (gradual drift over time) diff --git a/experiments/collect_baseline_data.rb b/experiments/collect_baseline_data.rb new file mode 100644 index 000000000..050cb87b5 --- /dev/null +++ b/experiments/collect_baseline_data.rb @@ -0,0 +1,152 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +# Script to collect baseline data by running all experiments multiple times +# Usage: ruby collect_baseline_data.rb +# Example: ruby collect_baseline_data.rb 5 + +require_relative "regression_config" +require "fileutils" + +def discover_experiment_csvs + # Find all time_analysis CSV files in results/csv/ + csv_files = Dir.glob(File.join(File.dirname(__FILE__), RegressionConfig::CSV_PATH, "*_time_analysis.csv")) + + if csv_files.empty? + puts "โŒ No CSV files found in #{RegressionConfig::CSV_PATH}" + return {} + end + + # Map CSV files to their corresponding experiment names + experiment_mapping = {} + csv_files.each do |csv_file| + # Example: gradual_increase_adaptive_time_analysis.csv โ†’ gradual_increase_adaptive + experiment_name = File.basename(csv_file, "_time_analysis.csv") + experiment_mapping[experiment_name] = csv_file + end + + experiment_mapping +end + +def run_all_experiments? + puts "Running all experiments (~15 minutes)..." + puts "-" * 50 + + result = system("cd #{File.dirname(__FILE__)} && ruby run_all_experiments.rb") + + puts "-" * 50 + if result + puts "โœ… All experiments completed successfully" + true + else + puts "โŒ Some experiments failed (check output above)" + false + end +end + +def copy_all_csvs_to_baseline(run_number) + experiment_mapping = discover_experiment_csvs + + if experiment_mapping.empty? + puts "โŒ No experiment CSV files found to copy" + return 0 + end + + successful_copies = 0 + + experiment_mapping.each do |experiment_name, csv_file| + success = copy_csv_to_baseline(experiment_name, csv_file, run_number) + successful_copies += 1 if success + end + + puts "Copied #{successful_copies}/#{experiment_mapping.size} CSV files to baseline directories" + successful_copies +end + +def copy_csv_to_baseline(experiment_name, source_csv_path, run_number) + unless File.exist?(source_csv_path) + puts "โŒ CSV file not found: #{source_csv_path}" + return false + end + + # Destination baseline directory - folder name matches experiment name + baseline_dir = File.join(File.dirname(__FILE__), RegressionConfig::BASELINE_PATH, experiment_name) + + unless Dir.exist?(baseline_dir) + FileUtils.mkdir_p(baseline_dir) + puts "Created baseline directory: #{experiment_name}/" + end + + # Destination file with run number prefix: run_001, run_002, etc. + run_filename = "run_%03d_time_analysis.csv" % run_number + destination_csv = File.join(baseline_dir, run_filename) + + FileUtils.cp(source_csv_path, destination_csv) + puts "โœ… #{File.basename(source_csv_path)} โ†’ baseline/#{experiment_name}/#{run_filename}" + + true +end + +def collect_baseline_data?(num_runs) + puts "๐ŸŽฏ Collecting baseline data using run_all_experiments.rb" + puts "๐Ÿ“Š Running all experiments #{num_runs} times" + puts "โฐ Estimated time: ~#{num_runs * 15} minutes" + puts "=" * 60 + + successful_runs = 0 + total_experiments_copied = 0 + + (1..num_runs).each do |run_number| + puts "\n๐Ÿ”„ Run #{run_number}/#{num_runs}" + puts "-" * 40 + + if run_all_experiments? + experiments_copied = copy_all_csvs_to_baseline(run_number) + + if experiments_copied > 0 + successful_runs += 1 + total_experiments_copied += experiments_copied + end + end + end + + puts "\nCompleted #{successful_runs}/#{num_runs} runs (#{total_experiments_copied} files)" + + if successful_runs > 0 + puts "\n Baseline data collection completed!" + puts "Next steps: compute_baselines.rb, detect_regressions.rb" + true + else + puts "\n No runs completed successfully" + false + end +end + +def main + if ARGV.length != 1 + puts "Usage: ruby collect_baseline_data.rb " + puts "Example: ruby collect_baseline_data.rb 5" + exit(1) + end + + num_runs = ARGV[0].to_i + + if num_runs <= 0 + puts "โŒ Number of runs must be a positive integer" + exit(1) + end + + if num_runs < RegressionConfig::MIN_BASELINE_RUNS + puts "โš ๏ธ Warning: #{num_runs} runs is less than minimum recommended (#{RegressionConfig::MIN_BASELINE_RUNS})" + puts "Consider running with at least #{RegressionConfig::MIN_BASELINE_RUNS} runs for stable baselines." + puts "" + end + + puts "๐Ÿš€ Starting baseline data collection..." + + success = collect_baseline_data?(num_runs) + + exit(success ? 0 : 1) +end + +main if __FILE__ == $0 diff --git a/experiments/compute_baselines.rb b/experiments/compute_baselines.rb new file mode 100644 index 000000000..1b9491b9e --- /dev/null +++ b/experiments/compute_baselines.rb @@ -0,0 +1,177 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +# This script computes the percentiles for the baseline data and saves them to a file. +# Usage: ruby compute_baselines.rb + +require_relative "regression_config" + +MID_PERCENTILE = RegressionConfig::LOWER_PERCENTILE + (RegressionConfig::UPPER_PERCENTILE - RegressionConfig::LOWER_PERCENTILE) / 2 + +def percentile(sorted_array, percent) + return sorted_array.first if sorted_array.length == 1 + + index = (percent / 100.0) * (sorted_array.length - 1) + lower = sorted_array[index.floor] + upper = sorted_array[index.ceil] + + lower + (upper - lower) * (index - index.floor) +end + +def calculate_percentiles(values) + return if values.empty? + + sorted = values.sort + { + "p#{RegressionConfig::LOWER_PERCENTILE}" => percentile(sorted, RegressionConfig::LOWER_PERCENTILE), + "p#{MID_PERCENTILE}" => percentile(sorted, MID_PERCENTILE), + "p#{RegressionConfig::UPPER_PERCENTILE}" => percentile(sorted, RegressionConfig::UPPER_PERCENTILE), + "count" => sorted.length, + } +end + +def parse_csv_and_extract_metrics(csv_path) + lines = File.readlines(csv_path) + headers = lines[0].strip.split(",") + + # Find column indices + error_idx = headers.index("Error %") + rejected_idx = headers.index("Rejected %") + target_idx = headers.index("Target Error Rate %") + + if error_idx.nil? || rejected_idx.nil? || target_idx.nil? + puts "โŒ Missing required columns in #{csv_path}" + return { deviations: [], error_rates: [], rejection_rates: [] } + end + + deviations = [] + error_rates = [] + rejection_rates = [] + + lines[1..-1].each do |line| + next if line.strip.empty? + + cols = line.strip.split(",") + next if cols.length <= [error_idx, rejected_idx, target_idx].max + + error_rate = cols[error_idx].to_f + rejection_rate = cols[rejected_idx].to_f + target_rate = cols[target_idx].to_f + + actual = error_rate + rejection_rate + + deviation = if target_rate > 0 + ((actual - target_rate) / target_rate * 100).abs + else + actual > 0 ? 100.0 : 0.0 + end + + deviations << deviation + error_rates << error_rate + rejection_rates << rejection_rate + end + + { + deviations: deviations, + error_rates: error_rates, + rejection_rates: rejection_rates, + } +end + +def compute_baseline_for_experiment(experiment_name) + baseline_dir = File.join(RegressionConfig::BASELINE_PATH, experiment_name) + + unless Dir.exist?(baseline_dir) + puts "โŒ Baseline directory not found: #{baseline_dir}" + return false + end + + csv_files = Dir.glob(File.join(baseline_dir, "*_time_analysis.csv")) + + if csv_files.length < RegressionConfig::MIN_BASELINE_RUNS + puts "#{experiment_name}: Need #{RegressionConfig::MIN_BASELINE_RUNS}+ CSV files, found #{csv_files.length}" + return false + end + all_deviations = [] + all_error_rates = [] + all_rejection_rates = [] + + csv_files.each do |csv_file| + data = parse_csv_and_extract_metrics(csv_file) + all_deviations.concat(data[:deviations]) + all_error_rates.concat(data[:error_rates]) + all_rejection_rates.concat(data[:rejection_rates]) + end + + deviation_percentiles = calculate_percentiles(all_deviations) + error_percentiles = calculate_percentiles(all_error_rates) + rejection_percentiles = calculate_percentiles(all_rejection_rates) + baseline_file = File.join(baseline_dir, "computed_baseline.txt") + lower_key = "p#{RegressionConfig::LOWER_PERCENTILE}" + mid_key = "p#{MID_PERCENTILE}" + upper_key = "p#{RegressionConfig::UPPER_PERCENTILE}" + + File.open(baseline_file, "w") do |f| + f.puts "# Baseline computed at #{Time.now}" + f.puts "# Source files: #{csv_files.map { |x| File.basename(x) }.join(", ")}" + f.puts "# Total data points: #{all_deviations.length}" + f.puts + f.puts "deviation_p#{RegressionConfig::LOWER_PERCENTILE}=#{deviation_percentiles[lower_key]}" + f.puts "deviation_p#{MID_PERCENTILE}=#{deviation_percentiles[mid_key]}" + f.puts "deviation_p#{RegressionConfig::UPPER_PERCENTILE}=#{deviation_percentiles[upper_key]}" + f.puts + f.puts "error_rate_p#{RegressionConfig::LOWER_PERCENTILE}=#{error_percentiles[lower_key]}" + f.puts "error_rate_p#{MID_PERCENTILE}=#{error_percentiles[mid_key]}" + f.puts "error_rate_p#{RegressionConfig::UPPER_PERCENTILE}=#{error_percentiles[upper_key]}" + f.puts + f.puts "rejection_rate_p#{RegressionConfig::LOWER_PERCENTILE}=#{rejection_percentiles[lower_key]}" + f.puts "rejection_rate_p#{MID_PERCENTILE}=#{rejection_percentiles[mid_key]}" + f.puts "rejection_rate_p#{RegressionConfig::UPPER_PERCENTILE}=#{rejection_percentiles[upper_key]}" + end + + baseline = { + deviation: deviation_percentiles, + error_rate: error_percentiles, + rejection_rate: rejection_percentiles, + } + + lower_key = "p#{RegressionConfig::LOWER_PERCENTILE}" + upper_key = "p#{RegressionConfig::UPPER_PERCENTILE}" + + puts "โœ… #{experiment_name}: Baseline saved to #{File.basename(baseline_file)}" + puts " Deviation bounds: #{baseline[:deviation][lower_key].round(1)}% - #{baseline[:deviation][upper_key].round(1)}%" + + true +end + +def compute_all_baselines + experiment_dirs = Dir.glob(File.join(RegressionConfig::BASELINE_PATH, "*")).select { |f| File.directory?(f) } + + if experiment_dirs.empty? + puts "โŒ No baseline directories found. Run collect_baseline_data.rb first." + return + end + + puts "Computing baselines..." + + results = {} + experiment_dirs.each do |dir| + experiment_name = File.basename(dir) + results[experiment_name] = compute_baseline_for_experiment(experiment_name) + puts # blank line + end + + successful = results.values.count(true) + total = results.size + + puts "\nCompleted: #{successful}/#{total} successful" + + if successful < total + failed = results.select { |_, success| !success }.keys + puts "โŒ Failed: #{failed.join(", ")}" + else + puts "Next steps: ruby detect_regressions.rb" + end +end + +compute_all_baselines if __FILE__ == $0 diff --git a/experiments/detect_regressions.rb b/experiments/detect_regressions.rb new file mode 100644 index 000000000..57188fbbd --- /dev/null +++ b/experiments/detect_regressions.rb @@ -0,0 +1,218 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +# This script detects regressions in the experiments by comparing the current experiment results to the baseline data. +# Usage: ruby detect_regressions.rb +require_relative "regression_config" + +def load_baseline(experiment_name) + baseline_file = File.join(RegressionConfig::BASELINE_PATH, experiment_name, "computed_baseline.txt") + + unless File.exist?(baseline_file) + return + end + + baseline = {} + File.readlines(baseline_file).each do |line| + next if line.start_with?("#") || line.strip.empty? + + key, value = line.strip.split("=") + baseline[key] = value.to_f + end + + baseline +end + +def parse_csv_and_extract_metrics(csv_path) + lines = File.readlines(csv_path) + headers = lines[0].strip.split(",") + + # Find column indices + error_idx = headers.index("Error %") + rejected_idx = headers.index("Rejected %") + target_idx = headers.index("Target Error Rate %") + + if error_idx.nil? || rejected_idx.nil? || target_idx.nil? + puts "โŒ Missing required columns in #{csv_path}" + return { deviations: [], error_rates: [], rejection_rates: [] } + end + + deviations = [] + error_rates = [] + rejection_rates = [] + + lines[1..-1].each do |line| + next if line.strip.empty? + + cols = line.strip.split(",") + next if cols.length <= [error_idx, rejected_idx, target_idx].max + + error_rate = cols[error_idx].to_f + rejection_rate = cols[rejected_idx].to_f + target_rate = cols[target_idx].to_f + + actual = error_rate + rejection_rate + + deviation = if target_rate > 0 + ((actual - target_rate) / target_rate * 100).abs + else + actual > 0 ? 100.0 : 0.0 + end + + deviations << deviation + error_rates << error_rate + rejection_rates << rejection_rate + end + + { + deviations: deviations, + error_rates: error_rates, + rejection_rates: rejection_rates, + } +end + +def count_violations(values, lower_bound, upper_bound) + violations = values.count { |v| v < lower_bound || v > upper_bound } + total = values.length + + return 0.0 if total == 0 + + violations.to_f / total.to_f +end + +def detect_regression(experiment_name, csv_path) + baseline = load_baseline(experiment_name) + + unless baseline + return { + experiment: experiment_name, + status: "SKIP", + reason: "No baseline found. Run compute_baselines.rb first.", + } + end + + metrics = parse_csv_and_extract_metrics(csv_path) + + if metrics[:deviations].empty? + return { + experiment: experiment_name, + status: "ERROR", + reason: "Could not parse CSV data", + } + end + + # Check violations for each metric + deviation_violation_rate = count_violations( + metrics[:deviations], + baseline["deviation_p#{RegressionConfig::LOWER_PERCENTILE}"], + baseline["deviation_p#{RegressionConfig::UPPER_PERCENTILE}"], + ) + + error_rate_violation_rate = count_violations( + metrics[:error_rates], + baseline["error_rate_p#{RegressionConfig::LOWER_PERCENTILE}"], + baseline["error_rate_p#{RegressionConfig::UPPER_PERCENTILE}"], + ) + + rejection_rate_violation_rate = count_violations( + metrics[:rejection_rates], + baseline["rejection_rate_p#{RegressionConfig::LOWER_PERCENTILE}"], + baseline["rejection_rate_p#{RegressionConfig::UPPER_PERCENTILE}"], + ) + + # Determine overall status + violations = [] + + if deviation_violation_rate > RegressionConfig::DEVIATION_VIOLATION_THRESHOLD + violations << "deviation (#{(deviation_violation_rate * 100).round(1)}% > #{RegressionConfig::DEVIATION_VIOLATION_THRESHOLD * 100}%)" + end + + if error_rate_violation_rate > RegressionConfig::ERROR_RATE_VIOLATION_THRESHOLD + violations << "error_rate (#{(error_rate_violation_rate * 100).round(1)}% > #{RegressionConfig::ERROR_RATE_VIOLATION_THRESHOLD * 100}%)" + end + + if rejection_rate_violation_rate > RegressionConfig::REJECTION_RATE_VIOLATION_THRESHOLD + violations << "rejection_rate (#{(rejection_rate_violation_rate * 100).round(1)}% > #{RegressionConfig::REJECTION_RATE_VIOLATION_THRESHOLD * 100}%)" + end + + if violations.empty? + status = "PASS" + reason = "All metrics within expected bounds" + else + status = "FAIL" + reason = "Violations: #{violations.join(", ")}" + end + + { + experiment: experiment_name, + status: status, + reason: reason, + details: { + deviation_violation_rate: (deviation_violation_rate * 100).round(1), + error_rate_violation_rate: (error_rate_violation_rate * 100).round(1), + rejection_rate_violation_rate: (rejection_rate_violation_rate * 100).round(1), + }, + } +end + +def detect_all_regressions + csv_files = Dir.glob("#{RegressionConfig::CSV_PATH}/*_time_analysis.csv") + + if csv_files.empty? + puts "โŒ No experiment CSV files found in #{RegressionConfig::CSV_PATH}" + puts "Run some experiments first." + return + end + + puts "๐Ÿ” Checking for regressions in #{csv_files.length} experiments..." + puts + + results = [] + + csv_files.each do |csv_file| + experiment_name = File.basename(csv_file, "_time_analysis.csv") + result = detect_regression(experiment_name, csv_file) + results << result + + case result[:status] + when "PASS" + puts "โœ… #{experiment_name}: #{result[:reason]}" + when "FAIL" + puts "โŒ #{experiment_name}: #{result[:reason]}" + when "SKIP" + puts "โš ๏ธ #{experiment_name}: #{result[:reason]}" + when "ERROR" + puts "๐Ÿ’ฅ #{experiment_name}: #{result[:reason]}" + end + + if result[:details] + puts " Violation rates: Dev #{result[:details][:deviation_violation_rate]}%, Err #{result[:details][:error_rate_violation_rate]}%, Rej #{result[:details][:rejection_rate_violation_rate]}%" + end + + puts + end + + # Summary + passed = results.count { |r| r[:status] == "PASS" } + failed = results.count { |r| r[:status] == "FAIL" } + skipped = results.count { |r| r[:status] == "SKIP" } + errors = results.count { |r| r[:status] == "ERROR" } + + puts "=" * 60 + puts "๐ŸŽฏ REGRESSION DETECTION SUMMARY" + puts " โœ… Passed: #{passed}" + puts " โŒ Failed: #{failed}" + puts " โš ๏ธ Skipped: #{skipped}" + puts " ๐Ÿ’ฅ Errors: #{errors}" + + if failed > 0 + puts "\n๐Ÿšจ POTENTIAL REGRESSIONS DETECTED!" + puts "Review failed experiments before merging PR." + exit(1) + else + puts "\n๐ŸŽ‰ All experiments within expected bounds!" + exit(0) + end +end + +detect_all_regressions if __FILE__ == $0 diff --git a/experiments/example_output.png b/experiments/example_output.png deleted file mode 100644 index 0976a711c..000000000 Binary files a/experiments/example_output.png and /dev/null differ diff --git a/experiments/example_with_circuit_breaker.rb b/experiments/example_with_circuit_breaker.rb deleted file mode 100644 index a2db1b5a2..000000000 --- a/experiments/example_with_circuit_breaker.rb +++ /dev/null @@ -1,86 +0,0 @@ -# frozen_string_literal: true - -$LOAD_PATH.unshift(File.expand_path("../lib", __dir__)) - -require "semian" -require_relative "experimental_resource" - -resource = Semian::Experiments::ExperimentalResource.new( - name: "protected_service", - endpoints_count: 200, - min_latency: 0.01, - max_latency: 10, - distribution: { - type: :log_normal, - mean: 1, - std_dev: 0.1, - }, - error_rate: 0.01, # 1% baseline error rate - timeout: 5, # 5 seconds timeout - semian: { - success_threshold: 2, - error_threshold: 3, - error_threshold_timeout: 20, - error_timeout: 15, - bulkhead: false, - }, -) - -outcomes = {} - -done = false - -Thread.new do - until done - sleep(0.1) # Don't send more than 10 requests per second - current_sec = outcomes[Time.now.to_i] ||= { - success: 0, - circuit_open: 0, - error: 0, - } - begin - resource.request(rand(resource.endpoints_count)) - puts "โœ“ Success" - current_sec[:success] += 1 - rescue Semian::Experiments::ExperimentalResource::CircuitOpenError => e - puts "โšก Circuit Open - #{e.message}" - current_sec[:circuit_open] += 1 - rescue Semian::Experiments::ExperimentalResource::RequestError, Semian::Experiments::ExperimentalResource::TimeoutError => e - puts "โœ— Error" - current_sec[:error] += 1 - end - end -end - -sleep 10 - -puts "Setting error rate to 0.5" -resource.set_error_rate(0.5) - -sleep 10 - -puts "Resetting error rate to 0.01" -resource.set_error_rate(0.01) - -sleep 10 - -done = true - -puts "Generating graph showing success, circuit open, and error rates over time, (bucketed by 1 second)..." -require "gruff" - -graph = Gruff::Line.new -graph.title = "Outcomes" -graph.x_axis_label = "Time" -graph.y_axis_label = "Count" - -graph.hide_dots = true -graph.line_width = 3 - -graph.data("Success", outcomes.map { |_, data| data[:success] }) -graph.data("Circuit Open", outcomes.map { |_, data| data[:circuit_open] }) -graph.data("Error", outcomes.map { |_, data| data[:error] }) - -graph.write("example_output.png") - -puts "Graph saved to outcomes.png" diff --git a/experiments/experiment_helpers.rb b/experiments/experiment_helpers.rb new file mode 100644 index 000000000..1c5eff03d --- /dev/null +++ b/experiments/experiment_helpers.rb @@ -0,0 +1,669 @@ +# frozen_string_literal: true + +module Semian + module Experiments + # Experiment runner for circuit breaker experiments (both adaptive and classic) + # Handles all the common logic: service creation, threading, monitoring, analysis, and visualization + require "fileutils" + require "csv" + class DegradationPhase + attr_reader :healthy, :error_rate, :latency, :specific_endpoint_latency + + def initialize(healthy: nil, error_rate: nil, latency: nil, specific_endpoint_latency: nil) + @healthy = healthy + @error_rate = error_rate + @latency = latency + @specific_endpoint_latency = specific_endpoint_latency + end + end + + class CircuitBreakerExperimentRunner + attr_reader :experiment_name, :resource_name, :degradation_phases, :phase_duration, :graph_title, :graph_filename, :service_count, :target_service + + def initialize( + experiment_name:, + resource_name:, + degradation_phases:, + phase_duration:, + graph_title:, + semian_config:, + graph_filename: nil, + num_threads: 60, + requests_per_second: 1000, + x_axis_label_interval: nil, + service_count: 1, + graph_bucket_size: nil, + base_error_rate: 0.01, + with_max_threads: false + ) + @experiment_name = experiment_name + @resource_name = resource_name + @degradation_phases = degradation_phases + @phase_duration = phase_duration + @graph_title = graph_title + @semian_config = semian_config + @is_adaptive = semian_config[:adaptive_circuit_breaker] == true + @graph_filename = graph_filename || "#{resource_name}.png" + @main_results_path = File.join(File.dirname(__FILE__), "results/main_graphs") + @csv_results_path = File.join(File.dirname(__FILE__), "results/csv") + FileUtils.mkdir_p(@main_results_path) unless File.directory?(@main_results_path) + FileUtils.mkdir_p(@csv_results_path) unless File.directory?(@csv_results_path) + @num_threads = num_threads + @requests_per_second = requests_per_second + @x_axis_label_interval = x_axis_label_interval || phase_duration + @experiment_duration = degradation_phases.length * phase_duration + @service_count = service_count + @target_service = nil + @graph_bucket_size = graph_bucket_size || 1 + @base_error_rate = base_error_rate + @with_max_threads = with_max_threads + base_filename = graph_filename ? graph_filename.sub(/\.png$/, "") : resource_name + @time_analysis_csv_filename = "#{base_filename}_time_analysis.csv" + @pid_controller_csv_filename = "#{base_filename}_pid_controller.csv" + @time_analysis_data = [] + @pid_controller_data = [] + end + + def run + setup_services + setup_resources + start_threads + execute_phases + wait_for_completion + generate_analysis + generate_visualization + end + + private + + def setup_services + puts "Creating mock service..." + @services = [] + mean_latency = 0.15 + # Provide barely enough threads for us to handle the expected load (using Little's law) + max_threads_per_service = ((@requests_per_second / @service_count) * mean_latency).to_i + @service_count.times do + @services << MockService.new( + endpoints_count: 10, + min_latency: 0.1, + max_latency: 10, + distribution: { + type: :log_normal, + mean: mean_latency, + std_dev: 3, + }, + error_rate: @base_error_rate, + timeout: 10, + max_threads: @with_max_threads ? max_threads_per_service : 0, + queue_timeout: 1.0, + ) + end + # We always assume that you want to degrade one service, and we pick @services[0] + # If you have more complex experiments with multi-service degradation, + # feel free to change this code. + @target_service = @services[0] + end + + def setup_resources + puts "Initializing Semian resource..." + begin + @services.each do |service| + init_resource = ExperimentalResource.new( + name: "#{@resource_name}_#{service.object_id}", + service: service, + semian: @semian_config, + ) + init_resource.request(0) + end + rescue + # Ignore any error, we just needed to trigger registration + end + puts "Resource initialized successfully.\n" + end + + def start_threads + @outcomes = {} + @done = false + @outcomes_mutex = Mutex.new + @pid_mutex = Mutex.new + @thread_timings = {} + @state_transitions = [] + @state_transitions_mutex = Mutex.new + + start_request_arrival + start_processing_threads + subscribe_to_metrics if @is_adaptive + subscribe_to_state_changes unless @is_adaptive + end + + def start_request_arrival + @request_queue = Queue.new + @arrival_thread = Thread.new do + until @done + sleep(1.0 / @requests_per_second) + @request_queue << Time.now.to_i + end + # Push sentinel values to wake up all worker threads on shutdown + @num_threads.times { @request_queue << :shutdown } + end + end + + def start_processing_threads + puts "Starting #{@num_threads} concurrent request threads (#{@requests_per_second} requests/second)..." + + @request_threads = [] + @num_threads.times do |thread_num| + @request_threads << Thread.new do + thread_id = Thread.current.object_id + @thread_timings[thread_id] = { samples: [] } + + loop do + # Block waiting for a request token + token = @request_queue.pop + break if token == :shutdown || @done + + next if token < Time.now.to_i - 1 # Ignore requests that are more than 1 second old + + service = @services.sample + # technically, we are creating a new resource instance on every request. + # But the resource class is pretty much only a wrapper around things that are longer-living. + # So this works just fine. + thread_resource = ExperimentalResource.new( + name: "#{@resource_name}_#{service.object_id}_thread_#{thread_num}", + service: service, + semian: @semian_config, + ) + + request_start = Time.now + begin + thread_resource.request(rand(service.endpoints_count)) + + @outcomes_mutex.synchronize do + current_sec = @outcomes[Time.now.to_i] ||= { + success: 0, + circuit_open: 0, + error: 0, + } + print("โœ“") + current_sec[:success] += 1 + end + rescue ExperimentalResource::CircuitOpenError + @outcomes_mutex.synchronize do + current_sec = @outcomes[Time.now.to_i] ||= { + success: 0, + circuit_open: 0, + error: 0, + } + print("โšก") + current_sec[:circuit_open] += 1 + end + rescue ExperimentalResource::RequestError, ExperimentalResource::TimeoutError, ExperimentalResource::QueueTimeoutError + @outcomes_mutex.synchronize do + current_sec = @outcomes[Time.now.to_i] ||= { + success: 0, + circuit_open: 0, + error: 0, + } + print("โœ—") + current_sec[:error] += 1 + end + ensure + request_duration = Time.now - request_start + timestamp = Time.now.to_i + @thread_timings[thread_id][:samples] << { duration: request_duration, timestamp: timestamp } + end + end + end + end + end + + def subscribe_to_metrics + target_resource_prefix = "#{@resource_name}_#{@target_service.object_id}_thread_" + # Collect raw metrics from all threads + @raw_metrics = [] + + @subscription = Semian.subscribe do |event, resource, _scope, _adapter, payload| + # Only capture adaptive_update events for our target service thread resources + next unless event == :adaptive_update && resource.name.to_s.start_with?(target_resource_prefix) + + @pid_mutex.synchronize do + timestamp = Time.now.to_i + + @raw_metrics << { + timestamp: timestamp, + resource_name: resource.name, + error_rate: payload[:error_rate], + ideal_error_rate: payload[:ideal_error_rate], + p_value: payload[:p_value], + previous_p_value: payload[:previous_p_value], + rejection_rate: payload[:rejection_rate], + integral: payload[:integral], + derivative: payload[:derivative], + } + end + end + end + + def subscribe_to_state_changes + target_resource_prefix = "#{@resource_name}_#{@target_service.object_id}_thread_" + + @subscription = Semian.subscribe do |event, resource, _scope, _adapter, payload| + # Only capture state_change events for our target service thread resources + next unless event == :state_change && resource.name.to_s.start_with?(target_resource_prefix) + + @state_transitions_mutex.synchronize do + @state_transitions << { + timestamp: Time.now.to_i, + state: payload[:state], + resource_name: resource.name, + } + end + end + end + + def execute_phases + puts "\n=== #{@experiment_name} (ADAPTIVE) ===" + puts "Error rate: #{@degradation_phases.map { |r| r.error_rate ? "#{(r.error_rate * 100).round(1)}%" : "N/A" }.join(" -> ")}" + puts "Latency: #{@degradation_phases.map { |r| r.latency ? "#{(r.latency * 1000).round(1)}ms" : "N/A" }.join(" -> ")}" + puts "Specific endpoint latency: #{@degradation_phases.map { |r| r.specific_endpoint_latency ? "#{(r.specific_endpoint_latency * 1000).round(1)}ms" : "N/A" }.join(" -> ")}" + puts "Phase duration: #{@phase_duration} seconds (#{(@phase_duration / 60.0).round(1)} minutes) per phase" + puts "Duration: #{@experiment_duration} seconds (#{(@experiment_duration / 60.0).round(1)} minutes)" + puts "Starting experiment...\n" + + @start_time = Time.now + + @degradation_phases.each_with_index do |degradation_phase, idx| + if idx > 0 + if degradation_phase.healthy + puts "\n=== Transitioning to healthy state ===" + @target_service.reset_degradation + else + if degradation_phase.error_rate + puts "\n=== Transitioning to #{(degradation_phase.error_rate * 100).round(1)}% error rate ===" + @target_service.set_error_rate(degradation_phase.error_rate) + end + if degradation_phase.latency + puts "\n=== Transitioning to #{(degradation_phase.latency * 1000).round(1)}ms latency ===" + @target_service.add_latency(degradation_phase.latency) + end + if degradation_phase.specific_endpoint_latency + puts "\n=== Transitioning to #{(degradation_phase.specific_endpoint_latency * 1000).round(1)}ms specific endpoint latency ===" + @target_service.degrade_specific_endpoint(rand(@target_service.endpoints_count), degradation_phase.specific_endpoint_latency) + end + end + end + + sleep(@phase_duration) + end + end + + def wait_for_completion + @done = true + puts "\nWaiting for all request threads to finish..." + @arrival_thread.join # Wait for arrival thread to push shutdown tokens + @request_threads.each(&:join) + + Semian.unsubscribe(@subscription) if @subscription + + @end_time = Time.now + + # Clean up per-thread resources + @services.each do |service| + @num_threads.times do |thread_num| + resource_name = "#{@resource_name}_#{service.object_id}_thread_#{thread_num}".to_sym + Semian.destroy(resource_name) + end + end + end + + def generate_analysis + output_lines = [] + output_lines << "\n\n=== Experiment Complete ===" + output_lines << "Actual duration: #{(@end_time - @start_time).round(2)} seconds" + output_lines << "\nGenerating analysis..." + + # Print to console + output_lines.each { |line| puts line } + + display_summary_statistics + display_time_based_analysis + display_thread_timing_statistics + display_pid_controller_state + + # Save CSV outputs + save_csv_outputs + end + + def display_summary_statistics + total_success = @outcomes.values.sum { |data| data[:success] } + total_circuit_open = @outcomes.values.sum { |data| data[:circuit_open] } + total_error = @outcomes.values.sum { |data| data[:error] } + total_requests = total_success + total_circuit_open + total_error + + puts "\n=== Summary Statistics ===" + puts "Total Requests: #{total_requests}" + puts " Successes: #{total_success} (#{(total_success.to_f / total_requests * 100).round(2)}%)" + puts " Rejected: #{total_circuit_open} (#{(total_circuit_open.to_f / total_requests * 100).round(2)}%)" + puts " Errors: #{total_error} (#{(total_error.to_f / total_requests * 100).round(2)}%)" + end + + def display_time_based_analysis + bucket_size = @phase_duration + num_buckets = (@experiment_duration / bucket_size.to_f).ceil + + puts "\n=== Time-Based Analysis (#{bucket_size}-second buckets) ===" + + # Add CSV header + @time_analysis_data << ["Time Range", "Total Requests", "Success", "Errors", "Error %", "Rejected", "Rejected %", "Target Error Rate %"] + + (0...num_buckets).each do |bucket_idx| + bucket_start = @outcomes.keys[0] + (bucket_idx * bucket_size) + bucket_data = @outcomes.select { |time, _| time >= bucket_start && time < bucket_start + bucket_size } + + bucket_success = bucket_data.values.sum { |d| d[:success] } + bucket_errors = bucket_data.values.sum { |d| d[:error] } + bucket_circuit = bucket_data.values.sum { |d| d[:circuit_open] } + bucket_total = bucket_success + bucket_errors + bucket_circuit + + bucket_time_range = "#{bucket_idx * bucket_size}-#{(bucket_idx + 1) * bucket_size}s" + circuit_pct = bucket_total > 0 ? ((bucket_circuit.to_f / bucket_total) * 100).round(2) : 0 + error_pct = bucket_total > 0 ? ((bucket_errors.to_f / bucket_total) * 100).round(2) : 0 + status = bucket_circuit > 0 ? "โšก" : "โœ“" + + degradation_phase = @degradation_phases[bucket_idx] || @degradation_phases.last + phase_error_rate = degradation_phase.error_rate || @base_error_rate + phase_label = "[Target: #{(phase_error_rate * 100).round(1)}%]" + + # Console output + output_line = "#{status} #{bucket_time_range} #{phase_label}: #{bucket_total} requests | Success: #{bucket_success} | Errors: #{bucket_errors} (#{error_pct}%) | Rejected: #{bucket_circuit} (#{circuit_pct}%)" + puts output_line + + # CSV data + @time_analysis_data << [ + bucket_time_range, + bucket_total, + bucket_success, + bucket_errors, + error_pct, + bucket_circuit, + circuit_pct, + (phase_error_rate * 100).round(1), + ] + end + end + + def display_thread_timing_statistics + return if @thread_timings.empty? + + puts "\n=== Thread Timing Statistics ===" + + total_times = @thread_timings.values.map { |t| t[:samples].sum { |s| s[:duration] } } + request_counts = @thread_timings.values.map { |t| t[:samples].size } + + total_wall_time = @end_time - @start_time + sum_thread_time = total_times.sum + avg_thread_time = sum_thread_time / @thread_timings.size + min_thread_time = total_times.min + max_thread_time = total_times.max + + avg_requests = request_counts.sum / @thread_timings.size.to_f + + # Calculate utilization (time spent in requests vs wall clock time) + avg_utilization = (avg_thread_time / total_wall_time * 100) + + puts "Total threads: #{@thread_timings.size}" + puts "Experiment wall clock duration: #{total_wall_time.round(2)}s" + puts "\nTime spent making requests per thread:" + puts " Min: #{min_thread_time.round(2)}s" + puts " Max: #{max_thread_time.round(2)}s" + puts " Average: #{avg_thread_time.round(2)}s" + puts " Total (all threads): #{sum_thread_time.round(2)}s" + puts "\nThread utilization:" + puts " Average: #{avg_utilization.round(2)}% (time in requests / wall clock time)" + puts "\nRequests per thread:" + puts " Average: #{avg_requests.round(0)} requests" + puts " Average time per request: #{(avg_thread_time / avg_requests).round(4)}s" if avg_requests > 0 + end + + def display_pid_controller_state + return unless @is_adaptive + + if @raw_metrics.empty? + puts "\nโš ๏ธ No metrics collected" + return + end + + # Aggregate raw metrics by timestamp + metrics_by_timestamp = @raw_metrics.group_by { |m| m[:timestamp] } + + # Create aggregated snapshots, sorted by timestamp + aggregated_snapshots = metrics_by_timestamp.sort.map do |timestamp, metrics| + total_request_time = @thread_timings.values.sum do |t| + t[:samples].select { |s| s[:timestamp] <= timestamp }.sum { |s| s[:duration] } + end + + { + timestamp: timestamp, + error_rate_avg: metrics.sum { |m| m[:error_rate] } / metrics.length.to_f, + error_rate_min: metrics.map { |m| m[:error_rate] }.min, + error_rate_max: metrics.map { |m| m[:error_rate] }.max, + ideal_error_rate: metrics.first[:ideal_error_rate], + rejection_rate_avg: metrics.sum { |m| m[:rejection_rate] } / metrics.length.to_f, + rejection_rate_min: metrics.map { |m| m[:rejection_rate] }.min, + rejection_rate_max: metrics.map { |m| m[:rejection_rate] }.max, + integral_avg: metrics.sum { |m| m[:integral] } / metrics.length.to_f, + integral_min: metrics.map { |m| m[:integral] }.min, + integral_max: metrics.map { |m| m[:integral] }.max, + p_value_avg: metrics.sum { |m| m[:p_value] } / metrics.length.to_f, + p_value_min: metrics.map { |m| m[:p_value] }.min, + p_value_max: metrics.map { |m| m[:p_value] }.max, + derivative_avg: metrics.sum { |m| m[:derivative] } / metrics.length.to_f, + derivative_min: metrics.map { |m| m[:derivative] }.min, + derivative_max: metrics.map { |m| m[:derivative] }.max, + total_request_time: total_request_time, + thread_count: metrics.length, + } + end + + puts "\n=== PID Controller State Per Second (Aggregated across threads) ===" + + header = format("%-8s %-10s %-22s %-15s %-22s %-25s %-25s %-25s %-15s", "Window", "# Threads", "Err % (min-max)", "Ideal Err %", "Reject % (min-max)", "Integral (min-max)", "Derivative (min-max)", "P Value (min-max)", "Total Req Time") + separator = "-" * 150 + + puts header + puts separator + + # Add CSV header + @pid_controller_data << [ + "Window", + "Thread Count", + "Error Rate Avg", + "Error Rate Min", + "Error Rate Max", + "Ideal Error Rate", + "Rejection Rate Avg", + "Rejection Rate Min", + "Rejection Rate Max", + "Integral Avg", + "Integral Min", + "Integral Max", + "Derivative Avg", + "Derivative Min", + "Derivative Max", + "P Value Avg", + "P Value Min", + "P Value Max", + "Total Request Time", + ] + + aggregated_snapshots.each_with_index do |snapshot, idx| + error_rate_str = format_metric_range(snapshot[:error_rate_avg], snapshot[:error_rate_min], snapshot[:error_rate_max], is_percent: true) + reject_rate_str = format_metric_range(snapshot[:rejection_rate_avg], snapshot[:rejection_rate_min], snapshot[:rejection_rate_max], is_percent: true) + integral_str = format_metric_range(snapshot[:integral_avg], snapshot[:integral_min], snapshot[:integral_max]) + derivative_str = format_metric_range(snapshot[:derivative_avg], snapshot[:derivative_min], snapshot[:derivative_max]) + p_value_str = format_metric_range(snapshot[:p_value_avg], snapshot[:p_value_min], snapshot[:p_value_max]) + + # Console output + row = format( + "%-8d %-10d %-22s %-15s %-22s %-25s %-25s %-25s %-15s", + idx + 1, + snapshot[:thread_count], + error_rate_str, + "#{(snapshot[:ideal_error_rate] * 100).round(2)}%", + reject_rate_str, + integral_str, + derivative_str, + p_value_str, + "#{(snapshot[:total_request_time] || 0).round(2)}s", + ) + puts row + + # CSV data + @pid_controller_data << [ + idx + 1, + snapshot[:thread_count], + (snapshot[:error_rate_avg] * 100).round(2), + (snapshot[:error_rate_min] * 100).round(2), + (snapshot[:error_rate_max] * 100).round(2), + (snapshot[:ideal_error_rate] * 100).round(2), + (snapshot[:rejection_rate_avg] * 100).round(2), + (snapshot[:rejection_rate_min] * 100).round(2), + (snapshot[:rejection_rate_max] * 100).round(2), + snapshot[:integral_avg].round(4), + snapshot[:integral_min].round(4), + snapshot[:integral_max].round(4), + snapshot[:derivative_avg].round(4), + snapshot[:derivative_min].round(4), + snapshot[:derivative_max].round(4), + snapshot[:p_value_avg].round(4), + snapshot[:p_value_min].round(4), + snapshot[:p_value_max].round(4), + (snapshot[:total_request_time] || 0).round(2), + ] + end + + puts "\n๐Ÿ“Š Key Observations:" + puts " - Timestamps captured: #{aggregated_snapshots.length}" + puts " - Max avg rejection rate: #{(aggregated_snapshots.map { |s| s[:rejection_rate_avg] }.max * 100).round(2)}%" + puts " - Avg integral range: #{aggregated_snapshots.map { |s| s[:integral_avg] }.min.round(4)} to #{aggregated_snapshots.map { |s| s[:integral_avg] }.max.round(4)}" + puts " - Thread counts per timestamp: min #{aggregated_snapshots.map { |s| s[:thread_count] }.min}, max #{aggregated_snapshots.map { |s| s[:thread_count] }.max}" + end + + def format_metric_range(avg, min, max, is_percent: false) + if is_percent + avg_str = "#{(avg * 100).round(2)}%" + min_str = "#{(min * 100).round(2)}%" + max_str = "#{(max * 100).round(2)}%" + else + avg_str = avg.round(4).to_s + min_str = min.round(4).to_s + max_str = max.round(4).to_s + end + "#{avg_str} (#{min_str}-#{max_str})" + end + + def generate_visualization + puts "\nGenerating visualization..." + require "gruff" + + # Aggregate data into buckets for detailed visualization + bucket_size = @graph_bucket_size + num_buckets = (@experiment_duration / bucket_size.to_f).ceil + + bucketed_data = [] + (0...num_buckets).each do |bucket_idx| + bucket_start = @outcomes.keys[0] + (bucket_idx * bucket_size) + bucket_end = bucket_start + bucket_size + bucket_data = @outcomes.select { |time, _| time >= bucket_start && time < bucket_end } + + bucketed_data << { + success: bucket_data.values.sum { |d| d[:success] }, + circuit_open: bucket_data.values.sum { |d| d[:circuit_open] }, + error: bucket_data.values.sum { |d| d[:error] }, + } + end + + # Set x-axis labels + labels = {} + (0...num_buckets).each do |i| + time_sec = i * bucket_size + labels[i] = "#{time_sec}s" if time_sec % @x_axis_label_interval == 0 + end + + # Create two graphs: one for requests per interval that shows success and failure rates, and a separate graph for total request duration. + # They're separate graphs because the difference in scale of the two values prevents the request duration signal from being clearly visible on the same graph. + + # Generate main graph (requests) + graph = Gruff::Line.new + graph.title = @graph_title + graph.x_axis_label = "Time (#{bucket_size}-second intervals)" + graph.y_axis_label = "Requests per Interval" + graph.hide_dots = true + graph.line_width = 1 + graph.y_axis_increment = 100 + graph.marker_font_size = 12 + graph.labels = labels + + graph.data("Success", bucketed_data.map { |d| d[:success] }) + graph.data("Rejected", bucketed_data.map { |d| d[:circuit_open] }) + graph.data("Error", bucketed_data.map { |d| d[:error] }) + + # Add circuit state transition markers (for classic CB) + unless @is_adaptive + add_state_transition_markers(graph, bucketed_data, bucket_size, num_buckets) + end + + main_graph_path = File.join(@main_results_path, @graph_filename) + graph.write(main_graph_path) + puts "Graph saved to #{main_graph_path}" + end + + def add_state_transition_markers(graph, bucketed_data, bucket_size, num_buckets) + return if @state_transitions.empty? + + experiment_start = @outcomes.keys[0] + + @state_transitions.each_with_index do |transition, idx| + # Calculate which bucket this transition falls into + elapsed = transition[:timestamp] - experiment_start + bucket_idx = (elapsed / bucket_size).to_i + + next if bucket_idx < 0 || bucket_idx >= num_buckets + + # Add vertical reference line at this bucket index + color = case transition[:state] + when :open then "red" + when :half_open then "gray" + when :closed then "green" + end + + graph.reference_lines[:"transition_#{idx}"] = { + index: bucket_idx, + color: color, + width: 1, + } + end + end + + def save_csv_outputs + # Save time-based analysis CSV + if @time_analysis_data.any? + csv_path = File.join(@csv_results_path, @time_analysis_csv_filename) + CSV.open(csv_path, "w") do |csv| + @time_analysis_data.each { |row| csv << row } + end + puts "\nTime analysis CSV saved to #{csv_path}" + end + + # Save PID controller CSV (only for adaptive experiments) + if @is_adaptive && @pid_controller_data.any? + csv_path = File.join(@csv_results_path, @pid_controller_csv_filename) + CSV.open(csv_path, "w") do |csv| + @pid_controller_data.each { |row| csv << row } + end + puts "PID controller CSV saved to #{csv_path}" + end + end + end + end +end diff --git a/experiments/experimental_resource.rb b/experiments/experimental_resource.rb index 6add2aa8b..ac9a3218d 100644 --- a/experiments/experimental_resource.rb +++ b/experiments/experimental_resource.rb @@ -7,43 +7,25 @@ $LOAD_PATH.unshift(lib_path) unless $LOAD_PATH.include?(lib_path) require "semian/adapter" +require_relative "mock_service" module Semian module Experiments - # ExperimentalResource is a simulated resource adapter for running experiments - # with configurable endpoints, latencies, and statistical distributions. - # It allows testing degradation scenarios and various latency patterns. + # ExperimentalResource is a Semian adapter for the MockService. + # It provides circuit breaker and bulkhead functionality for the mock service. class ExperimentalResource include Semian::Adapter - attr_reader :endpoints_count, :min_latency, :max_latency, :distribution, :endpoint_latencies, :timeout, :base_error_rate + attr_reader :service - # Initialize the experimental resource + # Initialize the experimental resource adapter # @param name [String] The identifier for this resource - # @param endpoints_count [Integer] Number of available endpoints - # @param min_latency [Float] Minimum latency in seconds - # @param max_latency [Float] Maximum latency in seconds - # @param distribution [Hash] Statistical distribution configuration - # For log-normal: { type: :log_normal, mean: Float, std_dev: Float } - # @param timeout [Float, nil] Maximum time to wait for a request (in seconds). If nil, no timeout is enforced. - # @param error_rate [Float] Baseline error rate (0.0 to 1.0). Probability that any request will fail. + # @param service [MockService] The mock service instance to wrap # @param options [Hash] Additional Semian options - def initialize(name:, endpoints_count:, min_latency:, max_latency:, distribution:, timeout: nil, error_rate: 0.0, **options) + def initialize(name:, service:, **options) @name = name - @endpoints_count = endpoints_count - @min_latency = min_latency - @max_latency = max_latency - @distribution = validate_distribution(distribution) - @timeout = timeout - @base_error_rate = validate_error_rate(error_rate) + @service = service @raw_semian_options = options[:semian] - - # Initialize service degradation state - @latency_degradation = { amount: 0.0, target: 0.0, ramp_start: nil, ramp_duration: 0 } - @error_rate_degradation = { rate: @base_error_rate, target: @base_error_rate, ramp_start: nil, ramp_duration: 0 } - - # Assign fixed latencies to each endpoint - @endpoint_latencies = generate_endpoint_latencies end # Required by Adapter @@ -51,154 +33,17 @@ def semian_identifier @name.to_sym end - # Simulate making a request to a specific endpoint + # Make a request through Semian with circuit breaker protection # @param endpoint_index [Integer] The index of the endpoint to request (0-based) - # @raises [TimeoutError] if the request would exceed the configured timeout - # @raises [RequestError] if the request fails based on error rate + # @raises [CircuitOpenError] if the circuit is open + # @raises [ResourceBusyError] if bulkhead limit is reached + # @raises [MockService::TimeoutError] if the request times out + # @raises [MockService::RequestError] if the request fails + # @raises [MockService::QueueTimeoutError] if the request times out while waiting in queue def request(endpoint_index, &block) - validate_endpoint_index(endpoint_index) - acquire_semian_resource(scope: :request, adapter: :experimental) do - perform_request(endpoint_index, &block) - end - end - - private - - def perform_request(endpoint_index, &block) - # Calculate latency with degradation - base_latency = @endpoint_latencies[endpoint_index] - latency = base_latency + current_latency_degradation - - # Check if request should fail based on current error rate - current_rate = current_error_rate - if should_fail?(current_rate) - # Sleep for partial latency to simulate some processing before error - error_latency = latency * 0.3 # Fail after 30% of expected latency - sleep(error_latency) if error_latency > 0 - - raise RequestError, "Request to endpoint #{endpoint_index} failed " \ - "(error rate: #{(current_rate * 100).round(1)}%)" - end - - # Check if request would timeout - if @timeout && latency > @timeout - # Sleep for the timeout period, then raise exception - sleep(@timeout) if @timeout > 0 - raise TimeoutError, - "Request to endpoint #{endpoint_index} timed out after #{@timeout}s " \ - "(would have taken #{latency.round(3)}s)" - end - - # Simulate the request with calculated latency - sleep(latency) if latency > 0 - - if block_given? - yield(endpoint_index, latency) - else - { endpoint: endpoint_index, latency: latency } - end - end - - public - - # Add fixed latency to all requests with optional ramp-up time - # @param amount [Float] Amount of latency to add (in seconds) - # @param ramp_time [Float] Time to ramp up to the target latency (in seconds), 0 for immediate - def add_latency(amount, ramp_time: 0) - raise ArgumentError, "Latency amount must be non-negative" if amount < 0 - raise ArgumentError, "Ramp time must be non-negative" if ramp_time < 0 - - @latency_degradation[:target] = amount - @latency_degradation[:ramp_start] = Time.now - @latency_degradation[:ramp_duration] = ramp_time - - # If no ramp time, apply immediately - @latency_degradation[:amount] = amount if ramp_time == 0 - end - - # Change the error rate with optional ramp-up time - # @param rate [Float] New error rate (0.0 to 1.0) - # @param ramp_time [Float] Time to ramp up to the target error rate (in seconds), 0 for immediate - def set_error_rate(rate, ramp_time: 0) - validate_error_rate(rate) - raise ArgumentError, "Ramp time must be non-negative" if ramp_time < 0 - - @error_rate_degradation[:target] = rate - @error_rate_degradation[:ramp_start] = Time.now - @error_rate_degradation[:ramp_duration] = ramp_time - - # If no ramp time, apply immediately - @error_rate_degradation[:rate] = rate if ramp_time == 0 - end - - # Reset service to baseline (remove all degradation) - def reset_degradation - @latency_degradation = { amount: 0.0, target: 0.0, ramp_start: nil, ramp_duration: 0 } - @error_rate_degradation = { rate: @base_error_rate, target: @base_error_rate, ramp_start: nil, ramp_duration: 0 } - end - - # Get current latency degradation (accounting for ramp-up) - def current_latency_degradation - return @latency_degradation[:amount] unless @latency_degradation[:ramp_start] && @latency_degradation[:ramp_duration] > 0 - - elapsed = Time.now - @latency_degradation[:ramp_start] - if elapsed >= @latency_degradation[:ramp_duration] - # Ramp complete - @latency_degradation[:amount] = @latency_degradation[:target] - @latency_degradation[:ramp_start] = nil - @latency_degradation[:target] - else - # Still ramping - progress = elapsed / @latency_degradation[:ramp_duration] - current = @latency_degradation[:amount] - target = @latency_degradation[:target] - current + (target - current) * progress - end - end - - # Get current error rate (accounting for ramp-up) - def current_error_rate - return @error_rate_degradation[:rate] unless @error_rate_degradation[:ramp_start] && @error_rate_degradation[:ramp_duration] > 0 - - elapsed = Time.now - @error_rate_degradation[:ramp_start] - if elapsed >= @error_rate_degradation[:ramp_duration] - # Ramp complete - @error_rate_degradation[:rate] = @error_rate_degradation[:target] - @error_rate_degradation[:ramp_start] = nil - @error_rate_degradation[:target] - else - # Still ramping - progress = elapsed / @error_rate_degradation[:ramp_duration] - current = @error_rate_degradation[:rate] - target = @error_rate_degradation[:target] - current + (target - current) * progress - end - end - - # Get the base latency for an endpoint (without degradation effects) - def base_latency(endpoint_index) - validate_endpoint_index(endpoint_index) - @endpoint_latencies[endpoint_index] - end - - # Check if a specific endpoint would timeout with current settings - def would_timeout?(endpoint_index) - return false unless @timeout - - validate_endpoint_index(endpoint_index) - get_effective_latency(endpoint_index) > @timeout - end - - # Get all endpoints that would timeout with current settings - def timeout_endpoints - return [] unless @timeout - - endpoints = [] - @endpoint_latencies.each_with_index do |_, idx| - endpoints << idx if would_timeout?(idx) + @service.request(endpoint_index, &block) end - endpoints end private @@ -206,93 +51,7 @@ def timeout_endpoints attr_reader :raw_semian_options def resource_exceptions - [RequestError, TimeoutError] # Exceptions that should trigger circuit breaker - end - - def validate_distribution(dist) - unless dist.is_a?(Hash) && dist[:type] - raise ArgumentError, "Distribution must be a Hash with :type key" - end - - case dist[:type] - when :log_normal - validate_log_normal_distribution(dist) - else - raise ArgumentError, "Unsupported distribution type: #{dist[:type]}. Only :log_normal is currently supported." - end - - dist - end - - def validate_error_rate(rate) - unless rate.is_a?(Numeric) && rate >= 0.0 && rate <= 1.0 - raise ArgumentError, "Error rate must be a number between 0.0 and 1.0, got #{rate}" - end - - rate - end - - def validate_log_normal_distribution(dist) - unless dist[:mean] && dist[:std_dev] - raise ArgumentError, "Log-normal distribution requires :mean and :std_dev parameters" - end - - unless dist[:mean].is_a?(Numeric) && dist[:mean] > 0 - raise ArgumentError, "Log-normal mean must be a positive number" - end - - unless dist[:std_dev].is_a?(Numeric) && dist[:std_dev] >= 0 - raise ArgumentError, "Log-normal std_dev must be a non-negative number" - end - end - - def validate_endpoint_index(endpoint_index) - unless endpoint_index.is_a?(Integer) && endpoint_index >= 0 && endpoint_index < @endpoints_count - raise ArgumentError, "Invalid endpoint index: #{endpoint_index}. Must be between 0 and #{@endpoints_count - 1}" - end - end - - def generate_endpoint_latencies - Array.new(@endpoints_count) do - latency = sample_from_distribution - # Clamp to min/max bounds - latency.clamp(@min_latency, @max_latency) - end - end - - def should_fail?(error_rate) - return false if error_rate <= 0 - - rand < error_rate - end - - def sample_from_distribution - case @distribution[:type] - when :log_normal - sample_log_normal(@distribution[:mean], @distribution[:std_dev]) - else - # Fallback to mean value - @distribution[:mean] || (@min_latency + @max_latency) / 2.0 - end - end - - def sample_log_normal(mean, std_dev) - # Convert mean and std_dev of the log-normal to the underlying normal distribution - # Using method of moments conversion - variance = std_dev**2 - mean_squared = mean**2 - - # Calculate parameters for underlying normal distribution - mu = Math.log(mean_squared / Math.sqrt(variance + mean_squared)) - sigma = Math.sqrt(Math.log(1 + variance / mean_squared)) - - # Generate log-normal sample using Box-Muller transform - u1 = rand - u2 = rand - z0 = Math.sqrt(-2.0 * Math.log(u1)) * Math.cos(2.0 * Math::PI * u2) - - # Transform to log-normal - Math.exp(mu + sigma * z0) + [MockService::RequestError, MockService::TimeoutError, MockService::QueueTimeoutError] # Exceptions that should trigger circuit breaker end # Error classes specific to this adapter @@ -310,17 +69,10 @@ def initialize(semian_identifier, *args) end end - class TimeoutError < StandardError - def marks_semian_circuits? - true # This error should trigger circuit breaker - end - end - - class RequestError < StandardError - def marks_semian_circuits? - true # This error should trigger circuit breaker - end - end + # Re-export the service errors for backward compatibility + RequestError = MockService::RequestError + TimeoutError = MockService::TimeoutError + QueueTimeoutError = MockService::QueueTimeoutError end end end diff --git a/experiments/experiments/experiment_error_spike_100.rb b/experiments/experiments/experiment_error_spike_100.rb new file mode 100644 index 000000000..d1f4288aa --- /dev/null +++ b/experiments/experiments/experiment_error_spike_100.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +$LOAD_PATH.unshift(File.expand_path("../../lib", __dir__)) + +require "semian" +require_relative "../mock_service" +require_relative "../experimental_resource" +require_relative "../experiment_helpers" + +# Sudden error spike experiment: 1% -> 100% -> 1% +runner = Semian::Experiments::CircuitBreakerExperimentRunner.new( + experiment_name: "Sudden Error Spike Experiment (Classic) - 100% for 20 seconds", + resource_name: "protected_service_sudden_error_spike_100", + degradation_phases: [Semian::Experiments::DegradationPhase.new(healthy: true)] * 3 + + [Semian::Experiments::DegradationPhase.new(error_rate: 1.00)] + + [Semian::Experiments::DegradationPhase.new(healthy: true)] * 3, + phase_duration: 20, + semian_config: { + success_threshold: 2, + error_threshold: 12, + error_threshold_timeout: 20, + error_timeout: 15, + bulkhead: false, + }, + graph_title: "Sudden Error Spike Experiment (Classic) - 100% for 20 seconds", + graph_filename: "sudden_error_spike_100.png", + x_axis_label_interval: 60, +) + +runner.run diff --git a/experiments/experiments/experiment_error_spike_100_adaptive.rb b/experiments/experiments/experiment_error_spike_100_adaptive.rb new file mode 100644 index 000000000..c137698c2 --- /dev/null +++ b/experiments/experiments/experiment_error_spike_100_adaptive.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +$LOAD_PATH.unshift(File.expand_path("../../lib", __dir__)) + +require "semian" +require_relative "../mock_service" +require_relative "../experimental_resource" +require_relative "../experiment_helpers" + +# Sudden error spike experiment: 1% -> 100% -> 1% +runner = Semian::Experiments::CircuitBreakerExperimentRunner.new( + experiment_name: "Sudden Error Spike Experiment (Adaptive) - 100% for 20 seconds", + resource_name: "protected_service_sudden_error_spike_100_adaptive", + degradation_phases: [Semian::Experiments::DegradationPhase.new(healthy: true)] * 3 + + [Semian::Experiments::DegradationPhase.new(error_rate: 1.00)] + + [Semian::Experiments::DegradationPhase.new(healthy: true)] * 3, + phase_duration: 20, + semian_config: { + adaptive_circuit_breaker: true, + bulkhead: false, + }, + graph_title: "Sudden Error Spike Experiment (Adaptive) - 100% for 20 seconds", + graph_filename: "sudden_error_spike_100_adaptive.png", + x_axis_label_interval: 60, +) + +runner.run diff --git a/experiments/experiments/experiment_error_spike_20.rb b/experiments/experiments/experiment_error_spike_20.rb new file mode 100644 index 000000000..d5f8c27dc --- /dev/null +++ b/experiments/experiments/experiment_error_spike_20.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +$LOAD_PATH.unshift(File.expand_path("../../lib", __dir__)) + +require "semian" +require_relative "../mock_service" +require_relative "../experimental_resource" +require_relative "../experiment_helpers" + +# Sudden error spike experiment: 1% -> 20% -> 1% +runner = Semian::Experiments::CircuitBreakerExperimentRunner.new( + experiment_name: "Sudden Error Spike Experiment (Classic) - 20% for 20 seconds", + resource_name: "protected_service_sudden_error_spike_20", + degradation_phases: [Semian::Experiments::DegradationPhase.new(healthy: true)] * 3 + + [Semian::Experiments::DegradationPhase.new(error_rate: 0.20)] + + [Semian::Experiments::DegradationPhase.new(healthy: true)] * 3, + phase_duration: 20, + semian_config: { + success_threshold: 2, + error_threshold: 12, + error_threshold_timeout: 20, + error_timeout: 15, + bulkhead: false, + }, + graph_title: "Sudden Error Spike Experiment (Classic) - 20% for 20 seconds", + graph_filename: "sudden_error_spike_20.png", + x_axis_label_interval: 60, +) + +runner.run diff --git a/experiments/experiments/experiment_error_spike_20_adaptive.rb b/experiments/experiments/experiment_error_spike_20_adaptive.rb new file mode 100644 index 000000000..51245823c --- /dev/null +++ b/experiments/experiments/experiment_error_spike_20_adaptive.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +$LOAD_PATH.unshift(File.expand_path("../../lib", __dir__)) + +require "semian" +require_relative "../mock_service" +require_relative "../experimental_resource" +require_relative "../experiment_helpers" + +# Sudden error spike experiment: 1% -> 20% -> 1% +runner = Semian::Experiments::CircuitBreakerExperimentRunner.new( + experiment_name: "Sudden Error Spike Experiment (Adaptive) - 20% for 20 seconds", + resource_name: "protected_service_sudden_error_spike_20_seconds_adaptive", + degradation_phases: [Semian::Experiments::DegradationPhase.new(healthy: true)] * 3 + + [Semian::Experiments::DegradationPhase.new(error_rate: 0.20)] + + [Semian::Experiments::DegradationPhase.new(healthy: true)] * 3, + phase_duration: 20, + semian_config: { + adaptive_circuit_breaker: true, + bulkhead: false, + }, + graph_title: "Sudden Error Spike Experiment (Adaptive) - 20% for 20 seconds", + graph_filename: "sudden_error_spike_20_adaptive.png", + x_axis_label_interval: 60, +) + +runner.run diff --git a/experiments/experiments/experiment_gradual_increase.rb b/experiments/experiments/experiment_gradual_increase.rb new file mode 100644 index 000000000..69ba9d304 --- /dev/null +++ b/experiments/experiments/experiment_gradual_increase.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +$LOAD_PATH.unshift(File.expand_path("../../lib", __dir__)) + +require "semian" +require_relative "../mock_service" +require_relative "../experimental_resource" +require_relative "../experiment_helpers" + +# Gradual error increase experiment: 1% -> 1.5% -> 2% -> ... -> 5% -> 1% +runner = Semian::Experiments::CircuitBreakerExperimentRunner.new( + experiment_name: "Gradual Error Increase Experiment", + resource_name: "protected_service_gradual", + degradation_phases: [ + Semian::Experiments::DegradationPhase.new(healthy: true), + Semian::Experiments::DegradationPhase.new(error_rate: 0.015), + Semian::Experiments::DegradationPhase.new(error_rate: 0.02), + Semian::Experiments::DegradationPhase.new(error_rate: 0.025), + Semian::Experiments::DegradationPhase.new(error_rate: 0.03), + Semian::Experiments::DegradationPhase.new(error_rate: 0.035), + Semian::Experiments::DegradationPhase.new(error_rate: 0.04), + Semian::Experiments::DegradationPhase.new(error_rate: 0.045), + Semian::Experiments::DegradationPhase.new(error_rate: 0.05), + Semian::Experiments::DegradationPhase.new(healthy: true), + ], + phase_duration: 60, + semian_config: { + success_threshold: 2, + error_threshold: 12, + error_threshold_timeout: 20, + error_timeout: 15, + bulkhead: false, + }, + graph_title: "Classic Circuit Breaker: Gradual Error Increase (1% to 5%)", + graph_filename: "gradual_increase.png", + x_axis_label_interval: 60, +) + +runner.run diff --git a/experiments/experiments/experiment_gradual_increase_adaptive.rb b/experiments/experiments/experiment_gradual_increase_adaptive.rb new file mode 100644 index 000000000..d47c622e8 --- /dev/null +++ b/experiments/experiments/experiment_gradual_increase_adaptive.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +$LOAD_PATH.unshift(File.expand_path("../../lib", __dir__)) + +require "semian" +require_relative "../mock_service" +require_relative "../experimental_resource" +require_relative "../experiment_helpers" + +# Gradual error increase experiment: 1% -> 1.5% -> 2% -> ... -> 5% -> 1% +runner = Semian::Experiments::CircuitBreakerExperimentRunner.new( + experiment_name: "Gradual Error Increase Experiment (Adaptive)", + resource_name: "protected_service_gradual_adaptive", + degradation_phases: [ + Semian::Experiments::DegradationPhase.new(healthy: true), + Semian::Experiments::DegradationPhase.new(error_rate: 0.015), + Semian::Experiments::DegradationPhase.new(error_rate: 0.02), + Semian::Experiments::DegradationPhase.new(error_rate: 0.025), + Semian::Experiments::DegradationPhase.new(error_rate: 0.03), + Semian::Experiments::DegradationPhase.new(error_rate: 0.035), + Semian::Experiments::DegradationPhase.new(error_rate: 0.04), + Semian::Experiments::DegradationPhase.new(error_rate: 0.045), + Semian::Experiments::DegradationPhase.new(error_rate: 0.05), + Semian::Experiments::DegradationPhase.new(healthy: true), + ], + phase_duration: 60, + semian_config: { + adaptive_circuit_breaker: true, + bulkhead: false, + }, + graph_title: "Adaptive Circuit Breaker: Gradual Error Increase (1% to 5%)", + graph_filename: "gradual_increase_adaptive.png", + x_axis_label_interval: 60, +) + +runner.run diff --git a/experiments/experiments/experiment_lower_bound_windup_adaptive.rb b/experiments/experiments/experiment_lower_bound_windup_adaptive.rb new file mode 100644 index 000000000..6b44cc186 --- /dev/null +++ b/experiments/experiments/experiment_lower_bound_windup_adaptive.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +$LOAD_PATH.unshift(File.expand_path("../../lib", __dir__)) + +require "semian" +require_relative "../mock_service" +require_relative "../experimental_resource" +require_relative "../experiment_helpers" + +# Lower bound windup experiment: demonstrates the response to error spikes +# when integral has accumulated negative values during extended low-error periods. +runner = Semian::Experiments::CircuitBreakerExperimentRunner.new( + experiment_name: "Lower Bound Windup Experiment", + resource_name: "protected_service_windup_demo", + degradation_phases: [Semian::Experiments::DegradationPhase.new(error_rate: 0.01)] + + [Semian::Experiments::DegradationPhase.new(error_rate: 0.60)] * 6 + + [Semian::Experiments::DegradationPhase.new(error_rate: 0.005)] * 120 + + [Semian::Experiments::DegradationPhase.new(error_rate: 0.60)] * 6 + + [Semian::Experiments::DegradationPhase.new(error_rate: 0.01)] * 6, + phase_duration: 30, + semian_config: { + adaptive_circuit_breaker: true, + bulkhead: false, + }, + graph_title: "Adaptive Circuit Breaker: Lower Bound Integral Windup", + graph_filename: "lower_bound_windup.png", + x_axis_label_interval: 60, +) + +runner.run diff --git a/experiments/experiments/experiment_near_target_error_rate.rb b/experiments/experiments/experiment_near_target_error_rate.rb new file mode 100644 index 000000000..763eef8d1 --- /dev/null +++ b/experiments/experiments/experiment_near_target_error_rate.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +$LOAD_PATH.unshift(File.expand_path("../../lib", __dir__)) + +require "semian" +require_relative "../mock_service" +require_relative "../experimental_resource" +require_relative "../experiment_helpers" + +runner = Semian::Experiments::CircuitBreakerExperimentRunner.new( + experiment_name: "Near Target Error Rate Experiment (Classic)", + resource_name: "protected_service_near_target", + degradation_phases: [Semian::Experiments::DegradationPhase.new(healthy: true)] * 1 + + [Semian::Experiments::DegradationPhase.new(error_rate: 0.012)] * 4 + + [Semian::Experiments::DegradationPhase.new(healthy: true)] * 1, + phase_duration: 30, + semian_config: { + success_threshold: 2, + error_threshold: 12, + error_threshold_timeout: 20, + error_timeout: 15, + bulkhead: false, + }, + graph_title: "Classic Circuit Breaker: Near Target Error Rate (1.2%)", + graph_filename: "near_target_error_rate.png", + x_axis_label_interval: 30, +) + +runner.run diff --git a/experiments/experiments/experiment_near_target_error_rate_adaptive.rb b/experiments/experiments/experiment_near_target_error_rate_adaptive.rb new file mode 100644 index 000000000..ad22a10d5 --- /dev/null +++ b/experiments/experiments/experiment_near_target_error_rate_adaptive.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +$LOAD_PATH.unshift(File.expand_path("../../lib", __dir__)) + +require "semian" +require_relative "../mock_service" +require_relative "../experimental_resource" +require_relative "../experiment_helpers" + +runner = Semian::Experiments::CircuitBreakerExperimentRunner.new( + experiment_name: "Near Target Error Rate Experiment (Adaptive)", + resource_name: "protected_service_near_target_adaptive", + degradation_phases: [Semian::Experiments::DegradationPhase.new(healthy: true)] * 1 + + [Semian::Experiments::DegradationPhase.new(error_rate: 0.012)] * 4 + + [Semian::Experiments::DegradationPhase.new(healthy: true)] * 1, + phase_duration: 30, + semian_config: { + adaptive_circuit_breaker: true, + bulkhead: false, + }, + graph_title: "Adaptive Circuit Breaker: Near Target Error Rate (1.2%)", + graph_filename: "near_target_error_rate_adaptive.png", + x_axis_label_interval: 30, + graph_bucket_size: 1, +) + +runner.run diff --git a/experiments/experiments/experiment_one_of_many_services_degradation.rb b/experiments/experiments/experiment_one_of_many_services_degradation.rb new file mode 100644 index 000000000..45a78afd6 --- /dev/null +++ b/experiments/experiments/experiment_one_of_many_services_degradation.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +$LOAD_PATH.unshift(File.expand_path("../../lib", __dir__)) + +require "semian" +require_relative "../mock_service" +require_relative "../experimental_resource" +require_relative "../experiment_helpers" + +runner = Semian::Experiments::CircuitBreakerExperimentRunner.new( + experiment_name: "One of Many Services Degradation Experiment", + resource_name: "protected_service", + degradation_phases: [Semian::Experiments::DegradationPhase.new(healthy: true)] * 1 + + [Semian::Experiments::DegradationPhase.new(latency: 9.95)] * 10 + # Most requests to the target service will timeout + [Semian::Experiments::DegradationPhase.new(healthy: true)] * 3, + phase_duration: 30, + service_count: 10, + semian_config: { + success_threshold: 2, + error_threshold: 2, + error_threshold_timeout: 20, + error_timeout: 15, + bulkhead: false, + }, + graph_title: "Classic Circuit Breaker: One of Many Services Latency Degradation", + graph_filename: "one_of_many_services_latency_degradation.png", + x_axis_label_interval: 30, +) + +runner.run diff --git a/experiments/experiments/experiment_one_of_many_services_degradation_adaptive.rb b/experiments/experiments/experiment_one_of_many_services_degradation_adaptive.rb new file mode 100644 index 000000000..7c233b6c9 --- /dev/null +++ b/experiments/experiments/experiment_one_of_many_services_degradation_adaptive.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +$LOAD_PATH.unshift(File.expand_path("../../lib", __dir__)) + +require "semian" +require_relative "../mock_service" +require_relative "../experimental_resource" +require_relative "../experiment_helpers" + +runner = Semian::Experiments::CircuitBreakerExperimentRunner.new( + experiment_name: "One of Many Services Degradation Experiment", + resource_name: "protected_service_adaptive", + degradation_phases: [Semian::Experiments::DegradationPhase.new(healthy: true)] * 1 + + [Semian::Experiments::DegradationPhase.new(latency: 9.95)] * 10 + # Most requests to the target service will timeout + [Semian::Experiments::DegradationPhase.new(healthy: true)] * 3, + phase_duration: 30, + service_count: 10, + semian_config: { + adaptive_circuit_breaker: true, + bulkhead: false, + }, + graph_title: "Adaptive Circuit Breaker: One of Many Services Latency Degradation", + graph_filename: "one_of_many_services_latency_degradation_adaptive.png", + x_axis_label_interval: 30, +) + +runner.run diff --git a/experiments/experiments/experiment_oscillating_errors.rb b/experiments/experiments/experiment_oscillating_errors.rb new file mode 100644 index 000000000..491631d9e --- /dev/null +++ b/experiments/experiments/experiment_oscillating_errors.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +$LOAD_PATH.unshift(File.expand_path("../../lib", __dir__)) + +require "semian" +require_relative "../mock_service" +require_relative "../experimental_resource" +require_relative "../experiment_helpers" + +# Oscillating errors experiment: 2% <-> 6% errors every 10 seconds +runner = Semian::Experiments::CircuitBreakerExperimentRunner.new( + experiment_name: "Oscillating Errors Experiment", + resource_name: "protected_service_oscillating", + degradation_phases: [Semian::Experiments::DegradationPhase.new(healthy: true)] * 2 + + [Semian::Experiments::DegradationPhase.new(error_rate: 0.02), Semian::Experiments::DegradationPhase.new(error_rate: 0.06)] * 9 + + [Semian::Experiments::DegradationPhase.new(healthy: true)] * 2, + phase_duration: 10, + semian_config: { + success_threshold: 2, + error_threshold: 12, + error_threshold_timeout: 20, + error_timeout: 15, + bulkhead: false, + }, + graph_title: "Classic Circuit Breaker: Oscillating Errors (2% <-> 6%)", + graph_filename: "oscillating_errors.png", + x_axis_label_interval: 60, +) + +runner.run diff --git a/experiments/experiments/experiment_oscillating_errors_adaptive.rb b/experiments/experiments/experiment_oscillating_errors_adaptive.rb new file mode 100644 index 000000000..81e6721a8 --- /dev/null +++ b/experiments/experiments/experiment_oscillating_errors_adaptive.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +$LOAD_PATH.unshift(File.expand_path("../../lib", __dir__)) + +require "semian" +require_relative "../mock_service" +require_relative "../experimental_resource" +require_relative "../experiment_helpers" + +# Oscillating errors experiment: 2% <-> 6% errors every 10 seconds +runner = Semian::Experiments::CircuitBreakerExperimentRunner.new( + experiment_name: "Oscillating Errors Experiment", + resource_name: "protected_service_oscillating_adaptive", + degradation_phases: [Semian::Experiments::DegradationPhase.new(healthy: true)] * 2 + + [Semian::Experiments::DegradationPhase.new(error_rate: 0.02), Semian::Experiments::DegradationPhase.new(error_rate: 0.06)] * 9 + + [Semian::Experiments::DegradationPhase.new(healthy: true)] * 2, + phase_duration: 10, + semian_config: { + adaptive_circuit_breaker: true, + bulkhead: false, + }, + graph_title: "Adaptive Circuit Breaker: Oscillating Errors (2% <-> 6%)", + graph_filename: "oscillating_errors_adaptive.png", + x_axis_label_interval: 60, +) + +runner.run diff --git a/experiments/experiments/experiment_slow_query.rb b/experiments/experiments/experiment_slow_query.rb new file mode 100644 index 000000000..20a8f27b7 --- /dev/null +++ b/experiments/experiments/experiment_slow_query.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +$LOAD_PATH.unshift(File.expand_path("../lib", __dir__)) + +require "semian" +require_relative "../mock_service" +require_relative "../experimental_resource" +require_relative "../experiment_helpers" + +runner = Semian::Experiments::CircuitBreakerExperimentRunner.new( + experiment_name: "Slow Query Experiment", + resource_name: "protected_service", + degradation_phases: [Semian::Experiments::DegradationPhase.new(healthy: true)] * 1 + + [Semian::Experiments::DegradationPhase.new(specific_endpoint_latency: 9.5)] * 10 + # This should lead the service to get overwhelmed and start rejecting requests + [Semian::Experiments::DegradationPhase.new(healthy: true)] * 3, + phase_duration: 30, + service_count: 10, + with_max_threads: true, + semian_config: { + success_threshold: 2, + error_threshold: 3, + error_threshold_timeout: 20, + error_timeout: 15, + bulkhead: false, + }, + graph_title: "Classic Circuit Breaker: Slow Query Experiment", + graph_filename: "slow_query.png", + x_axis_label_interval: 30, +) + +runner.run diff --git a/experiments/experiments/experiment_slow_query_adaptive.rb b/experiments/experiments/experiment_slow_query_adaptive.rb new file mode 100644 index 000000000..1adf9c2c4 --- /dev/null +++ b/experiments/experiments/experiment_slow_query_adaptive.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true + +$LOAD_PATH.unshift(File.expand_path("../lib", __dir__)) + +require "semian" +require_relative "../mock_service" +require_relative "../experimental_resource" +require_relative "../experiment_helpers" + +runner = Semian::Experiments::CircuitBreakerExperimentRunner.new( + experiment_name: "Slow Query Experiment (Adaptive)", + resource_name: "protected_service", + degradation_phases: [Semian::Experiments::DegradationPhase.new(healthy: true)] * 1 + + [Semian::Experiments::DegradationPhase.new(specific_endpoint_latency: 9.5)] * 10 + # This should lead the service to get overwhelmed and start rejecting requests + [Semian::Experiments::DegradationPhase.new(healthy: true)] * 3, + phase_duration: 30, + service_count: 10, + with_max_threads: true, + semian_config: { + adaptive_circuit_breaker: true, + bulkhead: false, + }, + graph_title: "Adaptive Circuit Breaker: Slow Query Experiment", + graph_filename: "slow_query_adaptive.png", + x_axis_label_interval: 30, +) + +runner.run diff --git a/experiments/experiments/experiment_sudden_error_spikes.rb b/experiments/experiments/experiment_sudden_error_spikes.rb new file mode 100644 index 000000000..fe75f08db --- /dev/null +++ b/experiments/experiments/experiment_sudden_error_spikes.rb @@ -0,0 +1,41 @@ +# frozen_string_literal: true + +$LOAD_PATH.unshift(File.expand_path("../../lib", __dir__)) + +require "semian" +require_relative "../mock_service" +require_relative "../experimental_resource" +require_relative "../experiment_helpers" + +# Error spikes experiment: +# Phase 1: 1% for 60 seconds +# Phase 2: 20% for 20 seconds +# Phase 3: 1% for 60 seconds +# Phase 4: 60% for 20 seconds +# Phase 5: 1% for 60 seconds +# Phase 6: 100% for 20 seconds +# Phase 7: 1% for 60 seconds +runner = Semian::Experiments::CircuitBreakerExperimentRunner.new( + experiment_name: "Sudden Error Spikes Experiment (Classic)", + resource_name: "protected_service_sudden_error_spikes", + degradation_phases: [Semian::Experiments::DegradationPhase.new(healthy: true)] * 3 + + [Semian::Experiments::DegradationPhase.new(error_rate: 0.20)] + + [Semian::Experiments::DegradationPhase.new(healthy: true)] * 3 + + [Semian::Experiments::DegradationPhase.new(error_rate: 0.60)] + + [Semian::Experiments::DegradationPhase.new(healthy: true)] * 3 + + [Semian::Experiments::DegradationPhase.new(error_rate: 1.00)] + + [Semian::Experiments::DegradationPhase.new(healthy: true)] * 3, + phase_duration: 20, + semian_config: { + success_threshold: 2, + error_threshold: 12, + error_threshold_timeout: 20, + error_timeout: 15, + bulkhead: false, + }, + graph_title: "Classic: Sudden Error Spikes, 20 second spikes (20%, 60%, 100%)", + graph_filename: "sudden_error_spikes.png", + x_axis_label_interval: 60, +) + +runner.run diff --git a/experiments/experiments/experiment_sudden_error_spikes_adaptive.rb b/experiments/experiments/experiment_sudden_error_spikes_adaptive.rb new file mode 100644 index 000000000..b26efe86a --- /dev/null +++ b/experiments/experiments/experiment_sudden_error_spikes_adaptive.rb @@ -0,0 +1,38 @@ +# frozen_string_literal: true + +$LOAD_PATH.unshift(File.expand_path("../../lib", __dir__)) + +require "semian" +require_relative "../mock_service" +require_relative "../experimental_resource" +require_relative "../experiment_helpers" + +# Error spikes experiment: +# Phase 1: 1% for 60 seconds +# Phase 2: 20% for 20 seconds +# Phase 3: 1% for 60 seconds +# Phase 4: 60% for 20 seconds +# Phase 5: 1% for 60 seconds +# Phase 6: 100% for 20 seconds +# Phase 7: 1% for 60 seconds +runner = Semian::Experiments::CircuitBreakerExperimentRunner.new( + experiment_name: "Sudden Error Spikes Experiment - adaptive", + resource_name: "protected_service_sudden_error_spikes_adaptive", + degradation_phases: [Semian::Experiments::DegradationPhase.new(healthy: true)] * 3 + + [Semian::Experiments::DegradationPhase.new(error_rate: 0.20)] + + [Semian::Experiments::DegradationPhase.new(healthy: true)] * 3 + + [Semian::Experiments::DegradationPhase.new(error_rate: 0.60)] + + [Semian::Experiments::DegradationPhase.new(healthy: true)] * 3 + + [Semian::Experiments::DegradationPhase.new(error_rate: 1.00)] + + [Semian::Experiments::DegradationPhase.new(healthy: true)] * 3, + phase_duration: 20, + semian_config: { + adaptive_circuit_breaker: true, + bulkhead: false, + }, + graph_title: "Adaptive: Sudden Error Spikes, 20 second spikes (20%, 60%, 100%)", + graph_filename: "sudden_error_spikes_adaptive.png", + x_axis_label_interval: 60, +) + +runner.run diff --git a/experiments/experiments/experiment_sustained_load.rb b/experiments/experiments/experiment_sustained_load.rb new file mode 100644 index 000000000..5e296378e --- /dev/null +++ b/experiments/experiments/experiment_sustained_load.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +$LOAD_PATH.unshift(File.expand_path("../../lib", __dir__)) + +require "semian" +require_relative "../mock_service" +require_relative "../experimental_resource" +require_relative "../experiment_helpers" + +# Sustained load experiment: 120s baseline (1%) -> 300s sustained (20%) -> 120s recovery (1%) +runner = Semian::Experiments::CircuitBreakerExperimentRunner.new( + experiment_name: "Sustained Load Experiment (Classic)", + resource_name: "protected_service_sustained_load", + degradation_phases: [Semian::Experiments::DegradationPhase.new(healthy: true)] * 4 + + [Semian::Experiments::DegradationPhase.new(error_rate: 0.20)] * 10 + + [Semian::Experiments::DegradationPhase.new(healthy: true)] * 4, + phase_duration: 30, + semian_config: { + success_threshold: 2, + error_threshold: 12, + error_threshold_timeout: 20, + error_timeout: 15, + bulkhead: false, + }, + graph_title: "Classic Circuit Breaker: Sustained 20% Error Load", + graph_filename: "sustained_load.png", + x_axis_label_interval: 30, +) + +runner.run diff --git a/experiments/experiments/experiment_sustained_load_adaptive.rb b/experiments/experiments/experiment_sustained_load_adaptive.rb new file mode 100644 index 000000000..bcb1dcaa3 --- /dev/null +++ b/experiments/experiments/experiment_sustained_load_adaptive.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +$LOAD_PATH.unshift(File.expand_path("../../lib", __dir__)) + +require "semian" +require_relative "../mock_service" +require_relative "../experimental_resource" +require_relative "../experiment_helpers" + +# Sustained load experiment: 120s baseline (1%) -> 300s sustained (20%) -> 120s recovery (1%) +runner = Semian::Experiments::CircuitBreakerExperimentRunner.new( + experiment_name: "Sustained Load Experiment (Adaptive)", + resource_name: "protected_service_sustained_load_adaptive", + degradation_phases: [Semian::Experiments::DegradationPhase.new(healthy: true)] * 4 + + [Semian::Experiments::DegradationPhase.new(error_rate: 0.20)] * 10 + + [Semian::Experiments::DegradationPhase.new(healthy: true)] * 4, + phase_duration: 30, + semian_config: { + adaptive_circuit_breaker: true, + bulkhead: false, + }, + graph_title: "Adaptive Circuit Breaker: Sustained 20% Error Load", + graph_filename: "sustained_load_adaptive.png", + x_axis_label_interval: 30, +) + +runner.run diff --git a/experiments/mock_service.rb b/experiments/mock_service.rb new file mode 100644 index 000000000..8ba21d5d7 --- /dev/null +++ b/experiments/mock_service.rb @@ -0,0 +1,349 @@ +# frozen_string_literal: true + +module Semian + module Experiments + # MockService simulates a service with configurable endpoints, latencies, and error rates. + # This class handles the service behavior independently from Semian integration. + # It's designed to be thread-safe and shared across multiple client instances. + class MockService + attr_reader :endpoints_count, :min_latency, :max_latency, :distribution, :endpoint_latencies, :timeout, :base_error_rate + + # Initialize the mock service + # @param endpoints_count [Integer] Number of available endpoints + # @param min_latency [Float] Minimum latency in seconds + # @param max_latency [Float] Maximum latency in seconds + # @param distribution [Hash] Statistical distribution configuration + # For log-normal: { type: :log_normal, mean: Float, std_dev: Float } + # @param timeout [Float, nil] Maximum time to wait for a request (in seconds). If nil, no timeout is enforced. + # @param error_rate [Float] Baseline error rate (0.0 to 1.0). Probability that any request will fail. + # @param deterministic_errors [Boolean] If true, use deterministic error injection for predictable testing + # @param max_threads [Integer] Maximum number of requests that can be processed concurrently. 0 for unlimited. + # @param queue_timeout [Float] Maximum time to wait for a request to be processed if all threads are busy. Only used if max_threads is not 0. 0 means we drop requests immediately. + def initialize(endpoints_count:, min_latency:, max_latency:, distribution:, timeout: nil, error_rate: 0.0, deterministic_errors: false, max_threads: 0, queue_timeout: 0) + @endpoints_count = endpoints_count + @min_latency = min_latency + @max_latency = max_latency + @distribution = validate_distribution(distribution) + @timeout = timeout + @base_error_rate = validate_error_rate(error_rate) + @deterministic_errors = deterministic_errors + + @thread_semaphore = max_threads > 0 ? Concurrent::Semaphore.new(max_threads) : nil + @queue_timeout = queue_timeout + + # Initialize service degradation state + @latency_degradation = { amount: 0.0, target: 0.0, ramp_start: nil, ramp_duration: 0 } + @error_rate_degradation = { rate: @base_error_rate, target: @base_error_rate, ramp_start: nil, ramp_duration: 0 } + + # Phase-synchronized tracking for precise error rates + @current_phase_requests = 0 + @current_phase_failures = 0 + + # Assign fixed latencies to each endpoint + @endpoint_latencies = generate_endpoint_latencies + + @specific_endpoint_degradations = {} + + # Mutex for thread-safe operations on shared state + @mutex = Mutex.new + end + + # Simulate making a request to a specific endpoint + # @param endpoint_index [Integer] The index of the endpoint to request (0-based) + # @raises [TimeoutError] if the request would exceed the configured timeout + # @raises [RequestError] if the request fails based on error rate + def request(endpoint_index, &block) + if @thread_semaphore.nil? || @thread_semaphore.try_acquire(1, @queue_timeout) + begin + validate_endpoint_index(endpoint_index) + + # Calculate latency with degradation + base_latency = @endpoint_latencies[endpoint_index] + latency = base_latency + current_latency_degradation(endpoint_index) + + # Check if request should fail based on current error rate + current_rate = current_error_rate + if should_fail?(current_rate) + # Sleep for partial latency to simulate some processing before error + error_latency = latency * 0.3 # Fail after 30% of expected latency + sleep(error_latency) if error_latency > 0 + + raise RequestError, "Request to endpoint #{endpoint_index} failed " \ + "(error rate: #{(current_rate * 100).round(1)}%)" + end + + # Check if request would timeout + if @timeout && latency > @timeout + # Sleep for the timeout period, then raise exception + sleep(@timeout) if @timeout > 0 + raise TimeoutError, + "Request to endpoint #{endpoint_index} timed out after #{@timeout}s " \ + "(would have taken #{latency.round(3)}s)" + end + + # Simulate the request with calculated latency + sleep(latency) if latency > 0 + + if block_given? + yield(endpoint_index, latency) + else + { endpoint: endpoint_index, latency: latency } + end + ensure + @thread_semaphore&.release(1) + end + else + raise QueueTimeoutError, "Request timed out while waiting in queue" + end + end + + # Add fixed latency to all requests with optional ramp-up time + # @param amount [Float] Amount of latency to add (in seconds) + # @param ramp_time [Float] Time to ramp up to the target latency (in seconds), 0 for immediate + def add_latency(amount, ramp_time: 0) + raise ArgumentError, "Latency amount must be non-negative" if amount < 0 + raise ArgumentError, "Ramp time must be non-negative" if ramp_time < 0 + + @mutex.synchronize do + @latency_degradation[:target] = amount + @latency_degradation[:ramp_start] = Time.now + @latency_degradation[:ramp_duration] = ramp_time + + # If no ramp time, apply immediately + @latency_degradation[:amount] = amount if ramp_time == 0 + end + end + + # Change the error rate with optional ramp-up time + # @param rate [Float] New error rate (0.0 to 1.0) + # @param ramp_time [Float] Time to ramp up to the target error rate (in seconds), 0 for immediate + def set_error_rate(rate, ramp_time: 0) + validate_error_rate(rate) + raise ArgumentError, "Ramp time must be non-negative" if ramp_time < 0 + + @mutex.synchronize do + @error_rate_degradation[:target] = rate + @error_rate_degradation[:ramp_start] = Time.now + @error_rate_degradation[:ramp_duration] = ramp_time + + # If no ramp time, apply immediately + @error_rate_degradation[:rate] = rate if ramp_time == 0 + + # Reset deterministic request counter when error rate changes + if @deterministic_errors + # Reset phase tracking for new error rate (perfect synchronization) + @current_phase_requests = 0 + @current_phase_failures = 0 + end + end + end + + def degrade_specific_endpoint(endpoint_index, amount, ramp_time: 0) + @mutex.synchronize do + @specific_endpoint_degradations[endpoint_index] = { + amount: ramp_time == 0 ? amount : 0.0, # If no ramp time, apply immediately + target: amount, + ramp_start: Time.now, + ramp_duration: ramp_time, + } + end + end + + # Reset service to baseline (remove all degradation) + def reset_degradation + @mutex.synchronize do + @latency_degradation = { amount: 0.0, target: 0.0, ramp_start: nil, ramp_duration: 0 } + @error_rate_degradation = { rate: @base_error_rate, target: @base_error_rate, ramp_start: nil, ramp_duration: 0 } + @specific_endpoint_degradations = {} + # Reset phase tracking + @current_phase_requests = 0 + @current_phase_failures = 0 + end + end + + # Get current latency degradation (accounting for ramp-up) + def current_latency_degradation(endpoint_index) + @mutex.synchronize do + degradation = @specific_endpoint_degradations[endpoint_index] || @latency_degradation + + return degradation[:amount] unless degradation[:ramp_start] && degradation[:ramp_duration] > 0 + + elapsed = Time.now - degradation[:ramp_start] + if elapsed >= degradation[:ramp_duration] + # Ramp complete + degradation[:amount] = degradation[:target] + degradation[:ramp_start] = nil + degradation[:target] + else + # Still ramping + progress = elapsed / degradation[:ramp_duration] + current = degradation[:amount] + target = degradation[:target] + current + (target - current) * progress + end + end + end + + # Get current error rate (accounting for ramp-up) + def current_error_rate + @mutex.synchronize do + return @error_rate_degradation[:rate] unless @error_rate_degradation[:ramp_start] && @error_rate_degradation[:ramp_duration] > 0 + + elapsed = Time.now - @error_rate_degradation[:ramp_start] + if elapsed >= @error_rate_degradation[:ramp_duration] + # Ramp complete + @error_rate_degradation[:rate] = @error_rate_degradation[:target] + @error_rate_degradation[:ramp_start] = nil + @error_rate_degradation[:target] + else + # Still ramping + progress = elapsed / @error_rate_degradation[:ramp_duration] + current = @error_rate_degradation[:rate] + target = @error_rate_degradation[:target] + current + (target - current) * progress + end + end + end + + # Get the base latency for an endpoint (without degradation effects) + def base_latency(endpoint_index) + validate_endpoint_index(endpoint_index) + @endpoint_latencies[endpoint_index] + end + + private + + def validate_distribution(dist) + unless dist.is_a?(Hash) && dist[:type] + raise ArgumentError, "Distribution must be a Hash with :type key" + end + + case dist[:type] + when :log_normal + validate_log_normal_distribution(dist) + else + raise ArgumentError, "Unsupported distribution type: #{dist[:type]}. Only :log_normal is currently supported." + end + + dist + end + + def validate_error_rate(rate) + unless rate.is_a?(Numeric) && rate >= 0.0 && rate <= 1.0 + raise ArgumentError, "Error rate must be a number between 0.0 and 1.0, got #{rate}" + end + + rate + end + + def validate_log_normal_distribution(dist) + unless dist[:mean] && dist[:std_dev] + raise ArgumentError, "Log-normal distribution requires :mean and :std_dev parameters" + end + + unless dist[:mean].is_a?(Numeric) && dist[:mean] > 0 + raise ArgumentError, "Log-normal mean must be a positive number" + end + + unless dist[:std_dev].is_a?(Numeric) && dist[:std_dev] >= 0 + raise ArgumentError, "Log-normal std_dev must be a non-negative number" + end + end + + def validate_endpoint_index(endpoint_index) + unless endpoint_index.is_a?(Integer) && endpoint_index >= 0 && endpoint_index < @endpoints_count + raise ArgumentError, "Invalid endpoint index: #{endpoint_index}. Must be between 0 and #{@endpoints_count - 1}" + end + end + + def generate_endpoint_latencies + Array.new(@endpoints_count) do + latency = sample_from_distribution + # Clamp to min/max bounds + latency.clamp(@min_latency, @max_latency) + end + end + + def should_fail?(error_rate) + return false if error_rate <= 0 + + @mutex.synchronize do + if @deterministic_errors + return true if error_rate >= 1.0 # Always fail if 100% error rate + + # Phase-synchronized deterministic failure optimized for closest target + @current_phase_requests += 1 + + # Calculate what error rate would be if we fail vs don't fail + error_rate_if_fail = (@current_phase_failures + 1).to_f / @current_phase_requests + error_rate_if_pass = @current_phase_failures.to_f / @current_phase_requests + + # Calculate distance from target for each option + distance_if_fail = (error_rate_if_fail - error_rate).abs + distance_if_pass = (error_rate_if_pass - error_rate).abs + + # Choose the option that gets us closer to the target + should_fail_now = distance_if_fail < distance_if_pass + + if should_fail_now + @current_phase_failures += 1 + end + + should_fail_now + else + # Use random error injection + rand < error_rate + end + end + end + + def sample_from_distribution + case @distribution[:type] + when :log_normal + sample_log_normal(@distribution[:mean], @distribution[:std_dev]) + else + # Fallback to mean value + @distribution[:mean] || (@min_latency + @max_latency) / 2.0 + end + end + + def sample_log_normal(mean, std_dev) + # Convert mean and std_dev of the log-normal to the underlying normal distribution + # Using method of moments conversion + variance = std_dev**2 + mean_squared = mean**2 + + # Calculate parameters for underlying normal distribution + mu = Math.log(mean_squared / Math.sqrt(variance + mean_squared)) + sigma = Math.sqrt(Math.log(1 + variance / mean_squared)) + + # Generate log-normal sample using Box-Muller transform + u1 = rand + u2 = rand + z0 = Math.sqrt(-2.0 * Math.log(u1)) * Math.cos(2.0 * Math::PI * u2) + + # Transform to log-normal + Math.exp(mu + sigma * z0) + end + + # Error classes for the mock service + class TimeoutError < StandardError + def marks_semian_circuits? + true # This error should trigger circuit breaker + end + end + + class RequestError < StandardError + def marks_semian_circuits? + true # This error should trigger circuit breaker + end + end + + class QueueTimeoutError < StandardError + def marks_semian_circuits? + true # This error should trigger circuit breaker + end + end + end + end +end diff --git a/experiments/regression_config.rb b/experiments/regression_config.rb new file mode 100644 index 000000000..d133c0b66 --- /dev/null +++ b/experiments/regression_config.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +# Configuration for regression detection - easily tunable thresholds +module RegressionConfig + # Percentile bounds for control limits + LOWER_PERCENTILE = 5 + UPPER_PERCENTILE = 95 + + # Violation thresholds + DEVIATION_VIOLATION_THRESHOLD = 0.8 + ERROR_RATE_VIOLATION_THRESHOLD = 0.8 + REJECTION_RATE_VIOLATION_THRESHOLD = 0.8 + + MIN_BASELINE_RUNS = 10 + + # Paths + BASELINE_PATH = "results/baseline" + CSV_PATH = "results/csv" +end diff --git a/experiments/results/baseline/gradual_increase/computed_baseline.txt b/experiments/results/baseline/gradual_increase/computed_baseline.txt new file mode 100644 index 000000000..fe08f6c94 --- /dev/null +++ b/experiments/results/baseline/gradual_increase/computed_baseline.txt @@ -0,0 +1,15 @@ +# Baseline computed at 2025-12-19 13:05:58 -0500 +# Source files: run_010_time_analysis.csv, run_015_time_analysis.csv, run_009_time_analysis.csv, run_011_time_analysis.csv, run_014_time_analysis.csv, run_008_time_analysis.csv, run_012_time_analysis.csv, run_013_time_analysis.csv, run_003_time_analysis.csv, run_006_time_analysis.csv, run_002_time_analysis.csv, run_007_time_analysis.csv, run_001_time_analysis.csv, run_004_time_analysis.csv, run_005_time_analysis.csv +# Total data points: 150 + +deviation_p5=0.7266666666666672 +deviation_p50=7.33333333333334 +deviation_p95=1152.9399999999994 + +error_rate_p5=0.868 +error_rate_p50=2.38 +error_rate_p95=4.585999999999998 + +rejection_rate_p5=0.0 +rejection_rate_p50=0.0 +rejection_rate_p95=49.843499999999985 diff --git a/experiments/results/baseline/gradual_increase/run_001_time_analysis.csv b/experiments/results/baseline/gradual_increase/run_001_time_analysis.csv new file mode 100644 index 000000000..a67470fbe --- /dev/null +++ b/experiments/results/baseline/gradual_increase/run_001_time_analysis.csv @@ -0,0 +1,11 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-60s,14442,14295,147,1.02,0,0.0,1.0 +60-120s,14396,14173,223,1.55,0,0.0,1.5 +120-180s,14206,13923,283,1.99,0,0.0,2.0 +180-240s,14493,14128,365,2.52,0,0.0,2.5 +240-300s,14501,14059,442,3.05,0,0.0,3.0 +300-360s,14793,14302,491,3.32,0,0.0,3.5 +360-420s,23769,13956,524,2.2,9289,39.08,4.0 +420-480s,14654,13961,693,4.73,0,0.0,4.5 +480-540s,29495,13560,713,2.42,15222,51.61,5.0 +540-600s,15764,14146,128,0.81,1490,9.45,1.0 diff --git a/experiments/results/baseline/gradual_increase/run_002_time_analysis.csv b/experiments/results/baseline/gradual_increase/run_002_time_analysis.csv new file mode 100644 index 000000000..056fade94 --- /dev/null +++ b/experiments/results/baseline/gradual_increase/run_002_time_analysis.csv @@ -0,0 +1,11 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-60s,18596,18411,185,0.99,0,0.0,1.0 +60-120s,19027,18705,322,1.69,0,0.0,1.5 +120-180s,18824,18447,377,2.0,0,0.0,2.0 +180-240s,18950,18463,487,2.57,0,0.0,2.5 +240-300s,18806,18210,596,3.17,0,0.0,3.0 +300-360s,19235,18594,641,3.33,0,0.0,3.5 +360-420s,38008,18169,761,2.0,19078,50.19,4.0 +420-480s,30339,17998,798,2.63,11543,38.05,4.5 +480-540s,33638,17634,925,2.75,15079,44.83,5.0 +540-600s,24991,18302,188,0.75,6501,26.01,1.0 diff --git a/experiments/results/baseline/gradual_increase/run_003_time_analysis.csv b/experiments/results/baseline/gradual_increase/run_003_time_analysis.csv new file mode 100644 index 000000000..4ec8cab74 --- /dev/null +++ b/experiments/results/baseline/gradual_increase/run_003_time_analysis.csv @@ -0,0 +1,11 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-60s,22108,21888,220,1.0,0,0.0,1.0 +60-120s,22495,22186,309,1.37,0,0.0,1.5 +120-180s,22319,21877,442,1.98,0,0.0,2.0 +180-240s,26711,21945,533,2.0,4233,15.85,2.5 +240-300s,25024,21812,627,2.51,2585,10.33,3.0 +300-360s,31021,21599,749,2.41,8673,27.96,3.5 +360-420s,36753,21348,892,2.43,14513,39.49,4.0 +420-480s,40495,18793,920,2.27,20782,51.32,4.5 +480-540s,39767,19579,1040,2.62,19148,48.15,5.0 +540-600s,27444,21618,203,0.74,5623,20.49,1.0 diff --git a/experiments/results/baseline/gradual_increase/run_004_time_analysis.csv b/experiments/results/baseline/gradual_increase/run_004_time_analysis.csv new file mode 100644 index 000000000..92c362a32 --- /dev/null +++ b/experiments/results/baseline/gradual_increase/run_004_time_analysis.csv @@ -0,0 +1,11 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-60s,5660,5604,56,0.99,0,0.0,1.0 +60-120s,5711,5618,93,1.63,0,0.0,1.5 +120-180s,5618,5512,106,1.89,0,0.0,2.0 +180-240s,5705,5565,140,2.45,0,0.0,2.5 +240-300s,5695,5522,173,3.04,0,0.0,3.0 +300-360s,5969,5754,215,3.6,0,0.0,3.5 +360-420s,5651,5415,236,4.18,0,0.0,4.0 +420-480s,5944,5659,285,4.79,0,0.0,4.5 +480-540s,5773,5500,273,4.73,0,0.0,5.0 +540-600s,5696,5630,66,1.16,0,0.0,1.0 diff --git a/experiments/results/baseline/gradual_increase/run_005_time_analysis.csv b/experiments/results/baseline/gradual_increase/run_005_time_analysis.csv new file mode 100644 index 000000000..15fc0fada --- /dev/null +++ b/experiments/results/baseline/gradual_increase/run_005_time_analysis.csv @@ -0,0 +1,11 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-60s,8962,8886,76,0.85,0,0.0,1.0 +60-120s,8656,8512,144,1.66,0,0.0,1.5 +120-180s,9061,8872,189,2.09,0,0.0,2.0 +180-240s,9102,8892,210,2.31,0,0.0,2.5 +240-300s,9155,8910,245,2.68,0,0.0,3.0 +300-360s,8986,8695,291,3.24,0,0.0,3.5 +360-420s,9433,9049,384,4.07,0,0.0,4.0 +420-480s,8965,8560,405,4.52,0,0.0,4.5 +480-540s,9159,8708,451,4.92,0,0.0,5.0 +540-600s,8864,8779,85,0.96,0,0.0,1.0 diff --git a/experiments/results/baseline/gradual_increase/run_006_time_analysis.csv b/experiments/results/baseline/gradual_increase/run_006_time_analysis.csv new file mode 100644 index 000000000..c08943d23 --- /dev/null +++ b/experiments/results/baseline/gradual_increase/run_006_time_analysis.csv @@ -0,0 +1,11 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-60s,5071,5013,58,1.14,0,0.0,1.0 +60-120s,5054,4989,65,1.29,0,0.0,1.5 +120-180s,4768,4673,95,1.99,0,0.0,2.0 +180-240s,5260,5110,150,2.85,0,0.0,2.5 +240-300s,4915,4764,151,3.07,0,0.0,3.0 +300-360s,5525,5349,176,3.19,0,0.0,3.5 +360-420s,4971,4805,166,3.34,0,0.0,4.0 +420-480s,5115,4921,194,3.79,0,0.0,4.5 +480-540s,5209,4979,230,4.42,0,0.0,5.0 +540-600s,4740,4672,68,1.43,0,0.0,1.0 diff --git a/experiments/results/baseline/gradual_increase/run_007_time_analysis.csv b/experiments/results/baseline/gradual_increase/run_007_time_analysis.csv new file mode 100644 index 000000000..b7403f1f2 --- /dev/null +++ b/experiments/results/baseline/gradual_increase/run_007_time_analysis.csv @@ -0,0 +1,11 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-60s,29932,29629,303,1.01,0,0.0,1.0 +60-120s,29917,29511,406,1.36,0,0.0,1.5 +120-180s,35587,29262,627,1.76,5698,16.01,2.0 +180-240s,30371,29618,753,2.48,0,0.0,2.5 +240-300s,37499,26759,819,2.18,9921,26.46,3.0 +300-360s,37575,25900,924,2.46,10751,28.61,3.5 +360-420s,36567,24459,1018,2.78,11090,30.33,4.0 +420-480s,35487,21897,1031,2.91,12559,35.39,4.5 +480-540s,35756,20975,1077,3.01,13704,38.33,5.0 +540-600s,30576,28484,276,0.9,1816,5.94,1.0 diff --git a/experiments/results/baseline/gradual_increase/run_008_time_analysis.csv b/experiments/results/baseline/gradual_increase/run_008_time_analysis.csv new file mode 100644 index 000000000..626055f02 --- /dev/null +++ b/experiments/results/baseline/gradual_increase/run_008_time_analysis.csv @@ -0,0 +1,11 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-60s,22930,22706,224,0.98,0,0.0,1.0 +60-120s,23076,22734,342,1.48,0,0.0,1.5 +120-180s,23445,22968,477,2.03,0,0.0,2.0 +180-240s,23328,22713,615,2.64,0,0.0,2.5 +240-300s,29482,22447,716,2.43,6319,21.43,3.0 +300-360s,23175,22400,775,3.34,0,0.0,3.5 +360-420s,30206,22010,879,2.91,7317,24.22,4.0 +420-480s,42287,20794,1023,2.42,20470,48.41,4.5 +480-540s,41934,19503,1067,2.54,21364,50.95,5.0 +540-600s,27972,21919,218,0.78,5835,20.86,1.0 diff --git a/experiments/results/baseline/gradual_increase/run_009_time_analysis.csv b/experiments/results/baseline/gradual_increase/run_009_time_analysis.csv new file mode 100644 index 000000000..da0b31e39 --- /dev/null +++ b/experiments/results/baseline/gradual_increase/run_009_time_analysis.csv @@ -0,0 +1,11 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-60s,8434,8353,81,0.96,0,0.0,1.0 +60-120s,8049,7935,114,1.42,0,0.0,1.5 +120-180s,7877,7729,148,1.88,0,0.0,2.0 +180-240s,8012,7815,197,2.46,0,0.0,2.5 +240-300s,7685,7458,227,2.95,0,0.0,3.0 +300-360s,8092,7815,277,3.42,0,0.0,3.5 +360-420s,7901,7582,319,4.04,0,0.0,4.0 +420-480s,7883,7537,346,4.39,0,0.0,4.5 +480-540s,7928,7499,429,5.41,0,0.0,5.0 +540-600s,7989,7903,86,1.08,0,0.0,1.0 diff --git a/experiments/results/baseline/gradual_increase/run_010_time_analysis.csv b/experiments/results/baseline/gradual_increase/run_010_time_analysis.csv new file mode 100644 index 000000000..cd0440e45 --- /dev/null +++ b/experiments/results/baseline/gradual_increase/run_010_time_analysis.csv @@ -0,0 +1,11 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-60s,16013,15850,163,1.02,0,0.0,1.0 +60-120s,16445,16187,258,1.57,0,0.0,1.5 +120-180s,16195,15863,332,2.05,0,0.0,2.0 +180-240s,16235,15852,383,2.36,0,0.0,2.5 +240-300s,16466,16008,458,2.78,0,0.0,3.0 +300-360s,16253,15675,578,3.56,0,0.0,3.5 +360-420s,16283,15645,638,3.92,0,0.0,4.0 +420-480s,28188,15186,708,2.51,12294,43.61,4.5 +480-540s,38764,14892,831,2.14,23041,59.44,5.0 +540-600s,22064,15755,173,0.78,6136,27.81,1.0 diff --git a/experiments/results/baseline/gradual_increase/run_011_time_analysis.csv b/experiments/results/baseline/gradual_increase/run_011_time_analysis.csv new file mode 100644 index 000000000..af1725764 --- /dev/null +++ b/experiments/results/baseline/gradual_increase/run_011_time_analysis.csv @@ -0,0 +1,11 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-60s,6991,6921,70,1.0,0,0.0,1.0 +60-120s,6997,6889,108,1.54,0,0.0,1.5 +120-180s,6945,6791,154,2.22,0,0.0,2.0 +180-240s,7052,6878,174,2.47,0,0.0,2.5 +240-300s,6893,6689,204,2.96,0,0.0,3.0 +300-360s,7347,7098,249,3.39,0,0.0,3.5 +360-420s,7281,6981,300,4.12,0,0.0,4.0 +420-480s,6980,6656,324,4.64,0,0.0,4.5 +480-540s,7221,6868,353,4.89,0,0.0,5.0 +540-600s,6786,6699,87,1.28,0,0.0,1.0 diff --git a/experiments/results/baseline/gradual_increase/run_012_time_analysis.csv b/experiments/results/baseline/gradual_increase/run_012_time_analysis.csv new file mode 100644 index 000000000..85378d23a --- /dev/null +++ b/experiments/results/baseline/gradual_increase/run_012_time_analysis.csv @@ -0,0 +1,11 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-60s,34815,34471,344,0.99,0,0.0,1.0 +60-120s,34998,34435,563,1.61,0,0.0,1.5 +120-180s,41665,33309,686,1.65,7670,18.41,2.0 +180-240s,45298,31922,827,1.83,12549,27.7,2.5 +240-300s,45450,30818,958,2.11,13674,30.09,3.0 +300-360s,46061,28109,1027,2.23,16925,36.74,3.5 +360-420s,45793,26128,1128,2.46,18537,40.48,4.0 +420-480s,43392,24941,1154,2.66,17297,39.86,4.5 +480-540s,42460,22728,1138,2.68,18594,43.79,5.0 +540-600s,37096,33229,355,0.96,3512,9.47,1.0 diff --git a/experiments/results/baseline/gradual_increase/run_013_time_analysis.csv b/experiments/results/baseline/gradual_increase/run_013_time_analysis.csv new file mode 100644 index 000000000..c564344d5 --- /dev/null +++ b/experiments/results/baseline/gradual_increase/run_013_time_analysis.csv @@ -0,0 +1,11 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-60s,14024,13888,136,0.97,0,0.0,1.0 +60-120s,13889,13686,203,1.46,0,0.0,1.5 +120-180s,13982,13671,311,2.22,0,0.0,2.0 +180-240s,14132,13787,345,2.44,0,0.0,2.5 +240-300s,14092,13666,426,3.02,0,0.0,3.0 +300-360s,14113,13624,489,3.46,0,0.0,3.5 +360-420s,14163,13572,591,4.17,0,0.0,4.0 +420-480s,21405,13426,648,3.03,7331,34.25,4.5 +480-540s,15415,13872,741,4.81,802,5.2,5.0 +540-600s,13762,13623,139,1.01,0,0.0,1.0 diff --git a/experiments/results/baseline/gradual_increase/run_014_time_analysis.csv b/experiments/results/baseline/gradual_increase/run_014_time_analysis.csv new file mode 100644 index 000000000..e713df8e3 --- /dev/null +++ b/experiments/results/baseline/gradual_increase/run_014_time_analysis.csv @@ -0,0 +1,11 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-60s,21464,21273,191,0.89,0,0.0,1.0 +60-120s,21542,21182,360,1.67,0,0.0,1.5 +120-180s,21675,21251,424,1.96,0,0.0,2.0 +180-240s,21849,21290,559,2.56,0,0.0,2.5 +240-300s,28787,20854,617,2.14,7316,25.41,3.0 +300-360s,28719,20918,793,2.76,7008,24.4,3.5 +360-420s,28725,20965,845,2.94,6915,24.07,4.0 +420-480s,40262,19395,968,2.4,19899,49.42,4.5 +480-540s,43055,18308,1017,2.36,23730,55.12,5.0 +540-600s,25526,21213,186,0.73,4127,16.17,1.0 diff --git a/experiments/results/baseline/gradual_increase/run_015_time_analysis.csv b/experiments/results/baseline/gradual_increase/run_015_time_analysis.csv new file mode 100644 index 000000000..5fb94a792 --- /dev/null +++ b/experiments/results/baseline/gradual_increase/run_015_time_analysis.csv @@ -0,0 +1,11 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-60s,18281,18104,177,0.97,0,0.0,1.0 +60-120s,18018,17765,253,1.4,0,0.0,1.5 +120-180s,17947,17585,362,2.02,0,0.0,2.0 +180-240s,18237,17772,465,2.55,0,0.0,2.5 +240-300s,18456,17867,589,3.19,0,0.0,3.0 +300-360s,26907,17609,659,2.45,8639,32.11,3.5 +360-420s,18574,17827,747,4.02,0,0.0,4.0 +420-480s,40136,17173,791,1.97,22172,55.24,4.5 +480-540s,47111,17185,925,1.96,29001,61.56,5.0 +540-600s,19752,17764,158,0.8,1830,9.26,1.0 diff --git a/experiments/results/baseline/gradual_increase_adaptive/computed_baseline.txt b/experiments/results/baseline/gradual_increase_adaptive/computed_baseline.txt new file mode 100644 index 000000000..3fec7e968 --- /dev/null +++ b/experiments/results/baseline/gradual_increase_adaptive/computed_baseline.txt @@ -0,0 +1,15 @@ +# Baseline computed at 2025-12-19 13:05:58 -0500 +# Source files: run_010_time_analysis.csv, run_015_time_analysis.csv, run_009_time_analysis.csv, run_011_time_analysis.csv, run_014_time_analysis.csv, run_008_time_analysis.csv, run_012_time_analysis.csv, run_013_time_analysis.csv, run_003_time_analysis.csv, run_006_time_analysis.csv, run_002_time_analysis.csv, run_007_time_analysis.csv, run_001_time_analysis.csv, run_004_time_analysis.csv, run_005_time_analysis.csv +# Total data points: 150 + +deviation_p5=46.25 +deviation_p50=82.66666666666667 +deviation_p95=136.45999999999998 + +error_rate_p5=0.99 +error_rate_p50=2.585 +error_rate_p95=4.7764999999999995 + +rejection_rate_p5=0.4035 +rejection_rate_p50=2.5149999999999997 +rejection_rate_p95=4.765999999999991 diff --git a/experiments/results/baseline/gradual_increase_adaptive/run_001_time_analysis.csv b/experiments/results/baseline/gradual_increase_adaptive/run_001_time_analysis.csv new file mode 100644 index 000000000..25bb648cb --- /dev/null +++ b/experiments/results/baseline/gradual_increase_adaptive/run_001_time_analysis.csv @@ -0,0 +1,11 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-60s,19664,19338,223,1.13,103,0.52,1.0 +60-120s,19774,19278,258,1.3,238,1.2,1.5 +120-180s,20288,19493,402,1.98,393,1.94,2.0 +180-240s,20278,19314,493,2.43,471,2.32,2.5 +240-300s,20451,19254,603,2.95,594,2.9,3.0 +300-360s,20383,18988,716,3.51,679,3.33,3.5 +360-420s,20047,18520,772,3.85,755,3.77,4.0 +420-480s,21133,19447,885,4.19,801,3.79,4.5 +480-540s,21046,19079,1035,4.92,932,4.43,5.0 +540-600s,19890,19463,191,0.96,236,1.19,1.0 diff --git a/experiments/results/baseline/gradual_increase_adaptive/run_002_time_analysis.csv b/experiments/results/baseline/gradual_increase_adaptive/run_002_time_analysis.csv new file mode 100644 index 000000000..688573067 --- /dev/null +++ b/experiments/results/baseline/gradual_increase_adaptive/run_002_time_analysis.csv @@ -0,0 +1,11 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-60s,34100,33694,329,0.96,77,0.23,1.0 +60-120s,34833,33877,534,1.53,422,1.21,1.5 +120-180s,35531,34170,718,2.02,643,1.81,2.0 +180-240s,35711,34115,866,2.43,730,2.04,2.5 +240-300s,36130,34115,1073,2.97,942,2.61,3.0 +300-360s,36435,34032,1293,3.55,1110,3.05,3.5 +360-420s,36565,33963,1420,3.88,1182,3.23,4.0 +420-480s,36692,33752,1655,4.51,1285,3.5,4.5 +480-540s,36663,33553,1746,4.76,1364,3.72,5.0 +540-600s,34649,34084,328,0.95,237,0.68,1.0 diff --git a/experiments/results/baseline/gradual_increase_adaptive/run_003_time_analysis.csv b/experiments/results/baseline/gradual_increase_adaptive/run_003_time_analysis.csv new file mode 100644 index 000000000..f928eb160 --- /dev/null +++ b/experiments/results/baseline/gradual_increase_adaptive/run_003_time_analysis.csv @@ -0,0 +1,11 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-60s,34727,34267,362,1.04,98,0.28,1.0 +60-120s,35548,34538,555,1.56,455,1.28,1.5 +120-180s,35862,34549,686,1.91,627,1.75,2.0 +180-240s,36336,34490,951,2.62,895,2.46,2.5 +240-300s,36461,34425,1058,2.9,978,2.68,3.0 +300-360s,36615,34342,1227,3.35,1046,2.86,3.5 +360-420s,36915,34263,1438,3.9,1214,3.29,4.0 +420-480s,36828,33990,1607,4.36,1231,3.34,4.5 +480-540s,37125,33920,1802,4.85,1403,3.78,5.0 +540-600s,35006,34358,368,1.05,280,0.8,1.0 diff --git a/experiments/results/baseline/gradual_increase_adaptive/run_004_time_analysis.csv b/experiments/results/baseline/gradual_increase_adaptive/run_004_time_analysis.csv new file mode 100644 index 000000000..c76a050a8 --- /dev/null +++ b/experiments/results/baseline/gradual_increase_adaptive/run_004_time_analysis.csv @@ -0,0 +1,11 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-60s,34505,34066,340,0.99,99,0.29,1.0 +60-120s,35335,34409,508,1.44,418,1.18,1.5 +120-180s,35967,34586,746,2.07,635,1.77,2.0 +180-240s,36252,34595,884,2.44,773,2.13,2.5 +240-300s,36442,34483,1039,2.85,920,2.52,3.0 +300-360s,36661,34445,1210,3.3,1006,2.74,3.5 +360-420s,36780,34359,1358,3.69,1063,2.89,4.0 +420-480s,36974,34118,1611,4.36,1245,3.37,4.5 +480-540s,37202,34002,1825,4.91,1375,3.7,5.0 +540-600s,35120,34475,371,1.06,274,0.78,1.0 diff --git a/experiments/results/baseline/gradual_increase_adaptive/run_005_time_analysis.csv b/experiments/results/baseline/gradual_increase_adaptive/run_005_time_analysis.csv new file mode 100644 index 000000000..6b32302ac --- /dev/null +++ b/experiments/results/baseline/gradual_increase_adaptive/run_005_time_analysis.csv @@ -0,0 +1,11 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-60s,30368,29900,357,1.18,111,0.37,1.0 +60-120s,31159,30309,472,1.51,378,1.21,1.5 +120-180s,31362,30204,612,1.95,546,1.74,2.0 +180-240s,31571,30103,787,2.49,681,2.16,2.5 +240-300s,31853,30047,931,2.92,875,2.75,3.0 +300-360s,32129,30032,1110,3.45,987,3.07,3.5 +360-420s,32221,29892,1264,3.92,1065,3.31,4.0 +420-480s,32374,29742,1453,4.49,1179,3.64,4.5 +480-540s,32472,29807,1506,4.64,1159,3.57,5.0 +540-600s,30823,30192,346,1.12,285,0.92,1.0 diff --git a/experiments/results/baseline/gradual_increase_adaptive/run_006_time_analysis.csv b/experiments/results/baseline/gradual_increase_adaptive/run_006_time_analysis.csv new file mode 100644 index 000000000..66c061e1b --- /dev/null +++ b/experiments/results/baseline/gradual_increase_adaptive/run_006_time_analysis.csv @@ -0,0 +1,11 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-60s,25484,25082,294,1.15,108,0.42,1.0 +60-120s,26007,25313,359,1.38,335,1.29,1.5 +120-180s,26295,25262,535,2.03,498,1.89,2.0 +180-240s,26450,25132,665,2.51,653,2.47,2.5 +240-300s,26748,25306,736,2.75,706,2.64,3.0 +300-360s,26566,24902,872,3.28,792,2.98,3.5 +360-420s,27008,25073,1056,3.91,879,3.25,4.0 +420-480s,27293,25120,1165,4.27,1008,3.69,4.5 +480-540s,27302,24924,1307,4.79,1071,3.92,5.0 +540-600s,26079,25572,260,1.0,247,0.95,1.0 diff --git a/experiments/results/baseline/gradual_increase_adaptive/run_007_time_analysis.csv b/experiments/results/baseline/gradual_increase_adaptive/run_007_time_analysis.csv new file mode 100644 index 000000000..234f21eca --- /dev/null +++ b/experiments/results/baseline/gradual_increase_adaptive/run_007_time_analysis.csv @@ -0,0 +1,11 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-60s,33653,33204,337,1.0,112,0.33,1.0 +60-120s,34225,33289,520,1.52,416,1.22,1.5 +120-180s,34518,33291,645,1.87,582,1.69,2.0 +180-240s,34795,33149,870,2.5,776,2.23,2.5 +240-300s,34378,32440,1000,2.91,938,2.73,3.0 +300-360s,34524,32362,1157,3.35,1005,2.91,3.5 +360-420s,34492,32199,1284,3.72,1009,2.93,4.0 +420-480s,34743,31983,1531,4.41,1229,3.54,4.5 +480-540s,34924,31823,1724,4.94,1377,3.94,5.0 +540-600s,33070,32468,336,1.02,266,0.8,1.0 diff --git a/experiments/results/baseline/gradual_increase_adaptive/run_008_time_analysis.csv b/experiments/results/baseline/gradual_increase_adaptive/run_008_time_analysis.csv new file mode 100644 index 000000000..3eb31fc11 --- /dev/null +++ b/experiments/results/baseline/gradual_increase_adaptive/run_008_time_analysis.csv @@ -0,0 +1,11 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-60s,21147,20842,199,0.94,106,0.5,1.0 +60-120s,21815,21218,322,1.48,275,1.26,1.5 +120-180s,21858,21099,406,1.86,353,1.61,2.0 +180-240s,22241,21264,492,2.21,485,2.18,2.5 +240-300s,22184,20988,618,2.79,578,2.61,3.0 +300-360s,22422,20971,740,3.3,711,3.17,3.5 +360-420s,22812,21230,817,3.58,765,3.35,4.0 +420-480s,22569,20743,966,4.28,860,3.81,4.5 +480-540s,22940,20890,1091,4.76,959,4.18,5.0 +540-600s,21772,21307,237,1.09,228,1.05,1.0 diff --git a/experiments/results/baseline/gradual_increase_adaptive/run_009_time_analysis.csv b/experiments/results/baseline/gradual_increase_adaptive/run_009_time_analysis.csv new file mode 100644 index 000000000..178fd33c6 --- /dev/null +++ b/experiments/results/baseline/gradual_increase_adaptive/run_009_time_analysis.csv @@ -0,0 +1,11 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-60s,4547,4470,48,1.06,29,0.64,1.0 +60-120s,4701,4549,75,1.6,77,1.64,1.5 +120-180s,4877,4695,85,1.74,97,1.99,2.0 +180-240s,4964,4691,125,2.52,148,2.98,2.5 +240-300s,4976,4635,158,3.18,183,3.68,3.0 +300-360s,4980,4620,182,3.65,178,3.57,3.5 +360-420s,5405,4917,218,4.03,270,5.0,4.0 +420-480s,5020,4575,220,4.38,225,4.48,4.5 +480-540s,5081,4482,259,5.1,340,6.69,5.0 +540-600s,4997,4858,55,1.1,84,1.68,1.0 diff --git a/experiments/results/baseline/gradual_increase_adaptive/run_010_time_analysis.csv b/experiments/results/baseline/gradual_increase_adaptive/run_010_time_analysis.csv new file mode 100644 index 000000000..9d2124666 --- /dev/null +++ b/experiments/results/baseline/gradual_increase_adaptive/run_010_time_analysis.csv @@ -0,0 +1,11 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-60s,10487,10267,116,1.11,104,0.99,1.0 +60-120s,10933,10623,145,1.33,165,1.51,1.5 +120-180s,11228,10777,211,1.88,240,2.14,2.0 +180-240s,10861,10380,259,2.38,222,2.04,2.5 +240-300s,11128,10494,317,2.85,317,2.85,3.0 +300-360s,10852,10076,387,3.57,389,3.58,3.5 +360-420s,10915,10113,401,3.67,401,3.67,4.0 +420-480s,11126,10141,491,4.41,494,4.44,4.5 +480-540s,11588,10487,518,4.47,583,5.03,5.0 +540-600s,10493,10245,93,0.89,155,1.48,1.0 diff --git a/experiments/results/baseline/gradual_increase_adaptive/run_011_time_analysis.csv b/experiments/results/baseline/gradual_increase_adaptive/run_011_time_analysis.csv new file mode 100644 index 000000000..301d95f02 --- /dev/null +++ b/experiments/results/baseline/gradual_increase_adaptive/run_011_time_analysis.csv @@ -0,0 +1,11 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-60s,34505,34058,334,0.97,113,0.33,1.0 +60-120s,35338,34381,512,1.45,445,1.26,1.5 +120-180s,35780,34454,704,1.97,622,1.74,2.0 +180-240s,36083,34474,881,2.44,728,2.02,2.5 +240-300s,36217,34346,1026,2.83,845,2.33,3.0 +300-360s,36484,34220,1225,3.36,1039,2.85,3.5 +360-420s,36776,34180,1438,3.91,1158,3.15,4.0 +420-480s,36953,33957,1637,4.43,1359,3.68,4.5 +480-540s,36962,33783,1808,4.89,1371,3.71,5.0 +540-600s,35025,34425,348,0.99,252,0.72,1.0 diff --git a/experiments/results/baseline/gradual_increase_adaptive/run_012_time_analysis.csv b/experiments/results/baseline/gradual_increase_adaptive/run_012_time_analysis.csv new file mode 100644 index 000000000..38d7a1693 --- /dev/null +++ b/experiments/results/baseline/gradual_increase_adaptive/run_012_time_analysis.csv @@ -0,0 +1,11 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-60s,25770,25386,273,1.06,111,0.43,1.0 +60-120s,26470,25711,385,1.45,374,1.41,1.5 +120-180s,26956,25890,549,2.04,517,1.92,2.0 +180-240s,27067,25797,630,2.33,640,2.36,2.5 +240-300s,27208,25664,782,2.87,762,2.8,3.0 +300-360s,27427,25537,983,3.58,907,3.31,3.5 +360-420s,27662,25655,1071,3.87,936,3.38,4.0 +420-480s,27697,25441,1200,4.33,1056,3.81,4.5 +480-540s,28072,25658,1316,4.69,1098,3.91,5.0 +540-600s,26398,25810,298,1.13,290,1.1,1.0 diff --git a/experiments/results/baseline/gradual_increase_adaptive/run_013_time_analysis.csv b/experiments/results/baseline/gradual_increase_adaptive/run_013_time_analysis.csv new file mode 100644 index 000000000..bd1b74de5 --- /dev/null +++ b/experiments/results/baseline/gradual_increase_adaptive/run_013_time_analysis.csv @@ -0,0 +1,11 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-60s,20411,20117,215,1.05,79,0.39,1.0 +60-120s,20668,20083,302,1.46,283,1.37,1.5 +120-180s,21086,20278,416,1.97,392,1.86,2.0 +180-240s,21527,20438,549,2.55,540,2.51,2.5 +240-300s,21346,20183,594,2.78,569,2.67,3.0 +300-360s,21570,20135,728,3.38,707,3.28,3.5 +360-420s,21944,20397,790,3.6,757,3.45,4.0 +420-480s,22157,20214,993,4.48,950,4.29,4.5 +480-540s,21625,19798,991,4.58,836,3.87,5.0 +540-600s,20725,20326,194,0.94,205,0.99,1.0 diff --git a/experiments/results/baseline/gradual_increase_adaptive/run_014_time_analysis.csv b/experiments/results/baseline/gradual_increase_adaptive/run_014_time_analysis.csv new file mode 100644 index 000000000..5b6a5be3f --- /dev/null +++ b/experiments/results/baseline/gradual_increase_adaptive/run_014_time_analysis.csv @@ -0,0 +1,11 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-60s,3383,3307,39,1.15,37,1.09,1.0 +60-120s,3156,3068,43,1.36,45,1.43,1.5 +120-180s,3398,3258,69,2.03,71,2.09,2.0 +180-240s,3654,3408,96,2.63,150,4.11,2.5 +240-300s,4870,3272,114,2.34,1484,30.47,3.0 +300-360s,3469,3160,115,3.32,194,5.59,3.5 +360-420s,4518,3324,139,3.08,1055,23.35,4.0 +420-480s,3604,3265,146,4.05,193,5.36,4.5 +480-540s,8535,3303,173,2.03,5059,59.27,5.0 +540-600s,3425,3305,35,1.02,85,2.48,1.0 diff --git a/experiments/results/baseline/gradual_increase_adaptive/run_015_time_analysis.csv b/experiments/results/baseline/gradual_increase_adaptive/run_015_time_analysis.csv new file mode 100644 index 000000000..941d523e0 --- /dev/null +++ b/experiments/results/baseline/gradual_increase_adaptive/run_015_time_analysis.csv @@ -0,0 +1,11 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-60s,32205,31773,337,1.05,95,0.29,1.0 +60-120s,32744,31869,490,1.5,385,1.18,1.5 +120-180s,33094,31861,664,2.01,569,1.72,2.0 +180-240s,33532,31939,822,2.45,771,2.3,2.5 +240-300s,33475,31769,915,2.73,791,2.36,3.0 +300-360s,34041,31832,1180,3.47,1029,3.02,3.5 +360-420s,33966,31602,1321,3.89,1043,3.07,4.0 +420-480s,34154,31581,1406,4.12,1167,3.42,4.5 +480-540s,34537,31538,1696,4.91,1303,3.77,5.0 +540-600s,32469,31910,322,0.99,237,0.73,1.0 diff --git a/experiments/results/baseline/near_target_error_rate/computed_baseline.txt b/experiments/results/baseline/near_target_error_rate/computed_baseline.txt new file mode 100644 index 000000000..cf1d585bd --- /dev/null +++ b/experiments/results/baseline/near_target_error_rate/computed_baseline.txt @@ -0,0 +1,15 @@ +# Baseline computed at 2025-12-19 13:05:58 -0500 +# Source files: run_010_time_analysis.csv, run_015_time_analysis.csv, run_009_time_analysis.csv, run_011_time_analysis.csv, run_014_time_analysis.csv, run_008_time_analysis.csv, run_012_time_analysis.csv, run_013_time_analysis.csv, run_003_time_analysis.csv, run_006_time_analysis.csv, run_002_time_analysis.csv, run_007_time_analysis.csv, run_001_time_analysis.csv, run_004_time_analysis.csv, run_005_time_analysis.csv +# Total data points: 90 + +deviation_p5=0.8333333333333341 +deviation_p50=6.666666666666654 +deviation_p95=23.324999999999996 + +error_rate_p5=0.919 +error_rate_p50=1.14 +error_rate_p95=1.3984999999999999 + +rejection_rate_p5=0.0 +rejection_rate_p50=0.0 +rejection_rate_p95=0.0 diff --git a/experiments/results/baseline/near_target_error_rate/run_001_time_analysis.csv b/experiments/results/baseline/near_target_error_rate/run_001_time_analysis.csv new file mode 100644 index 000000000..00cc5a7c3 --- /dev/null +++ b/experiments/results/baseline/near_target_error_rate/run_001_time_analysis.csv @@ -0,0 +1,7 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,4763,4714,49,1.03,0,0.0,1.0 +30-60s,4836,4780,56,1.16,0,0.0,1.2 +60-90s,4688,4628,60,1.28,0,0.0,1.2 +90-120s,4633,4580,53,1.14,0,0.0,1.2 +120-150s,4779,4719,60,1.26,0,0.0,1.2 +150-180s,4637,4587,50,1.08,0,0.0,1.0 diff --git a/experiments/results/baseline/near_target_error_rate/run_002_time_analysis.csv b/experiments/results/baseline/near_target_error_rate/run_002_time_analysis.csv new file mode 100644 index 000000000..8abd2451b --- /dev/null +++ b/experiments/results/baseline/near_target_error_rate/run_002_time_analysis.csv @@ -0,0 +1,7 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,11099,10992,107,0.96,0,0.0,1.0 +30-60s,10920,10774,146,1.34,0,0.0,1.2 +60-90s,11153,11020,133,1.19,0,0.0,1.2 +90-120s,11012,10887,125,1.14,0,0.0,1.2 +120-150s,11300,11159,141,1.25,0,0.0,1.2 +150-180s,11212,11108,104,0.93,0,0.0,1.0 diff --git a/experiments/results/baseline/near_target_error_rate/run_003_time_analysis.csv b/experiments/results/baseline/near_target_error_rate/run_003_time_analysis.csv new file mode 100644 index 000000000..34e1d8ea4 --- /dev/null +++ b/experiments/results/baseline/near_target_error_rate/run_003_time_analysis.csv @@ -0,0 +1,7 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,2016,1987,29,1.44,0,0.0,1.0 +30-60s,1461,1437,24,1.64,0,0.0,1.2 +60-90s,1642,1622,20,1.22,0,0.0,1.2 +90-120s,1436,1415,21,1.46,0,0.0,1.2 +120-150s,1699,1674,25,1.47,0,0.0,1.2 +150-180s,1803,1785,18,1.0,0,0.0,1.0 diff --git a/experiments/results/baseline/near_target_error_rate/run_004_time_analysis.csv b/experiments/results/baseline/near_target_error_rate/run_004_time_analysis.csv new file mode 100644 index 000000000..ee767f135 --- /dev/null +++ b/experiments/results/baseline/near_target_error_rate/run_004_time_analysis.csv @@ -0,0 +1,7 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,5269,5203,66,1.25,0,0.0,1.0 +30-60s,5240,5180,60,1.15,0,0.0,1.2 +60-90s,5126,5070,56,1.09,0,0.0,1.2 +90-120s,5409,5351,58,1.07,0,0.0,1.2 +120-150s,5388,5320,68,1.26,0,0.0,1.2 +150-180s,5349,5287,62,1.16,0,0.0,1.0 diff --git a/experiments/results/baseline/near_target_error_rate/run_005_time_analysis.csv b/experiments/results/baseline/near_target_error_rate/run_005_time_analysis.csv new file mode 100644 index 000000000..37e5ae121 --- /dev/null +++ b/experiments/results/baseline/near_target_error_rate/run_005_time_analysis.csv @@ -0,0 +1,7 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,17180,16991,189,1.1,0,0.0,1.0 +30-60s,17406,17216,190,1.09,0,0.0,1.2 +60-90s,17517,17309,208,1.19,0,0.0,1.2 +90-120s,17455,17275,180,1.03,0,0.0,1.2 +120-150s,17518,17296,222,1.27,0,0.0,1.2 +150-180s,17445,17274,171,0.98,0,0.0,1.0 diff --git a/experiments/results/baseline/near_target_error_rate/run_006_time_analysis.csv b/experiments/results/baseline/near_target_error_rate/run_006_time_analysis.csv new file mode 100644 index 000000000..d9ac2ba4c --- /dev/null +++ b/experiments/results/baseline/near_target_error_rate/run_006_time_analysis.csv @@ -0,0 +1,7 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,17266,17102,164,0.95,0,0.0,1.0 +30-60s,17463,17263,200,1.15,0,0.0,1.2 +60-90s,17470,17270,200,1.14,0,0.0,1.2 +90-120s,17523,17306,217,1.24,0,0.0,1.2 +120-150s,17477,17285,192,1.1,0,0.0,1.2 +150-180s,17536,17336,200,1.14,0,0.0,1.0 diff --git a/experiments/results/baseline/near_target_error_rate/run_007_time_analysis.csv b/experiments/results/baseline/near_target_error_rate/run_007_time_analysis.csv new file mode 100644 index 000000000..5d1040840 --- /dev/null +++ b/experiments/results/baseline/near_target_error_rate/run_007_time_analysis.csv @@ -0,0 +1,7 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,17405,17225,180,1.03,0,0.0,1.0 +30-60s,17501,17281,220,1.26,0,0.0,1.2 +60-90s,17510,17301,209,1.19,0,0.0,1.2 +90-120s,17487,17284,203,1.16,0,0.0,1.2 +120-150s,17540,17316,224,1.28,0,0.0,1.2 +150-180s,17561,17358,203,1.16,0,0.0,1.0 diff --git a/experiments/results/baseline/near_target_error_rate/run_008_time_analysis.csv b/experiments/results/baseline/near_target_error_rate/run_008_time_analysis.csv new file mode 100644 index 000000000..5a4685dc6 --- /dev/null +++ b/experiments/results/baseline/near_target_error_rate/run_008_time_analysis.csv @@ -0,0 +1,7 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,1540,1527,13,0.84,0,0.0,1.0 +30-60s,1676,1652,24,1.43,0,0.0,1.2 +60-90s,1569,1556,13,0.83,0,0.0,1.2 +90-120s,1593,1578,15,0.94,0,0.0,1.2 +120-150s,1475,1461,14,0.95,0,0.0,1.2 +150-180s,1705,1692,13,0.76,0,0.0,1.0 diff --git a/experiments/results/baseline/near_target_error_rate/run_009_time_analysis.csv b/experiments/results/baseline/near_target_error_rate/run_009_time_analysis.csv new file mode 100644 index 000000000..22c726b71 --- /dev/null +++ b/experiments/results/baseline/near_target_error_rate/run_009_time_analysis.csv @@ -0,0 +1,7 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,11532,11391,141,1.22,0,0.0,1.0 +30-60s,11550,11420,130,1.13,0,0.0,1.2 +60-90s,11678,11543,135,1.16,0,0.0,1.2 +90-120s,11602,11449,153,1.32,0,0.0,1.2 +120-150s,11589,11463,126,1.09,0,0.0,1.2 +150-180s,11455,11338,117,1.02,0,0.0,1.0 diff --git a/experiments/results/baseline/near_target_error_rate/run_010_time_analysis.csv b/experiments/results/baseline/near_target_error_rate/run_010_time_analysis.csv new file mode 100644 index 000000000..58f0613b1 --- /dev/null +++ b/experiments/results/baseline/near_target_error_rate/run_010_time_analysis.csv @@ -0,0 +1,7 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,17186,17014,172,1.0,0,0.0,1.0 +30-60s,17482,17291,191,1.09,0,0.0,1.2 +60-90s,17527,17316,211,1.2,0,0.0,1.2 +90-120s,17511,17327,184,1.05,0,0.0,1.2 +120-150s,17542,17310,232,1.32,0,0.0,1.2 +150-180s,17532,17372,160,0.91,0,0.0,1.0 diff --git a/experiments/results/baseline/near_target_error_rate/run_011_time_analysis.csv b/experiments/results/baseline/near_target_error_rate/run_011_time_analysis.csv new file mode 100644 index 000000000..224e4a360 --- /dev/null +++ b/experiments/results/baseline/near_target_error_rate/run_011_time_analysis.csv @@ -0,0 +1,7 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,10443,10328,115,1.1,0,0.0,1.0 +30-60s,10731,10611,120,1.12,0,0.0,1.2 +60-90s,10659,10527,132,1.24,0,0.0,1.2 +90-120s,10583,10455,128,1.21,0,0.0,1.2 +120-150s,10663,10531,132,1.24,0,0.0,1.2 +150-180s,10902,10783,119,1.09,0,0.0,1.0 diff --git a/experiments/results/baseline/near_target_error_rate/run_012_time_analysis.csv b/experiments/results/baseline/near_target_error_rate/run_012_time_analysis.csv new file mode 100644 index 000000000..7e25f5c64 --- /dev/null +++ b/experiments/results/baseline/near_target_error_rate/run_012_time_analysis.csv @@ -0,0 +1,7 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,17309,17139,170,0.98,0,0.0,1.0 +30-60s,17500,17274,226,1.29,0,0.0,1.2 +60-90s,17478,17264,214,1.22,0,0.0,1.2 +90-120s,17423,17227,196,1.12,0,0.0,1.2 +120-150s,17478,17258,220,1.26,0,0.0,1.2 +150-180s,17553,17355,198,1.13,0,0.0,1.0 diff --git a/experiments/results/baseline/near_target_error_rate/run_013_time_analysis.csv b/experiments/results/baseline/near_target_error_rate/run_013_time_analysis.csv new file mode 100644 index 000000000..78d49bc3c --- /dev/null +++ b/experiments/results/baseline/near_target_error_rate/run_013_time_analysis.csv @@ -0,0 +1,7 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,17054,16880,174,1.02,0,0.0,1.0 +30-60s,17520,17323,197,1.12,0,0.0,1.2 +60-90s,17477,17278,199,1.14,0,0.0,1.2 +90-120s,17483,17269,214,1.22,0,0.0,1.2 +120-150s,17467,17271,196,1.12,0,0.0,1.2 +150-180s,17436,17253,183,1.05,0,0.0,1.0 diff --git a/experiments/results/baseline/near_target_error_rate/run_014_time_analysis.csv b/experiments/results/baseline/near_target_error_rate/run_014_time_analysis.csv new file mode 100644 index 000000000..966ee25f7 --- /dev/null +++ b/experiments/results/baseline/near_target_error_rate/run_014_time_analysis.csv @@ -0,0 +1,7 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,17472,17292,180,1.03,0,0.0,1.0 +30-60s,17475,17249,226,1.29,0,0.0,1.2 +60-90s,17493,17310,183,1.05,0,0.0,1.2 +90-120s,17457,17263,194,1.11,0,0.0,1.2 +120-150s,17545,17316,229,1.31,0,0.0,1.2 +150-180s,17519,17355,164,0.94,0,0.0,1.0 diff --git a/experiments/results/baseline/near_target_error_rate/run_015_time_analysis.csv b/experiments/results/baseline/near_target_error_rate/run_015_time_analysis.csv new file mode 100644 index 000000000..012b15d86 --- /dev/null +++ b/experiments/results/baseline/near_target_error_rate/run_015_time_analysis.csv @@ -0,0 +1,7 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,13593,13454,139,1.02,0,0.0,1.0 +30-60s,13882,13693,189,1.36,0,0.0,1.2 +60-90s,13844,13680,164,1.18,0,0.0,1.2 +90-120s,13887,13734,153,1.1,0,0.0,1.2 +120-150s,13854,13672,182,1.31,0,0.0,1.2 +150-180s,13923,13807,116,0.83,0,0.0,1.0 diff --git a/experiments/results/baseline/near_target_error_rate_adaptive/computed_baseline.txt b/experiments/results/baseline/near_target_error_rate_adaptive/computed_baseline.txt new file mode 100644 index 000000000..12d242011 --- /dev/null +++ b/experiments/results/baseline/near_target_error_rate_adaptive/computed_baseline.txt @@ -0,0 +1,15 @@ +# Baseline computed at 2025-12-19 13:05:58 -0500 +# Source files: run_010_time_analysis.csv, run_015_time_analysis.csv, run_009_time_analysis.csv, run_011_time_analysis.csv, run_014_time_analysis.csv, run_008_time_analysis.csv, run_012_time_analysis.csv, run_013_time_analysis.csv, run_003_time_analysis.csv, run_006_time_analysis.csv, run_002_time_analysis.csv, run_007_time_analysis.csv, run_001_time_analysis.csv, run_004_time_analysis.csv, run_005_time_analysis.csv +# Total data points: 90 + +deviation_p5=21.449999999999996 +deviation_p50=77.5 +deviation_p95=144.70833333333334 + +error_rate_p5=0.91 +error_rate_p50=1.14 +error_rate_p95=1.331 + +rejection_rate_p5=0.15 +rejection_rate_p50=0.955 +rejection_rate_p95=1.523 diff --git a/experiments/results/baseline/near_target_error_rate_adaptive/run_001_time_analysis.csv b/experiments/results/baseline/near_target_error_rate_adaptive/run_001_time_analysis.csv new file mode 100644 index 000000000..ebc9cc69d --- /dev/null +++ b/experiments/results/baseline/near_target_error_rate_adaptive/run_001_time_analysis.csv @@ -0,0 +1,7 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,6762,6680,58,0.86,24,0.35,1.0 +30-60s,6903,6755,83,1.2,65,0.94,1.2 +60-90s,6669,6538,64,0.96,67,1.0,1.2 +90-120s,6714,6559,81,1.21,74,1.1,1.2 +120-150s,6651,6451,97,1.46,103,1.55,1.2 +150-180s,6714,6543,78,1.16,93,1.39,1.0 diff --git a/experiments/results/baseline/near_target_error_rate_adaptive/run_002_time_analysis.csv b/experiments/results/baseline/near_target_error_rate_adaptive/run_002_time_analysis.csv new file mode 100644 index 000000000..1755ff40d --- /dev/null +++ b/experiments/results/baseline/near_target_error_rate_adaptive/run_002_time_analysis.csv @@ -0,0 +1,7 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,7912,6739,68,0.86,1105,13.97,1.0 +30-60s,6750,6602,84,1.24,64,0.95,1.2 +60-90s,6719,6560,87,1.29,72,1.07,1.2 +90-120s,6595,6403,94,1.43,98,1.49,1.2 +120-150s,6614,6486,62,0.94,66,1.0,1.2 +150-180s,6562,6446,50,0.76,66,1.01,1.0 diff --git a/experiments/results/baseline/near_target_error_rate_adaptive/run_003_time_analysis.csv b/experiments/results/baseline/near_target_error_rate_adaptive/run_003_time_analysis.csv new file mode 100644 index 000000000..c2e4a1a9d --- /dev/null +++ b/experiments/results/baseline/near_target_error_rate_adaptive/run_003_time_analysis.csv @@ -0,0 +1,7 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,16674,16450,189,1.13,35,0.21,1.0 +30-60s,17124,16827,195,1.14,102,0.6,1.2 +60-90s,17178,16843,203,1.18,132,0.77,1.2 +90-120s,17206,16820,214,1.24,172,1.0,1.2 +120-150s,17272,16843,235,1.36,194,1.12,1.2 +150-180s,17237,16869,195,1.13,173,1.0,1.0 diff --git a/experiments/results/baseline/near_target_error_rate_adaptive/run_004_time_analysis.csv b/experiments/results/baseline/near_target_error_rate_adaptive/run_004_time_analysis.csv new file mode 100644 index 000000000..5d7699a28 --- /dev/null +++ b/experiments/results/baseline/near_target_error_rate_adaptive/run_004_time_analysis.csv @@ -0,0 +1,7 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,8142,8041,77,0.95,24,0.29,1.0 +30-60s,8342,8164,104,1.25,74,0.89,1.2 +60-90s,8470,8249,95,1.12,126,1.49,1.2 +90-120s,8161,7983,81,0.99,97,1.19,1.2 +120-150s,8252,8067,105,1.27,80,0.97,1.2 +150-180s,8557,8369,84,0.98,104,1.22,1.0 diff --git a/experiments/results/baseline/near_target_error_rate_adaptive/run_005_time_analysis.csv b/experiments/results/baseline/near_target_error_rate_adaptive/run_005_time_analysis.csv new file mode 100644 index 000000000..2f383761a --- /dev/null +++ b/experiments/results/baseline/near_target_error_rate_adaptive/run_005_time_analysis.csv @@ -0,0 +1,7 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,8642,7492,79,0.91,1071,12.39,1.0 +30-60s,7693,7556,83,1.08,54,0.7,1.2 +60-90s,7683,7524,76,0.99,83,1.08,1.2 +90-120s,7703,7509,103,1.34,91,1.18,1.2 +120-150s,7914,7690,100,1.26,124,1.57,1.2 +150-180s,7807,7657,71,0.91,79,1.01,1.0 diff --git a/experiments/results/baseline/near_target_error_rate_adaptive/run_006_time_analysis.csv b/experiments/results/baseline/near_target_error_rate_adaptive/run_006_time_analysis.csv new file mode 100644 index 000000000..13ad7d033 --- /dev/null +++ b/experiments/results/baseline/near_target_error_rate_adaptive/run_006_time_analysis.csv @@ -0,0 +1,7 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,17306,17072,202,1.17,32,0.18,1.0 +30-60s,17587,17262,209,1.19,116,0.66,1.2 +60-90s,17609,17257,201,1.14,151,0.86,1.2 +90-120s,17722,17295,238,1.34,189,1.07,1.2 +120-150s,17655,17285,207,1.17,163,0.92,1.2 +150-180s,17671,17347,170,0.96,154,0.87,1.0 diff --git a/experiments/results/baseline/near_target_error_rate_adaptive/run_007_time_analysis.csv b/experiments/results/baseline/near_target_error_rate_adaptive/run_007_time_analysis.csv new file mode 100644 index 000000000..a5330dd77 --- /dev/null +++ b/experiments/results/baseline/near_target_error_rate_adaptive/run_007_time_analysis.csv @@ -0,0 +1,7 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,14854,14695,138,0.93,21,0.14,1.0 +30-60s,15014,14733,172,1.15,109,0.73,1.2 +60-90s,14971,14659,177,1.18,135,0.9,1.2 +90-120s,15046,14724,171,1.14,151,1.0,1.2 +120-150s,15090,14716,190,1.26,184,1.22,1.2 +150-180s,14976,14702,137,0.91,137,0.91,1.0 diff --git a/experiments/results/baseline/near_target_error_rate_adaptive/run_008_time_analysis.csv b/experiments/results/baseline/near_target_error_rate_adaptive/run_008_time_analysis.csv new file mode 100644 index 000000000..15184d0ef --- /dev/null +++ b/experiments/results/baseline/near_target_error_rate_adaptive/run_008_time_analysis.csv @@ -0,0 +1,7 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,14881,14704,147,0.99,30,0.2,1.0 +30-60s,15219,14979,166,1.09,74,0.49,1.2 +60-90s,15428,15091,183,1.19,154,1.0,1.2 +90-120s,15425,15067,190,1.23,168,1.09,1.2 +120-150s,15466,15093,188,1.22,185,1.2,1.2 +150-180s,15363,15040,163,1.06,160,1.04,1.0 diff --git a/experiments/results/baseline/near_target_error_rate_adaptive/run_009_time_analysis.csv b/experiments/results/baseline/near_target_error_rate_adaptive/run_009_time_analysis.csv new file mode 100644 index 000000000..764dc9227 --- /dev/null +++ b/experiments/results/baseline/near_target_error_rate_adaptive/run_009_time_analysis.csv @@ -0,0 +1,7 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,15819,15616,180,1.14,23,0.15,1.0 +30-60s,16130,15877,170,1.05,83,0.51,1.2 +60-90s,16104,15777,193,1.2,134,0.83,1.2 +90-120s,16070,15750,174,1.08,146,0.91,1.2 +120-150s,16087,15744,189,1.17,154,0.96,1.2 +150-180s,16188,15873,152,0.94,163,1.01,1.0 diff --git a/experiments/results/baseline/near_target_error_rate_adaptive/run_010_time_analysis.csv b/experiments/results/baseline/near_target_error_rate_adaptive/run_010_time_analysis.csv new file mode 100644 index 000000000..bbcf6c861 --- /dev/null +++ b/experiments/results/baseline/near_target_error_rate_adaptive/run_010_time_analysis.csv @@ -0,0 +1,7 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,17164,16980,165,0.96,19,0.11,1.0 +30-60s,17568,17292,180,1.02,96,0.55,1.2 +60-90s,17686,17329,200,1.13,157,0.89,1.2 +90-120s,17643,17323,181,1.03,139,0.79,1.2 +120-150s,17730,17305,233,1.31,192,1.08,1.2 +150-180s,17713,17360,177,1.0,176,0.99,1.0 diff --git a/experiments/results/baseline/near_target_error_rate_adaptive/run_011_time_analysis.csv b/experiments/results/baseline/near_target_error_rate_adaptive/run_011_time_analysis.csv new file mode 100644 index 000000000..a907c771c --- /dev/null +++ b/experiments/results/baseline/near_target_error_rate_adaptive/run_011_time_analysis.csv @@ -0,0 +1,7 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,15984,15782,180,1.13,22,0.14,1.0 +30-60s,16498,16214,187,1.13,97,0.59,1.2 +60-90s,16573,16241,192,1.16,140,0.84,1.2 +90-120s,16515,16175,185,1.12,155,0.94,1.2 +120-150s,16638,16225,220,1.32,193,1.16,1.2 +150-180s,16641,16240,187,1.12,214,1.29,1.0 diff --git a/experiments/results/baseline/near_target_error_rate_adaptive/run_012_time_analysis.csv b/experiments/results/baseline/near_target_error_rate_adaptive/run_012_time_analysis.csv new file mode 100644 index 000000000..67d4afff0 --- /dev/null +++ b/experiments/results/baseline/near_target_error_rate_adaptive/run_012_time_analysis.csv @@ -0,0 +1,7 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,16763,16589,153,0.91,21,0.13,1.0 +30-60s,16948,16628,209,1.23,111,0.65,1.2 +60-90s,17042,16688,198,1.16,156,0.92,1.2 +90-120s,17054,16692,190,1.11,172,1.01,1.2 +120-150s,17084,16698,202,1.18,184,1.08,1.2 +150-180s,17101,16808,152,0.89,141,0.82,1.0 diff --git a/experiments/results/baseline/near_target_error_rate_adaptive/run_013_time_analysis.csv b/experiments/results/baseline/near_target_error_rate_adaptive/run_013_time_analysis.csv new file mode 100644 index 000000000..6756d900c --- /dev/null +++ b/experiments/results/baseline/near_target_error_rate_adaptive/run_013_time_analysis.csv @@ -0,0 +1,7 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,17054,16845,177,1.04,32,0.19,1.0 +30-60s,17615,17304,216,1.23,95,0.54,1.2 +60-90s,17612,17281,200,1.14,131,0.74,1.2 +90-120s,17633,17256,207,1.17,170,0.96,1.2 +120-150s,17699,17255,233,1.32,211,1.19,1.2 +150-180s,17689,17301,194,1.1,194,1.1,1.0 diff --git a/experiments/results/baseline/near_target_error_rate_adaptive/run_014_time_analysis.csv b/experiments/results/baseline/near_target_error_rate_adaptive/run_014_time_analysis.csv new file mode 100644 index 000000000..66d007597 --- /dev/null +++ b/experiments/results/baseline/near_target_error_rate_adaptive/run_014_time_analysis.csv @@ -0,0 +1,7 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,17474,17260,187,1.07,27,0.15,1.0 +30-60s,17535,17268,183,1.04,84,0.48,1.2 +60-90s,17658,17297,207,1.17,154,0.87,1.2 +90-120s,17646,17258,213,1.21,175,0.99,1.2 +120-150s,17720,17311,219,1.24,190,1.07,1.2 +150-180s,17686,17347,175,0.99,164,0.93,1.0 diff --git a/experiments/results/baseline/near_target_error_rate_adaptive/run_015_time_analysis.csv b/experiments/results/baseline/near_target_error_rate_adaptive/run_015_time_analysis.csv new file mode 100644 index 000000000..7c0a6684a --- /dev/null +++ b/experiments/results/baseline/near_target_error_rate_adaptive/run_015_time_analysis.csv @@ -0,0 +1,7 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,6211,6100,72,1.16,39,0.63,1.0 +30-60s,6125,6002,69,1.13,54,0.88,1.2 +60-90s,6164,6038,65,1.05,61,0.99,1.2 +90-120s,6089,5935,80,1.31,74,1.22,1.2 +120-150s,6099,5919,78,1.28,102,1.67,1.2 +150-180s,6239,6120,58,0.93,61,0.98,1.0 diff --git a/experiments/results/baseline/one_of_many_services_latency_degradation/computed_baseline.txt b/experiments/results/baseline/one_of_many_services_latency_degradation/computed_baseline.txt new file mode 100644 index 000000000..d65c16f33 --- /dev/null +++ b/experiments/results/baseline/one_of_many_services_latency_degradation/computed_baseline.txt @@ -0,0 +1,15 @@ +# Baseline computed at 2025-12-19 13:05:58 -0500 +# Source files: run_010_time_analysis.csv, run_015_time_analysis.csv, run_009_time_analysis.csv, run_011_time_analysis.csv, run_014_time_analysis.csv, run_008_time_analysis.csv, run_012_time_analysis.csv, run_013_time_analysis.csv, run_003_time_analysis.csv, run_006_time_analysis.csv, run_002_time_analysis.csv, run_007_time_analysis.csv, run_001_time_analysis.csv, run_004_time_analysis.csv, run_005_time_analysis.csv +# Total data points: 210 + +deviation_p5=22.45 +deviation_p50=993.0 +deviation_p95=1103.55 + +error_rate_p5=0.9145000000000001 +error_rate_p50=1.82 +error_rate_p95=3.754999999999998 + +rejection_rate_p5=0.24900000000000003 +rejection_rate_p50=8.86 +rejection_rate_p95=10.161 diff --git a/experiments/results/baseline/one_of_many_services_latency_degradation/run_001_time_analysis.csv b/experiments/results/baseline/one_of_many_services_latency_degradation/run_001_time_analysis.csv new file mode 100644 index 000000000..73f60f57e --- /dev/null +++ b/experiments/results/baseline/one_of_many_services_latency_degradation/run_001_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,13215,13034,128,0.97,53,0.4,1.0 +30-60s,5359,4812,159,2.97,388,7.24,1.0 +60-90s,9889,8802,147,1.49,940,9.51,1.0 +90-120s,9213,8247,136,1.48,830,9.01,1.0 +120-150s,9228,8155,158,1.71,915,9.92,1.0 +150-180s,8872,7835,135,1.52,902,10.17,1.0 +180-210s,8419,7430,132,1.57,857,10.18,1.0 +210-240s,9337,8229,166,1.78,942,10.09,1.0 +240-270s,9576,8398,160,1.67,1018,10.63,1.0 +270-300s,9209,8106,140,1.52,963,10.46,1.0 +300-330s,9463,8346,152,1.61,965,10.2,1.0 +330-360s,13085,12343,134,1.02,608,4.65,1.0 +360-390s,13762,13438,129,0.94,195,1.42,1.0 +390-420s,13803,13383,137,0.99,283,2.05,1.0 diff --git a/experiments/results/baseline/one_of_many_services_latency_degradation/run_002_time_analysis.csv b/experiments/results/baseline/one_of_many_services_latency_degradation/run_002_time_analysis.csv new file mode 100644 index 000000000..e78ec9055 --- /dev/null +++ b/experiments/results/baseline/one_of_many_services_latency_degradation/run_002_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,7606,7518,75,0.99,13,0.17,1.0 +30-60s,3113,2784,138,4.43,191,6.14,1.0 +60-90s,5340,4701,121,2.27,518,9.7,1.0 +90-120s,5503,4916,105,1.91,482,8.76,1.0 +120-150s,5355,4710,119,2.22,526,9.82,1.0 +150-180s,6210,5550,118,1.9,542,8.73,1.0 +180-210s,5482,4887,122,2.23,473,8.63,1.0 +210-240s,5493,4850,111,2.02,532,9.69,1.0 +240-270s,5524,4875,120,2.17,529,9.58,1.0 +270-300s,5818,5156,108,1.86,554,9.52,1.0 +300-330s,5854,5188,114,1.95,552,9.43,1.0 +330-360s,8064,7672,78,0.97,314,3.89,1.0 +360-390s,7942,7844,73,0.92,25,0.31,1.0 +390-420s,7560,7402,87,1.15,71,0.94,1.0 diff --git a/experiments/results/baseline/one_of_many_services_latency_degradation/run_003_time_analysis.csv b/experiments/results/baseline/one_of_many_services_latency_degradation/run_003_time_analysis.csv new file mode 100644 index 000000000..57674a923 --- /dev/null +++ b/experiments/results/baseline/one_of_many_services_latency_degradation/run_003_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,11364,11214,115,1.01,35,0.31,1.0 +30-60s,4540,4062,168,3.7,310,6.83,1.0 +60-90s,9400,8272,163,1.73,965,10.27,1.0 +90-120s,9040,8068,142,1.57,830,9.18,1.0 +120-150s,8654,7678,138,1.59,838,9.68,1.0 +150-180s,8180,7199,151,1.85,830,10.15,1.0 +180-210s,7880,6930,142,1.8,808,10.25,1.0 +210-240s,8938,7884,176,1.97,878,9.82,1.0 +240-270s,8740,7682,154,1.76,904,10.34,1.0 +270-300s,9091,8061,145,1.59,885,9.73,1.0 +300-330s,8968,7892,169,1.88,907,10.11,1.0 +330-360s,11710,11157,123,1.05,430,3.67,1.0 +360-390s,11893,11601,122,1.03,170,1.43,1.0 +390-420s,11506,11285,96,0.83,125,1.09,1.0 diff --git a/experiments/results/baseline/one_of_many_services_latency_degradation/run_004_time_analysis.csv b/experiments/results/baseline/one_of_many_services_latency_degradation/run_004_time_analysis.csv new file mode 100644 index 000000000..ca25cbf5c --- /dev/null +++ b/experiments/results/baseline/one_of_many_services_latency_degradation/run_004_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,8067,7954,97,1.2,16,0.2,1.0 +30-60s,3218,2909,133,4.13,176,5.47,1.0 +60-90s,4974,4404,108,2.17,462,9.29,1.0 +90-120s,5506,4915,99,1.8,492,8.94,1.0 +120-150s,5394,4785,113,2.09,496,9.2,1.0 +150-180s,5200,4657,106,2.04,437,8.4,1.0 +180-210s,5588,4984,109,1.95,495,8.86,1.0 +210-240s,6089,5372,109,1.79,608,9.99,1.0 +240-270s,4967,4435,109,2.19,423,8.52,1.0 +270-300s,5615,4945,122,2.17,548,9.76,1.0 +300-330s,5675,4980,107,1.89,588,10.36,1.0 +330-360s,8431,7964,90,1.07,377,4.47,1.0 +360-390s,7807,7663,84,1.08,60,0.77,1.0 +390-420s,8223,8131,54,0.66,38,0.46,1.0 diff --git a/experiments/results/baseline/one_of_many_services_latency_degradation/run_005_time_analysis.csv b/experiments/results/baseline/one_of_many_services_latency_degradation/run_005_time_analysis.csv new file mode 100644 index 000000000..17cb7913d --- /dev/null +++ b/experiments/results/baseline/one_of_many_services_latency_degradation/run_005_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,6670,6587,67,1.0,16,0.24,1.0 +30-60s,2994,2650,134,4.48,210,7.01,1.0 +60-90s,6021,5342,110,1.83,569,9.45,1.0 +90-120s,5826,5196,114,1.96,516,8.86,1.0 +120-150s,6147,5520,113,1.84,514,8.36,1.0 +150-180s,6174,5484,131,2.12,559,9.05,1.0 +180-210s,5799,5159,111,1.91,529,9.12,1.0 +210-240s,6129,5420,126,2.06,583,9.51,1.0 +240-270s,6135,5424,115,1.87,596,9.71,1.0 +270-300s,5651,4952,126,2.23,573,10.14,1.0 +300-330s,5792,5137,106,1.83,549,9.48,1.0 +330-360s,7009,6699,78,1.11,232,3.31,1.0 +360-390s,5863,5790,56,0.96,17,0.29,1.0 +390-420s,5810,5754,46,0.79,10,0.17,1.0 diff --git a/experiments/results/baseline/one_of_many_services_latency_degradation/run_006_time_analysis.csv b/experiments/results/baseline/one_of_many_services_latency_degradation/run_006_time_analysis.csv new file mode 100644 index 000000000..3d47f884c --- /dev/null +++ b/experiments/results/baseline/one_of_many_services_latency_degradation/run_006_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,5394,5332,51,0.95,11,0.2,1.0 +30-60s,2294,2080,123,5.36,91,3.97,1.0 +60-90s,4136,3683,102,2.47,351,8.49,1.0 +90-120s,4447,3938,89,2.0,420,9.44,1.0 +120-150s,4070,3584,98,2.41,388,9.53,1.0 +150-180s,4082,3639,101,2.47,342,8.38,1.0 +180-210s,4368,3852,109,2.5,407,9.32,1.0 +210-240s,4368,3902,89,2.04,377,8.63,1.0 +240-270s,4136,3658,104,2.51,374,9.04,1.0 +270-300s,4424,3940,93,2.1,391,8.84,1.0 +300-330s,3900,3504,86,2.21,310,7.95,1.0 +330-360s,5201,4946,72,1.38,183,3.52,1.0 +360-390s,5641,5585,47,0.83,9,0.16,1.0 +390-420s,5469,5377,64,1.17,28,0.51,1.0 diff --git a/experiments/results/baseline/one_of_many_services_latency_degradation/run_007_time_analysis.csv b/experiments/results/baseline/one_of_many_services_latency_degradation/run_007_time_analysis.csv new file mode 100644 index 000000000..bf09a30d4 --- /dev/null +++ b/experiments/results/baseline/one_of_many_services_latency_degradation/run_007_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,10045,9889,108,1.08,48,0.48,1.0 +30-60s,3794,3371,144,3.8,279,7.35,1.0 +60-90s,7649,6803,130,1.7,716,9.36,1.0 +90-120s,6802,6029,119,1.75,654,9.61,1.0 +120-150s,6804,6095,114,1.68,595,8.74,1.0 +150-180s,7001,6190,134,1.91,677,9.67,1.0 +180-210s,6269,5570,127,2.03,572,9.12,1.0 +210-240s,6599,5801,117,1.77,681,10.32,1.0 +240-270s,7067,6276,127,1.8,664,9.4,1.0 +270-300s,6746,5942,130,1.93,674,9.99,1.0 +300-330s,6057,5381,125,2.06,551,9.1,1.0 +330-360s,9712,8987,126,1.3,599,6.17,1.0 +360-390s,10346,10171,99,0.96,76,0.73,1.0 +390-420s,10242,9959,94,0.92,189,1.85,1.0 diff --git a/experiments/results/baseline/one_of_many_services_latency_degradation/run_008_time_analysis.csv b/experiments/results/baseline/one_of_many_services_latency_degradation/run_008_time_analysis.csv new file mode 100644 index 000000000..b26c45827 --- /dev/null +++ b/experiments/results/baseline/one_of_many_services_latency_degradation/run_008_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,6343,6302,37,0.58,4,0.06,1.0 +30-60s,2512,2248,126,5.02,138,5.49,1.0 +60-90s,4538,3992,98,2.16,448,9.87,1.0 +90-120s,4549,4009,92,2.02,448,9.85,1.0 +120-150s,4510,4031,99,2.2,380,8.43,1.0 +150-180s,4405,3907,87,1.98,411,9.33,1.0 +180-210s,4732,4234,107,2.26,391,8.26,1.0 +210-240s,4786,4266,100,2.09,420,8.78,1.0 +240-270s,4763,4258,107,2.25,398,8.36,1.0 +270-300s,4343,3844,109,2.51,390,8.98,1.0 +300-330s,4690,4186,103,2.2,401,8.55,1.0 +330-360s,6297,6029,85,1.35,183,2.91,1.0 +360-390s,6529,6436,73,1.12,20,0.31,1.0 +390-420s,5993,5908,60,1.0,25,0.42,1.0 diff --git a/experiments/results/baseline/one_of_many_services_latency_degradation/run_009_time_analysis.csv b/experiments/results/baseline/one_of_many_services_latency_degradation/run_009_time_analysis.csv new file mode 100644 index 000000000..0bdf637f0 --- /dev/null +++ b/experiments/results/baseline/one_of_many_services_latency_degradation/run_009_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,8528,8420,84,0.98,24,0.28,1.0 +30-60s,3460,3090,144,4.16,226,6.53,1.0 +60-90s,6103,5439,127,2.08,537,8.8,1.0 +90-120s,5996,5332,101,1.68,563,9.39,1.0 +120-150s,5956,5286,127,2.13,543,9.12,1.0 +150-180s,5430,4837,114,2.1,479,8.82,1.0 +180-210s,5469,4893,116,2.12,460,8.41,1.0 +210-240s,5539,4891,119,2.15,529,9.55,1.0 +240-270s,5549,4929,127,2.29,493,8.88,1.0 +270-300s,5790,5165,112,1.93,513,8.86,1.0 +300-330s,5900,5266,112,1.9,522,8.85,1.0 +330-360s,8583,8128,106,1.23,349,4.07,1.0 +360-390s,8535,8439,74,0.87,22,0.26,1.0 +390-420s,8718,8572,81,0.93,65,0.75,1.0 diff --git a/experiments/results/baseline/one_of_many_services_latency_degradation/run_010_time_analysis.csv b/experiments/results/baseline/one_of_many_services_latency_degradation/run_010_time_analysis.csv new file mode 100644 index 000000000..0b675fafc --- /dev/null +++ b/experiments/results/baseline/one_of_many_services_latency_degradation/run_010_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,7777,7707,69,0.89,1,0.01,1.0 +30-60s,2372,2148,125,5.27,99,4.17,1.0 +60-90s,4964,4383,102,2.05,479,9.65,1.0 +90-120s,5347,4780,105,1.96,462,8.64,1.0 +120-150s,4753,4246,101,2.12,406,8.54,1.0 +150-180s,5628,4989,113,2.01,526,9.35,1.0 +180-210s,5406,4846,108,2.0,452,8.36,1.0 +210-240s,5134,4554,114,2.22,466,9.08,1.0 +240-270s,4863,4294,106,2.18,463,9.52,1.0 +270-300s,5223,4625,108,2.07,490,9.38,1.0 +300-330s,5090,4475,109,2.14,506,9.94,1.0 +330-360s,7057,6672,87,1.23,298,4.22,1.0 +360-390s,7214,7109,68,0.94,37,0.51,1.0 +390-420s,7021,6890,81,1.15,50,0.71,1.0 diff --git a/experiments/results/baseline/one_of_many_services_latency_degradation/run_011_time_analysis.csv b/experiments/results/baseline/one_of_many_services_latency_degradation/run_011_time_analysis.csv new file mode 100644 index 000000000..2ff7f4691 --- /dev/null +++ b/experiments/results/baseline/one_of_many_services_latency_degradation/run_011_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,10163,10017,119,1.17,27,0.27,1.0 +30-60s,4209,3780,147,3.49,282,6.7,1.0 +60-90s,7669,6822,139,1.81,708,9.23,1.0 +90-120s,7491,6626,122,1.63,743,9.92,1.0 +120-150s,7305,6484,116,1.59,705,9.65,1.0 +150-180s,7072,6312,126,1.78,634,8.96,1.0 +180-210s,7524,6706,147,1.95,671,8.92,1.0 +210-240s,7256,6426,146,2.01,684,9.43,1.0 +240-270s,7543,6671,134,1.78,738,9.78,1.0 +270-300s,7203,6374,142,1.97,687,9.54,1.0 +300-330s,7651,6764,135,1.76,752,9.83,1.0 +330-360s,10602,9998,112,1.06,492,4.64,1.0 +360-390s,10389,10180,106,1.02,103,0.99,1.0 +390-420s,10126,9930,95,0.94,101,1.0,1.0 diff --git a/experiments/results/baseline/one_of_many_services_latency_degradation/run_012_time_analysis.csv b/experiments/results/baseline/one_of_many_services_latency_degradation/run_012_time_analysis.csv new file mode 100644 index 000000000..4d5384a8d --- /dev/null +++ b/experiments/results/baseline/one_of_many_services_latency_degradation/run_012_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,8946,8826,93,1.04,27,0.3,1.0 +30-60s,3295,2934,139,4.22,222,6.74,1.0 +60-90s,5993,5288,124,2.07,581,9.69,1.0 +90-120s,5925,5265,113,1.91,547,9.23,1.0 +120-150s,6216,5555,120,1.93,541,8.7,1.0 +150-180s,5593,5002,104,1.86,487,8.71,1.0 +180-210s,5629,4993,123,2.19,513,9.11,1.0 +210-240s,5870,5225,111,1.89,534,9.1,1.0 +240-270s,5717,5058,125,2.19,534,9.34,1.0 +270-300s,6043,5357,118,1.95,568,9.4,1.0 +300-330s,6277,5528,142,2.26,607,9.67,1.0 +330-360s,8640,8132,96,1.11,412,4.77,1.0 +360-390s,8623,8500,92,1.07,31,0.36,1.0 +390-420s,9067,8933,92,1.01,42,0.46,1.0 diff --git a/experiments/results/baseline/one_of_many_services_latency_degradation/run_013_time_analysis.csv b/experiments/results/baseline/one_of_many_services_latency_degradation/run_013_time_analysis.csv new file mode 100644 index 000000000..e4fe5a30c --- /dev/null +++ b/experiments/results/baseline/one_of_many_services_latency_degradation/run_013_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,5510,5451,49,0.89,10,0.18,1.0 +30-60s,2748,2473,136,4.95,139,5.06,1.0 +60-90s,6164,5438,128,2.08,598,9.7,1.0 +90-120s,5961,5294,106,1.78,561,9.41,1.0 +120-150s,5688,5051,106,1.86,531,9.34,1.0 +150-180s,5720,5113,127,2.22,480,8.39,1.0 +180-210s,5847,5164,139,2.38,544,9.3,1.0 +210-240s,5357,4745,123,2.3,489,9.13,1.0 +240-270s,5373,4778,110,2.05,485,9.03,1.0 +270-300s,5829,5174,134,2.3,521,8.94,1.0 +300-330s,5695,5048,126,2.21,521,9.15,1.0 +330-360s,6547,6147,78,1.19,322,4.92,1.0 +360-390s,5480,5415,59,1.08,6,0.11,1.0 +390-420s,5883,5775,76,1.29,32,0.54,1.0 diff --git a/experiments/results/baseline/one_of_many_services_latency_degradation/run_014_time_analysis.csv b/experiments/results/baseline/one_of_many_services_latency_degradation/run_014_time_analysis.csv new file mode 100644 index 000000000..ebd28ab04 --- /dev/null +++ b/experiments/results/baseline/one_of_many_services_latency_degradation/run_014_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,9441,9326,82,0.87,33,0.35,1.0 +30-60s,3642,3198,166,4.56,278,7.63,1.0 +60-90s,6685,5961,121,1.81,603,9.02,1.0 +90-120s,6312,5621,116,1.84,575,9.11,1.0 +120-150s,6710,5970,116,1.73,624,9.3,1.0 +150-180s,6132,5452,108,1.76,572,9.33,1.0 +180-210s,6405,5648,110,1.72,647,10.1,1.0 +210-240s,6855,6063,136,1.98,656,9.57,1.0 +240-270s,6129,5385,126,2.06,618,10.08,1.0 +270-300s,6311,5650,114,1.81,547,8.67,1.0 +300-330s,6661,5926,118,1.77,617,9.26,1.0 +330-360s,9075,8629,107,1.18,339,3.74,1.0 +360-390s,9234,9139,84,0.91,11,0.12,1.0 +390-420s,9033,8881,97,1.07,55,0.61,1.0 diff --git a/experiments/results/baseline/one_of_many_services_latency_degradation/run_015_time_analysis.csv b/experiments/results/baseline/one_of_many_services_latency_degradation/run_015_time_analysis.csv new file mode 100644 index 000000000..b54ad821a --- /dev/null +++ b/experiments/results/baseline/one_of_many_services_latency_degradation/run_015_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,12986,12764,126,0.97,96,0.74,1.0 +30-60s,4999,4448,168,3.36,383,7.66,1.0 +60-90s,9352,8263,146,1.56,943,10.08,1.0 +90-120s,9063,8044,154,1.7,865,9.54,1.0 +120-150s,8404,7485,131,1.56,788,9.38,1.0 +150-180s,8357,7327,139,1.66,891,10.66,1.0 +180-210s,8539,7582,142,1.66,815,9.54,1.0 +210-240s,9199,8183,145,1.58,871,9.47,1.0 +240-270s,9153,8122,142,1.55,889,9.71,1.0 +270-300s,9259,8224,137,1.48,898,9.7,1.0 +300-330s,9093,8024,148,1.63,921,10.13,1.0 +330-360s,12342,11646,141,1.14,555,4.5,1.0 +360-390s,12858,12608,102,0.79,148,1.15,1.0 +390-420s,13035,12776,130,1.0,129,0.99,1.0 diff --git a/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/computed_baseline.txt b/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/computed_baseline.txt new file mode 100644 index 000000000..824a1d910 --- /dev/null +++ b/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/computed_baseline.txt @@ -0,0 +1,15 @@ +# Baseline computed at 2025-12-19 13:05:58 -0500 +# Source files: run_010_time_analysis.csv, run_015_time_analysis.csv, run_009_time_analysis.csv, run_011_time_analysis.csv, run_014_time_analysis.csv, run_008_time_analysis.csv, run_012_time_analysis.csv, run_013_time_analysis.csv, run_003_time_analysis.csv, run_006_time_analysis.csv, run_002_time_analysis.csv, run_007_time_analysis.csv, run_001_time_analysis.csv, run_004_time_analysis.csv, run_005_time_analysis.csv +# Total data points: 210 + +deviation_p5=99.45 +deviation_p50=1054.0 +deviation_p95=1169.1999999999998 + +error_rate_p5=0.94 +error_rate_p50=2.825 +error_rate_p95=3.7594999999999983 + +rejection_rate_p5=1.0535 +rejection_rate_p50=8.52 +rejection_rate_p95=9.82 diff --git a/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_001_time_analysis.csv b/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_001_time_analysis.csv new file mode 100644 index 000000000..48b89fd74 --- /dev/null +++ b/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_001_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,8559,8334,100,1.17,125,1.46,1.0 +30-60s,3259,2913,114,3.5,232,7.12,1.0 +60-90s,3901,3494,135,3.46,272,6.97,1.0 +90-120s,4224,3710,123,2.91,391,9.26,1.0 +120-150s,4240,3744,142,3.35,354,8.35,1.0 +150-180s,4046,3586,131,3.24,329,8.13,1.0 +180-210s,4407,3923,131,2.97,353,8.01,1.0 +210-240s,4630,4102,126,2.72,402,8.68,1.0 +240-270s,4317,3787,147,3.41,383,8.87,1.0 +270-300s,3577,3121,146,4.08,310,8.67,1.0 +300-330s,3743,3315,129,3.45,299,7.99,1.0 +330-360s,8231,7746,130,1.58,355,4.31,1.0 +360-390s,8278,8118,69,0.83,91,1.1,1.0 +390-420s,8353,8185,78,0.93,90,1.08,1.0 diff --git a/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_002_time_analysis.csv b/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_002_time_analysis.csv new file mode 100644 index 000000000..09b6b5050 --- /dev/null +++ b/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_002_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,10094,9866,112,1.11,116,1.15,1.0 +30-60s,3929,3493,139,3.54,297,7.56,1.0 +60-90s,4935,4313,152,3.08,470,9.52,1.0 +90-120s,5355,4763,142,2.65,450,8.4,1.0 +120-150s,5308,4651,153,2.88,504,9.5,1.0 +150-180s,4808,4186,150,3.12,472,9.82,1.0 +180-210s,5221,4644,148,2.83,429,8.22,1.0 +210-240s,5353,4675,154,2.88,524,9.79,1.0 +240-270s,5259,4598,143,2.72,518,9.85,1.0 +270-300s,5183,4552,150,2.89,481,9.28,1.0 +300-330s,5041,4428,144,2.86,469,9.3,1.0 +330-360s,9652,9174,124,1.28,354,3.67,1.0 +360-390s,10402,10163,105,1.01,134,1.29,1.0 +390-420s,10274,9999,119,1.16,156,1.52,1.0 diff --git a/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_003_time_analysis.csv b/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_003_time_analysis.csv new file mode 100644 index 000000000..65d2e7420 --- /dev/null +++ b/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_003_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,13074,12819,131,1.0,124,0.95,1.0 +30-60s,5071,4562,141,2.78,368,7.26,1.0 +60-90s,6010,5318,175,2.91,517,8.6,1.0 +90-120s,5844,5153,172,2.94,519,8.88,1.0 +120-150s,6177,5467,155,2.51,555,8.98,1.0 +150-180s,5881,5203,159,2.7,519,8.83,1.0 +180-210s,6270,5515,168,2.68,587,9.36,1.0 +210-240s,5914,5261,156,2.64,497,8.4,1.0 +240-270s,5942,5240,166,2.79,536,9.02,1.0 +270-300s,6342,5599,171,2.7,572,9.02,1.0 +300-330s,6155,5402,167,2.71,586,9.52,1.0 +330-360s,12635,12037,139,1.1,459,3.63,1.0 +360-390s,13034,12771,123,0.94,140,1.07,1.0 +390-420s,13832,13491,155,1.12,186,1.34,1.0 diff --git a/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_004_time_analysis.csv b/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_004_time_analysis.csv new file mode 100644 index 000000000..93489947a --- /dev/null +++ b/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_004_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,8945,8776,85,0.95,84,0.94,1.0 +30-60s,3834,3431,131,3.42,272,7.09,1.0 +60-90s,4590,4096,120,2.61,374,8.15,1.0 +90-120s,4247,3739,141,3.32,367,8.64,1.0 +120-150s,4511,3964,147,3.26,400,8.87,1.0 +150-180s,4539,3966,134,2.95,439,9.67,1.0 +180-210s,4221,3729,136,3.22,356,8.43,1.0 +210-240s,4696,4152,144,3.07,400,8.52,1.0 +240-270s,4156,3632,151,3.63,373,8.97,1.0 +270-300s,4430,3908,126,2.84,396,8.94,1.0 +300-330s,4502,3988,136,3.02,378,8.4,1.0 +330-360s,8955,8511,117,1.31,327,3.65,1.0 +360-390s,9390,9183,88,0.94,119,1.27,1.0 +390-420s,9747,9577,87,0.89,83,0.85,1.0 diff --git a/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_005_time_analysis.csv b/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_005_time_analysis.csv new file mode 100644 index 000000000..1e8701304 --- /dev/null +++ b/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_005_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,10006,9823,100,1.0,83,0.83,1.0 +30-60s,4610,4117,147,3.19,346,7.51,1.0 +60-90s,5511,4855,149,2.7,507,9.2,1.0 +90-120s,5751,5076,160,2.78,515,8.95,1.0 +120-150s,5541,4831,174,3.14,536,9.67,1.0 +150-180s,5782,5069,159,2.75,554,9.58,1.0 +180-210s,5551,4908,157,2.83,486,8.76,1.0 +210-240s,5517,4828,148,2.68,541,9.81,1.0 +240-270s,5906,5201,168,2.84,537,9.09,1.0 +270-300s,5591,4942,144,2.58,505,9.03,1.0 +300-330s,5574,4934,160,2.87,480,8.61,1.0 +330-360s,10094,9501,139,1.38,454,4.5,1.0 +360-390s,9910,9644,115,1.16,151,1.52,1.0 +390-420s,10145,9899,108,1.06,138,1.36,1.0 diff --git a/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_006_time_analysis.csv b/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_006_time_analysis.csv new file mode 100644 index 000000000..eb8c9dfac --- /dev/null +++ b/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_006_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,10328,10113,108,1.05,107,1.04,1.0 +30-60s,4035,3598,131,3.25,306,7.58,1.0 +60-90s,4805,4241,140,2.91,424,8.82,1.0 +90-120s,4743,4180,146,3.08,417,8.79,1.0 +120-150s,4945,4394,146,2.95,405,8.19,1.0 +150-180s,4845,4277,147,3.03,421,8.69,1.0 +180-210s,4893,4321,151,3.09,421,8.6,1.0 +210-240s,5176,4581,139,2.69,456,8.81,1.0 +240-270s,4446,3912,155,3.49,379,8.52,1.0 +270-300s,4772,4183,150,3.14,439,9.2,1.0 +300-330s,4591,4025,149,3.25,417,9.08,1.0 +330-360s,9272,8813,116,1.25,343,3.7,1.0 +360-390s,10462,10230,113,1.08,119,1.14,1.0 +390-420s,10304,10046,106,1.03,152,1.48,1.0 diff --git a/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_007_time_analysis.csv b/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_007_time_analysis.csv new file mode 100644 index 000000000..cec4179d3 --- /dev/null +++ b/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_007_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,8797,8595,95,1.08,107,1.22,1.0 +30-60s,4550,4070,138,3.03,342,7.52,1.0 +60-90s,5987,5277,157,2.62,553,9.24,1.0 +90-120s,5316,4702,154,2.9,460,8.65,1.0 +120-150s,5896,5213,162,2.75,521,8.84,1.0 +150-180s,5781,5087,156,2.7,538,9.31,1.0 +180-210s,5476,4814,155,2.83,507,9.26,1.0 +210-240s,5809,5074,161,2.77,574,9.88,1.0 +240-270s,5507,4799,152,2.76,556,10.1,1.0 +270-300s,5601,4866,166,2.96,569,10.16,1.0 +300-330s,5878,5146,165,2.81,567,9.65,1.0 +330-360s,8542,8067,111,1.3,364,4.26,1.0 +360-390s,8341,8094,90,1.08,157,1.88,1.0 +390-420s,8439,8201,100,1.18,138,1.64,1.0 diff --git a/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_008_time_analysis.csv b/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_008_time_analysis.csv new file mode 100644 index 000000000..7c7e42549 --- /dev/null +++ b/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_008_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,6345,6206,66,1.04,73,1.15,1.0 +30-60s,2377,2154,103,4.33,120,5.05,1.0 +60-90s,2636,2328,120,4.55,188,7.13,1.0 +90-120s,3417,2925,130,3.8,362,10.59,1.0 +120-150s,2617,2335,100,3.82,182,6.95,1.0 +150-180s,3138,2760,121,3.86,257,8.19,1.0 +180-210s,2602,2306,113,4.34,183,7.03,1.0 +210-240s,3291,2885,122,3.71,284,8.63,1.0 +240-270s,2849,2513,110,3.86,226,7.93,1.0 +270-300s,2890,2581,113,3.91,196,6.78,1.0 +300-330s,2937,2560,125,4.26,252,8.58,1.0 +330-360s,5025,4789,76,1.51,160,3.18,1.0 +360-390s,5292,5178,51,0.96,63,1.19,1.0 +390-420s,5973,5830,60,1.0,83,1.39,1.0 diff --git a/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_009_time_analysis.csv b/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_009_time_analysis.csv new file mode 100644 index 000000000..4b97d8da6 --- /dev/null +++ b/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_009_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,10222,10018,108,1.06,96,0.94,1.0 +30-60s,3877,3485,117,3.02,275,7.09,1.0 +60-90s,4458,3921,154,3.45,383,8.59,1.0 +90-120s,4949,4394,127,2.57,428,8.65,1.0 +120-150s,4666,4109,139,2.98,418,8.96,1.0 +150-180s,4831,4269,129,2.67,433,8.96,1.0 +180-210s,5116,4512,148,2.89,456,8.91,1.0 +210-240s,5104,4502,148,2.9,454,8.89,1.0 +240-270s,4726,4182,143,3.03,401,8.48,1.0 +270-300s,4813,4273,134,2.78,406,8.44,1.0 +300-330s,5204,4588,146,2.81,470,9.03,1.0 +330-360s,9453,8969,125,1.32,359,3.8,1.0 +360-390s,10290,10003,120,1.17,167,1.62,1.0 +390-420s,10584,10345,112,1.06,127,1.2,1.0 diff --git a/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_010_time_analysis.csv b/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_010_time_analysis.csv new file mode 100644 index 000000000..c08002679 --- /dev/null +++ b/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_010_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,10643,10434,103,0.97,106,1.0,1.0 +30-60s,4410,3939,144,3.27,327,7.41,1.0 +60-90s,5023,4438,148,2.95,437,8.7,1.0 +90-120s,5019,4410,154,3.07,455,9.07,1.0 +120-150s,4804,4217,140,2.91,447,9.3,1.0 +150-180s,5027,4450,152,3.02,425,8.45,1.0 +180-210s,4889,4315,147,3.01,427,8.73,1.0 +210-240s,5057,4439,147,2.91,471,9.31,1.0 +240-270s,5260,4671,140,2.66,449,8.54,1.0 +270-300s,4808,4223,155,3.22,430,8.94,1.0 +300-330s,4956,4296,158,3.19,502,10.13,1.0 +330-360s,10196,9642,135,1.32,419,4.11,1.0 +360-390s,10954,10741,94,0.86,119,1.09,1.0 +390-420s,11144,10888,113,1.01,143,1.28,1.0 diff --git a/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_011_time_analysis.csv b/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_011_time_analysis.csv new file mode 100644 index 000000000..0ca7c6a85 --- /dev/null +++ b/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_011_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,11265,11065,97,0.86,103,0.91,1.0 +30-60s,4991,4415,156,3.13,420,8.42,1.0 +60-90s,5708,5028,164,2.87,516,9.04,1.0 +90-120s,5484,4834,158,2.88,492,8.97,1.0 +120-150s,5884,5157,160,2.72,567,9.64,1.0 +150-180s,6067,5359,170,2.8,538,8.87,1.0 +180-210s,5898,5195,158,2.68,545,9.24,1.0 +210-240s,5707,4973,157,2.75,577,10.11,1.0 +240-270s,6058,5389,149,2.46,520,8.58,1.0 +270-300s,5617,4981,161,2.87,475,8.46,1.0 +300-330s,5988,5237,163,2.72,588,9.82,1.0 +330-360s,10875,10329,131,1.2,415,3.82,1.0 +360-390s,11409,11102,135,1.18,172,1.51,1.0 +390-420s,11914,11655,118,0.99,141,1.18,1.0 diff --git a/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_012_time_analysis.csv b/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_012_time_analysis.csv new file mode 100644 index 000000000..a86d6f368 --- /dev/null +++ b/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_012_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,10463,10255,100,0.96,108,1.03,1.0 +30-60s,4857,4318,142,2.92,397,8.17,1.0 +60-90s,5664,5008,160,2.82,496,8.76,1.0 +90-120s,5932,5232,153,2.58,547,9.22,1.0 +120-150s,5792,5062,179,3.09,551,9.51,1.0 +150-180s,5579,4913,158,2.83,508,9.11,1.0 +180-210s,5431,4795,161,2.96,475,8.75,1.0 +210-240s,5838,5148,158,2.71,532,9.11,1.0 +240-270s,5852,5184,163,2.79,505,8.63,1.0 +270-300s,5278,4654,164,3.11,460,8.72,1.0 +300-330s,5852,5173,158,2.7,521,8.9,1.0 +330-360s,10580,10009,128,1.21,443,4.19,1.0 +360-390s,10950,10666,124,1.13,160,1.46,1.0 +390-420s,10895,10645,99,0.91,151,1.39,1.0 diff --git a/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_013_time_analysis.csv b/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_013_time_analysis.csv new file mode 100644 index 000000000..739351cc6 --- /dev/null +++ b/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_013_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,8514,8333,80,0.94,101,1.19,1.0 +30-60s,2917,2623,115,3.94,179,6.14,1.0 +60-90s,3519,3115,125,3.55,279,7.93,1.0 +90-120s,4990,4360,128,2.57,502,10.06,1.0 +120-150s,3628,3134,129,3.56,365,10.06,1.0 +150-180s,4244,3711,137,3.23,396,9.33,1.0 +180-210s,3885,3398,131,3.37,356,9.16,1.0 +210-240s,4400,3853,141,3.2,406,9.23,1.0 +240-270s,4158,3635,141,3.39,382,9.19,1.0 +270-300s,4026,3583,134,3.33,309,7.68,1.0 +300-330s,3843,3373,124,3.23,346,9.0,1.0 +330-360s,7290,6945,116,1.59,229,3.14,1.0 +360-390s,8351,8189,75,0.9,87,1.04,1.0 +390-420s,8432,8256,75,0.89,101,1.2,1.0 diff --git a/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_014_time_analysis.csv b/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_014_time_analysis.csv new file mode 100644 index 000000000..224645045 --- /dev/null +++ b/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_014_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,10301,10026,130,1.26,145,1.41,1.0 +30-60s,4676,4184,153,3.27,339,7.25,1.0 +60-90s,5372,4783,150,2.79,439,8.17,1.0 +90-120s,5406,4772,154,2.85,480,8.88,1.0 +120-150s,5761,5081,142,2.46,538,9.34,1.0 +150-180s,5393,4753,153,2.84,487,9.03,1.0 +180-210s,5690,4967,161,2.83,562,9.88,1.0 +210-240s,5565,4894,148,2.66,523,9.4,1.0 +240-270s,5230,4612,149,2.85,469,8.97,1.0 +270-300s,5823,5150,160,2.75,513,8.81,1.0 +300-330s,4970,4368,153,3.08,449,9.03,1.0 +330-360s,9737,9213,120,1.23,404,4.15,1.0 +360-390s,10396,10099,127,1.22,170,1.64,1.0 +390-420s,10553,10288,114,1.08,151,1.43,1.0 diff --git a/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_015_time_analysis.csv b/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_015_time_analysis.csv new file mode 100644 index 000000000..ed4a03c8a --- /dev/null +++ b/experiments/results/baseline/one_of_many_services_latency_degradation_adaptive/run_015_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,8243,8102,78,0.95,63,0.76,1.0 +30-60s,3650,3267,122,3.34,261,7.15,1.0 +60-90s,4068,3584,132,3.24,352,8.65,1.0 +90-120s,3673,3248,135,3.68,290,7.9,1.0 +120-150s,4450,3895,145,3.26,410,9.21,1.0 +150-180s,3845,3379,127,3.3,339,8.82,1.0 +180-210s,3995,3532,129,3.23,334,8.36,1.0 +210-240s,4029,3566,129,3.2,334,8.29,1.0 +240-270s,4177,3680,137,3.28,360,8.62,1.0 +270-300s,3859,3396,138,3.58,325,8.42,1.0 +300-330s,3787,3319,122,3.22,346,9.14,1.0 +330-360s,7737,7375,105,1.36,257,3.32,1.0 +360-390s,8439,8252,77,0.91,110,1.3,1.0 +390-420s,8029,7858,79,0.98,92,1.15,1.0 diff --git a/experiments/results/baseline/oscillating_errors/computed_baseline.txt b/experiments/results/baseline/oscillating_errors/computed_baseline.txt new file mode 100644 index 000000000..438c4e3f4 --- /dev/null +++ b/experiments/results/baseline/oscillating_errors/computed_baseline.txt @@ -0,0 +1,15 @@ +# Baseline computed at 2025-12-19 13:05:58 -0500 +# Source files: run_010_time_analysis.csv, run_015_time_analysis.csv, run_009_time_analysis.csv, run_011_time_analysis.csv, run_014_time_analysis.csv, run_008_time_analysis.csv, run_012_time_analysis.csv, run_013_time_analysis.csv, run_003_time_analysis.csv, run_006_time_analysis.csv, run_002_time_analysis.csv, run_007_time_analysis.csv, run_001_time_analysis.csv, run_004_time_analysis.csv, run_005_time_analysis.csv +# Total data points: 330 + +deviation_p5=2.8166666666666655 +deviation_p50=622.6666666666666 +deviation_p95=2923.5000000000014 + +error_rate_p5=0.749 +error_rate_p50=1.895 +error_rate_p95=5.8485000000000005 + +rejection_rate_p5=0.0 +rejection_rate_p50=37.29 +rejection_rate_p95=54.514500000000005 diff --git a/experiments/results/baseline/oscillating_errors/run_001_time_analysis.csv b/experiments/results/baseline/oscillating_errors/run_001_time_analysis.csv new file mode 100644 index 000000000..1e93ba092 --- /dev/null +++ b/experiments/results/baseline/oscillating_errors/run_001_time_analysis.csv @@ -0,0 +1,23 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-10s,5219,5174,45,0.86,0,0.0,1.0 +10-20s,5171,5118,53,1.02,0,0.0,1.0 +20-30s,5265,5142,123,2.34,0,0.0,2.0 +30-40s,7451,4776,311,4.17,2364,31.73,6.0 +40-50s,7957,4230,84,1.06,3643,45.78,2.0 +50-60s,7979,4281,259,3.25,3439,43.1,6.0 +60-70s,7839,4250,90,1.15,3499,44.64,2.0 +70-80s,7650,4189,259,3.39,3202,41.86,6.0 +80-90s,7916,4556,96,1.21,3264,41.23,2.0 +90-100s,7963,4124,280,3.52,3559,44.69,6.0 +100-110s,7818,3881,61,0.78,3876,49.58,2.0 +110-120s,7791,4148,260,3.34,3383,43.42,6.0 +120-130s,7823,4320,101,1.29,3402,43.49,2.0 +130-140s,7856,4141,305,3.88,3410,43.41,6.0 +140-150s,7948,3986,99,1.25,3863,48.6,2.0 +150-160s,7894,3937,234,2.96,3723,47.16,6.0 +160-170s,7856,3868,95,1.21,3893,49.55,2.0 +170-180s,7872,4212,289,3.67,3371,42.82,6.0 +180-190s,7763,4205,80,1.03,3478,44.8,2.0 +190-200s,7692,4049,248,3.22,3395,44.14,6.0 +200-210s,7763,4395,46,0.59,3322,42.79,1.0 +210-220s,7781,4863,50,0.64,2868,36.86,1.0 diff --git a/experiments/results/baseline/oscillating_errors/run_002_time_analysis.csv b/experiments/results/baseline/oscillating_errors/run_002_time_analysis.csv new file mode 100644 index 000000000..27b9fac8b --- /dev/null +++ b/experiments/results/baseline/oscillating_errors/run_002_time_analysis.csv @@ -0,0 +1,23 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-10s,5726,5672,54,0.94,0,0.0,1.0 +10-20s,5796,5759,37,0.64,0,0.0,1.0 +20-30s,5837,5706,131,2.24,0,0.0,2.0 +30-40s,7697,5321,332,4.31,2044,26.56,6.0 +40-50s,7873,4401,89,1.13,3383,42.97,2.0 +50-60s,6707,3623,245,3.65,2839,42.33,6.0 +60-70s,7801,4610,92,1.18,3099,39.73,2.0 +70-80s,6613,4246,284,4.29,2083,31.5,6.0 +80-90s,7889,4372,93,1.18,3424,43.4,2.0 +90-100s,7913,3697,266,3.36,3950,49.92,6.0 +100-110s,7860,3437,73,0.93,4350,55.34,2.0 +110-120s,7599,4243,273,3.59,3083,40.57,6.0 +120-130s,7853,4416,80,1.02,3357,42.75,2.0 +130-140s,7793,4363,280,3.59,3150,40.42,6.0 +140-150s,7848,4073,91,1.16,3684,46.94,2.0 +150-160s,7808,3798,241,3.09,3769,48.27,6.0 +160-170s,7880,4338,94,1.19,3448,43.76,2.0 +170-180s,7774,4604,276,3.55,2894,37.23,6.0 +180-190s,7822,4205,91,1.16,3526,45.08,2.0 +190-200s,7714,4237,251,3.25,3226,41.82,6.0 +200-210s,7846,4516,49,0.62,3281,41.82,1.0 +210-220s,7737,5110,43,0.56,2584,33.4,1.0 diff --git a/experiments/results/baseline/oscillating_errors/run_003_time_analysis.csv b/experiments/results/baseline/oscillating_errors/run_003_time_analysis.csv new file mode 100644 index 000000000..a05fc2e7d --- /dev/null +++ b/experiments/results/baseline/oscillating_errors/run_003_time_analysis.csv @@ -0,0 +1,23 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-10s,4493,4449,44,0.98,0,0.0,1.0 +10-20s,4687,4646,41,0.87,0,0.0,1.0 +20-30s,4804,4706,98,2.04,0,0.0,2.0 +30-40s,6430,4549,260,4.04,1621,25.21,6.0 +40-50s,7675,4267,110,1.43,3298,42.97,2.0 +50-60s,7636,4292,264,3.46,3080,40.34,6.0 +60-70s,7854,4062,82,1.04,3710,47.24,2.0 +70-80s,7782,4183,241,3.1,3358,43.15,6.0 +80-90s,7725,4335,94,1.22,3296,42.67,2.0 +90-100s,7706,4114,266,3.45,3326,43.16,6.0 +100-110s,7604,3885,85,1.12,3634,47.79,2.0 +110-120s,7575,3953,245,3.23,3377,44.58,6.0 +120-130s,7752,4126,119,1.54,3507,45.24,2.0 +130-140s,7750,3915,232,2.99,3603,46.49,6.0 +140-150s,7543,3972,90,1.19,3481,46.15,2.0 +150-160s,7384,3818,225,3.05,3341,45.25,6.0 +160-170s,7362,3842,91,1.24,3429,46.58,2.0 +170-180s,7471,4016,247,3.31,3208,42.94,6.0 +180-190s,7425,4040,83,1.12,3302,44.47,2.0 +190-200s,7433,4319,252,3.39,2862,38.5,6.0 +200-210s,7201,4342,58,0.81,2801,38.9,1.0 +210-220s,4944,4625,46,0.93,273,5.52,1.0 diff --git a/experiments/results/baseline/oscillating_errors/run_004_time_analysis.csv b/experiments/results/baseline/oscillating_errors/run_004_time_analysis.csv new file mode 100644 index 000000000..1397e25b3 --- /dev/null +++ b/experiments/results/baseline/oscillating_errors/run_004_time_analysis.csv @@ -0,0 +1,23 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-10s,1024,1012,12,1.17,0,0.0,1.0 +10-20s,1081,1069,12,1.11,0,0.0,1.0 +20-30s,1002,988,14,1.4,0,0.0,2.0 +30-40s,1107,1049,58,5.24,0,0.0,6.0 +40-50s,1142,1121,21,1.84,0,0.0,2.0 +50-60s,1155,1108,47,4.07,0,0.0,6.0 +60-70s,1045,1023,22,2.11,0,0.0,2.0 +70-80s,1071,986,85,7.94,0,0.0,6.0 +80-90s,1026,1008,18,1.75,0,0.0,2.0 +90-100s,1028,979,49,4.77,0,0.0,6.0 +100-110s,1073,1043,30,2.8,0,0.0,2.0 +110-120s,1117,1058,59,5.28,0,0.0,6.0 +120-130s,1120,1101,19,1.7,0,0.0,2.0 +130-140s,1072,1016,56,5.22,0,0.0,6.0 +140-150s,960,944,16,1.67,0,0.0,2.0 +150-160s,1084,1029,55,5.07,0,0.0,6.0 +160-170s,1077,1053,24,2.23,0,0.0,2.0 +170-180s,1140,1077,63,5.53,0,0.0,6.0 +180-190s,1105,1083,22,1.99,0,0.0,2.0 +190-200s,1121,1060,61,5.44,0,0.0,6.0 +200-210s,935,925,10,1.07,0,0.0,1.0 +210-220s,1151,1141,10,0.87,0,0.0,1.0 diff --git a/experiments/results/baseline/oscillating_errors/run_005_time_analysis.csv b/experiments/results/baseline/oscillating_errors/run_005_time_analysis.csv new file mode 100644 index 000000000..103e01b75 --- /dev/null +++ b/experiments/results/baseline/oscillating_errors/run_005_time_analysis.csv @@ -0,0 +1,23 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-10s,1448,1433,15,1.04,0,0.0,1.0 +10-20s,1565,1548,17,1.09,0,0.0,1.0 +20-30s,1505,1468,37,2.46,0,0.0,2.0 +30-40s,1556,1455,101,6.49,0,0.0,6.0 +40-50s,1627,1589,38,2.34,0,0.0,2.0 +50-60s,1600,1517,83,5.19,0,0.0,6.0 +60-70s,1556,1528,28,1.8,0,0.0,2.0 +70-80s,1595,1498,97,6.08,0,0.0,6.0 +80-90s,1594,1561,33,2.07,0,0.0,2.0 +90-100s,1504,1432,72,4.79,0,0.0,6.0 +100-110s,1542,1510,32,2.08,0,0.0,2.0 +110-120s,1612,1529,83,5.15,0,0.0,6.0 +120-130s,1694,1663,31,1.83,0,0.0,2.0 +130-140s,1534,1458,76,4.95,0,0.0,6.0 +140-150s,1585,1554,31,1.96,0,0.0,2.0 +150-160s,1559,1455,104,6.67,0,0.0,6.0 +160-170s,1572,1546,26,1.65,0,0.0,2.0 +170-180s,1516,1443,73,4.82,0,0.0,6.0 +180-190s,1569,1539,30,1.91,0,0.0,2.0 +190-200s,1467,1377,90,6.13,0,0.0,6.0 +200-210s,1494,1478,16,1.07,0,0.0,1.0 +210-220s,1572,1555,17,1.08,0,0.0,1.0 diff --git a/experiments/results/baseline/oscillating_errors/run_006_time_analysis.csv b/experiments/results/baseline/oscillating_errors/run_006_time_analysis.csv new file mode 100644 index 000000000..9942155a7 --- /dev/null +++ b/experiments/results/baseline/oscillating_errors/run_006_time_analysis.csv @@ -0,0 +1,23 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-10s,2463,2436,27,1.1,0,0.0,1.0 +10-20s,2478,2446,32,1.29,0,0.0,1.0 +20-30s,2417,2368,49,2.03,0,0.0,2.0 +30-40s,2688,2512,176,6.55,0,0.0,6.0 +40-50s,2483,2436,47,1.89,0,0.0,2.0 +50-60s,2421,2297,124,5.12,0,0.0,6.0 +60-70s,2443,2379,64,2.62,0,0.0,2.0 +70-80s,2549,2402,147,5.77,0,0.0,6.0 +80-90s,2430,2380,50,2.06,0,0.0,2.0 +90-100s,2574,2415,159,6.18,0,0.0,6.0 +100-110s,2345,2300,45,1.92,0,0.0,2.0 +110-120s,2491,2338,153,6.14,0,0.0,6.0 +120-130s,2479,2432,47,1.9,0,0.0,2.0 +130-140s,2431,2288,143,5.88,0,0.0,6.0 +140-150s,2509,2468,41,1.63,0,0.0,2.0 +150-160s,2430,2303,127,5.23,0,0.0,6.0 +160-170s,2392,2339,53,2.22,0,0.0,2.0 +170-180s,7814,2349,144,1.84,5321,68.1,6.0 +180-190s,5917,2391,39,0.66,3487,58.93,2.0 +190-200s,2520,2384,136,5.4,0,0.0,6.0 +200-210s,2478,2446,32,1.29,0,0.0,1.0 +210-220s,2518,2495,23,0.91,0,0.0,1.0 diff --git a/experiments/results/baseline/oscillating_errors/run_007_time_analysis.csv b/experiments/results/baseline/oscillating_errors/run_007_time_analysis.csv new file mode 100644 index 000000000..3a882c038 --- /dev/null +++ b/experiments/results/baseline/oscillating_errors/run_007_time_analysis.csv @@ -0,0 +1,23 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-10s,4866,4826,40,0.82,0,0.0,1.0 +10-20s,4992,4945,47,0.94,0,0.0,1.0 +20-30s,4945,4840,105,2.12,0,0.0,2.0 +30-40s,7376,4604,292,3.96,2480,33.62,6.0 +40-50s,7654,4259,81,1.06,3314,43.3,2.0 +50-60s,7808,3932,225,2.88,3651,46.76,6.0 +60-70s,7893,4143,81,1.03,3669,46.48,2.0 +70-80s,7902,4590,288,3.64,3024,38.27,6.0 +80-90s,7881,4152,119,1.51,3610,45.81,2.0 +90-100s,7824,3678,250,3.2,3896,49.8,6.0 +100-110s,7735,3877,85,1.1,3773,48.78,2.0 +110-120s,7672,4118,256,3.34,3298,42.99,6.0 +120-130s,7728,4325,74,0.96,3329,43.08,2.0 +130-140s,6508,4676,277,4.26,1555,23.89,6.0 +140-150s,6671,4821,90,1.35,1760,26.38,2.0 +150-160s,7635,4055,268,3.51,3312,43.38,6.0 +160-170s,7904,3839,56,0.71,4009,50.72,2.0 +170-180s,7922,4109,257,3.24,3556,44.89,6.0 +180-190s,7814,4144,89,1.14,3581,45.83,2.0 +190-200s,7310,3850,248,3.39,3212,43.94,6.0 +200-210s,7489,4183,55,0.73,3251,43.41,1.0 +210-220s,6308,4663,43,0.68,1602,25.4,1.0 diff --git a/experiments/results/baseline/oscillating_errors/run_008_time_analysis.csv b/experiments/results/baseline/oscillating_errors/run_008_time_analysis.csv new file mode 100644 index 000000000..adbd2a978 --- /dev/null +++ b/experiments/results/baseline/oscillating_errors/run_008_time_analysis.csv @@ -0,0 +1,23 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-10s,3359,3321,38,1.13,0,0.0,1.0 +10-20s,3661,3613,48,1.31,0,0.0,1.0 +20-30s,3547,3481,66,1.86,0,0.0,2.0 +30-40s,3748,3517,231,6.16,0,0.0,6.0 +40-50s,7056,3402,77,1.09,3577,50.69,2.0 +50-60s,7494,3252,200,2.67,4042,53.94,6.0 +60-70s,7751,3477,76,0.98,4198,54.16,2.0 +70-80s,7818,3228,196,2.51,4394,56.2,6.0 +80-90s,7740,3445,101,1.3,4194,54.19,2.0 +90-100s,7606,3313,206,2.71,4087,53.73,6.0 +100-110s,4432,3476,83,1.87,873,19.7,2.0 +110-120s,5260,3498,199,3.78,1563,29.71,6.0 +120-130s,7662,3370,76,0.99,4216,55.02,2.0 +130-140s,7011,3418,177,2.52,3416,48.72,6.0 +140-150s,7692,3389,89,1.16,4214,54.78,2.0 +150-160s,5339,3315,192,3.6,1832,34.31,6.0 +160-170s,5563,3464,79,1.42,2020,36.31,2.0 +170-180s,7479,3219,162,2.17,4098,54.79,6.0 +180-190s,7609,3343,71,0.93,4195,55.13,2.0 +190-200s,5746,3460,184,3.2,2102,36.58,6.0 +200-210s,3491,3446,45,1.29,0,0.0,1.0 +210-220s,3507,3474,33,0.94,0,0.0,1.0 diff --git a/experiments/results/baseline/oscillating_errors/run_009_time_analysis.csv b/experiments/results/baseline/oscillating_errors/run_009_time_analysis.csv new file mode 100644 index 000000000..38f63cd9b --- /dev/null +++ b/experiments/results/baseline/oscillating_errors/run_009_time_analysis.csv @@ -0,0 +1,23 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-10s,5389,5327,62,1.15,0,0.0,1.0 +10-20s,5600,5548,52,0.93,0,0.0,1.0 +20-30s,5612,5505,107,1.91,0,0.0,2.0 +30-40s,8253,5115,301,3.65,2837,34.38,6.0 +40-50s,7916,4520,97,1.23,3299,41.68,2.0 +50-60s,7919,3931,260,3.28,3728,47.08,6.0 +60-70s,7813,3959,78,1.0,3776,48.33,2.0 +70-80s,7896,4455,274,3.47,3167,40.11,6.0 +80-90s,7881,4297,92,1.17,3492,44.31,2.0 +90-100s,7931,4663,306,3.86,2962,37.35,6.0 +100-110s,7907,4083,83,1.05,3741,47.31,2.0 +110-120s,7783,4069,263,3.38,3451,44.34,6.0 +120-130s,7895,4619,107,1.36,3169,40.14,2.0 +130-140s,7939,4585,275,3.46,3079,38.78,6.0 +140-150s,7940,4112,96,1.21,3732,47.0,2.0 +150-160s,7817,4525,281,3.59,3011,38.52,6.0 +160-170s,7925,4468,101,1.27,3356,42.35,2.0 +170-180s,7618,4111,282,3.7,3225,42.33,6.0 +180-190s,7887,4001,85,1.08,3801,48.19,2.0 +190-200s,7858,4093,262,3.33,3503,44.58,6.0 +200-210s,7503,4650,50,0.67,2803,37.36,1.0 +210-220s,5561,5495,66,1.19,0,0.0,1.0 diff --git a/experiments/results/baseline/oscillating_errors/run_010_time_analysis.csv b/experiments/results/baseline/oscillating_errors/run_010_time_analysis.csv new file mode 100644 index 000000000..40c50d783 --- /dev/null +++ b/experiments/results/baseline/oscillating_errors/run_010_time_analysis.csv @@ -0,0 +1,23 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-10s,5376,5320,56,1.04,0,0.0,1.0 +10-20s,5634,5576,58,1.03,0,0.0,1.0 +20-30s,5652,5535,117,2.07,0,0.0,2.0 +30-40s,7368,5257,333,4.52,1778,24.13,6.0 +40-50s,7942,4292,97,1.22,3553,44.74,2.0 +50-60s,7846,4157,235,3.0,3454,44.02,6.0 +60-70s,7956,4421,111,1.4,3424,43.04,2.0 +70-80s,7935,4470,274,3.45,3191,40.21,6.0 +80-90s,7945,4061,88,1.11,3796,47.78,2.0 +90-100s,7933,4178,250,3.15,3505,44.18,6.0 +100-110s,7906,4453,91,1.15,3362,42.52,2.0 +110-120s,7918,4604,314,3.97,3000,37.89,6.0 +120-130s,7921,4265,99,1.25,3557,44.91,2.0 +130-140s,7925,4316,252,3.18,3357,42.36,6.0 +140-150s,7874,4300,111,1.41,3463,43.98,2.0 +150-160s,7946,4312,257,3.23,3377,42.5,6.0 +160-170s,7910,4128,130,1.64,3652,46.17,2.0 +170-180s,7919,4119,255,3.22,3545,44.77,6.0 +180-190s,7809,4062,84,1.08,3663,46.91,2.0 +190-200s,7813,4309,282,3.61,3222,41.24,6.0 +200-210s,7755,4662,69,0.89,3024,38.99,1.0 +210-220s,5641,5594,47,0.83,0,0.0,1.0 diff --git a/experiments/results/baseline/oscillating_errors/run_011_time_analysis.csv b/experiments/results/baseline/oscillating_errors/run_011_time_analysis.csv new file mode 100644 index 000000000..14f313b2a --- /dev/null +++ b/experiments/results/baseline/oscillating_errors/run_011_time_analysis.csv @@ -0,0 +1,23 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-10s,5394,5343,51,0.95,0,0.0,1.0 +10-20s,5781,5724,57,0.99,0,0.0,1.0 +20-30s,5843,5743,100,1.71,0,0.0,2.0 +30-40s,7270,5397,316,4.35,1557,21.42,6.0 +40-50s,7476,4179,90,1.2,3207,42.9,2.0 +50-60s,7593,4177,264,3.48,3152,41.51,6.0 +60-70s,7760,4319,127,1.64,3314,42.71,2.0 +70-80s,7452,4143,290,3.89,3019,40.51,6.0 +80-90s,7815,4039,98,1.25,3678,47.06,2.0 +90-100s,7599,4149,258,3.4,3192,42.01,6.0 +100-110s,7530,4806,115,1.53,2609,34.65,2.0 +110-120s,7324,4467,239,3.26,2618,35.75,6.0 +120-130s,7347,4465,105,1.43,2777,37.8,2.0 +130-140s,7585,4925,273,3.6,2387,31.47,6.0 +140-150s,7619,4846,121,1.59,2652,34.81,2.0 +150-160s,7575,4378,269,3.55,2928,38.65,6.0 +160-170s,7570,4029,104,1.37,3437,45.4,2.0 +170-180s,7334,4326,280,3.82,2728,37.2,6.0 +180-190s,7397,4415,111,1.5,2871,38.81,2.0 +190-200s,7294,4455,294,4.03,2545,34.89,6.0 +200-210s,7404,4319,49,0.66,3036,41.0,1.0 +210-220s,6446,5376,53,0.82,1017,15.78,1.0 diff --git a/experiments/results/baseline/oscillating_errors/run_012_time_analysis.csv b/experiments/results/baseline/oscillating_errors/run_012_time_analysis.csv new file mode 100644 index 000000000..e5b5e0bad --- /dev/null +++ b/experiments/results/baseline/oscillating_errors/run_012_time_analysis.csv @@ -0,0 +1,23 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-10s,1936,1913,23,1.19,0,0.0,1.0 +10-20s,1901,1875,26,1.37,0,0.0,1.0 +20-30s,1960,1926,34,1.73,0,0.0,2.0 +30-40s,1963,1849,114,5.81,0,0.0,6.0 +40-50s,1920,1882,38,1.98,0,0.0,2.0 +50-60s,2035,1898,137,6.73,0,0.0,6.0 +60-70s,1795,1763,32,1.78,0,0.0,2.0 +70-80s,1816,1706,110,6.06,0,0.0,6.0 +80-90s,1826,1783,43,2.35,0,0.0,2.0 +90-100s,1895,1771,124,6.54,0,0.0,6.0 +100-110s,1981,1939,42,2.12,0,0.0,2.0 +110-120s,1938,1823,115,5.93,0,0.0,6.0 +120-130s,6890,1938,37,0.54,4915,71.34,2.0 +130-140s,6879,1628,92,1.34,5159,75.0,6.0 +140-150s,1849,1813,36,1.95,0,0.0,2.0 +150-160s,1887,1788,99,5.25,0,0.0,6.0 +160-170s,1902,1867,35,1.84,0,0.0,2.0 +170-180s,1861,1751,110,5.91,0,0.0,6.0 +180-190s,1868,1829,39,2.09,0,0.0,2.0 +190-200s,1876,1757,119,6.34,0,0.0,6.0 +200-210s,1762,1742,20,1.14,0,0.0,1.0 +210-220s,1837,1816,21,1.14,0,0.0,1.0 diff --git a/experiments/results/baseline/oscillating_errors/run_013_time_analysis.csv b/experiments/results/baseline/oscillating_errors/run_013_time_analysis.csv new file mode 100644 index 000000000..a04dce065 --- /dev/null +++ b/experiments/results/baseline/oscillating_errors/run_013_time_analysis.csv @@ -0,0 +1,23 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-10s,4958,4912,46,0.93,0,0.0,1.0 +10-20s,5404,5339,65,1.2,0,0.0,1.0 +20-30s,5423,5339,84,1.55,0,0.0,2.0 +30-40s,6566,5283,271,4.13,1012,15.41,6.0 +40-50s,7766,4443,101,1.3,3222,41.49,2.0 +50-60s,7912,4395,259,3.27,3258,41.18,6.0 +60-70s,7822,3957,89,1.14,3776,48.27,2.0 +70-80s,7850,4221,253,3.22,3376,43.01,6.0 +80-90s,7842,4293,95,1.21,3454,44.04,2.0 +90-100s,7753,4419,291,3.75,3043,39.25,6.0 +100-110s,7732,4374,98,1.27,3260,42.16,2.0 +110-120s,7828,4520,274,3.5,3034,38.76,6.0 +120-130s,7791,4473,100,1.28,3218,41.3,2.0 +130-140s,7849,4463,251,3.2,3135,39.94,6.0 +140-150s,7842,4297,118,1.5,3427,43.7,2.0 +150-160s,7877,4004,245,3.11,3628,46.06,6.0 +160-170s,7583,3990,81,1.07,3512,46.31,2.0 +170-180s,7799,4332,262,3.36,3205,41.1,6.0 +180-190s,7836,4113,101,1.29,3622,46.22,2.0 +190-200s,7589,4138,268,3.53,3183,41.94,6.0 +200-210s,7749,4237,55,0.71,3457,44.61,1.0 +210-220s,6566,5128,57,0.87,1381,21.03,1.0 diff --git a/experiments/results/baseline/oscillating_errors/run_014_time_analysis.csv b/experiments/results/baseline/oscillating_errors/run_014_time_analysis.csv new file mode 100644 index 000000000..dc1edb0c4 --- /dev/null +++ b/experiments/results/baseline/oscillating_errors/run_014_time_analysis.csv @@ -0,0 +1,23 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-10s,2944,2923,21,0.71,0,0.0,1.0 +10-20s,3026,2997,29,0.96,0,0.0,1.0 +20-30s,3095,3024,71,2.29,0,0.0,2.0 +30-40s,4448,2983,199,4.47,1266,28.46,6.0 +40-50s,7866,2891,54,0.69,4921,62.56,2.0 +50-60s,5435,2992,193,3.55,2250,41.4,6.0 +60-70s,3118,3063,55,1.76,0,0.0,2.0 +70-80s,3207,3024,183,5.71,0,0.0,6.0 +80-90s,3093,3025,68,2.2,0,0.0,2.0 +90-100s,6790,2890,174,2.56,3726,54.87,6.0 +100-110s,7547,2929,75,0.99,4543,60.2,2.0 +110-120s,3129,2908,221,7.06,0,0.0,6.0 +120-130s,3108,3036,72,2.32,0,0.0,2.0 +130-140s,6300,2983,166,2.63,3151,50.02,6.0 +140-150s,7908,2923,60,0.76,4925,62.28,2.0 +150-160s,3525,2962,203,5.76,360,10.21,6.0 +160-170s,3061,2988,73,2.38,0,0.0,2.0 +170-180s,8583,2835,185,2.16,5563,64.81,6.0 +180-190s,7654,2925,60,0.78,4669,61.0,2.0 +190-200s,7831,2928,176,2.25,4727,60.36,6.0 +200-210s,3503,3045,36,1.03,422,12.05,1.0 +210-220s,3084,3052,32,1.04,0,0.0,1.0 diff --git a/experiments/results/baseline/oscillating_errors/run_015_time_analysis.csv b/experiments/results/baseline/oscillating_errors/run_015_time_analysis.csv new file mode 100644 index 000000000..9772e4d6d --- /dev/null +++ b/experiments/results/baseline/oscillating_errors/run_015_time_analysis.csv @@ -0,0 +1,23 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-10s,5745,5680,65,1.13,0,0.0,1.0 +10-20s,5801,5749,52,0.9,0,0.0,1.0 +20-30s,5868,5756,112,1.91,0,0.0,2.0 +30-40s,7960,5152,354,4.45,2454,30.83,6.0 +40-50s,7958,4052,71,0.89,3835,48.19,2.0 +50-60s,7786,4459,278,3.57,3049,39.16,6.0 +60-70s,7764,4575,84,1.08,3105,39.99,2.0 +70-80s,7953,4227,283,3.56,3443,43.29,6.0 +80-90s,7922,4124,73,0.92,3725,47.02,2.0 +90-100s,7943,4756,325,4.09,2862,36.03,6.0 +100-110s,7943,4006,85,1.07,3852,48.5,2.0 +110-120s,7944,4408,277,3.49,3259,41.02,6.0 +120-130s,7857,4850,96,1.22,2911,37.05,2.0 +130-140s,7905,4052,273,3.45,3580,45.29,6.0 +140-150s,7881,4143,72,0.91,3666,46.52,2.0 +150-160s,7925,4585,291,3.67,3049,38.47,6.0 +160-170s,7757,4557,103,1.33,3097,39.93,2.0 +170-180s,7852,4129,256,3.26,3467,44.15,6.0 +180-190s,7870,3990,81,1.03,3799,48.27,2.0 +190-200s,7916,4647,309,3.9,2960,37.39,6.0 +200-210s,7866,4507,58,0.74,3301,41.97,1.0 +210-220s,7917,5048,56,0.71,2813,35.53,1.0 diff --git a/experiments/results/baseline/oscillating_errors_adaptive/computed_baseline.txt b/experiments/results/baseline/oscillating_errors_adaptive/computed_baseline.txt new file mode 100644 index 000000000..8ebf2d40e --- /dev/null +++ b/experiments/results/baseline/oscillating_errors_adaptive/computed_baseline.txt @@ -0,0 +1,15 @@ +# Baseline computed at 2025-12-19 13:05:58 -0500 +# Source files: run_010_time_analysis.csv, run_015_time_analysis.csv, run_009_time_analysis.csv, run_011_time_analysis.csv, run_014_time_analysis.csv, run_008_time_analysis.csv, run_012_time_analysis.csv, run_013_time_analysis.csv, run_003_time_analysis.csv, run_006_time_analysis.csv, run_002_time_analysis.csv, run_007_time_analysis.csv, run_001_time_analysis.csv, run_004_time_analysis.csv, run_005_time_analysis.csv +# Total data points: 330 + +deviation_p5=15.31666666666667 +deviation_p50=56.500000000000014 +deviation_p95=339.3833333333334 + +error_rate_p5=0.9245 +error_rate_p50=2.275 +error_rate_p95=6.091 + +rejection_rate_p5=0.2045 +rejection_rate_p50=3.005 +rejection_rate_p95=5.088500000000007 diff --git a/experiments/results/baseline/oscillating_errors_adaptive/run_001_time_analysis.csv b/experiments/results/baseline/oscillating_errors_adaptive/run_001_time_analysis.csv new file mode 100644 index 000000000..46f9902a9 --- /dev/null +++ b/experiments/results/baseline/oscillating_errors_adaptive/run_001_time_analysis.csv @@ -0,0 +1,23 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-10s,2174,2139,27,1.24,8,0.37,1.0 +10-20s,2391,2355,28,1.17,8,0.33,1.0 +20-30s,2358,2305,44,1.87,9,0.38,2.0 +30-40s,2401,2235,115,4.79,51,2.12,6.0 +40-50s,2469,2321,62,2.51,86,3.48,2.0 +50-60s,2555,2346,126,4.93,83,3.25,6.0 +60-70s,2564,2424,54,2.11,86,3.35,2.0 +70-80s,2409,2223,121,5.02,65,2.7,6.0 +80-90s,2460,2305,58,2.36,97,3.94,2.0 +90-100s,2570,2344,141,5.49,85,3.31,6.0 +100-110s,2465,2315,56,2.27,94,3.81,2.0 +110-120s,2505,2310,122,4.87,73,2.91,6.0 +120-130s,2392,2237,62,2.59,93,3.89,2.0 +130-140s,2563,2350,134,5.23,79,3.08,6.0 +140-150s,2544,2386,47,1.85,111,4.36,2.0 +150-160s,2562,2364,128,5.0,70,2.73,6.0 +160-170s,2477,2320,54,2.18,103,4.16,2.0 +170-180s,2656,2402,164,6.17,90,3.39,6.0 +180-190s,2487,2295,58,2.33,134,5.39,2.0 +190-200s,2528,2304,134,5.3,90,3.56,6.0 +200-210s,2410,2268,40,1.66,102,4.23,1.0 +210-220s,2345,2295,22,0.94,28,1.19,1.0 diff --git a/experiments/results/baseline/oscillating_errors_adaptive/run_002_time_analysis.csv b/experiments/results/baseline/oscillating_errors_adaptive/run_002_time_analysis.csv new file mode 100644 index 000000000..2ab7ab24d --- /dev/null +++ b/experiments/results/baseline/oscillating_errors_adaptive/run_002_time_analysis.csv @@ -0,0 +1,23 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-10s,4473,4413,48,1.07,12,0.27,1.0 +10-20s,4511,4457,50,1.11,4,0.09,1.0 +20-30s,4559,4437,102,2.24,20,0.44,2.0 +30-40s,4779,4394,265,5.55,120,2.51,6.0 +40-50s,4754,4518,83,1.75,153,3.22,2.0 +50-60s,4439,4048,271,6.1,120,2.7,6.0 +60-70s,4673,4419,99,2.12,155,3.32,2.0 +70-80s,4662,4255,274,5.88,133,2.85,6.0 +80-90s,4658,4424,87,1.87,147,3.16,2.0 +90-100s,4833,4382,295,6.1,156,3.23,6.0 +100-110s,4826,4516,119,2.47,191,3.96,2.0 +110-120s,4864,4415,280,5.76,169,3.47,6.0 +120-130s,4738,4463,101,2.13,174,3.67,2.0 +130-140s,4789,4379,280,5.85,130,2.71,6.0 +140-150s,4737,4478,108,2.28,151,3.19,2.0 +150-160s,4827,4386,286,5.93,155,3.21,6.0 +160-170s,4760,4488,103,2.16,169,3.55,2.0 +170-180s,4870,4420,276,5.67,174,3.57,6.0 +180-190s,4718,4501,78,1.65,139,2.95,2.0 +190-200s,4825,4416,278,5.76,131,2.72,6.0 +200-210s,4707,4525,50,1.06,132,2.8,1.0 +210-220s,4514,4456,43,0.95,15,0.33,1.0 diff --git a/experiments/results/baseline/oscillating_errors_adaptive/run_003_time_analysis.csv b/experiments/results/baseline/oscillating_errors_adaptive/run_003_time_analysis.csv new file mode 100644 index 000000000..09ef9728e --- /dev/null +++ b/experiments/results/baseline/oscillating_errors_adaptive/run_003_time_analysis.csv @@ -0,0 +1,23 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-10s,4757,4693,48,1.01,16,0.34,1.0 +10-20s,5052,4987,59,1.17,6,0.12,1.0 +20-30s,5096,4960,114,2.24,22,0.43,2.0 +30-40s,5387,4946,310,5.75,131,2.43,6.0 +40-50s,5303,5007,121,2.28,175,3.3,2.0 +50-60s,5385,4950,298,5.53,137,2.54,6.0 +60-70s,5258,4969,137,2.61,152,2.89,2.0 +70-80s,5399,4905,331,6.13,163,3.02,6.0 +80-90s,5328,4986,131,2.46,211,3.96,2.0 +90-100s,5345,4908,299,5.59,138,2.58,6.0 +100-110s,5244,4973,110,2.1,161,3.07,2.0 +110-120s,5276,4858,287,5.44,131,2.48,6.0 +120-130s,5238,4957,118,2.25,163,3.11,2.0 +130-140s,5374,4923,303,5.64,148,2.75,6.0 +140-150s,5313,5045,111,2.09,157,2.96,2.0 +150-160s,5398,4948,330,6.11,120,2.22,6.0 +160-170s,5316,5018,114,2.14,184,3.46,2.0 +170-180s,5422,4938,324,5.98,160,2.95,6.0 +180-190s,5327,4993,127,2.38,207,3.89,2.0 +190-200s,5308,4878,303,5.71,127,2.39,6.0 +200-210s,5196,4960,68,1.31,168,3.23,1.0 +210-220s,5056,4994,43,0.85,19,0.38,1.0 diff --git a/experiments/results/baseline/oscillating_errors_adaptive/run_004_time_analysis.csv b/experiments/results/baseline/oscillating_errors_adaptive/run_004_time_analysis.csv new file mode 100644 index 000000000..d6025599c --- /dev/null +++ b/experiments/results/baseline/oscillating_errors_adaptive/run_004_time_analysis.csv @@ -0,0 +1,23 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-10s,4082,4023,50,1.22,9,0.22,1.0 +10-20s,4477,4427,45,1.01,5,0.11,1.0 +20-30s,4531,4420,86,1.9,25,0.55,2.0 +30-40s,4805,4406,273,5.68,126,2.62,6.0 +40-50s,4739,4477,107,2.26,155,3.27,2.0 +50-60s,4810,4398,276,5.74,136,2.83,6.0 +60-70s,4744,4479,90,1.9,175,3.69,2.0 +70-80s,4872,4452,278,5.71,142,2.91,6.0 +80-90s,4672,4402,113,2.42,157,3.36,2.0 +90-100s,4832,4421,269,5.57,142,2.94,6.0 +100-110s,4612,4309,133,2.88,170,3.69,2.0 +110-120s,4789,4408,252,5.26,129,2.69,6.0 +120-130s,4757,4491,111,2.33,155,3.26,2.0 +130-140s,4750,4348,269,5.66,133,2.8,6.0 +140-150s,4749,4454,96,2.02,199,4.19,2.0 +150-160s,4760,4353,270,5.67,137,2.88,6.0 +160-170s,4723,4430,112,2.37,181,3.83,2.0 +170-180s,4742,4378,254,5.36,110,2.32,6.0 +180-190s,4719,4446,104,2.2,169,3.58,2.0 +190-200s,4816,4431,270,5.61,115,2.39,6.0 +200-210s,4690,4476,77,1.64,137,2.92,1.0 +210-220s,4549,4461,54,1.19,34,0.75,1.0 diff --git a/experiments/results/baseline/oscillating_errors_adaptive/run_005_time_analysis.csv b/experiments/results/baseline/oscillating_errors_adaptive/run_005_time_analysis.csv new file mode 100644 index 000000000..7f8eb0477 --- /dev/null +++ b/experiments/results/baseline/oscillating_errors_adaptive/run_005_time_analysis.csv @@ -0,0 +1,23 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-10s,650,638,11,1.69,1,0.15,1.0 +10-20s,641,616,10,1.56,15,2.34,1.0 +20-30s,538,522,10,1.86,6,1.12,2.0 +30-40s,591,530,24,4.06,37,6.26,6.0 +40-50s,530,488,17,3.21,25,4.72,2.0 +50-60s,568,505,28,4.93,35,6.16,6.0 +60-70s,2483,486,9,0.36,1988,80.06,2.0 +70-80s,2620,504,35,1.34,2081,79.43,6.0 +80-90s,629,580,12,1.91,37,5.88,2.0 +90-100s,557,509,24,4.31,24,4.31,6.0 +100-110s,589,553,12,2.04,24,4.07,2.0 +110-120s,1854,451,20,1.08,1383,74.6,6.0 +120-130s,1896,464,10,0.53,1422,75.0,2.0 +130-140s,1952,417,30,1.54,1505,77.1,6.0 +140-150s,560,515,7,1.25,38,6.79,2.0 +150-160s,1988,440,25,1.26,1523,76.61,6.0 +160-170s,583,533,10,1.72,40,6.86,2.0 +170-180s,1300,410,38,2.92,852,65.54,6.0 +180-190s,4108,456,15,0.37,3637,88.53,2.0 +190-200s,744,547,34,4.57,163,21.91,6.0 +200-210s,1773,371,4,0.23,1398,78.85,1.0 +210-220s,742,587,6,0.81,149,20.08,1.0 diff --git a/experiments/results/baseline/oscillating_errors_adaptive/run_006_time_analysis.csv b/experiments/results/baseline/oscillating_errors_adaptive/run_006_time_analysis.csv new file mode 100644 index 000000000..087495f42 --- /dev/null +++ b/experiments/results/baseline/oscillating_errors_adaptive/run_006_time_analysis.csv @@ -0,0 +1,23 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-10s,3071,3040,28,0.91,3,0.1,1.0 +10-20s,3051,3018,27,0.88,6,0.2,1.0 +20-30s,3052,2973,62,2.03,17,0.56,2.0 +30-40s,3305,3046,179,5.42,80,2.42,6.0 +40-50s,3017,2856,53,1.76,108,3.58,2.0 +50-60s,3294,3013,189,5.74,92,2.79,6.0 +60-70s,3259,3084,68,2.09,107,3.28,2.0 +70-80s,3204,2893,192,5.99,119,3.71,6.0 +80-90s,3082,2911,56,1.82,115,3.73,2.0 +90-100s,3262,2979,187,5.73,96,2.94,6.0 +100-110s,3163,2993,69,2.18,101,3.19,2.0 +110-120s,3224,2944,174,5.4,106,3.29,6.0 +120-130s,3173,2982,72,2.27,119,3.75,2.0 +130-140s,3258,2937,208,6.38,113,3.47,6.0 +140-150s,3328,3123,62,1.86,143,4.3,2.0 +150-160s,3334,3029,197,5.91,108,3.24,6.0 +160-170s,3240,3055,62,1.91,123,3.8,2.0 +170-180s,3252,2977,172,5.29,103,3.17,6.0 +180-190s,3145,2981,55,1.75,109,3.47,2.0 +190-200s,3142,2897,159,5.06,86,2.74,6.0 +200-210s,3211,3083,28,0.87,100,3.11,1.0 +210-220s,2931,2898,19,0.65,14,0.48,1.0 diff --git a/experiments/results/baseline/oscillating_errors_adaptive/run_007_time_analysis.csv b/experiments/results/baseline/oscillating_errors_adaptive/run_007_time_analysis.csv new file mode 100644 index 000000000..3eac4aa15 --- /dev/null +++ b/experiments/results/baseline/oscillating_errors_adaptive/run_007_time_analysis.csv @@ -0,0 +1,23 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-10s,3849,3793,41,1.07,15,0.39,1.0 +10-20s,3968,3930,34,0.86,4,0.1,1.0 +20-30s,3903,3808,73,1.87,22,0.56,2.0 +30-40s,4275,3892,250,5.85,133,3.11,6.0 +40-50s,4111,3887,83,2.02,141,3.43,2.0 +50-60s,4147,3760,256,6.17,131,3.16,6.0 +60-70s,4125,3864,91,2.21,170,4.12,2.0 +70-80s,4280,3909,234,5.47,137,3.2,6.0 +80-90s,4046,3833,95,2.35,118,2.92,2.0 +90-100s,4186,3813,242,5.78,131,3.13,6.0 +100-110s,4101,3850,87,2.12,164,4.0,2.0 +110-120s,4201,3829,245,5.83,127,3.02,6.0 +120-130s,4141,3895,92,2.22,154,3.72,2.0 +130-140s,4220,3863,230,5.45,127,3.01,6.0 +140-150s,4186,3971,68,1.62,147,3.51,2.0 +150-160s,4189,3871,225,5.37,93,2.22,6.0 +160-170s,4119,3877,94,2.28,148,3.59,2.0 +170-180s,4127,3778,229,5.55,120,2.91,6.0 +180-190s,4155,3909,102,2.45,144,3.47,2.0 +190-200s,4202,3834,252,6.0,116,2.76,6.0 +200-210s,4065,3887,40,0.98,138,3.39,1.0 +210-220s,3974,3902,41,1.03,31,0.78,1.0 diff --git a/experiments/results/baseline/oscillating_errors_adaptive/run_008_time_analysis.csv b/experiments/results/baseline/oscillating_errors_adaptive/run_008_time_analysis.csv new file mode 100644 index 000000000..32a789530 --- /dev/null +++ b/experiments/results/baseline/oscillating_errors_adaptive/run_008_time_analysis.csv @@ -0,0 +1,23 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-10s,3842,3778,46,1.2,18,0.47,1.0 +10-20s,4222,4179,40,0.95,3,0.07,1.0 +20-30s,4142,4052,73,1.76,17,0.41,2.0 +30-40s,4498,4144,255,5.67,99,2.2,6.0 +40-50s,4336,4101,94,2.17,141,3.25,2.0 +50-60s,4408,4058,245,5.56,105,2.38,6.0 +60-70s,4405,4140,100,2.27,165,3.75,2.0 +70-80s,4476,4108,256,5.72,112,2.5,6.0 +80-90s,4391,4127,101,2.3,163,3.71,2.0 +90-100s,4422,4052,246,5.56,124,2.8,6.0 +100-110s,4352,4081,96,2.21,175,4.02,2.0 +110-120s,4391,4052,220,5.01,119,2.71,6.0 +120-130s,4424,4183,98,2.22,143,3.23,2.0 +130-140s,4380,3979,280,6.39,121,2.76,6.0 +140-150s,4323,4047,90,2.08,186,4.3,2.0 +150-160s,4354,4040,219,5.03,95,2.18,6.0 +160-170s,4311,4088,79,1.83,144,3.34,2.0 +170-180s,4382,4028,245,5.59,109,2.49,6.0 +180-190s,4507,4200,104,2.31,203,4.5,2.0 +190-200s,4395,4024,247,5.62,124,2.82,6.0 +200-210s,4343,4119,61,1.4,163,3.75,1.0 +210-220s,4209,4149,31,0.74,29,0.69,1.0 diff --git a/experiments/results/baseline/oscillating_errors_adaptive/run_009_time_analysis.csv b/experiments/results/baseline/oscillating_errors_adaptive/run_009_time_analysis.csv new file mode 100644 index 000000000..786449e37 --- /dev/null +++ b/experiments/results/baseline/oscillating_errors_adaptive/run_009_time_analysis.csv @@ -0,0 +1,23 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-10s,5627,5568,52,0.92,7,0.12,1.0 +10-20s,5792,5753,38,0.66,1,0.02,1.0 +20-30s,5857,5735,111,1.9,11,0.19,2.0 +30-40s,6149,5658,343,5.58,148,2.41,6.0 +40-50s,6014,5727,128,2.13,159,2.64,2.0 +50-60s,6198,5654,365,5.89,179,2.89,6.0 +60-70s,6039,5702,121,2.0,216,3.58,2.0 +70-80s,6154,5640,347,5.64,167,2.71,6.0 +80-90s,6058,5730,127,2.1,201,3.32,2.0 +90-100s,6157,5657,355,5.77,145,2.36,6.0 +100-110s,6082,5719,146,2.4,217,3.57,2.0 +110-120s,6182,5645,367,5.94,170,2.75,6.0 +120-130s,6079,5732,129,2.12,218,3.59,2.0 +130-140s,6164,5654,349,5.66,161,2.61,6.0 +140-150s,6035,5736,133,2.2,166,2.75,2.0 +150-160s,6198,5656,365,5.89,177,2.86,6.0 +160-170s,6044,5741,126,2.08,177,2.93,2.0 +170-180s,6166,5650,362,5.87,154,2.5,6.0 +180-190s,6045,5744,113,1.87,188,3.11,2.0 +190-200s,6186,5670,363,5.87,153,2.47,6.0 +200-210s,6000,5758,67,1.12,175,2.92,1.0 +210-220s,5810,5727,61,1.05,22,0.38,1.0 diff --git a/experiments/results/baseline/oscillating_errors_adaptive/run_010_time_analysis.csv b/experiments/results/baseline/oscillating_errors_adaptive/run_010_time_analysis.csv new file mode 100644 index 000000000..aa384b764 --- /dev/null +++ b/experiments/results/baseline/oscillating_errors_adaptive/run_010_time_analysis.csv @@ -0,0 +1,23 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-10s,2827,2774,39,1.38,14,0.5,1.0 +10-20s,2794,2765,26,0.93,3,0.11,1.0 +20-30s,2900,2833,56,1.93,11,0.38,2.0 +30-40s,3236,2979,181,5.59,76,2.35,6.0 +40-50s,2880,2722,67,2.33,91,3.16,2.0 +50-60s,3034,2799,158,5.21,77,2.54,6.0 +60-70s,2858,2693,57,1.99,108,3.78,2.0 +70-80s,3032,2796,160,5.28,76,2.51,6.0 +80-90s,2985,2820,57,1.91,108,3.62,2.0 +90-100s,3137,2842,184,5.87,111,3.54,6.0 +100-110s,3014,2813,73,2.42,128,4.25,2.0 +110-120s,3089,2790,182,5.89,117,3.79,6.0 +120-130s,3092,2886,64,2.07,142,4.59,2.0 +130-140s,2994,2755,143,4.78,96,3.21,6.0 +140-150s,2969,2810,61,2.05,98,3.3,2.0 +150-160s,2893,2658,138,4.77,97,3.35,6.0 +160-170s,2959,2771,72,2.43,116,3.92,2.0 +170-180s,3019,2736,168,5.56,115,3.81,6.0 +180-190s,2873,2683,77,2.68,113,3.93,2.0 +190-200s,3110,2832,174,5.59,104,3.34,6.0 +200-210s,2878,2746,36,1.25,96,3.34,1.0 +210-220s,2884,2819,35,1.21,30,1.04,1.0 diff --git a/experiments/results/baseline/oscillating_errors_adaptive/run_011_time_analysis.csv b/experiments/results/baseline/oscillating_errors_adaptive/run_011_time_analysis.csv new file mode 100644 index 000000000..fb2a2a8b4 --- /dev/null +++ b/experiments/results/baseline/oscillating_errors_adaptive/run_011_time_analysis.csv @@ -0,0 +1,23 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-10s,4950,4881,48,0.97,21,0.42,1.0 +10-20s,5237,5173,59,1.13,5,0.1,1.0 +20-30s,5270,5129,105,1.99,36,0.68,2.0 +30-40s,5613,5102,354,6.31,157,2.8,6.0 +40-50s,5474,5169,117,2.14,188,3.43,2.0 +50-60s,5622,5141,326,5.8,155,2.76,6.0 +60-70s,5545,5236,121,2.18,188,3.39,2.0 +70-80s,5496,5099,282,5.13,115,2.09,6.0 +80-90s,5514,5219,117,2.12,178,3.23,2.0 +90-100s,5601,5116,317,5.66,168,3.0,6.0 +100-110s,5489,5207,122,2.22,160,2.91,2.0 +110-120s,5583,5071,345,6.18,167,2.99,6.0 +120-130s,5486,5203,118,2.15,165,3.01,2.0 +130-140s,5619,5143,326,5.8,150,2.67,6.0 +140-150s,5496,5202,112,2.04,182,3.31,2.0 +150-160s,5588,5140,316,5.65,132,2.36,6.0 +160-170s,5564,5240,139,2.5,185,3.32,2.0 +170-180s,5569,5107,317,5.69,145,2.6,6.0 +180-190s,5470,5195,93,1.7,182,3.33,2.0 +190-200s,5598,5148,325,5.81,125,2.23,6.0 +200-210s,5448,5197,73,1.34,178,3.27,1.0 +210-220s,5339,5247,61,1.14,31,0.58,1.0 diff --git a/experiments/results/baseline/oscillating_errors_adaptive/run_012_time_analysis.csv b/experiments/results/baseline/oscillating_errors_adaptive/run_012_time_analysis.csv new file mode 100644 index 000000000..684e7e62f --- /dev/null +++ b/experiments/results/baseline/oscillating_errors_adaptive/run_012_time_analysis.csv @@ -0,0 +1,23 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-10s,5146,5089,54,1.05,3,0.06,1.0 +10-20s,5243,5194,45,0.86,4,0.08,1.0 +20-30s,5268,5152,88,1.67,28,0.53,2.0 +30-40s,5584,5115,316,5.66,153,2.74,6.0 +40-50s,5404,5152,108,2.0,144,2.66,2.0 +50-60s,5529,5063,322,5.82,144,2.6,6.0 +60-70s,5467,5177,118,2.16,172,3.15,2.0 +70-80s,5584,5099,319,5.71,166,2.97,6.0 +80-90s,5483,5176,118,2.15,189,3.45,2.0 +90-100s,5594,5065,348,6.22,181,3.24,6.0 +100-110s,5446,5140,115,2.11,191,3.51,2.0 +110-120s,5550,5086,315,5.68,149,2.68,6.0 +120-130s,5419,5146,113,2.09,160,2.95,2.0 +130-140s,5558,5078,350,6.3,130,2.34,6.0 +140-150s,5439,5113,103,1.89,223,4.1,2.0 +150-160s,5618,5137,319,5.68,162,2.88,6.0 +160-170s,5482,5182,129,2.35,171,3.12,2.0 +170-180s,5570,5109,320,5.75,141,2.53,6.0 +180-190s,5463,5185,115,2.11,163,2.98,2.0 +190-200s,5643,5152,316,5.6,175,3.1,6.0 +200-210s,5389,5191,58,1.08,140,2.6,1.0 +210-220s,5296,5214,59,1.11,23,0.43,1.0 diff --git a/experiments/results/baseline/oscillating_errors_adaptive/run_013_time_analysis.csv b/experiments/results/baseline/oscillating_errors_adaptive/run_013_time_analysis.csv new file mode 100644 index 000000000..47e67ade6 --- /dev/null +++ b/experiments/results/baseline/oscillating_errors_adaptive/run_013_time_analysis.csv @@ -0,0 +1,23 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-10s,3582,3537,36,1.01,9,0.25,1.0 +10-20s,3742,3698,41,1.1,3,0.08,1.0 +20-30s,3937,3816,85,2.16,36,0.91,2.0 +30-40s,4173,3818,224,5.37,131,3.14,6.0 +40-50s,4089,3821,105,2.57,163,3.99,2.0 +50-60s,4096,3763,232,5.66,101,2.47,6.0 +60-70s,4042,3793,106,2.62,143,3.54,2.0 +70-80s,4103,3783,223,5.44,97,2.36,6.0 +80-90s,3981,3767,81,2.03,133,3.34,2.0 +90-100s,4131,3819,221,5.35,91,2.2,6.0 +100-110s,4041,3814,97,2.4,130,3.22,2.0 +110-120s,3957,3637,206,5.21,114,2.88,6.0 +120-130s,3991,3762,97,2.43,132,3.31,2.0 +130-140s,4085,3742,237,5.8,106,2.59,6.0 +140-150s,4164,3924,91,2.19,149,3.58,2.0 +150-160s,4111,3772,223,5.42,116,2.82,6.0 +160-170s,4165,3928,96,2.3,141,3.39,2.0 +170-180s,4086,3738,239,5.85,109,2.67,6.0 +180-190s,4035,3774,96,2.38,165,4.09,2.0 +190-200s,4217,3853,237,5.62,127,3.01,6.0 +200-210s,3955,3803,40,1.01,112,2.83,1.0 +210-220s,3949,3882,39,0.99,28,0.71,1.0 diff --git a/experiments/results/baseline/oscillating_errors_adaptive/run_014_time_analysis.csv b/experiments/results/baseline/oscillating_errors_adaptive/run_014_time_analysis.csv new file mode 100644 index 000000000..442460ba1 --- /dev/null +++ b/experiments/results/baseline/oscillating_errors_adaptive/run_014_time_analysis.csv @@ -0,0 +1,23 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-10s,5796,5730,54,0.93,12,0.21,1.0 +10-20s,5838,5774,56,0.96,8,0.14,1.0 +20-30s,5892,5746,122,2.07,24,0.41,2.0 +30-40s,6139,5625,345,5.62,169,2.75,6.0 +40-50s,6027,5740,127,2.11,160,2.65,2.0 +50-60s,6167,5685,332,5.38,150,2.43,6.0 +60-70s,6016,5738,111,1.85,167,2.78,2.0 +70-80s,6182,5699,339,5.48,144,2.33,6.0 +80-90s,6063,5729,142,2.34,192,3.17,2.0 +90-100s,6247,5665,389,6.23,193,3.09,6.0 +100-110s,6110,5752,129,2.11,229,3.75,2.0 +110-120s,6136,5640,334,5.44,162,2.64,6.0 +120-130s,6011,5759,103,1.71,149,2.48,2.0 +130-140s,6241,5669,384,6.15,188,3.01,6.0 +140-150s,6083,5772,123,2.02,188,3.09,2.0 +150-160s,6222,5681,373,5.99,168,2.7,6.0 +160-170s,6102,5744,138,2.26,220,3.61,2.0 +170-180s,6215,5702,341,5.49,172,2.77,6.0 +180-190s,6034,5767,107,1.77,160,2.65,2.0 +190-200s,6260,5666,423,6.76,171,2.73,6.0 +200-210s,6047,5790,68,1.12,189,3.13,1.0 +210-220s,5856,5782,55,0.94,19,0.32,1.0 diff --git a/experiments/results/baseline/oscillating_errors_adaptive/run_015_time_analysis.csv b/experiments/results/baseline/oscillating_errors_adaptive/run_015_time_analysis.csv new file mode 100644 index 000000000..035f87ed4 --- /dev/null +++ b/experiments/results/baseline/oscillating_errors_adaptive/run_015_time_analysis.csv @@ -0,0 +1,23 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-10s,2562,2529,21,0.82,12,0.47,1.0 +10-20s,2658,2624,28,1.05,6,0.23,1.0 +20-30s,2657,2575,58,2.18,24,0.9,2.0 +30-40s,2697,2451,164,6.08,82,3.04,6.0 +40-50s,2676,2519,50,1.87,107,4.0,2.0 +50-60s,2755,2499,168,6.1,88,3.19,6.0 +60-70s,2724,2598,40,1.47,86,3.16,2.0 +70-80s,2804,2543,158,5.63,103,3.67,6.0 +80-90s,2704,2562,55,2.03,87,3.22,2.0 +90-100s,2796,2560,151,5.4,85,3.04,6.0 +100-110s,2745,2599,55,2.0,91,3.32,2.0 +110-120s,2835,2597,157,5.54,81,2.86,6.0 +120-130s,2723,2556,54,1.98,113,4.15,2.0 +130-140s,2744,2487,153,5.58,104,3.79,6.0 +140-150s,2739,2585,61,2.23,93,3.4,2.0 +150-160s,2881,2599,172,5.97,110,3.82,6.0 +160-170s,2794,2631,63,2.25,100,3.58,2.0 +170-180s,2805,2523,172,6.13,110,3.92,6.0 +180-190s,2815,2656,35,1.24,124,4.4,2.0 +190-200s,2792,2572,151,5.41,69,2.47,6.0 +200-210s,2563,2461,22,0.86,80,3.12,1.0 +210-220s,2626,2584,26,0.99,16,0.61,1.0 diff --git a/experiments/results/baseline/slow_query/computed_baseline.txt b/experiments/results/baseline/slow_query/computed_baseline.txt new file mode 100644 index 000000000..07dbda8cb --- /dev/null +++ b/experiments/results/baseline/slow_query/computed_baseline.txt @@ -0,0 +1,15 @@ +# Baseline computed at 2025-12-19 13:05:58 -0500 +# Source files: run_010_time_analysis.csv, run_015_time_analysis.csv, run_009_time_analysis.csv, run_011_time_analysis.csv, run_014_time_analysis.csv, run_008_time_analysis.csv, run_012_time_analysis.csv, run_013_time_analysis.csv, run_003_time_analysis.csv, run_006_time_analysis.csv, run_002_time_analysis.csv, run_007_time_analysis.csv, run_001_time_analysis.csv, run_004_time_analysis.csv, run_005_time_analysis.csv +# Total data points: 210 + +deviation_p5=6.450000000000002 +deviation_p50=828.9999999999999 +deviation_p95=1008.0499999999998 + +error_rate_p5=0.94 +error_rate_p50=2.07 +error_rate_p95=3.3609999999999998 + +rejection_rate_p5=0.0 +rejection_rate_p50=6.925000000000001 +rejection_rate_p95=8.641 diff --git a/experiments/results/baseline/slow_query/run_001_time_analysis.csv b/experiments/results/baseline/slow_query/run_001_time_analysis.csv new file mode 100644 index 000000000..066b1f12d --- /dev/null +++ b/experiments/results/baseline/slow_query/run_001_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,9599,9500,99,1.03,0,0.0,1.0 +30-60s,7279,6871,196,2.69,212,2.91,1.0 +60-90s,7185,6556,196,2.73,433,6.03,1.0 +90-120s,7626,6926,193,2.53,507,6.65,1.0 +120-150s,7505,6799,171,2.28,535,7.13,1.0 +150-180s,7530,6824,161,2.14,545,7.24,1.0 +180-210s,7707,6916,165,2.14,626,8.12,1.0 +210-240s,7637,6884,164,2.15,589,7.71,1.0 +240-270s,8042,7214,162,2.01,666,8.28,1.0 +270-300s,7770,6961,163,2.1,646,8.31,1.0 +300-330s,7894,7052,172,2.18,670,8.49,1.0 +330-360s,9218,8924,105,1.14,189,2.05,1.0 +360-390s,9293,9184,100,1.08,9,0.1,1.0 +390-420s,9343,9256,87,0.93,0,0.0,1.0 diff --git a/experiments/results/baseline/slow_query/run_002_time_analysis.csv b/experiments/results/baseline/slow_query/run_002_time_analysis.csv new file mode 100644 index 000000000..f42ac456b --- /dev/null +++ b/experiments/results/baseline/slow_query/run_002_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,7533,7211,186,2.47,136,1.81,1.0 +30-60s,5480,5145,167,3.05,168,3.07,1.0 +60-90s,4775,4361,173,3.62,241,5.05,1.0 +90-120s,4995,4602,171,3.42,222,4.44,1.0 +120-150s,5049,4580,190,3.76,279,5.53,1.0 +150-180s,4886,4423,150,3.07,313,6.41,1.0 +180-210s,4815,4369,158,3.28,288,5.98,1.0 +210-240s,4932,4377,157,3.18,398,8.07,1.0 +240-270s,5081,4568,171,3.37,342,6.73,1.0 +270-300s,4947,4389,171,3.46,387,7.82,1.0 +300-330s,4848,4289,159,3.28,400,8.25,1.0 +330-360s,6749,6401,151,2.24,197,2.92,1.0 +360-390s,7771,7437,139,1.79,195,2.51,1.0 +390-420s,7492,7174,147,1.96,171,2.28,1.0 diff --git a/experiments/results/baseline/slow_query/run_003_time_analysis.csv b/experiments/results/baseline/slow_query/run_003_time_analysis.csv new file mode 100644 index 000000000..c345d8e22 --- /dev/null +++ b/experiments/results/baseline/slow_query/run_003_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,8784,8712,72,0.82,0,0.0,1.0 +30-60s,6856,6464,202,2.95,190,2.77,1.0 +60-90s,7361,6808,175,2.38,378,5.14,1.0 +90-120s,7587,6869,201,2.65,517,6.81,1.0 +120-150s,7880,7141,166,2.11,573,7.27,1.0 +150-180s,7837,7199,161,2.05,477,6.09,1.0 +180-210s,7713,6999,187,2.42,527,6.83,1.0 +210-240s,7854,7122,172,2.19,560,7.13,1.0 +240-270s,7795,7042,168,2.16,585,7.5,1.0 +270-300s,8389,7536,167,1.99,686,8.18,1.0 +300-330s,7850,7066,169,2.15,615,7.83,1.0 +330-360s,8821,8495,98,1.11,228,2.58,1.0 +360-390s,9021,8931,85,0.94,5,0.06,1.0 +390-420s,8875,8778,97,1.09,0,0.0,1.0 diff --git a/experiments/results/baseline/slow_query/run_004_time_analysis.csv b/experiments/results/baseline/slow_query/run_004_time_analysis.csv new file mode 100644 index 000000000..f6e4f8340 --- /dev/null +++ b/experiments/results/baseline/slow_query/run_004_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,11107,10992,100,0.9,15,0.14,1.0 +30-60s,8379,7993,177,2.11,209,2.49,1.0 +60-90s,8410,7705,211,2.51,494,5.87,1.0 +90-120s,8133,7368,213,2.62,552,6.79,1.0 +120-150s,8529,7718,169,1.98,642,7.53,1.0 +150-180s,8254,7491,189,2.29,574,6.95,1.0 +180-210s,8543,7665,174,2.04,704,8.24,1.0 +210-240s,8858,7886,176,1.99,796,8.99,1.0 +240-270s,8551,7689,182,2.13,680,7.95,1.0 +270-300s,8495,7617,182,2.14,696,8.19,1.0 +300-330s,8713,7793,198,2.27,722,8.29,1.0 +330-360s,11344,10988,103,0.91,253,2.23,1.0 +360-390s,11519,11369,123,1.07,27,0.23,1.0 +390-420s,11617,11461,132,1.14,24,0.21,1.0 diff --git a/experiments/results/baseline/slow_query/run_005_time_analysis.csv b/experiments/results/baseline/slow_query/run_005_time_analysis.csv new file mode 100644 index 000000000..ea2cc5dfd --- /dev/null +++ b/experiments/results/baseline/slow_query/run_005_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,12098,11976,122,1.01,0,0.0,1.0 +30-60s,9095,8512,224,2.46,359,3.95,1.0 +60-90s,7855,7197,202,2.57,456,5.81,1.0 +90-120s,8319,7631,163,1.96,525,6.31,1.0 +120-150s,8535,7726,190,2.23,619,7.25,1.0 +150-180s,8639,7777,183,2.12,679,7.86,1.0 +180-210s,8858,7978,182,2.05,698,7.88,1.0 +210-240s,9017,8096,168,1.86,753,8.35,1.0 +240-270s,8657,7789,191,2.21,677,7.82,1.0 +270-300s,9147,8247,164,1.79,736,8.05,1.0 +300-330s,9050,8151,176,1.94,723,7.99,1.0 +330-360s,11880,11518,129,1.09,233,1.96,1.0 +360-390s,12112,11970,122,1.01,20,0.17,1.0 +390-420s,12090,11980,104,0.86,6,0.05,1.0 diff --git a/experiments/results/baseline/slow_query/run_006_time_analysis.csv b/experiments/results/baseline/slow_query/run_006_time_analysis.csv new file mode 100644 index 000000000..6ea9ef015 --- /dev/null +++ b/experiments/results/baseline/slow_query/run_006_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,9645,9010,232,2.41,403,4.18,1.0 +30-60s,6184,5778,196,3.17,210,3.4,1.0 +60-90s,5611,5110,206,3.67,295,5.26,1.0 +90-120s,5776,5133,218,3.77,425,7.36,1.0 +120-150s,5366,4702,229,4.27,435,8.11,1.0 +150-180s,6049,5368,168,2.78,513,8.48,1.0 +180-210s,5412,4709,194,3.58,509,9.41,1.0 +210-240s,5558,4911,193,3.47,454,8.17,1.0 +240-270s,6286,5387,221,3.52,678,10.79,1.0 +270-300s,6065,5165,203,3.35,697,11.49,1.0 +300-330s,6289,5493,197,3.13,599,9.52,1.0 +330-360s,8406,7794,186,2.21,426,5.07,1.0 +360-390s,9614,8956,206,2.14,452,4.7,1.0 +390-420s,8747,8234,162,1.85,351,4.01,1.0 diff --git a/experiments/results/baseline/slow_query/run_007_time_analysis.csv b/experiments/results/baseline/slow_query/run_007_time_analysis.csv new file mode 100644 index 000000000..c24e78f35 --- /dev/null +++ b/experiments/results/baseline/slow_query/run_007_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,15165,14963,185,1.22,17,0.11,1.0 +30-60s,10931,10214,254,2.32,463,4.24,1.0 +60-90s,11211,10170,204,1.82,837,7.47,1.0 +90-120s,10485,9458,228,2.17,799,7.62,1.0 +120-150s,11431,10288,198,1.73,945,8.27,1.0 +150-180s,11100,9966,206,1.86,928,8.36,1.0 +180-210s,11396,10301,191,1.68,904,7.93,1.0 +210-240s,11649,10480,186,1.6,983,8.44,1.0 +240-270s,11044,9886,218,1.97,940,8.51,1.0 +270-300s,11563,10333,196,1.7,1034,8.94,1.0 +300-330s,11190,10007,189,1.69,994,8.88,1.0 +330-360s,14514,14058,145,1.0,311,2.14,1.0 +360-390s,15112,14879,161,1.07,72,0.48,1.0 +390-420s,15031,14874,141,0.94,16,0.11,1.0 diff --git a/experiments/results/baseline/slow_query/run_008_time_analysis.csv b/experiments/results/baseline/slow_query/run_008_time_analysis.csv new file mode 100644 index 000000000..5fb55a9f4 --- /dev/null +++ b/experiments/results/baseline/slow_query/run_008_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,9186,9073,113,1.23,0,0.0,1.0 +30-60s,7493,7145,184,2.46,164,2.19,1.0 +60-90s,7350,6770,180,2.45,400,5.44,1.0 +90-120s,7908,7145,182,2.3,581,7.35,1.0 +120-150s,7789,7006,169,2.17,614,7.88,1.0 +150-180s,7847,7097,148,1.89,602,7.67,1.0 +180-210s,7585,6873,189,2.49,523,6.9,1.0 +210-240s,8021,7283,168,2.09,570,7.11,1.0 +240-270s,7804,7031,158,2.02,615,7.88,1.0 +270-300s,8019,7171,164,2.05,684,8.53,1.0 +300-330s,8039,7198,183,2.28,658,8.19,1.0 +330-360s,8937,8433,142,1.59,362,4.05,1.0 +360-390s,9983,9853,106,1.06,24,0.24,1.0 +390-420s,9455,9304,125,1.32,26,0.27,1.0 diff --git a/experiments/results/baseline/slow_query/run_009_time_analysis.csv b/experiments/results/baseline/slow_query/run_009_time_analysis.csv new file mode 100644 index 000000000..7a7fcf964 --- /dev/null +++ b/experiments/results/baseline/slow_query/run_009_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,13891,13749,142,1.02,0,0.0,1.0 +30-60s,10346,9602,252,2.44,492,4.76,1.0 +60-90s,9514,8666,213,2.24,635,6.67,1.0 +90-120s,9957,8999,183,1.84,775,7.78,1.0 +120-150s,9885,8966,200,2.02,719,7.27,1.0 +150-180s,9981,8950,217,2.17,814,8.16,1.0 +180-210s,10359,9282,179,1.73,898,8.67,1.0 +210-240s,10046,9035,185,1.84,826,8.22,1.0 +240-270s,10191,9159,216,2.12,816,8.01,1.0 +270-300s,10271,9203,196,1.91,872,8.49,1.0 +300-330s,10302,9231,199,1.93,872,8.46,1.0 +330-360s,13770,13302,147,1.07,321,2.33,1.0 +360-390s,13785,13630,140,1.02,15,0.11,1.0 +390-420s,13911,13753,136,0.98,22,0.16,1.0 diff --git a/experiments/results/baseline/slow_query/run_010_time_analysis.csv b/experiments/results/baseline/slow_query/run_010_time_analysis.csv new file mode 100644 index 000000000..8fdc0f937 --- /dev/null +++ b/experiments/results/baseline/slow_query/run_010_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,10736,10566,146,1.36,24,0.22,1.0 +30-60s,8608,8136,209,2.43,263,3.06,1.0 +60-90s,7798,7187,199,2.55,412,5.28,1.0 +90-120s,8044,7328,179,2.23,537,6.68,1.0 +120-150s,8678,7820,188,2.17,670,7.72,1.0 +150-180s,8607,7695,181,2.1,731,8.49,1.0 +180-210s,8460,7586,162,1.91,712,8.42,1.0 +210-240s,8562,7691,177,2.07,694,8.11,1.0 +240-270s,8800,7914,177,2.01,709,8.06,1.0 +270-300s,8949,8008,185,2.07,756,8.45,1.0 +300-330s,8865,7919,201,2.27,745,8.4,1.0 +330-360s,11739,11230,133,1.13,376,3.2,1.0 +360-390s,11129,10978,145,1.3,6,0.05,1.0 +390-420s,10429,10222,151,1.45,56,0.54,1.0 diff --git a/experiments/results/baseline/slow_query/run_011_time_analysis.csv b/experiments/results/baseline/slow_query/run_011_time_analysis.csv new file mode 100644 index 000000000..9ccd131bf --- /dev/null +++ b/experiments/results/baseline/slow_query/run_011_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,8954,8847,107,1.19,0,0.0,1.0 +30-60s,7133,6772,173,2.43,188,2.64,1.0 +60-90s,6232,5741,193,3.1,298,4.78,1.0 +90-120s,5711,5281,158,2.77,272,4.76,1.0 +120-150s,6158,5552,176,2.86,430,6.98,1.0 +150-180s,6585,5976,141,2.14,468,7.11,1.0 +180-210s,6340,5747,164,2.59,429,6.77,1.0 +210-240s,6465,5833,147,2.27,485,7.5,1.0 +240-270s,6682,6027,154,2.3,501,7.5,1.0 +270-300s,6340,5719,152,2.4,469,7.4,1.0 +300-330s,6671,6061,146,2.19,464,6.96,1.0 +330-360s,8147,7923,102,1.25,122,1.5,1.0 +360-390s,8844,8725,105,1.19,14,0.16,1.0 +390-420s,8812,8728,79,0.9,5,0.06,1.0 diff --git a/experiments/results/baseline/slow_query/run_012_time_analysis.csv b/experiments/results/baseline/slow_query/run_012_time_analysis.csv new file mode 100644 index 000000000..2acc9cece --- /dev/null +++ b/experiments/results/baseline/slow_query/run_012_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,9596,9507,89,0.93,0,0.0,1.0 +30-60s,7511,7005,196,2.61,310,4.13,1.0 +60-90s,8231,7456,197,2.39,578,7.02,1.0 +90-120s,8239,7496,182,2.21,561,6.81,1.0 +120-150s,8672,7806,188,2.17,678,7.82,1.0 +150-180s,8602,7735,178,2.07,689,8.01,1.0 +180-210s,8529,7705,154,1.81,670,7.86,1.0 +210-240s,8520,7632,178,2.09,710,8.33,1.0 +240-270s,8368,7471,179,2.14,718,8.58,1.0 +270-300s,8572,7627,171,1.99,774,9.03,1.0 +300-330s,8872,7938,168,1.89,766,8.63,1.0 +330-360s,9677,9368,110,1.14,199,2.06,1.0 +360-390s,9698,9607,91,0.94,0,0.0,1.0 +390-420s,9458,9359,99,1.05,0,0.0,1.0 diff --git a/experiments/results/baseline/slow_query/run_013_time_analysis.csv b/experiments/results/baseline/slow_query/run_013_time_analysis.csv new file mode 100644 index 000000000..cf8b2803d --- /dev/null +++ b/experiments/results/baseline/slow_query/run_013_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,11951,11836,115,0.96,0,0.0,1.0 +30-60s,8826,8269,198,2.24,359,4.07,1.0 +60-90s,8260,7530,233,2.82,497,6.02,1.0 +90-120s,8961,8076,199,2.22,686,7.66,1.0 +120-150s,8614,7767,193,2.24,654,7.59,1.0 +150-180s,8743,7855,181,2.07,707,8.09,1.0 +180-210s,9109,8160,185,2.03,764,8.39,1.0 +210-240s,9103,8225,177,1.94,701,7.7,1.0 +240-270s,8890,8022,169,1.9,699,7.86,1.0 +270-300s,8865,7919,205,2.31,741,8.36,1.0 +300-330s,8746,7866,171,1.96,709,8.11,1.0 +330-360s,11564,11290,107,0.93,167,1.44,1.0 +360-390s,12096,11947,130,1.07,19,0.16,1.0 +390-420s,11972,11843,118,0.99,11,0.09,1.0 diff --git a/experiments/results/baseline/slow_query/run_014_time_analysis.csv b/experiments/results/baseline/slow_query/run_014_time_analysis.csv new file mode 100644 index 000000000..bad4058b1 --- /dev/null +++ b/experiments/results/baseline/slow_query/run_014_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,12939,12820,117,0.9,2,0.02,1.0 +30-60s,8927,8382,225,2.52,320,3.58,1.0 +60-90s,8542,7844,187,2.19,511,5.98,1.0 +90-120s,8626,7945,187,2.17,494,5.73,1.0 +120-150s,9324,8513,175,1.88,636,6.82,1.0 +150-180s,9022,8181,191,2.12,650,7.2,1.0 +180-210s,9487,8586,196,2.07,705,7.43,1.0 +210-240s,9816,8774,181,1.84,861,8.77,1.0 +240-270s,9703,8672,192,1.98,839,8.65,1.0 +270-300s,9324,8365,179,1.92,780,8.37,1.0 +300-330s,9521,8529,187,1.96,805,8.45,1.0 +330-360s,12308,11890,130,1.06,288,2.34,1.0 +360-390s,12549,12429,119,0.95,1,0.01,1.0 +390-420s,12492,12345,134,1.07,13,0.1,1.0 diff --git a/experiments/results/baseline/slow_query/run_015_time_analysis.csv b/experiments/results/baseline/slow_query/run_015_time_analysis.csv new file mode 100644 index 000000000..6a210f3f0 --- /dev/null +++ b/experiments/results/baseline/slow_query/run_015_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,8603,8246,213,2.48,144,1.67,1.0 +30-60s,9273,8600,193,2.08,480,5.18,1.0 +60-90s,9585,8655,204,2.13,726,7.57,1.0 +90-120s,9522,8660,192,2.02,670,7.04,1.0 +120-150s,9983,8956,186,1.86,841,8.42,1.0 +150-180s,9687,8672,193,1.99,822,8.49,1.0 +180-210s,9538,8595,202,2.12,741,7.77,1.0 +210-240s,10045,9101,176,1.75,768,7.65,1.0 +240-270s,9585,8626,185,1.93,774,8.08,1.0 +270-300s,9932,8921,185,1.86,826,8.32,1.0 +300-330s,9671,8714,194,2.01,763,7.89,1.0 +330-360s,9260,8838,148,1.6,274,2.96,1.0 +360-390s,8481,8082,157,1.85,242,2.85,1.0 +390-420s,8960,8669,123,1.37,168,1.88,1.0 diff --git a/experiments/results/baseline/slow_query_adaptive/computed_baseline.txt b/experiments/results/baseline/slow_query_adaptive/computed_baseline.txt new file mode 100644 index 000000000..80d6a753e --- /dev/null +++ b/experiments/results/baseline/slow_query_adaptive/computed_baseline.txt @@ -0,0 +1,15 @@ +# Baseline computed at 2025-12-19 13:05:58 -0500 +# Source files: run_010_time_analysis.csv, run_015_time_analysis.csv, run_009_time_analysis.csv, run_011_time_analysis.csv, run_014_time_analysis.csv, run_008_time_analysis.csv, run_012_time_analysis.csv, run_013_time_analysis.csv, run_003_time_analysis.csv, run_006_time_analysis.csv, run_002_time_analysis.csv, run_007_time_analysis.csv, run_001_time_analysis.csv, run_004_time_analysis.csv, run_005_time_analysis.csv +# Total data points: 210 + +deviation_p5=126.9 +deviation_p50=891.4999999999999 +deviation_p95=1054.55 + +error_rate_p5=0.97 +error_rate_p50=2.77 +error_rate_p95=3.4519999999999995 + +rejection_rate_p5=1.107 +rejection_rate_p50=6.86 +rejection_rate_p95=8.6655 diff --git a/experiments/results/baseline/slow_query_adaptive/run_001_time_analysis.csv b/experiments/results/baseline/slow_query_adaptive/run_001_time_analysis.csv new file mode 100644 index 000000000..da21a44b0 --- /dev/null +++ b/experiments/results/baseline/slow_query_adaptive/run_001_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,10025,9838,105,1.05,82,0.82,1.0 +30-60s,7508,7006,204,2.72,298,3.97,1.0 +60-90s,6900,6312,204,2.96,384,5.57,1.0 +90-120s,6890,6254,229,3.32,407,5.91,1.0 +120-150s,6966,6229,210,3.01,527,7.57,1.0 +150-180s,7153,6426,206,2.88,521,7.28,1.0 +180-210s,6954,6233,224,3.22,497,7.15,1.0 +210-240s,7318,6522,232,3.17,564,7.71,1.0 +240-270s,7227,6422,229,3.17,576,7.97,1.0 +270-300s,6956,6171,225,3.23,560,8.05,1.0 +300-330s,7283,6482,223,3.06,578,7.94,1.0 +330-360s,9567,9121,131,1.37,315,3.29,1.0 +360-390s,11108,10819,108,0.97,181,1.63,1.0 +390-420s,10339,10091,96,0.93,152,1.47,1.0 diff --git a/experiments/results/baseline/slow_query_adaptive/run_002_time_analysis.csv b/experiments/results/baseline/slow_query_adaptive/run_002_time_analysis.csv new file mode 100644 index 000000000..aa37091b2 --- /dev/null +++ b/experiments/results/baseline/slow_query_adaptive/run_002_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,10828,10583,128,1.18,117,1.08,1.0 +30-60s,7785,7393,162,2.08,230,2.95,1.0 +60-90s,8642,8009,213,2.46,420,4.86,1.0 +90-120s,7113,6527,214,3.01,372,5.23,1.0 +120-150s,7395,6587,284,3.84,524,7.09,1.0 +150-180s,7730,6900,240,3.1,590,7.63,1.0 +180-210s,7499,6683,220,2.93,596,7.95,1.0 +210-240s,7567,6693,215,2.84,659,8.71,1.0 +240-270s,7907,7066,216,2.73,625,7.9,1.0 +270-300s,7266,6450,243,3.34,573,7.89,1.0 +300-330s,7964,7071,230,2.89,663,8.32,1.0 +330-360s,10651,10169,133,1.25,349,3.28,1.0 +360-390s,11385,11087,134,1.18,164,1.44,1.0 +390-420s,11127,10789,128,1.15,210,1.89,1.0 diff --git a/experiments/results/baseline/slow_query_adaptive/run_003_time_analysis.csv b/experiments/results/baseline/slow_query_adaptive/run_003_time_analysis.csv new file mode 100644 index 000000000..df676b2da --- /dev/null +++ b/experiments/results/baseline/slow_query_adaptive/run_003_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,8179,8056,76,0.93,47,0.57,1.0 +30-60s,6193,5908,126,2.03,159,2.57,1.0 +60-90s,5248,4856,163,3.11,229,4.36,1.0 +90-120s,5359,4850,170,3.17,339,6.33,1.0 +120-150s,5569,5011,193,3.47,365,6.55,1.0 +150-180s,5509,4922,183,3.32,404,7.33,1.0 +180-210s,5510,4931,184,3.34,395,7.17,1.0 +210-240s,5581,4931,198,3.55,452,8.1,1.0 +240-270s,5755,5086,201,3.49,468,8.13,1.0 +270-300s,5756,5104,194,3.37,458,7.96,1.0 +300-330s,5869,5298,182,3.1,389,6.63,1.0 +330-360s,7737,7443,75,0.97,219,2.83,1.0 +360-390s,8033,7816,83,1.03,134,1.67,1.0 +390-420s,8139,7912,90,1.11,137,1.68,1.0 diff --git a/experiments/results/baseline/slow_query_adaptive/run_004_time_analysis.csv b/experiments/results/baseline/slow_query_adaptive/run_004_time_analysis.csv new file mode 100644 index 000000000..70be0e925 --- /dev/null +++ b/experiments/results/baseline/slow_query_adaptive/run_004_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,9899,9642,133,1.34,124,1.25,1.0 +30-60s,8390,7691,281,3.35,418,4.98,1.0 +60-90s,9273,8281,311,3.35,681,7.34,1.0 +90-120s,9358,8331,287,3.07,740,7.91,1.0 +120-150s,9678,8693,259,2.68,726,7.5,1.0 +150-180s,9804,8721,274,2.79,809,8.25,1.0 +180-210s,10261,9116,268,2.61,877,8.55,1.0 +210-240s,10125,8959,289,2.85,877,8.66,1.0 +240-270s,10276,9119,282,2.74,875,8.51,1.0 +270-300s,10235,9065,265,2.59,905,8.84,1.0 +300-330s,10343,9110,279,2.7,954,9.22,1.0 +330-360s,10766,10215,133,1.24,418,3.88,1.0 +360-390s,10453,10117,131,1.25,205,1.96,1.0 +390-420s,10214,9853,147,1.44,214,2.1,1.0 diff --git a/experiments/results/baseline/slow_query_adaptive/run_005_time_analysis.csv b/experiments/results/baseline/slow_query_adaptive/run_005_time_analysis.csv new file mode 100644 index 000000000..2f2109767 --- /dev/null +++ b/experiments/results/baseline/slow_query_adaptive/run_005_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,14329,13996,169,1.18,164,1.14,1.0 +30-60s,8949,8242,284,3.17,423,4.73,1.0 +60-90s,9135,8188,303,3.32,644,7.05,1.0 +90-120s,9256,8312,274,2.96,670,7.24,1.0 +120-150s,9284,8263,296,3.19,725,7.81,1.0 +150-180s,9807,8767,263,2.68,777,7.92,1.0 +180-210s,9767,8710,268,2.74,789,8.08,1.0 +210-240s,9785,8613,295,3.01,877,8.96,1.0 +240-270s,9828,8797,260,2.65,771,7.84,1.0 +270-300s,9952,8836,276,2.77,840,8.44,1.0 +300-330s,9932,8858,249,2.51,825,8.31,1.0 +330-360s,13725,13193,126,0.92,406,2.96,1.0 +360-390s,14288,13946,142,0.99,200,1.4,1.0 +390-420s,14184,13861,135,0.95,188,1.33,1.0 diff --git a/experiments/results/baseline/slow_query_adaptive/run_006_time_analysis.csv b/experiments/results/baseline/slow_query_adaptive/run_006_time_analysis.csv new file mode 100644 index 000000000..46279f135 --- /dev/null +++ b/experiments/results/baseline/slow_query_adaptive/run_006_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,7285,7132,78,1.07,75,1.03,1.0 +30-60s,6226,5833,164,2.63,229,3.68,1.0 +60-90s,5551,5155,156,2.81,240,4.32,1.0 +90-120s,5435,4894,199,3.66,342,6.29,1.0 +120-150s,5553,5009,173,3.12,371,6.68,1.0 +150-180s,5590,5038,182,3.26,370,6.62,1.0 +180-210s,5736,5096,188,3.28,452,7.88,1.0 +210-240s,5288,4777,195,3.69,316,5.98,1.0 +240-270s,5820,5210,205,3.52,405,6.96,1.0 +270-300s,5567,4969,188,3.38,410,7.36,1.0 +300-330s,5397,4810,172,3.19,415,7.69,1.0 +330-360s,7028,6746,76,1.08,206,2.93,1.0 +360-390s,7858,7628,79,1.01,151,1.92,1.0 +390-420s,7914,7723,78,0.99,113,1.43,1.0 diff --git a/experiments/results/baseline/slow_query_adaptive/run_007_time_analysis.csv b/experiments/results/baseline/slow_query_adaptive/run_007_time_analysis.csv new file mode 100644 index 000000000..f50485336 --- /dev/null +++ b/experiments/results/baseline/slow_query_adaptive/run_007_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,13425,13165,129,0.96,131,0.98,1.0 +30-60s,9174,8451,296,3.23,427,4.65,1.0 +60-90s,8308,7549,267,3.21,492,5.92,1.0 +90-120s,8608,7728,284,3.3,596,6.92,1.0 +120-150s,8965,8022,274,3.06,669,7.46,1.0 +150-180s,9030,8051,257,2.85,722,8.0,1.0 +180-210s,9215,8189,247,2.68,779,8.45,1.0 +210-240s,9237,8197,261,2.83,779,8.43,1.0 +240-270s,8777,7809,246,2.8,722,8.23,1.0 +270-300s,9218,8144,252,2.73,822,8.92,1.0 +300-330s,8902,7948,257,2.89,697,7.83,1.0 +330-360s,13106,12620,132,1.01,354,2.7,1.0 +360-390s,13372,13028,126,0.94,218,1.63,1.0 +390-420s,13425,13092,149,1.11,184,1.37,1.0 diff --git a/experiments/results/baseline/slow_query_adaptive/run_008_time_analysis.csv b/experiments/results/baseline/slow_query_adaptive/run_008_time_analysis.csv new file mode 100644 index 000000000..4c11f3afb --- /dev/null +++ b/experiments/results/baseline/slow_query_adaptive/run_008_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,14303,14041,140,0.98,122,0.85,1.0 +30-60s,9593,9033,249,2.6,311,3.24,1.0 +60-90s,9135,8391,250,2.74,494,5.41,1.0 +90-120s,9526,8642,286,3.0,598,6.28,1.0 +120-150s,9853,8859,277,2.81,717,7.28,1.0 +150-180s,9870,8795,305,3.09,770,7.8,1.0 +180-210s,9928,8959,284,2.86,685,6.9,1.0 +210-240s,10219,9049,291,2.85,879,8.6,1.0 +240-270s,10541,9301,291,2.76,949,9.0,1.0 +270-300s,10563,9296,284,2.69,983,9.31,1.0 +300-330s,10253,9140,301,2.94,812,7.92,1.0 +330-360s,14299,13739,112,0.78,448,3.13,1.0 +360-390s,14865,14486,172,1.16,207,1.39,1.0 +390-420s,14834,14479,152,1.02,203,1.37,1.0 diff --git a/experiments/results/baseline/slow_query_adaptive/run_009_time_analysis.csv b/experiments/results/baseline/slow_query_adaptive/run_009_time_analysis.csv new file mode 100644 index 000000000..ce325c0e3 --- /dev/null +++ b/experiments/results/baseline/slow_query_adaptive/run_009_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,12206,11982,118,0.97,106,0.87,1.0 +30-60s,9597,9213,160,1.67,224,2.33,1.0 +60-90s,8095,7328,307,3.79,460,5.68,1.0 +90-120s,8843,7921,239,2.7,683,7.72,1.0 +120-150s,8958,7966,278,3.1,714,7.97,1.0 +150-180s,9055,8105,276,3.05,674,7.44,1.0 +180-210s,8870,7885,276,3.11,709,7.99,1.0 +210-240s,9334,8303,270,2.89,761,8.15,1.0 +240-270s,9333,8265,277,2.97,791,8.48,1.0 +270-300s,9263,8257,251,2.71,755,8.15,1.0 +300-330s,9730,8620,263,2.7,847,8.71,1.0 +330-360s,12325,11799,121,0.98,405,3.29,1.0 +360-390s,12545,12182,135,1.08,228,1.82,1.0 +390-420s,12729,12405,145,1.14,179,1.41,1.0 diff --git a/experiments/results/baseline/slow_query_adaptive/run_010_time_analysis.csv b/experiments/results/baseline/slow_query_adaptive/run_010_time_analysis.csv new file mode 100644 index 000000000..e4343d156 --- /dev/null +++ b/experiments/results/baseline/slow_query_adaptive/run_010_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,9919,9716,109,1.1,94,0.95,1.0 +30-60s,6987,6550,195,2.79,242,3.46,1.0 +60-90s,6533,5941,199,3.05,393,6.02,1.0 +90-120s,6497,5830,193,2.97,474,7.3,1.0 +120-150s,6228,5620,190,3.05,418,6.71,1.0 +150-180s,6719,6001,210,3.13,508,7.56,1.0 +180-210s,6557,5910,204,3.11,443,6.76,1.0 +210-240s,6879,6117,224,3.26,538,7.82,1.0 +240-270s,6799,6092,223,3.28,484,7.12,1.0 +270-300s,6748,6016,215,3.19,517,7.66,1.0 +300-330s,6519,5798,221,3.39,500,7.67,1.0 +330-360s,9008,8619,112,1.24,277,3.08,1.0 +360-390s,9225,8983,96,1.04,146,1.58,1.0 +390-420s,8891,8618,112,1.26,161,1.81,1.0 diff --git a/experiments/results/baseline/slow_query_adaptive/run_011_time_analysis.csv b/experiments/results/baseline/slow_query_adaptive/run_011_time_analysis.csv new file mode 100644 index 000000000..813041da4 --- /dev/null +++ b/experiments/results/baseline/slow_query_adaptive/run_011_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,9931,9688,120,1.21,123,1.24,1.0 +30-60s,8124,7633,196,2.41,295,3.63,1.0 +60-90s,7390,6930,180,2.44,280,3.79,1.0 +90-120s,6982,6308,252,3.61,422,6.04,1.0 +120-150s,7447,6633,261,3.5,553,7.43,1.0 +150-180s,7385,6636,235,3.18,514,6.96,1.0 +180-210s,6967,6308,218,3.13,441,6.33,1.0 +210-240s,7477,6751,200,2.67,526,7.03,1.0 +240-270s,7404,6677,222,3.0,505,6.82,1.0 +270-300s,7032,6307,235,3.34,490,6.97,1.0 +300-330s,7728,6909,212,2.74,607,7.85,1.0 +330-360s,9673,9271,125,1.29,277,2.86,1.0 +360-390s,11203,10856,132,1.18,215,1.92,1.0 +390-420s,10163,9864,116,1.14,183,1.8,1.0 diff --git a/experiments/results/baseline/slow_query_adaptive/run_012_time_analysis.csv b/experiments/results/baseline/slow_query_adaptive/run_012_time_analysis.csv new file mode 100644 index 000000000..84690fd6d --- /dev/null +++ b/experiments/results/baseline/slow_query_adaptive/run_012_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,14072,13818,137,0.97,117,0.83,1.0 +30-60s,10228,9582,255,2.49,391,3.82,1.0 +60-90s,9870,8876,300,3.04,694,7.03,1.0 +90-120s,10406,9411,259,2.49,736,7.07,1.0 +120-150s,10038,9017,269,2.68,752,7.49,1.0 +150-180s,10309,9191,283,2.75,835,8.1,1.0 +180-210s,10167,8994,292,2.87,881,8.67,1.0 +210-240s,10154,9035,277,2.73,842,8.29,1.0 +240-270s,10230,9118,283,2.77,829,8.1,1.0 +270-300s,10338,9111,295,2.85,932,9.02,1.0 +300-330s,10348,9232,280,2.71,836,8.08,1.0 +330-360s,14221,13668,142,1.0,411,2.89,1.0 +360-390s,14424,14054,155,1.07,215,1.49,1.0 +390-420s,14349,13963,147,1.02,239,1.67,1.0 diff --git a/experiments/results/baseline/slow_query_adaptive/run_013_time_analysis.csv b/experiments/results/baseline/slow_query_adaptive/run_013_time_analysis.csv new file mode 100644 index 000000000..0467c2b4b --- /dev/null +++ b/experiments/results/baseline/slow_query_adaptive/run_013_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,13481,13249,133,0.99,99,0.73,1.0 +30-60s,9896,9314,232,2.34,350,3.54,1.0 +60-90s,8756,7936,268,3.06,552,6.3,1.0 +90-120s,8981,8034,264,2.94,683,7.6,1.0 +120-150s,8984,8046,260,2.89,678,7.55,1.0 +150-180s,9112,8183,265,2.91,664,7.29,1.0 +180-210s,9527,8485,260,2.73,782,8.21,1.0 +210-240s,9363,8308,275,2.94,780,8.33,1.0 +240-270s,9390,8331,241,2.57,818,8.71,1.0 +270-300s,9310,8310,256,2.75,744,7.99,1.0 +300-330s,9351,8350,257,2.75,744,7.96,1.0 +330-360s,13580,12958,156,1.15,466,3.43,1.0 +360-390s,14059,13707,142,1.01,210,1.49,1.0 +390-420s,14023,13702,139,0.99,182,1.3,1.0 diff --git a/experiments/results/baseline/slow_query_adaptive/run_014_time_analysis.csv b/experiments/results/baseline/slow_query_adaptive/run_014_time_analysis.csv new file mode 100644 index 000000000..a64bf0af8 --- /dev/null +++ b/experiments/results/baseline/slow_query_adaptive/run_014_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,9135,8888,125,1.37,122,1.34,1.0 +30-60s,6787,6412,166,2.45,209,3.08,1.0 +60-90s,6573,6227,149,2.27,197,3.0,1.0 +90-120s,6156,5537,208,3.38,411,6.68,1.0 +120-150s,6116,5551,184,3.01,381,6.23,1.0 +150-180s,6584,5885,226,3.43,473,7.18,1.0 +180-210s,6591,5903,197,2.99,491,7.45,1.0 +210-240s,6549,5787,231,3.53,531,8.11,1.0 +240-270s,7060,6254,240,3.4,566,8.02,1.0 +270-300s,6893,6090,224,3.25,579,8.4,1.0 +300-330s,6987,6205,221,3.16,561,8.03,1.0 +330-360s,8759,8331,150,1.71,278,3.17,1.0 +360-390s,9421,9080,122,1.29,219,2.32,1.0 +390-420s,8933,8694,100,1.12,139,1.56,1.0 diff --git a/experiments/results/baseline/slow_query_adaptive/run_015_time_analysis.csv b/experiments/results/baseline/slow_query_adaptive/run_015_time_analysis.csv new file mode 100644 index 000000000..62cecf9ed --- /dev/null +++ b/experiments/results/baseline/slow_query_adaptive/run_015_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,13340,13119,114,0.85,107,0.8,1.0 +30-60s,8859,8206,254,2.87,399,4.5,1.0 +60-90s,8471,7708,280,3.31,483,5.7,1.0 +90-120s,8718,7873,258,2.96,587,6.73,1.0 +120-150s,9207,8197,269,2.92,741,8.05,1.0 +150-180s,9033,8027,293,3.24,713,7.89,1.0 +180-210s,9207,8212,278,3.02,717,7.79,1.0 +210-240s,9134,8213,225,2.46,696,7.62,1.0 +240-270s,9430,8386,282,2.99,762,8.08,1.0 +270-300s,9183,8155,250,2.72,778,8.47,1.0 +300-330s,9188,8159,268,2.92,761,8.28,1.0 +330-360s,13165,12629,154,1.17,382,2.9,1.0 +360-390s,13262,12953,125,0.94,184,1.39,1.0 +390-420s,13453,13119,147,1.09,187,1.39,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_100/computed_baseline.txt b/experiments/results/baseline/sudden_error_spike_100/computed_baseline.txt new file mode 100644 index 000000000..d5f4125d1 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_100/computed_baseline.txt @@ -0,0 +1,15 @@ +# Baseline computed at 2025-12-19 13:05:58 -0500 +# Source files: run_010_time_analysis.csv, run_015_time_analysis.csv, run_009_time_analysis.csv, run_011_time_analysis.csv, run_014_time_analysis.csv, run_008_time_analysis.csv, run_012_time_analysis.csv, run_013_time_analysis.csv, run_003_time_analysis.csv, run_006_time_analysis.csv, run_002_time_analysis.csv, run_007_time_analysis.csv, run_001_time_analysis.csv, run_004_time_analysis.csv, run_005_time_analysis.csv +# Total data points: 105 + +deviation_p5=0.22599999999999912 +deviation_p50=10.999999999999998 +deviation_p95=7044.6 + +error_rate_p5=0.28 +error_rate_p50=1.0 +error_rate_p95=4.168 + +rejection_rate_p5=0.0 +rejection_rate_p50=0.0 +rejection_rate_p95=94.91 diff --git a/experiments/results/baseline/sudden_error_spike_100/run_001_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_100/run_001_time_analysis.csv new file mode 100644 index 000000000..2b40a36d8 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_100/run_001_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,10049,9952,97,0.97,0,0.0,1.0 +20-40s,10075,9985,90,0.89,0,0.0,1.0 +40-60s,10079,9961,118,1.17,0,0.0,1.0 +60-80s,16364,32,667,4.08,15665,95.73,100.0 +80-100s,15824,4075,48,0.3,11701,73.94,1.0 +100-120s,11731,9613,104,0.89,2014,17.17,1.0 +120-140s,10068,9971,97,0.96,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_100/run_002_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_100/run_002_time_analysis.csv new file mode 100644 index 000000000..9095d231e --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_100/run_002_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,9299,9218,81,0.87,0,0.0,1.0 +20-40s,9269,9175,94,1.01,0,0.0,1.0 +40-60s,9070,8957,113,1.25,0,0.0,1.0 +60-80s,15285,25,671,4.39,14589,95.45,100.0 +80-100s,15748,3728,40,0.25,11980,76.07,1.0 +100-120s,11045,8814,96,0.87,2135,19.33,1.0 +120-140s,9259,9168,91,0.98,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_100/run_003_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_100/run_003_time_analysis.csv new file mode 100644 index 000000000..108edcd54 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_100/run_003_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,11284,11187,97,0.86,0,0.0,1.0 +20-40s,11566,11448,118,1.02,0,0.0,1.0 +40-60s,11589,11484,105,0.91,0,0.0,1.0 +60-80s,16459,271,678,4.12,15510,94.23,100.0 +80-100s,13678,5039,55,0.4,8584,62.76,1.0 +100-120s,11570,11457,113,0.98,0,0.0,1.0 +120-140s,11577,11476,101,0.87,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_100/run_004_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_100/run_004_time_analysis.csv new file mode 100644 index 000000000..a1dfb0f66 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_100/run_004_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,11199,11075,124,1.11,0,0.0,1.0 +20-40s,11625,11504,121,1.04,0,0.0,1.0 +40-60s,11653,11538,115,0.99,0,0.0,1.0 +60-80s,16520,501,669,4.05,15350,92.92,100.0 +80-100s,15741,4599,52,0.33,11090,70.45,1.0 +100-120s,12216,10869,104,0.85,1243,10.18,1.0 +120-140s,11659,11555,104,0.89,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_100/run_005_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_100/run_005_time_analysis.csv new file mode 100644 index 000000000..1a2ebd294 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_100/run_005_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,11400,11274,126,1.11,0,0.0,1.0 +20-40s,11639,11509,130,1.12,0,0.0,1.0 +40-60s,11556,11456,100,0.87,0,0.0,1.0 +60-80s,16333,271,683,4.18,15379,94.16,100.0 +80-100s,15294,4816,46,0.3,10432,68.21,1.0 +100-120s,12801,11306,95,0.74,1400,10.94,1.0 +120-140s,11611,11479,132,1.14,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_100/run_006_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_100/run_006_time_analysis.csv new file mode 100644 index 000000000..06f68768e --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_100/run_006_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,8309,8235,74,0.89,0,0.0,1.0 +20-40s,8464,8391,73,0.86,0,0.0,1.0 +40-60s,8332,8240,92,1.1,0,0.0,1.0 +60-80s,16202,87,690,4.26,15425,95.2,100.0 +80-100s,12605,3654,42,0.33,8909,70.68,1.0 +100-120s,8431,8336,95,1.13,0,0.0,1.0 +120-140s,8382,8311,71,0.85,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_100/run_007_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_100/run_007_time_analysis.csv new file mode 100644 index 000000000..7278323a8 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_100/run_007_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,11530,11418,112,0.97,0,0.0,1.0 +20-40s,11567,11468,99,0.86,0,0.0,1.0 +40-60s,11541,11424,117,1.01,0,0.0,1.0 +60-80s,16600,72,668,4.02,15860,95.54,100.0 +80-100s,13780,5317,38,0.28,8425,61.14,1.0 +100-120s,11588,11454,134,1.16,0,0.0,1.0 +120-140s,11576,11444,132,1.14,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_100/run_008_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_100/run_008_time_analysis.csv new file mode 100644 index 000000000..a3b6d36a2 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_100/run_008_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,11246,11122,124,1.1,0,0.0,1.0 +20-40s,11620,11504,116,1.0,0,0.0,1.0 +40-60s,11602,11502,100,0.86,0,0.0,1.0 +60-80s,16380,420,683,4.17,15277,93.27,100.0 +80-100s,15309,4593,49,0.32,10667,69.68,1.0 +100-120s,12781,11314,118,0.92,1349,10.55,1.0 +120-140s,11636,11524,112,0.96,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_100/run_009_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_100/run_009_time_analysis.csv new file mode 100644 index 000000000..2893e61ae --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_100/run_009_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,7843,7757,86,1.1,0,0.0,1.0 +20-40s,7884,7801,83,1.05,0,0.0,1.0 +40-60s,7951,7871,80,1.01,0,0.0,1.0 +60-80s,16533,227,707,4.28,15599,94.35,100.0 +80-100s,12674,3295,35,0.28,9344,73.73,1.0 +100-120s,7987,7907,80,1.0,0,0.0,1.0 +120-140s,7898,7806,92,1.16,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_100/run_010_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_100/run_010_time_analysis.csv new file mode 100644 index 000000000..5a5c92a54 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_100/run_010_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,11367,11261,106,0.93,0,0.0,1.0 +20-40s,11573,11462,111,0.96,0,0.0,1.0 +40-60s,11646,11524,122,1.05,0,0.0,1.0 +60-80s,16635,359,665,4.0,15611,93.84,100.0 +80-100s,15819,4558,44,0.28,11217,70.91,1.0 +100-120s,12993,11183,106,0.82,1704,13.11,1.0 +120-140s,11672,11544,128,1.1,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_100/run_011_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_100/run_011_time_analysis.csv new file mode 100644 index 000000000..22bc9ee5a --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_100/run_011_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,11200,11084,116,1.04,0,0.0,1.0 +20-40s,11631,11504,127,1.09,0,0.0,1.0 +40-60s,11657,11536,121,1.04,0,0.0,1.0 +60-80s,16062,428,663,4.13,14971,93.21,100.0 +80-100s,15357,4376,38,0.25,10943,71.26,1.0 +100-120s,12682,11031,139,1.1,1512,11.92,1.0 +120-140s,11631,11509,122,1.05,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_100/run_012_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_100/run_012_time_analysis.csv new file mode 100644 index 000000000..a2339fd2f --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_100/run_012_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,2896,2868,28,0.97,0,0.0,1.0 +20-40s,2968,2943,25,0.84,0,0.0,1.0 +40-60s,2866,2829,37,1.29,0,0.0,1.0 +60-80s,16438,70,744,4.53,15624,95.05,100.0 +80-100s,13140,1256,15,0.11,11869,90.33,1.0 +100-120s,2917,2887,30,1.03,0,0.0,1.0 +120-140s,2963,2933,30,1.01,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_100/run_013_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_100/run_013_time_analysis.csv new file mode 100644 index 000000000..2efedca9f --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_100/run_013_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,11191,11079,112,1.0,0,0.0,1.0 +20-40s,11689,11555,134,1.15,0,0.0,1.0 +40-60s,11667,11543,124,1.06,0,0.0,1.0 +60-80s,16487,480,662,4.02,15345,93.07,100.0 +80-100s,13971,4901,61,0.44,9009,64.48,1.0 +100-120s,11634,11518,116,1.0,0,0.0,1.0 +120-140s,11602,11481,121,1.04,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_100/run_014_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_100/run_014_time_analysis.csv new file mode 100644 index 000000000..212e18cb3 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_100/run_014_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,11061,10932,129,1.17,0,0.0,1.0 +20-40s,11626,11519,107,0.92,0,0.0,1.0 +40-60s,11627,11526,101,0.87,0,0.0,1.0 +60-80s,16515,622,687,4.16,15206,92.07,100.0 +80-100s,15724,4302,36,0.23,11386,72.41,1.0 +100-120s,12885,11038,137,1.06,1710,13.27,1.0 +120-140s,11672,11542,130,1.11,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_100/run_015_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_100/run_015_time_analysis.csv new file mode 100644 index 000000000..3648cc9a8 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_100/run_015_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,11528,11422,106,0.92,0,0.0,1.0 +20-40s,11661,11540,121,1.04,0,0.0,1.0 +40-60s,11668,11537,131,1.12,0,0.0,1.0 +60-80s,16578,60,654,3.94,15864,95.69,100.0 +80-100s,15820,5057,48,0.3,10715,67.73,1.0 +100-120s,12867,11360,127,0.99,1380,10.73,1.0 +120-140s,11633,11529,104,0.89,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_100_adaptive/computed_baseline.txt b/experiments/results/baseline/sudden_error_spike_100_adaptive/computed_baseline.txt new file mode 100644 index 000000000..12f00a217 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_100_adaptive/computed_baseline.txt @@ -0,0 +1,15 @@ +# Baseline computed at 2025-12-19 13:05:58 -0500 +# Source files: run_010_time_analysis.csv, run_015_time_analysis.csv, run_009_time_analysis.csv, run_011_time_analysis.csv, run_014_time_analysis.csv, run_008_time_analysis.csv, run_012_time_analysis.csv, run_013_time_analysis.csv, run_003_time_analysis.csv, run_006_time_analysis.csv, run_002_time_analysis.csv, run_007_time_analysis.csv, run_001_time_analysis.csv, run_004_time_analysis.csv, run_005_time_analysis.csv +# Total data points: 105 + +deviation_p5=0.6120000000000061 +deviation_p50=63.99999999999999 +deviation_p95=2792.1999999999994 + +error_rate_p5=0.772 +error_rate_p50=1.02 +error_rate_p95=29.776 + +rejection_rate_p5=0.132 +rejection_rate_p50=1.69 +rejection_rate_p95=70.548 diff --git a/experiments/results/baseline/sudden_error_spike_100_adaptive/run_001_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_100_adaptive/run_001_time_analysis.csv new file mode 100644 index 000000000..44f98763f --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_100_adaptive/run_001_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,8987,8883,86,0.96,18,0.2,1.0 +20-40s,9183,9052,107,1.17,24,0.26,1.0 +40-60s,9204,9068,90,0.98,46,0.5,1.0 +60-80s,16334,97,4654,28.49,11583,70.91,100.0 +80-100s,11259,7958,106,0.94,3195,28.38,1.0 +100-120s,9343,9039,102,1.09,202,2.16,1.0 +120-140s,9265,9022,94,1.01,149,1.61,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_100_adaptive/run_002_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_100_adaptive/run_002_time_analysis.csv new file mode 100644 index 000000000..550241ee8 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_100_adaptive/run_002_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,11071,10960,94,0.85,17,0.15,1.0 +20-40s,11700,11549,118,1.01,33,0.28,1.0 +40-60s,11204,11031,104,0.93,69,0.62,1.0 +60-80s,15055,603,4861,32.29,9591,63.71,100.0 +80-100s,13288,9676,144,1.08,3468,26.1,1.0 +100-120s,11856,11531,109,0.92,216,1.82,1.0 +120-140s,11843,11537,123,1.04,183,1.55,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_100_adaptive/run_003_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_100_adaptive/run_003_time_analysis.csv new file mode 100644 index 000000000..05461ec88 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_100_adaptive/run_003_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,11286,11140,124,1.1,22,0.19,1.0 +20-40s,11632,11512,99,0.85,21,0.18,1.0 +40-60s,11747,11552,122,1.04,73,0.62,1.0 +60-80s,16419,397,4945,30.12,11077,67.46,100.0 +80-100s,13228,9682,146,1.1,3400,25.7,1.0 +100-120s,11911,11518,128,1.07,265,2.22,1.0 +120-140s,11874,11545,120,1.01,209,1.76,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_100_adaptive/run_004_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_100_adaptive/run_004_time_analysis.csv new file mode 100644 index 000000000..bfceebca7 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_100_adaptive/run_004_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,11168,11028,112,1.0,28,0.25,1.0 +20-40s,11687,11524,130,1.11,33,0.28,1.0 +40-60s,11712,11532,126,1.08,54,0.46,1.0 +60-80s,16440,556,4902,29.82,10982,66.8,100.0 +80-100s,13482,9267,133,0.99,4082,30.28,1.0 +100-120s,11710,11389,97,0.83,224,1.91,1.0 +120-140s,11869,11552,113,0.95,204,1.72,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_100_adaptive/run_005_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_100_adaptive/run_005_time_analysis.csv new file mode 100644 index 000000000..7658c06e5 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_100_adaptive/run_005_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,6588,6504,69,1.05,15,0.23,1.0 +20-40s,6731,6642,57,0.85,32,0.48,1.0 +40-60s,6666,6573,63,0.95,30,0.45,1.0 +60-80s,16239,179,4222,26.0,11838,72.9,100.0 +80-100s,8918,5979,84,0.94,2855,32.01,1.0 +100-120s,6861,6651,70,1.02,140,2.04,1.0 +120-140s,6668,6496,62,0.93,110,1.65,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_100_adaptive/run_006_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_100_adaptive/run_006_time_analysis.csv new file mode 100644 index 000000000..0ace6aa64 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_100_adaptive/run_006_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,11468,11356,103,0.9,9,0.08,1.0 +20-40s,11678,11555,99,0.85,24,0.21,1.0 +40-60s,11685,11494,122,1.04,69,0.59,1.0 +60-80s,16177,28,4789,29.6,11360,70.22,100.0 +80-100s,13136,9915,114,0.87,3107,23.65,1.0 +100-120s,11923,11540,111,0.93,272,2.28,1.0 +120-140s,11890,11542,124,1.04,224,1.88,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_100_adaptive/run_007_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_100_adaptive/run_007_time_analysis.csv new file mode 100644 index 000000000..6732be06d --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_100_adaptive/run_007_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,5398,5327,57,1.06,14,0.26,1.0 +20-40s,5597,5499,68,1.21,30,0.54,1.0 +40-60s,5556,5455,55,0.99,46,0.83,1.0 +60-80s,16033,250,3959,24.69,11824,73.75,100.0 +80-100s,8534,4724,121,1.42,3689,43.23,1.0 +100-120s,5488,5336,49,0.89,103,1.88,1.0 +120-140s,5582,5452,46,0.82,84,1.5,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_100_adaptive/run_008_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_100_adaptive/run_008_time_analysis.csv new file mode 100644 index 000000000..debfe1cf5 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_100_adaptive/run_008_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,11138,11011,111,1.0,16,0.14,1.0 +20-40s,11632,11482,115,0.99,35,0.3,1.0 +40-60s,11674,11494,110,0.94,70,0.6,1.0 +60-80s,16353,492,4888,29.89,10973,67.1,100.0 +80-100s,13195,9590,134,1.02,3471,26.31,1.0 +100-120s,11895,11541,110,0.92,244,2.05,1.0 +120-140s,11874,11537,129,1.09,208,1.75,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_100_adaptive/run_009_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_100_adaptive/run_009_time_analysis.csv new file mode 100644 index 000000000..5559fe75b --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_100_adaptive/run_009_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,7615,7512,72,0.95,31,0.41,1.0 +20-40s,7808,7680,88,1.13,40,0.51,1.0 +40-60s,7798,7648,88,1.13,62,0.8,1.0 +60-80s,16522,154,4416,26.73,11952,72.34,100.0 +80-100s,10245,6654,95,0.93,3496,34.12,1.0 +100-120s,7812,7628,60,0.77,124,1.59,1.0 +120-140s,7911,7687,85,1.07,139,1.76,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_100_adaptive/run_010_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_100_adaptive/run_010_time_analysis.csv new file mode 100644 index 000000000..a883942db --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_100_adaptive/run_010_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,11389,11264,111,0.97,14,0.12,1.0 +20-40s,11650,11491,125,1.07,34,0.29,1.0 +40-60s,11703,11514,120,1.03,69,0.59,1.0 +60-80s,16611,299,4914,29.58,11398,68.62,100.0 +80-100s,13285,9891,102,0.77,3292,24.78,1.0 +100-120s,11873,11555,101,0.85,217,1.83,1.0 +120-140s,11875,11551,115,0.97,209,1.76,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_100_adaptive/run_011_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_100_adaptive/run_011_time_analysis.csv new file mode 100644 index 000000000..8905eeb50 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_100_adaptive/run_011_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,11177,11034,122,1.09,21,0.19,1.0 +20-40s,11626,11459,134,1.15,33,0.28,1.0 +40-60s,11680,11488,128,1.1,64,0.55,1.0 +60-80s,16001,476,4859,30.37,10666,66.66,100.0 +80-100s,13356,9276,126,0.94,3954,29.6,1.0 +100-120s,11833,11487,123,1.04,223,1.88,1.0 +120-140s,11792,11500,110,0.93,182,1.54,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_100_adaptive/run_012_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_100_adaptive/run_012_time_analysis.csv new file mode 100644 index 000000000..9e7999204 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_100_adaptive/run_012_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,10162,10033,116,1.14,13,0.13,1.0 +20-40s,10192,10047,115,1.13,30,0.29,1.0 +40-60s,10154,9995,103,1.01,56,0.55,1.0 +60-80s,16361,108,4659,28.48,11594,70.86,100.0 +80-100s,12126,8870,88,0.73,3168,26.13,1.0 +100-120s,10445,10151,117,1.12,177,1.69,1.0 +120-140s,10392,10110,101,0.97,181,1.74,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_100_adaptive/run_013_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_100_adaptive/run_013_time_analysis.csv new file mode 100644 index 000000000..3dcafd117 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_100_adaptive/run_013_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,11254,11122,119,1.06,13,0.12,1.0 +20-40s,11723,11561,119,1.02,43,0.37,1.0 +40-60s,11727,11535,125,1.07,67,0.57,1.0 +60-80s,16455,434,4918,29.89,11103,67.47,100.0 +80-100s,13166,9705,138,1.05,3323,25.24,1.0 +100-120s,11916,11515,137,1.15,264,2.22,1.0 +120-140s,11821,11485,121,1.02,215,1.82,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_100_adaptive/run_014_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_100_adaptive/run_014_time_analysis.csv new file mode 100644 index 000000000..e764ca63b --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_100_adaptive/run_014_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,11019,10909,97,0.88,13,0.12,1.0 +20-40s,10986,10874,86,0.78,26,0.24,1.0 +40-60s,11093,10883,151,1.36,59,0.53,1.0 +60-80s,16709,5,4903,29.34,11801,70.63,100.0 +80-100s,12480,9649,92,0.74,2739,21.95,1.0 +100-120s,11142,10820,116,1.04,206,1.85,1.0 +120-140s,11071,10842,79,0.71,150,1.35,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_100_adaptive/run_015_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_100_adaptive/run_015_time_analysis.csv new file mode 100644 index 000000000..6e8d88f72 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_100_adaptive/run_015_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,11534,11419,102,0.88,13,0.11,1.0 +20-40s,11697,11524,136,1.16,37,0.32,1.0 +40-60s,11725,11535,123,1.05,67,0.57,1.0 +60-80s,16527,86,4892,29.6,11549,69.88,100.0 +80-100s,13307,9769,103,0.77,3435,25.81,1.0 +100-120s,11878,11558,112,0.94,208,1.75,1.0 +120-140s,11837,11524,111,0.94,202,1.71,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_20/computed_baseline.txt b/experiments/results/baseline/sudden_error_spike_20/computed_baseline.txt new file mode 100644 index 000000000..e9a04eb30 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_20/computed_baseline.txt @@ -0,0 +1,15 @@ +# Baseline computed at 2025-12-19 13:05:58 -0500 +# Source files: run_010_time_analysis.csv, run_015_time_analysis.csv, run_009_time_analysis.csv, run_011_time_analysis.csv, run_014_time_analysis.csv, run_008_time_analysis.csv, run_012_time_analysis.csv, run_013_time_analysis.csv, run_003_time_analysis.csv, run_006_time_analysis.csv, run_002_time_analysis.csv, run_007_time_analysis.csv, run_001_time_analysis.csv, run_004_time_analysis.csv, run_005_time_analysis.csv +# Total data points: 105 + +deviation_p5=1.0000000000000009 +deviation_p50=10.999999999999998 +deviation_p95=6211.599999999999 + +error_rate_p5=0.366 +error_rate_p50=0.98 +error_rate_p95=4.4479999999999995 + +rejection_rate_p5=0.0 +rejection_rate_p50=0.0 +rejection_rate_p95=79.19 diff --git a/experiments/results/baseline/sudden_error_spike_20/run_001_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_20/run_001_time_analysis.csv new file mode 100644 index 000000000..bfa961b40 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_20/run_001_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,11490,11370,120,1.04,0,0.0,1.0 +20-40s,11657,11538,119,1.02,0,0.0,1.0 +40-60s,11678,11569,109,0.93,0,0.0,1.0 +60-80s,16065,2694,668,4.16,12703,79.07,20.0 +80-100s,15436,8540,84,0.54,6812,44.13,1.0 +100-120s,11665,11537,128,1.1,0,0.0,1.0 +120-140s,11656,11552,104,0.89,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_20/run_002_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_20/run_002_time_analysis.csv new file mode 100644 index 000000000..a36e3cfcb --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_20/run_002_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,11600,11483,117,1.01,0,0.0,1.0 +20-40s,11652,11536,116,1.0,0,0.0,1.0 +40-60s,11216,11104,112,1.0,0,0.0,1.0 +60-80s,15022,2826,671,4.47,11525,76.72,20.0 +80-100s,14598,8530,82,0.56,5986,41.01,1.0 +100-120s,11649,11530,119,1.02,0,0.0,1.0 +120-140s,11664,11541,123,1.05,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_20/run_003_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_20/run_003_time_analysis.csv new file mode 100644 index 000000000..d90caad4a --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_20/run_003_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,10701,10596,105,0.98,0,0.0,1.0 +20-40s,11050,10953,97,0.88,0,0.0,1.0 +40-60s,11015,10890,125,1.13,0,0.0,1.0 +60-80s,16122,3015,659,4.09,12448,77.21,20.0 +80-100s,14013,8228,99,0.71,5686,40.58,1.0 +100-120s,11018,10895,123,1.12,0,0.0,1.0 +120-140s,11017,10912,105,0.95,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_20/run_004_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_20/run_004_time_analysis.csv new file mode 100644 index 000000000..19a595782 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_20/run_004_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,5205,5154,51,0.98,0,0.0,1.0 +20-40s,5414,5365,49,0.91,0,0.0,1.0 +40-60s,5645,5590,55,0.97,0,0.0,1.0 +60-80s,14739,3134,677,4.59,10928,74.14,20.0 +80-100s,13260,3500,37,0.28,9723,73.33,1.0 +100-120s,5453,5391,62,1.14,0,0.0,1.0 +120-140s,5768,5715,53,0.92,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_20/run_005_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_20/run_005_time_analysis.csv new file mode 100644 index 000000000..71bbe3500 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_20/run_005_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,7303,7225,78,1.07,0,0.0,1.0 +20-40s,7641,7569,72,0.94,0,0.0,1.0 +40-60s,7482,7414,68,0.91,0,0.0,1.0 +60-80s,15660,3066,682,4.36,11912,76.07,20.0 +80-100s,13261,5057,52,0.39,8152,61.47,1.0 +100-120s,7545,7473,72,0.95,0,0.0,1.0 +120-140s,7577,7514,63,0.83,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_20/run_006_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_20/run_006_time_analysis.csv new file mode 100644 index 000000000..81cc316e8 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_20/run_006_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,11031,10914,117,1.06,0,0.0,1.0 +20-40s,11650,11536,114,0.98,0,0.0,1.0 +40-60s,11619,11498,121,1.04,0,0.0,1.0 +60-80s,15940,3113,642,4.03,12185,76.44,20.0 +80-100s,14482,7596,99,0.68,6787,46.87,1.0 +100-120s,11662,11534,128,1.1,0,0.0,1.0 +120-140s,11665,11536,129,1.11,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_20/run_007_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_20/run_007_time_analysis.csv new file mode 100644 index 000000000..8aeab9443 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_20/run_007_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,11604,11489,115,0.99,0,0.0,1.0 +20-40s,11655,11540,115,0.99,0,0.0,1.0 +40-60s,11624,11508,116,1.0,0,0.0,1.0 +60-80s,16489,2625,668,4.05,13196,80.03,20.0 +80-100s,15648,8004,74,0.47,7570,48.38,1.0 +100-120s,13591,11137,100,0.74,2354,17.32,1.0 +120-140s,11645,11537,108,0.93,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_20/run_008_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_20/run_008_time_analysis.csv new file mode 100644 index 000000000..aef9c8d75 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_20/run_008_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,10289,10176,113,1.1,0,0.0,1.0 +20-40s,10667,10560,107,1.0,0,0.0,1.0 +40-60s,10681,10578,103,0.96,0,0.0,1.0 +60-80s,15821,3095,655,4.14,12071,76.3,20.0 +80-100s,15282,6783,74,0.48,8425,55.13,1.0 +100-120s,10690,10595,95,0.89,0,0.0,1.0 +120-140s,10668,10567,101,0.95,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_20/run_009_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_20/run_009_time_analysis.csv new file mode 100644 index 000000000..d05292975 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_20/run_009_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,3448,3416,32,0.93,0,0.0,1.0 +20-40s,3728,3689,39,1.05,0,0.0,1.0 +40-60s,3419,3380,39,1.14,0,0.0,1.0 +60-80s,13078,2525,606,4.63,9947,76.06,20.0 +80-100s,12780,2432,24,0.19,10324,80.78,1.0 +100-120s,3411,3379,32,0.94,0,0.0,1.0 +120-140s,3607,3572,35,0.97,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_20/run_010_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_20/run_010_time_analysis.csv new file mode 100644 index 000000000..5ba4e6600 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_20/run_010_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,4122,4073,49,1.19,0,0.0,1.0 +20-40s,3955,3924,31,0.78,0,0.0,1.0 +40-60s,3930,3902,28,0.71,0,0.0,1.0 +60-80s,12732,2769,667,5.24,9296,73.01,20.0 +80-100s,13038,2511,29,0.22,10498,80.52,1.0 +100-120s,3901,3861,40,1.03,0,0.0,1.0 +120-140s,3925,3880,45,1.15,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_20/run_011_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_20/run_011_time_analysis.csv new file mode 100644 index 000000000..b3e50be55 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_20/run_011_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,2324,2298,26,1.12,0,0.0,1.0 +20-40s,2169,2152,17,0.78,0,0.0,1.0 +40-60s,1945,1927,18,0.93,0,0.0,1.0 +60-80s,8844,1899,398,4.5,6547,74.03,20.0 +80-100s,12191,1755,31,0.25,10405,85.35,1.0 +100-120s,2122,2108,14,0.66,0,0.0,1.0 +120-140s,2041,2018,23,1.13,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_20/run_012_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_20/run_012_time_analysis.csv new file mode 100644 index 000000000..7cc5102f9 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_20/run_012_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,3834,3797,37,0.97,0,0.0,1.0 +20-40s,3710,3678,32,0.86,0,0.0,1.0 +40-60s,3794,3760,34,0.9,0,0.0,1.0 +60-80s,12501,2729,673,5.38,9099,72.79,20.0 +80-100s,12801,2160,18,0.14,10623,82.99,1.0 +100-120s,3549,3512,37,1.04,0,0.0,1.0 +120-140s,3568,3532,36,1.01,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_20/run_013_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_20/run_013_time_analysis.csv new file mode 100644 index 000000000..df4008389 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_20/run_013_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,7649,7582,67,0.88,0,0.0,1.0 +20-40s,8167,8085,82,1.0,0,0.0,1.0 +40-60s,8101,8023,78,0.96,0,0.0,1.0 +60-80s,15485,2821,670,4.33,11994,77.46,20.0 +80-100s,15215,5564,55,0.36,9596,63.07,1.0 +100-120s,7887,7810,77,0.98,0,0.0,1.0 +120-140s,7896,7819,77,0.98,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_20/run_014_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_20/run_014_time_analysis.csv new file mode 100644 index 000000000..529d1d167 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_20/run_014_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,9795,9703,92,0.94,0,0.0,1.0 +20-40s,10186,10103,83,0.81,0,0.0,1.0 +40-60s,10306,10204,102,0.99,0,0.0,1.0 +60-80s,16282,3179,664,4.08,12439,76.4,20.0 +80-100s,15722,6279,83,0.53,9360,59.53,1.0 +100-120s,10672,10109,92,0.86,471,4.41,1.0 +120-140s,10252,10156,96,0.94,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_20/run_015_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_20/run_015_time_analysis.csv new file mode 100644 index 000000000..8270f278e --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_20/run_015_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,8785,8684,101,1.15,0,0.0,1.0 +20-40s,8894,8814,80,0.9,0,0.0,1.0 +40-60s,8789,8707,82,0.93,0,0.0,1.0 +60-80s,15967,2644,674,4.22,12649,79.22,20.0 +80-100s,13970,6614,60,0.43,7296,52.23,1.0 +100-120s,8892,8805,87,0.98,0,0.0,1.0 +120-140s,8934,8842,92,1.03,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_20_adaptive/computed_baseline.txt b/experiments/results/baseline/sudden_error_spike_20_adaptive/computed_baseline.txt new file mode 100644 index 000000000..d406f743c --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_20_adaptive/computed_baseline.txt @@ -0,0 +1,15 @@ +# Baseline computed at 2025-12-19 13:05:58 -0500 +# Source files: run_010_time_analysis.csv, run_015_time_analysis.csv, run_009_time_analysis.csv, run_011_time_analysis.csv, run_014_time_analysis.csv, run_008_time_analysis.csv, run_012_time_analysis.csv, run_013_time_analysis.csv, run_003_time_analysis.csv, run_006_time_analysis.csv, run_002_time_analysis.csv, run_007_time_analysis.csv, run_001_time_analysis.csv, run_004_time_analysis.csv, run_005_time_analysis.csv +# Total data points: 105 + +deviation_p5=7.600000000000008 +deviation_p50=64.99999999999999 +deviation_p95=865.8 + +error_rate_p5=0.824 +error_rate_p50=1.05 +error_rate_p95=16.794 + +rejection_rate_p5=0.132 +rejection_rate_p50=0.78 +rejection_rate_p95=14.862 diff --git a/experiments/results/baseline/sudden_error_spike_20_adaptive/run_001_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_20_adaptive/run_001_time_analysis.csv new file mode 100644 index 000000000..255380951 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_20_adaptive/run_001_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,2750,2697,36,1.31,17,0.62,1.0 +20-40s,2796,2743,33,1.18,20,0.72,1.0 +40-60s,2879,2803,37,1.29,39,1.35,1.0 +60-80s,3493,2389,560,16.03,544,15.57,20.0 +80-100s,2964,2615,66,2.23,283,9.55,1.0 +100-120s,2714,2653,31,1.14,30,1.11,1.0 +120-140s,2874,2809,31,1.08,34,1.18,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_20_adaptive/run_002_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_20_adaptive/run_002_time_analysis.csv new file mode 100644 index 000000000..2f8638689 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_20_adaptive/run_002_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,9814,9687,106,1.08,21,0.21,1.0 +20-40s,10311,10165,114,1.11,32,0.31,1.0 +40-60s,9979,9839,86,0.86,54,0.54,1.0 +60-80s,13175,9248,2141,16.25,1786,13.56,20.0 +80-100s,11279,10147,236,2.09,896,7.94,1.0 +100-120s,10340,10176,96,0.93,68,0.66,1.0 +120-140s,10363,10184,98,0.95,81,0.78,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_20_adaptive/run_003_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_20_adaptive/run_003_time_analysis.csv new file mode 100644 index 000000000..028852ed7 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_20_adaptive/run_003_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,10961,10852,105,0.96,4,0.04,1.0 +20-40s,11448,11270,116,1.01,62,0.54,1.0 +40-60s,11452,11263,123,1.07,66,0.58,1.0 +60-80s,15229,10482,2542,16.69,2205,14.48,20.0 +80-100s,12355,11235,173,1.4,947,7.66,1.0 +100-120s,11473,11256,127,1.11,90,0.78,1.0 +120-140s,11498,11265,119,1.03,114,0.99,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_20_adaptive/run_004_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_20_adaptive/run_004_time_analysis.csv new file mode 100644 index 000000000..f7c426978 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_20_adaptive/run_004_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,8265,8150,85,1.03,30,0.36,1.0 +20-40s,8518,8421,70,0.82,27,0.32,1.0 +40-60s,8684,8533,89,1.02,62,0.71,1.0 +60-80s,11544,7924,1917,16.61,1703,14.75,20.0 +80-100s,9386,8473,158,1.68,755,8.04,1.0 +100-120s,8520,8388,74,0.87,58,0.68,1.0 +120-140s,8604,8454,70,0.81,80,0.93,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_20_adaptive/run_005_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_20_adaptive/run_005_time_analysis.csv new file mode 100644 index 000000000..f4aca0acd --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_20_adaptive/run_005_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,10820,10699,107,0.99,14,0.13,1.0 +20-40s,11087,10940,114,1.03,33,0.3,1.0 +40-60s,11066,10912,99,0.89,55,0.5,1.0 +60-80s,14861,10190,2461,16.56,2210,14.87,20.0 +80-100s,11989,10927,161,1.34,901,7.52,1.0 +100-120s,11135,10951,106,0.95,78,0.7,1.0 +120-140s,11141,10936,114,1.02,91,0.82,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_20_adaptive/run_006_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_20_adaptive/run_006_time_analysis.csv new file mode 100644 index 000000000..b988494cf --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_20_adaptive/run_006_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,11535,11402,118,1.02,15,0.13,1.0 +20-40s,11671,11542,103,0.88,26,0.22,1.0 +40-60s,11678,11491,121,1.04,66,0.57,1.0 +60-80s,15722,10661,2701,17.18,2360,15.01,20.0 +80-100s,12591,11514,138,1.1,939,7.46,1.0 +100-120s,11743,11536,118,1.0,89,0.76,1.0 +120-140s,11753,11550,105,0.89,98,0.83,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_20_adaptive/run_007_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_20_adaptive/run_007_time_analysis.csv new file mode 100644 index 000000000..8d730d3e4 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_20_adaptive/run_007_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,5969,5902,56,0.94,11,0.18,1.0 +20-40s,5850,5750,66,1.13,34,0.58,1.0 +40-60s,5799,5718,47,0.81,34,0.59,1.0 +60-80s,8022,5385,1389,17.31,1248,15.56,20.0 +80-100s,6143,5629,49,0.8,465,7.57,1.0 +100-120s,5707,5608,48,0.84,51,0.89,1.0 +120-140s,5869,5761,56,0.95,52,0.89,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_20_adaptive/run_008_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_20_adaptive/run_008_time_analysis.csv new file mode 100644 index 000000000..a835f54ec --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_20_adaptive/run_008_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,7499,7428,60,0.8,11,0.15,1.0 +20-40s,7752,7669,65,0.84,18,0.23,1.0 +40-60s,7716,7569,89,1.15,58,0.75,1.0 +60-80s,10297,7207,1644,15.97,1446,14.04,20.0 +80-100s,8392,7581,162,1.93,649,7.73,1.0 +100-120s,7761,7609,80,1.03,72,0.93,1.0 +120-140s,7842,7705,69,0.88,68,0.87,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_20_adaptive/run_009_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_20_adaptive/run_009_time_analysis.csv new file mode 100644 index 000000000..e8465e017 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_20_adaptive/run_009_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,9131,9030,88,0.96,13,0.14,1.0 +20-40s,9376,9237,98,1.05,41,0.44,1.0 +40-60s,9226,9071,91,0.99,64,0.69,1.0 +60-80s,12534,8424,2147,17.13,1963,15.66,20.0 +80-100s,10023,9144,142,1.42,737,7.35,1.0 +100-120s,9259,9087,101,1.09,71,0.77,1.0 +120-140s,9338,9157,97,1.04,84,0.9,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_20_adaptive/run_010_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_20_adaptive/run_010_time_analysis.csv new file mode 100644 index 000000000..dcc59d0ff --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_20_adaptive/run_010_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,5174,5067,72,1.39,35,0.68,1.0 +20-40s,5158,5031,71,1.38,56,1.09,1.0 +40-60s,5305,5190,54,1.02,61,1.15,1.0 +60-80s,7080,4833,1197,16.91,1050,14.83,20.0 +80-100s,5721,5169,76,1.33,476,8.32,1.0 +100-120s,5249,5151,42,0.8,56,1.07,1.0 +120-140s,5210,5101,56,1.07,53,1.02,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_20_adaptive/run_011_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_20_adaptive/run_011_time_analysis.csv new file mode 100644 index 000000000..b3bec020d --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_20_adaptive/run_011_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,11155,11045,96,0.86,14,0.13,1.0 +20-40s,11629,11483,112,0.96,34,0.29,1.0 +40-60s,11670,11478,119,1.02,73,0.63,1.0 +60-80s,15378,10629,2527,16.43,2222,14.45,20.0 +80-100s,12566,11464,191,1.52,911,7.25,1.0 +100-120s,11669,11464,119,1.02,86,0.74,1.0 +120-140s,11733,11529,116,0.99,88,0.75,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_20_adaptive/run_012_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_20_adaptive/run_012_time_analysis.csv new file mode 100644 index 000000000..f77ab4979 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_20_adaptive/run_012_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,11611,11487,115,0.99,9,0.08,1.0 +20-40s,11632,11481,114,0.98,37,0.32,1.0 +40-60s,11645,11483,110,0.94,52,0.45,1.0 +60-80s,15832,10660,2708,17.1,2464,15.56,20.0 +80-100s,12583,11525,137,1.09,921,7.32,1.0 +100-120s,11701,11509,104,0.89,88,0.75,1.0 +120-140s,11739,11517,111,0.95,111,0.95,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_20_adaptive/run_013_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_20_adaptive/run_013_time_analysis.csv new file mode 100644 index 000000000..e93e22de8 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_20_adaptive/run_013_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,7536,7440,78,1.04,18,0.24,1.0 +20-40s,7711,7599,83,1.08,29,0.38,1.0 +40-60s,7998,7845,97,1.21,56,0.7,1.0 +60-80s,10147,7082,1673,16.49,1392,13.72,20.0 +80-100s,8595,7768,130,1.51,697,8.11,1.0 +100-120s,7920,7758,90,1.14,72,0.91,1.0 +120-140s,7828,7646,91,1.16,91,1.16,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_20_adaptive/run_014_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_20_adaptive/run_014_time_analysis.csv new file mode 100644 index 000000000..984c0d6ca --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_20_adaptive/run_014_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,8205,8103,88,1.07,14,0.17,1.0 +20-40s,8352,8228,88,1.05,36,0.43,1.0 +40-60s,8517,8384,79,0.93,54,0.63,1.0 +60-80s,11339,7831,1839,16.22,1669,14.72,20.0 +80-100s,9310,8393,181,1.94,736,7.91,1.0 +100-120s,8514,8357,98,1.15,59,0.69,1.0 +120-140s,8433,8281,79,0.94,73,0.87,1.0 diff --git a/experiments/results/baseline/sudden_error_spike_20_adaptive/run_015_time_analysis.csv b/experiments/results/baseline/sudden_error_spike_20_adaptive/run_015_time_analysis.csv new file mode 100644 index 000000000..08b4e739a --- /dev/null +++ b/experiments/results/baseline/sudden_error_spike_20_adaptive/run_015_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,11029,10916,99,0.9,14,0.13,1.0 +20-40s,11702,11533,126,1.08,43,0.37,1.0 +40-60s,11731,11547,116,0.99,68,0.58,1.0 +60-80s,15569,10716,2619,16.82,2234,14.35,20.0 +80-100s,12834,11502,251,1.96,1081,8.42,1.0 +100-120s,11738,11555,108,0.92,75,0.64,1.0 +120-140s,11765,11533,130,1.1,102,0.87,1.0 diff --git a/experiments/results/baseline/sudden_error_spikes/computed_baseline.txt b/experiments/results/baseline/sudden_error_spikes/computed_baseline.txt new file mode 100644 index 000000000..55b6133d4 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spikes/computed_baseline.txt @@ -0,0 +1,15 @@ +# Baseline computed at 2025-12-19 13:05:58 -0500 +# Source files: run_010_time_analysis.csv, run_015_time_analysis.csv, run_009_time_analysis.csv, run_011_time_analysis.csv, run_014_time_analysis.csv, run_008_time_analysis.csv, run_012_time_analysis.csv, run_013_time_analysis.csv, run_003_time_analysis.csv, run_006_time_analysis.csv, run_002_time_analysis.csv, run_007_time_analysis.csv, run_001_time_analysis.csv, run_004_time_analysis.csv, run_005_time_analysis.csv +# Total data points: 225 + +deviation_p5=1.0000000000000009 +deviation_p50=16.000000000000004 +deviation_p95=8114.999999999998 + +error_rate_p5=0.202 +error_rate_p50=0.97 +error_rate_p95=4.678 + +rejection_rate_p5=0.0 +rejection_rate_p50=13.81 +rejection_rate_p95=92.828 diff --git a/experiments/results/baseline/sudden_error_spikes/run_001_time_analysis.csv b/experiments/results/baseline/sudden_error_spikes/run_001_time_analysis.csv new file mode 100644 index 000000000..52b276bcb --- /dev/null +++ b/experiments/results/baseline/sudden_error_spikes/run_001_time_analysis.csv @@ -0,0 +1,16 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,7382,7305,77,1.04,0,0.0,1.0 +20-40s,7392,7313,79,1.07,0,0.0,1.0 +40-60s,7579,7505,74,0.98,0,0.0,1.0 +60-80s,15625,2898,680,4.35,12047,77.1,20.0 +80-100s,13790,5229,61,0.44,8500,61.64,1.0 +100-120s,7589,7510,79,1.04,0,0.0,1.0 +120-140s,7780,7708,72,0.93,0,0.0,1.0 +140-160s,16356,814,752,4.6,14790,90.43,60.0 +160-180s,13811,2943,27,0.2,10841,78.5,1.0 +180-200s,7663,7580,83,1.08,0,0.0,1.0 +200-220s,7569,7488,81,1.07,0,0.0,1.0 +220-240s,16520,251,704,4.26,15565,94.22,100.0 +240-260s,15443,2893,34,0.22,12516,81.05,1.0 +260-280s,10361,7323,81,0.78,2957,28.54,1.0 +280-300s,7716,7636,80,1.04,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spikes/run_002_time_analysis.csv b/experiments/results/baseline/sudden_error_spikes/run_002_time_analysis.csv new file mode 100644 index 000000000..071697471 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spikes/run_002_time_analysis.csv @@ -0,0 +1,16 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,11573,11463,110,0.95,0,0.0,1.0 +20-40s,11657,11537,120,1.03,0,0.0,1.0 +40-60s,11255,11156,99,0.88,0,0.0,1.0 +60-80s,15131,2815,678,4.48,11638,76.91,20.0 +80-100s,15757,7689,79,0.5,7989,50.7,1.0 +100-120s,13247,11240,130,0.98,1877,14.17,1.0 +120-140s,11664,11545,119,1.02,0,0.0,1.0 +140-160s,16503,649,810,4.91,15044,91.16,60.0 +160-180s,15600,3891,50,0.32,11659,74.74,1.0 +180-200s,13862,10699,115,0.83,3048,21.99,1.0 +200-220s,11710,11574,136,1.16,0,0.0,1.0 +220-240s,16185,120,652,4.03,15413,95.23,100.0 +240-260s,15282,4952,46,0.3,10284,67.29,1.0 +260-280s,12948,11369,110,0.85,1469,11.35,1.0 +280-300s,11705,11573,132,1.13,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spikes/run_003_time_analysis.csv b/experiments/results/baseline/sudden_error_spikes/run_003_time_analysis.csv new file mode 100644 index 000000000..4351311c8 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spikes/run_003_time_analysis.csv @@ -0,0 +1,16 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,9607,9493,114,1.19,0,0.0,1.0 +20-40s,9919,9824,95,0.96,0,0.0,1.0 +40-60s,10043,9948,95,0.95,0,0.0,1.0 +60-80s,16209,3078,659,4.07,12472,76.94,20.0 +80-100s,15374,6559,77,0.5,8738,56.84,1.0 +100-120s,9924,9801,87,0.88,36,0.36,1.0 +120-140s,9953,9846,107,1.08,0,0.0,1.0 +140-160s,15639,843,758,4.85,14038,89.76,60.0 +160-180s,14795,3300,62,0.42,11433,77.28,1.0 +180-200s,12164,9284,95,0.78,2785,22.9,1.0 +200-220s,9943,9841,102,1.03,0,0.0,1.0 +220-240s,16055,365,685,4.27,15005,93.46,100.0 +240-260s,14669,3826,40,0.27,10803,73.65,1.0 +260-280s,11538,9661,102,0.88,1775,15.38,1.0 +280-300s,10012,9906,106,1.06,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spikes/run_004_time_analysis.csv b/experiments/results/baseline/sudden_error_spikes/run_004_time_analysis.csv new file mode 100644 index 000000000..d1e3d5409 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spikes/run_004_time_analysis.csv @@ -0,0 +1,16 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,8784,8679,105,1.2,0,0.0,1.0 +20-40s,9217,9123,94,1.02,0,0.0,1.0 +40-60s,9246,9144,102,1.1,0,0.0,1.0 +60-80s,16004,3185,663,4.14,12156,75.96,20.0 +80-100s,15427,6114,82,0.53,9231,59.84,1.0 +100-120s,9096,9011,85,0.93,0,0.0,1.0 +120-140s,9229,9134,95,1.03,0,0.0,1.0 +140-160s,16207,996,774,4.78,14437,89.08,60.0 +160-180s,15520,3124,76,0.49,12320,79.38,1.0 +180-200s,11773,9004,98,0.83,2671,22.69,1.0 +200-220s,9367,9283,84,0.9,0,0.0,1.0 +220-240s,16023,445,705,4.4,14873,92.82,100.0 +240-260s,15331,3601,43,0.28,11687,76.23,1.0 +260-280s,11137,9046,95,0.85,1996,17.92,1.0 +280-300s,9351,9258,93,0.99,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spikes/run_005_time_analysis.csv b/experiments/results/baseline/sudden_error_spikes/run_005_time_analysis.csv new file mode 100644 index 000000000..56d01c33e --- /dev/null +++ b/experiments/results/baseline/sudden_error_spikes/run_005_time_analysis.csv @@ -0,0 +1,16 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,7336,7258,78,1.06,0,0.0,1.0 +20-40s,7654,7590,64,0.84,0,0.0,1.0 +40-60s,7733,7657,76,0.98,0,0.0,1.0 +60-80s,14976,3257,671,4.48,11048,73.77,20.0 +80-100s,15337,4669,54,0.35,10614,69.21,1.0 +100-120s,12739,7388,81,0.64,5270,41.37,1.0 +120-140s,7730,7647,83,1.07,0,0.0,1.0 +140-160s,15694,901,736,4.69,14057,89.57,60.0 +160-180s,13385,3033,53,0.4,10299,76.94,1.0 +180-200s,7776,7694,82,1.05,0,0.0,1.0 +200-220s,7741,7674,67,0.87,0,0.0,1.0 +220-240s,15337,411,719,4.69,14207,92.63,100.0 +240-260s,14564,2872,33,0.23,11659,80.05,1.0 +260-280s,10161,7602,84,0.83,2475,24.36,1.0 +280-300s,7799,7718,81,1.04,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spikes/run_006_time_analysis.csv b/experiments/results/baseline/sudden_error_spikes/run_006_time_analysis.csv new file mode 100644 index 000000000..1eb39ad50 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spikes/run_006_time_analysis.csv @@ -0,0 +1,16 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,3641,3603,38,1.04,0,0.0,1.0 +20-40s,3586,3551,35,0.98,0,0.0,1.0 +40-60s,3559,3519,40,1.12,0,0.0,1.0 +60-80s,12271,2420,608,4.95,9243,75.32,20.0 +80-100s,14285,2519,27,0.19,11739,82.18,1.0 +100-120s,3489,3453,36,1.03,0,0.0,1.0 +120-140s,3545,3509,36,1.02,0,0.0,1.0 +140-160s,15850,593,740,4.67,14517,91.59,60.0 +160-180s,12058,2047,24,0.2,9987,82.82,1.0 +180-200s,3341,3309,32,0.96,0,0.0,1.0 +200-220s,3445,3414,31,0.9,0,0.0,1.0 +220-240s,15819,83,747,4.72,14989,94.75,100.0 +240-260s,14545,1296,14,0.1,13235,90.99,1.0 +260-280s,8826,3408,41,0.46,5377,60.92,1.0 +280-300s,3534,3496,38,1.08,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spikes/run_007_time_analysis.csv b/experiments/results/baseline/sudden_error_spikes/run_007_time_analysis.csv new file mode 100644 index 000000000..740e5f8af --- /dev/null +++ b/experiments/results/baseline/sudden_error_spikes/run_007_time_analysis.csv @@ -0,0 +1,16 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,3142,3113,29,0.92,0,0.0,1.0 +20-40s,3420,3389,31,0.91,0,0.0,1.0 +40-60s,3220,3191,29,0.9,0,0.0,1.0 +60-80s,14793,2286,571,3.86,11936,80.69,20.0 +80-100s,15663,2382,31,0.2,13250,84.59,1.0 +100-120s,8028,3177,34,0.42,4817,60.0,1.0 +120-140s,3391,3359,32,0.94,0,0.0,1.0 +140-160s,16379,531,722,4.41,15126,92.35,60.0 +160-180s,12453,2152,15,0.12,10286,82.6,1.0 +180-200s,3359,3328,31,0.92,0,0.0,1.0 +200-220s,3318,3277,41,1.24,0,0.0,1.0 +220-240s,15514,73,738,4.76,14703,94.77,100.0 +240-260s,12621,1399,13,0.1,11209,88.81,1.0 +260-280s,6016,3313,33,0.55,2670,44.38,1.0 +280-300s,3141,3111,30,0.96,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spikes/run_008_time_analysis.csv b/experiments/results/baseline/sudden_error_spikes/run_008_time_analysis.csv new file mode 100644 index 000000000..c4c14f0af --- /dev/null +++ b/experiments/results/baseline/sudden_error_spikes/run_008_time_analysis.csv @@ -0,0 +1,16 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,11154,11044,110,0.99,0,0.0,1.0 +20-40s,11620,11497,123,1.06,0,0.0,1.0 +40-60s,11612,11515,97,0.84,0,0.0,1.0 +60-80s,16102,3051,666,4.14,12385,76.92,20.0 +80-100s,15304,7484,86,0.56,7734,50.54,1.0 +100-120s,11710,11534,111,0.95,65,0.56,1.0 +120-140s,11636,11519,117,1.01,0,0.0,1.0 +140-160s,16005,978,714,4.46,14313,89.43,60.0 +160-180s,14937,4098,58,0.39,10781,72.18,1.0 +180-200s,13146,11279,99,0.75,1768,13.45,1.0 +200-220s,11680,11560,120,1.03,0,0.0,1.0 +220-240s,15772,515,668,4.24,14589,92.5,100.0 +240-260s,14736,4497,50,0.34,10189,69.14,1.0 +260-280s,12621,11294,112,0.89,1215,9.63,1.0 +280-300s,11678,11557,121,1.04,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spikes/run_009_time_analysis.csv b/experiments/results/baseline/sudden_error_spikes/run_009_time_analysis.csv new file mode 100644 index 000000000..94aa7e0bf --- /dev/null +++ b/experiments/results/baseline/sudden_error_spikes/run_009_time_analysis.csv @@ -0,0 +1,16 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,3346,3313,33,0.99,0,0.0,1.0 +20-40s,3441,3401,40,1.16,0,0.0,1.0 +40-60s,3575,3529,46,1.29,0,0.0,1.0 +60-80s,12439,2717,624,5.02,9098,73.14,20.0 +80-100s,15771,2224,24,0.15,13523,85.75,1.0 +100-120s,9017,3483,39,0.43,5495,60.94,1.0 +120-140s,3521,3490,31,0.88,0,0.0,1.0 +140-160s,15503,725,722,4.66,14056,90.67,60.0 +160-180s,15493,1867,33,0.21,13593,87.74,1.0 +180-200s,9471,3444,29,0.31,5998,63.33,1.0 +200-220s,3488,3457,31,0.89,0,0.0,1.0 +220-240s,15827,205,750,4.74,14872,93.97,100.0 +240-260s,12792,1288,15,0.12,11489,89.81,1.0 +260-280s,3472,3440,32,0.92,0,0.0,1.0 +280-300s,3517,3483,34,0.97,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spikes/run_010_time_analysis.csv b/experiments/results/baseline/sudden_error_spikes/run_010_time_analysis.csv new file mode 100644 index 000000000..1d29f95f3 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spikes/run_010_time_analysis.csv @@ -0,0 +1,16 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,11202,11067,135,1.21,0,0.0,1.0 +20-40s,11443,11317,126,1.1,0,0.0,1.0 +40-60s,11473,11347,126,1.1,0,0.0,1.0 +60-80s,16423,2775,660,4.02,12988,79.08,20.0 +80-100s,15386,7136,79,0.51,8171,53.11,1.0 +100-120s,11485,11363,122,1.06,0,0.0,1.0 +120-140s,11508,11370,138,1.2,0,0.0,1.0 +140-160s,16632,859,719,4.32,15054,90.51,60.0 +160-180s,15777,4367,55,0.35,11355,71.97,1.0 +180-200s,13010,11097,116,0.89,1797,13.81,1.0 +200-220s,11514,11415,99,0.86,0,0.0,1.0 +220-240s,16518,328,685,4.15,15505,93.87,100.0 +240-260s,15501,4673,44,0.28,10784,69.57,1.0 +260-280s,12728,11173,106,0.83,1449,11.38,1.0 +280-300s,11531,11398,133,1.15,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spikes/run_011_time_analysis.csv b/experiments/results/baseline/sudden_error_spikes/run_011_time_analysis.csv new file mode 100644 index 000000000..aeba15ef9 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spikes/run_011_time_analysis.csv @@ -0,0 +1,16 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,10430,10320,110,1.05,0,0.0,1.0 +20-40s,10858,10753,105,0.97,0,0.0,1.0 +40-60s,10845,10749,96,0.89,0,0.0,1.0 +60-80s,15682,2885,659,4.2,12138,77.4,20.0 +80-100s,14562,6707,96,0.66,7759,53.28,1.0 +100-120s,10862,10755,107,0.99,0,0.0,1.0 +120-140s,10905,10780,125,1.15,0,0.0,1.0 +140-160s,15865,927,742,4.68,14196,89.48,60.0 +160-180s,14847,3502,43,0.29,11302,76.12,1.0 +180-200s,12367,10489,118,0.95,1760,14.23,1.0 +200-220s,10876,10748,128,1.18,0,0.0,1.0 +220-240s,15597,457,662,4.24,14478,92.83,100.0 +240-260s,14543,4221,36,0.25,10286,70.73,1.0 +260-280s,12071,10523,103,0.85,1445,11.97,1.0 +280-300s,10869,10747,122,1.12,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spikes/run_012_time_analysis.csv b/experiments/results/baseline/sudden_error_spikes/run_012_time_analysis.csv new file mode 100644 index 000000000..56a338659 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spikes/run_012_time_analysis.csv @@ -0,0 +1,16 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,5164,5109,55,1.07,0,0.0,1.0 +20-40s,5298,5249,49,0.92,0,0.0,1.0 +40-60s,5435,5384,51,0.94,0,0.0,1.0 +60-80s,15423,2772,677,4.39,11974,77.64,20.0 +80-100s,15602,3130,33,0.21,12439,79.73,1.0 +100-120s,8122,5007,51,0.63,3064,37.72,1.0 +120-140s,5239,5180,59,1.13,0,0.0,1.0 +140-160s,16464,531,735,4.46,15198,92.31,60.0 +160-180s,15741,2214,29,0.18,13498,85.75,1.0 +180-200s,8410,5067,49,0.58,3294,39.17,1.0 +200-220s,5293,5248,45,0.85,0,0.0,1.0 +220-240s,16009,73,740,4.62,15196,94.92,100.0 +240-260s,15260,2060,27,0.18,13173,86.32,1.0 +260-280s,8661,5076,52,0.6,3533,40.79,1.0 +280-300s,5340,5290,50,0.94,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spikes/run_013_time_analysis.csv b/experiments/results/baseline/sudden_error_spikes/run_013_time_analysis.csv new file mode 100644 index 000000000..ee591203b --- /dev/null +++ b/experiments/results/baseline/sudden_error_spikes/run_013_time_analysis.csv @@ -0,0 +1,16 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,9352,9258,94,1.01,0,0.0,1.0 +20-40s,9724,9641,83,0.85,0,0.0,1.0 +40-60s,9789,9690,99,1.01,0,0.0,1.0 +60-80s,15758,3088,662,4.2,12008,76.2,20.0 +80-100s,15553,6006,77,0.5,9470,60.89,1.0 +100-120s,12516,9386,89,0.71,3041,24.3,1.0 +120-140s,9722,9621,101,1.04,0,0.0,1.0 +140-160s,16365,900,756,4.62,14709,89.88,60.0 +160-180s,15336,3220,51,0.33,12065,78.67,1.0 +180-200s,11926,9284,83,0.7,2559,21.46,1.0 +200-220s,9772,9671,101,1.03,0,0.0,1.0 +220-240s,16358,384,686,4.19,15288,93.46,100.0 +240-260s,13089,4087,27,0.21,8975,68.57,1.0 +260-280s,9779,9694,85,0.87,0,0.0,1.0 +280-300s,9909,9807,102,1.03,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spikes/run_014_time_analysis.csv b/experiments/results/baseline/sudden_error_spikes/run_014_time_analysis.csv new file mode 100644 index 000000000..89d008997 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spikes/run_014_time_analysis.csv @@ -0,0 +1,16 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,9025,8942,83,0.92,0,0.0,1.0 +20-40s,9102,9014,88,0.97,0,0.0,1.0 +40-60s,9127,9037,90,0.99,0,0.0,1.0 +60-80s,16197,2845,672,4.15,12680,78.29,20.0 +80-100s,14075,6285,73,0.52,7717,54.83,1.0 +100-120s,9112,9013,99,1.09,0,0.0,1.0 +120-140s,9110,9029,81,0.89,0,0.0,1.0 +140-160s,16553,546,780,4.71,15227,91.99,60.0 +160-180s,15488,3390,39,0.25,12059,77.86,1.0 +180-200s,11303,8926,97,0.86,2280,20.17,1.0 +200-220s,9116,9025,91,1.0,0,0.0,1.0 +220-240s,16339,68,697,4.27,15574,95.32,100.0 +240-260s,12488,4107,35,0.28,8346,66.83,1.0 +260-280s,9079,8995,84,0.93,0,0.0,1.0 +280-300s,9108,9019,89,0.98,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spikes/run_015_time_analysis.csv b/experiments/results/baseline/sudden_error_spikes/run_015_time_analysis.csv new file mode 100644 index 000000000..81447f1ff --- /dev/null +++ b/experiments/results/baseline/sudden_error_spikes/run_015_time_analysis.csv @@ -0,0 +1,16 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,6775,6697,78,1.15,0,0.0,1.0 +20-40s,6665,6605,60,0.9,0,0.0,1.0 +40-60s,6594,6522,72,1.09,0,0.0,1.0 +60-80s,15665,2927,683,4.36,12055,76.95,20.0 +80-100s,13427,4329,43,0.32,9055,67.44,1.0 +100-120s,6823,6762,61,0.89,0,0.0,1.0 +120-140s,6799,6741,58,0.85,0,0.0,1.0 +140-160s,16643,572,761,4.57,15310,91.99,60.0 +160-180s,13383,2558,28,0.21,10797,80.68,1.0 +180-200s,6482,6425,57,0.88,0,0.0,1.0 +200-220s,6782,6713,69,1.02,0,0.0,1.0 +220-240s,16662,82,713,4.28,15867,95.23,100.0 +240-260s,15623,2662,19,0.12,12942,82.84,1.0 +260-280s,9396,6376,56,0.6,2964,31.55,1.0 +280-300s,6526,6461,65,1.0,0,0.0,1.0 diff --git a/experiments/results/baseline/sudden_error_spikes_adaptive/computed_baseline.txt b/experiments/results/baseline/sudden_error_spikes_adaptive/computed_baseline.txt new file mode 100644 index 000000000..ce6d52aca --- /dev/null +++ b/experiments/results/baseline/sudden_error_spikes_adaptive/computed_baseline.txt @@ -0,0 +1,15 @@ +# Baseline computed at 2025-12-19 13:05:58 -0500 +# Source files: run_010_time_analysis.csv, run_015_time_analysis.csv, run_009_time_analysis.csv, run_011_time_analysis.csv, run_014_time_analysis.csv, run_008_time_analysis.csv, run_012_time_analysis.csv, run_013_time_analysis.csv, run_003_time_analysis.csv, run_006_time_analysis.csv, run_002_time_analysis.csv, run_007_time_analysis.csv, run_001_time_analysis.csv, run_004_time_analysis.csv, run_005_time_analysis.csv +# Total data points: 225 + +deviation_p5=1.9400000000000037 +deviation_p50=83.0 +deviation_p95=2747.7999999999997 + +error_rate_p5=0.79 +error_rate_p50=1.05 +error_rate_p95=30.561999999999998 + +rejection_rate_p5=0.21 +rejection_rate_p50=1.77 +rejection_rate_p95=68.768 diff --git a/experiments/results/baseline/sudden_error_spikes_adaptive/run_001_time_analysis.csv b/experiments/results/baseline/sudden_error_spikes_adaptive/run_001_time_analysis.csv new file mode 100644 index 000000000..b07b984a4 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spikes_adaptive/run_001_time_analysis.csv @@ -0,0 +1,16 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,9998,9860,119,1.19,19,0.19,1.0 +20-40s,10595,10459,103,0.97,33,0.31,1.0 +40-60s,10631,10454,109,1.03,68,0.64,1.0 +60-80s,13960,9707,2286,16.38,1967,14.09,20.0 +80-100s,11561,10425,221,1.91,915,7.91,1.0 +100-120s,10610,10469,82,0.77,59,0.56,1.0 +120-140s,10602,10402,111,1.05,89,0.84,1.0 +140-160s,16433,4301,5419,32.98,6713,40.85,60.0 +160-180s,12835,9366,298,2.32,3171,24.71,1.0 +180-200s,10713,10500,109,1.02,104,0.97,1.0 +200-220s,10679,10475,112,1.05,92,0.86,1.0 +220-240s,16289,531,4792,29.42,10966,67.32,100.0 +240-260s,12441,8897,144,1.16,3400,27.33,1.0 +260-280s,10813,10476,104,0.96,233,2.15,1.0 +280-300s,10746,10461,94,0.87,191,1.78,1.0 diff --git a/experiments/results/baseline/sudden_error_spikes_adaptive/run_002_time_analysis.csv b/experiments/results/baseline/sudden_error_spikes_adaptive/run_002_time_analysis.csv new file mode 100644 index 000000000..53e839d51 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spikes_adaptive/run_002_time_analysis.csv @@ -0,0 +1,16 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,11597,11467,115,0.99,15,0.13,1.0 +20-40s,11673,11537,112,0.96,24,0.21,1.0 +40-60s,11189,11046,99,0.88,44,0.39,1.0 +60-80s,14575,10057,2447,16.79,2071,14.21,20.0 +80-100s,12516,11539,123,0.98,854,6.82,1.0 +100-120s,11723,11537,105,0.9,81,0.69,1.0 +120-140s,11751,11545,116,0.99,90,0.77,1.0 +140-160s,16456,3857,5631,34.22,6968,42.34,60.0 +160-180s,13432,10528,124,0.92,2780,20.7,1.0 +180-200s,11794,11570,130,1.1,94,0.8,1.0 +200-220s,11801,11569,118,1.0,114,0.97,1.0 +220-240s,16155,104,4941,30.58,11110,68.77,100.0 +240-260s,13215,10092,117,0.89,3006,22.75,1.0 +260-280s,11880,11589,94,0.79,197,1.66,1.0 +280-300s,11905,11579,122,1.02,204,1.71,1.0 diff --git a/experiments/results/baseline/sudden_error_spikes_adaptive/run_003_time_analysis.csv b/experiments/results/baseline/sudden_error_spikes_adaptive/run_003_time_analysis.csv new file mode 100644 index 000000000..f24cb929c --- /dev/null +++ b/experiments/results/baseline/sudden_error_spikes_adaptive/run_003_time_analysis.csv @@ -0,0 +1,16 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,3721,3668,41,1.1,12,0.32,1.0 +20-40s,3762,3695,37,0.98,30,0.8,1.0 +40-60s,3641,3587,30,0.82,24,0.66,1.0 +60-80s,4863,3347,806,16.57,710,14.6,20.0 +80-100s,3978,3606,46,1.16,326,8.2,1.0 +100-120s,3872,3793,36,0.93,43,1.11,1.0 +120-140s,3569,3496,31,0.87,42,1.18,1.0 +140-160s,12472,2463,3579,28.7,6430,51.56,60.0 +160-180s,5711,3623,156,2.73,1932,33.83,1.0 +180-200s,3638,3575,30,0.82,33,0.91,1.0 +200-220s,3626,3544,40,1.1,42,1.16,1.0 +220-240s,15263,165,3269,21.42,11829,77.5,100.0 +240-260s,7939,3319,60,0.76,4560,57.44,1.0 +260-280s,3917,3762,45,1.15,110,2.81,1.0 +280-300s,3833,3713,42,1.1,78,2.03,1.0 diff --git a/experiments/results/baseline/sudden_error_spikes_adaptive/run_004_time_analysis.csv b/experiments/results/baseline/sudden_error_spikes_adaptive/run_004_time_analysis.csv new file mode 100644 index 000000000..c0013ba4b --- /dev/null +++ b/experiments/results/baseline/sudden_error_spikes_adaptive/run_004_time_analysis.csv @@ -0,0 +1,16 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,3569,3491,48,1.34,30,0.84,1.0 +20-40s,3850,3789,39,1.01,22,0.57,1.0 +40-60s,3945,3881,37,0.94,27,0.68,1.0 +60-80s,4835,3355,778,16.09,702,14.52,20.0 +80-100s,4159,3763,87,2.09,309,7.43,1.0 +100-120s,3860,3795,34,0.88,31,0.8,1.0 +120-140s,3925,3848,40,1.02,37,0.94,1.0 +140-160s,13049,2606,3689,28.27,6754,51.76,60.0 +160-180s,5912,3751,191,3.23,1970,33.32,1.0 +180-200s,3887,3831,35,0.9,21,0.54,1.0 +200-220s,3961,3879,40,1.01,42,1.06,1.0 +220-240s,15511,231,3358,21.65,11922,76.86,100.0 +240-260s,6951,3400,80,1.15,3471,49.94,1.0 +260-280s,4027,3919,36,0.89,72,1.79,1.0 +280-300s,3878,3768,42,1.08,68,1.75,1.0 diff --git a/experiments/results/baseline/sudden_error_spikes_adaptive/run_005_time_analysis.csv b/experiments/results/baseline/sudden_error_spikes_adaptive/run_005_time_analysis.csv new file mode 100644 index 000000000..b8aca780b --- /dev/null +++ b/experiments/results/baseline/sudden_error_spikes_adaptive/run_005_time_analysis.csv @@ -0,0 +1,16 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,8983,8859,107,1.19,17,0.19,1.0 +20-40s,9206,9078,97,1.05,31,0.34,1.0 +40-60s,9099,8959,93,1.02,47,0.52,1.0 +60-80s,12372,8404,2092,16.91,1876,15.16,20.0 +80-100s,9938,9076,117,1.18,745,7.5,1.0 +100-120s,9322,9135,100,1.07,87,0.93,1.0 +120-140s,9252,9065,90,0.97,97,1.05,1.0 +140-160s,15803,3755,5234,33.12,6814,43.12,60.0 +160-180s,11197,8381,165,1.47,2651,23.68,1.0 +180-200s,9204,9068,73,0.79,63,0.68,1.0 +200-220s,9205,9043,86,0.93,76,0.83,1.0 +220-240s,15555,268,4526,29.1,10761,69.18,100.0 +240-260s,10978,7949,124,1.13,2905,26.46,1.0 +260-280s,9350,9098,89,0.95,163,1.74,1.0 +280-300s,9488,9140,124,1.31,224,2.36,1.0 diff --git a/experiments/results/baseline/sudden_error_spikes_adaptive/run_006_time_analysis.csv b/experiments/results/baseline/sudden_error_spikes_adaptive/run_006_time_analysis.csv new file mode 100644 index 000000000..2170a28bc --- /dev/null +++ b/experiments/results/baseline/sudden_error_spikes_adaptive/run_006_time_analysis.csv @@ -0,0 +1,16 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,8901,8790,93,1.04,18,0.2,1.0 +20-40s,8832,8727,69,0.78,36,0.41,1.0 +40-60s,8936,8805,81,0.91,50,0.56,1.0 +60-80s,12148,8139,2128,17.52,1881,15.48,20.0 +80-100s,9648,8757,109,1.13,782,8.11,1.0 +100-120s,9018,8855,99,1.1,64,0.71,1.0 +120-140s,9064,8884,85,0.94,95,1.05,1.0 +140-160s,15683,3478,5228,33.34,6977,44.49,60.0 +160-180s,10978,8233,114,1.04,2631,23.97,1.0 +180-200s,8826,8664,82,0.93,80,0.91,1.0 +200-220s,8878,8677,103,1.16,98,1.1,1.0 +220-240s,15763,104,4417,28.02,11242,71.32,100.0 +240-260s,10430,7773,80,0.77,2577,24.71,1.0 +260-280s,9067,8801,80,0.88,186,2.05,1.0 +280-300s,9078,8799,94,1.04,185,2.04,1.0 diff --git a/experiments/results/baseline/sudden_error_spikes_adaptive/run_007_time_analysis.csv b/experiments/results/baseline/sudden_error_spikes_adaptive/run_007_time_analysis.csv new file mode 100644 index 000000000..c4888f2d3 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spikes_adaptive/run_007_time_analysis.csv @@ -0,0 +1,16 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,11202,11065,118,1.05,19,0.17,1.0 +20-40s,11327,11176,115,1.02,36,0.32,1.0 +40-60s,11346,11163,107,0.94,76,0.67,1.0 +60-80s,15378,10326,2679,17.42,2373,15.43,20.0 +80-100s,12167,11134,129,1.06,904,7.43,1.0 +100-120s,11317,11130,109,0.96,78,0.69,1.0 +120-140s,11334,11132,107,0.94,95,0.84,1.0 +140-160s,16338,3739,5601,34.28,6998,42.83,60.0 +160-180s,13074,10256,106,0.81,2712,20.74,1.0 +180-200s,11303,11112,116,1.03,75,0.66,1.0 +200-220s,11372,11174,113,0.99,85,0.75,1.0 +220-240s,15456,116,4712,30.49,10628,68.76,100.0 +240-260s,11930,9260,101,0.85,2569,21.53,1.0 +260-280s,11247,10930,104,0.92,213,1.89,1.0 +280-300s,11252,10903,113,1.0,236,2.1,1.0 diff --git a/experiments/results/baseline/sudden_error_spikes_adaptive/run_008_time_analysis.csv b/experiments/results/baseline/sudden_error_spikes_adaptive/run_008_time_analysis.csv new file mode 100644 index 000000000..dcf48ea22 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spikes_adaptive/run_008_time_analysis.csv @@ -0,0 +1,16 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,6814,6735,71,1.04,8,0.12,1.0 +20-40s,7196,7090,75,1.04,31,0.43,1.0 +40-60s,7200,7070,72,1.0,58,0.81,1.0 +60-80s,9560,6560,1589,16.62,1411,14.76,20.0 +80-100s,7873,7118,128,1.63,627,7.96,1.0 +100-120s,7301,7165,80,1.1,56,0.77,1.0 +120-140s,7238,7093,66,0.91,79,1.09,1.0 +140-160s,15313,3693,4935,32.23,6685,43.66,60.0 +160-180s,9564,6777,207,2.16,2580,26.98,1.0 +180-200s,7217,7066,65,0.9,86,1.19,1.0 +200-220s,7227,7112,63,0.87,52,0.72,1.0 +220-240s,15409,342,4146,26.91,10921,70.87,100.0 +240-260s,10023,6105,122,1.22,3796,37.87,1.0 +260-280s,7333,7110,72,0.98,151,2.06,1.0 +280-300s,7238,7030,74,1.02,134,1.85,1.0 diff --git a/experiments/results/baseline/sudden_error_spikes_adaptive/run_009_time_analysis.csv b/experiments/results/baseline/sudden_error_spikes_adaptive/run_009_time_analysis.csv new file mode 100644 index 000000000..4afb16aa6 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spikes_adaptive/run_009_time_analysis.csv @@ -0,0 +1,16 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,11506,11380,116,1.01,10,0.09,1.0 +20-40s,11698,11546,124,1.06,28,0.24,1.0 +40-60s,11727,11555,125,1.07,47,0.4,1.0 +60-80s,15695,10672,2695,17.17,2328,14.83,20.0 +80-100s,12576,11544,146,1.16,886,7.05,1.0 +100-120s,11766,11532,126,1.07,108,0.92,1.0 +120-140s,11758,11545,120,1.02,93,0.79,1.0 +140-160s,16577,3890,5563,33.56,7124,42.98,60.0 +160-180s,13490,10430,181,1.34,2879,21.34,1.0 +180-200s,11799,11586,120,1.02,93,0.79,1.0 +200-220s,11709,11522,100,0.85,87,0.74,1.0 +220-240s,16371,193,4881,29.81,11297,69.01,100.0 +240-260s,13168,10047,135,1.03,2986,22.68,1.0 +260-280s,11944,11571,130,1.09,243,2.03,1.0 +280-300s,11918,11589,121,1.02,208,1.75,1.0 diff --git a/experiments/results/baseline/sudden_error_spikes_adaptive/run_010_time_analysis.csv b/experiments/results/baseline/sudden_error_spikes_adaptive/run_010_time_analysis.csv new file mode 100644 index 000000000..a387991ca --- /dev/null +++ b/experiments/results/baseline/sudden_error_spikes_adaptive/run_010_time_analysis.csv @@ -0,0 +1,16 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,9506,9401,93,0.98,12,0.13,1.0 +20-40s,9700,9553,105,1.08,42,0.43,1.0 +40-60s,9857,9675,106,1.08,76,0.77,1.0 +60-80s,12951,8954,2172,16.77,1825,14.09,20.0 +80-100s,10520,9607,159,1.51,754,7.17,1.0 +100-120s,9855,9658,109,1.11,88,0.89,1.0 +120-140s,9813,9636,88,0.9,89,0.91,1.0 +140-160s,16441,3885,5425,33.0,7131,43.37,60.0 +160-180s,12128,8953,193,1.59,2982,24.59,1.0 +180-200s,9842,9635,116,1.18,91,0.92,1.0 +200-220s,9825,9645,94,0.96,86,0.88,1.0 +220-240s,16475,308,4754,28.86,11413,69.27,100.0 +240-260s,11572,8441,102,0.88,3029,26.18,1.0 +260-280s,9990,9660,103,1.03,227,2.27,1.0 +280-300s,9920,9614,105,1.06,201,2.03,1.0 diff --git a/experiments/results/baseline/sudden_error_spikes_adaptive/run_011_time_analysis.csv b/experiments/results/baseline/sudden_error_spikes_adaptive/run_011_time_analysis.csv new file mode 100644 index 000000000..e79c6515d --- /dev/null +++ b/experiments/results/baseline/sudden_error_spikes_adaptive/run_011_time_analysis.csv @@ -0,0 +1,16 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,9093,8990,95,1.04,8,0.09,1.0 +20-40s,9497,9344,109,1.15,44,0.46,1.0 +40-60s,9479,9317,99,1.04,63,0.66,1.0 +60-80s,12467,8716,2056,16.49,1695,13.6,20.0 +80-100s,10246,9298,186,1.82,762,7.44,1.0 +100-120s,9412,9279,78,0.83,55,0.58,1.0 +120-140s,9550,9380,92,0.96,78,0.82,1.0 +140-160s,15696,3809,5099,32.49,6788,43.25,60.0 +160-180s,11624,8563,219,1.88,2842,24.45,1.0 +180-200s,9562,9377,101,1.06,84,0.88,1.0 +200-220s,9520,9339,91,0.96,90,0.95,1.0 +220-240s,15458,421,4525,29.27,10512,68.0,100.0 +240-260s,11296,8084,147,1.3,3065,27.13,1.0 +260-280s,9709,9408,97,1.0,204,2.1,1.0 +280-300s,9607,9347,100,1.04,160,1.67,1.0 diff --git a/experiments/results/baseline/sudden_error_spikes_adaptive/run_012_time_analysis.csv b/experiments/results/baseline/sudden_error_spikes_adaptive/run_012_time_analysis.csv new file mode 100644 index 000000000..483d5ce5f --- /dev/null +++ b/experiments/results/baseline/sudden_error_spikes_adaptive/run_012_time_analysis.csv @@ -0,0 +1,16 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,3744,3665,48,1.28,31,0.83,1.0 +20-40s,3646,3561,46,1.26,39,1.07,1.0 +40-60s,3549,3502,29,0.82,18,0.51,1.0 +60-80s,4769,3245,804,16.86,720,15.1,20.0 +80-100s,3800,3453,41,1.08,306,8.05,1.0 +100-120s,3531,3463,27,0.76,41,1.16,1.0 +120-140s,3712,3624,38,1.02,50,1.35,1.0 +140-160s,12085,2393,3530,29.21,6162,50.99,60.0 +160-180s,5112,3344,101,1.98,1667,32.61,1.0 +180-200s,3548,3471,36,1.01,41,1.16,1.0 +200-220s,3636,3578,32,0.88,26,0.72,1.0 +220-240s,15153,119,3043,20.08,11991,79.13,100.0 +240-260s,7167,3015,53,0.74,4099,57.19,1.0 +260-280s,3672,3552,44,1.2,76,2.07,1.0 +280-300s,3471,3348,39,1.12,84,2.42,1.0 diff --git a/experiments/results/baseline/sudden_error_spikes_adaptive/run_013_time_analysis.csv b/experiments/results/baseline/sudden_error_spikes_adaptive/run_013_time_analysis.csv new file mode 100644 index 000000000..75d58e6ca --- /dev/null +++ b/experiments/results/baseline/sudden_error_spikes_adaptive/run_013_time_analysis.csv @@ -0,0 +1,16 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,3507,3445,38,1.08,24,0.68,1.0 +20-40s,3342,3301,26,0.78,15,0.45,1.0 +40-60s,3416,3359,30,0.88,27,0.79,1.0 +60-80s,4519,3089,750,16.6,680,15.05,20.0 +80-100s,3735,3318,56,1.5,361,9.67,1.0 +100-120s,3379,3333,29,0.86,17,0.5,1.0 +120-140s,3419,3358,29,0.85,32,0.94,1.0 +140-160s,11754,2370,3412,29.03,5972,50.81,60.0 +160-180s,5396,3413,190,3.52,1793,33.23,1.0 +180-200s,3524,3452,31,0.88,41,1.16,1.0 +200-220s,3623,3550,37,1.02,36,0.99,1.0 +220-240s,15400,184,3120,20.26,12096,78.55,100.0 +240-260s,7351,3008,64,0.87,4279,58.21,1.0 +260-280s,3502,3410,30,0.86,62,1.77,1.0 +280-300s,3323,3230,36,1.08,57,1.72,1.0 diff --git a/experiments/results/baseline/sudden_error_spikes_adaptive/run_014_time_analysis.csv b/experiments/results/baseline/sudden_error_spikes_adaptive/run_014_time_analysis.csv new file mode 100644 index 000000000..0b516f68d --- /dev/null +++ b/experiments/results/baseline/sudden_error_spikes_adaptive/run_014_time_analysis.csv @@ -0,0 +1,16 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,11655,11514,122,1.05,19,0.16,1.0 +20-40s,11675,11519,132,1.13,24,0.21,1.0 +40-60s,11726,11548,123,1.05,55,0.47,1.0 +60-80s,15721,10717,2672,17.0,2332,14.83,20.0 +80-100s,12540,11531,125,1.0,884,7.05,1.0 +100-120s,11731,11494,128,1.09,109,0.93,1.0 +120-140s,11763,11547,118,1.0,98,0.83,1.0 +140-160s,16505,3773,5657,34.27,7075,42.87,60.0 +160-180s,13274,10493,115,0.87,2666,20.08,1.0 +180-200s,11813,11583,132,1.12,98,0.83,1.0 +200-220s,11813,11572,117,0.99,124,1.05,1.0 +220-240s,16334,56,4882,29.89,11396,69.77,100.0 +240-260s,12786,10076,86,0.67,2624,20.52,1.0 +260-280s,11931,11576,119,1.0,236,1.98,1.0 +280-300s,11911,11580,118,0.99,213,1.79,1.0 diff --git a/experiments/results/baseline/sudden_error_spikes_adaptive/run_015_time_analysis.csv b/experiments/results/baseline/sudden_error_spikes_adaptive/run_015_time_analysis.csv new file mode 100644 index 000000000..350f5cce3 --- /dev/null +++ b/experiments/results/baseline/sudden_error_spikes_adaptive/run_015_time_analysis.csv @@ -0,0 +1,16 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,8379,8277,84,1.0,18,0.21,1.0 +20-40s,8520,8386,88,1.03,46,0.54,1.0 +40-60s,8644,8525,78,0.9,41,0.47,1.0 +60-80s,11470,7902,1918,16.72,1650,14.39,20.0 +80-100s,9119,8359,97,1.06,663,7.27,1.0 +100-120s,8636,8518,68,0.79,50,0.58,1.0 +120-140s,8673,8506,84,0.97,83,0.96,1.0 +140-160s,16510,3688,5374,32.55,7448,45.11,60.0 +160-180s,10752,8174,79,0.73,2499,23.24,1.0 +180-200s,8521,8404,68,0.8,49,0.58,1.0 +200-220s,8584,8462,75,0.87,47,0.55,1.0 +220-240s,16661,97,4559,27.36,12005,72.05,100.0 +240-260s,10636,7497,79,0.74,3060,28.77,1.0 +260-280s,8831,8570,80,0.91,181,2.05,1.0 +280-300s,8773,8524,85,0.97,164,1.87,1.0 diff --git a/experiments/results/baseline/sustained_load/computed_baseline.txt b/experiments/results/baseline/sustained_load/computed_baseline.txt new file mode 100644 index 000000000..a023e7ad8 --- /dev/null +++ b/experiments/results/baseline/sustained_load/computed_baseline.txt @@ -0,0 +1,15 @@ +# Baseline computed at 2025-12-19 13:05:58 -0500 +# Source files: run_010_time_analysis.csv, run_015_time_analysis.csv, run_009_time_analysis.csv, run_011_time_analysis.csv, run_014_time_analysis.csv, run_008_time_analysis.csv, run_012_time_analysis.csv, run_013_time_analysis.csv, run_003_time_analysis.csv, run_006_time_analysis.csv, run_002_time_analysis.csv, run_007_time_analysis.csv, run_001_time_analysis.csv, run_004_time_analysis.csv, run_005_time_analysis.csv +# Total data points: 270 + +deviation_p5=2.0000000000000018 +deviation_p50=334.25 +deviation_p95=3874.6499999999965 + +error_rate_p5=0.668 +error_rate_p50=2.53 +error_rate_p95=3.688499999999999 + +rejection_rate_p5=0.0 +rejection_rate_p50=81.63 +rejection_rate_p95=87.39699999999999 diff --git a/experiments/results/baseline/sustained_load/run_001_time_analysis.csv b/experiments/results/baseline/sustained_load/run_001_time_analysis.csv new file mode 100644 index 000000000..c97912ef1 --- /dev/null +++ b/experiments/results/baseline/sustained_load/run_001_time_analysis.csv @@ -0,0 +1,19 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,17394,17200,194,1.12,0,0.0,1.0 +30-60s,17500,17314,186,1.06,0,0.0,1.0 +60-90s,17442,17283,159,0.91,0,0.0,1.0 +90-120s,17491,17328,163,0.93,0,0.0,1.0 +120-150s,24273,4107,1029,4.24,19137,78.84,20.0 +150-180s,23638,2475,618,2.61,20545,86.92,20.0 +180-210s,23210,2624,644,2.77,19942,85.92,20.0 +210-240s,23466,2692,654,2.79,20120,85.74,20.0 +240-270s,23200,2846,700,3.02,19654,84.72,20.0 +270-300s,22543,2530,681,3.02,19332,85.76,20.0 +300-330s,22267,2749,729,3.27,18789,84.38,20.0 +330-360s,22680,2860,717,3.16,19103,84.23,20.0 +360-390s,22491,2715,705,3.13,19071,84.79,20.0 +390-420s,22407,2443,631,2.82,19333,86.28,20.0 +420-450s,21728,10239,108,0.5,11381,52.38,1.0 +450-480s,17382,17224,158,0.91,0,0.0,1.0 +480-510s,17525,17354,171,0.98,0,0.0,1.0 +510-540s,17550,17352,198,1.13,0,0.0,1.0 diff --git a/experiments/results/baseline/sustained_load/run_002_time_analysis.csv b/experiments/results/baseline/sustained_load/run_002_time_analysis.csv new file mode 100644 index 000000000..0592cde91 --- /dev/null +++ b/experiments/results/baseline/sustained_load/run_002_time_analysis.csv @@ -0,0 +1,19 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,16406,16256,150,0.91,0,0.0,1.0 +30-60s,16110,15928,182,1.13,0,0.0,1.0 +60-90s,16316,16156,160,0.98,0,0.0,1.0 +90-120s,16470,16320,150,0.91,0,0.0,1.0 +120-150s,24174,4351,1045,4.32,18778,77.68,20.0 +150-180s,23471,2227,580,2.47,20664,88.04,20.0 +180-210s,23396,3090,728,3.11,19578,83.68,20.0 +210-240s,23095,2694,700,3.03,19701,85.3,20.0 +240-270s,23059,2577,655,2.84,19827,85.98,20.0 +270-300s,22800,3256,772,3.39,18772,82.33,20.0 +300-330s,22700,2525,641,2.82,19534,86.05,20.0 +330-360s,23636,2894,689,2.92,20053,84.84,20.0 +360-390s,22340,2577,665,2.98,19098,85.49,20.0 +390-420s,22345,2645,666,2.98,19034,85.18,20.0 +420-450s,21063,11486,114,0.54,9463,44.93,1.0 +450-480s,16443,16269,174,1.06,0,0.0,1.0 +480-510s,16376,16209,167,1.02,0,0.0,1.0 +510-540s,16415,16235,180,1.1,0,0.0,1.0 diff --git a/experiments/results/baseline/sustained_load/run_003_time_analysis.csv b/experiments/results/baseline/sustained_load/run_003_time_analysis.csv new file mode 100644 index 000000000..0f64e25fb --- /dev/null +++ b/experiments/results/baseline/sustained_load/run_003_time_analysis.csv @@ -0,0 +1,19 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,6117,6061,56,0.92,0,0.0,1.0 +30-60s,6386,6327,59,0.92,0,0.0,1.0 +60-90s,6222,6166,56,0.9,0,0.0,1.0 +90-120s,6168,6106,62,1.01,0,0.0,1.0 +120-150s,21277,3409,773,3.63,17095,80.34,20.0 +150-180s,22230,2345,598,2.69,19287,86.76,20.0 +180-210s,22082,2266,543,2.46,19273,87.28,20.0 +210-240s,22466,2251,567,2.52,19648,87.46,20.0 +240-270s,21986,2072,519,2.36,19395,88.22,20.0 +270-300s,21486,2407,596,2.77,18483,86.02,20.0 +300-330s,21550,2374,577,2.68,18599,86.31,20.0 +330-360s,21270,2328,557,2.62,18385,86.44,20.0 +360-390s,21300,2476,611,2.87,18213,85.51,20.0 +390-420s,21519,2127,562,2.61,18830,87.5,20.0 +420-450s,18747,5322,69,0.37,13356,71.24,1.0 +450-480s,6187,6128,59,0.95,0,0.0,1.0 +480-510s,6407,6353,54,0.84,0,0.0,1.0 +510-540s,6032,5976,56,0.93,0,0.0,1.0 diff --git a/experiments/results/baseline/sustained_load/run_004_time_analysis.csv b/experiments/results/baseline/sustained_load/run_004_time_analysis.csv new file mode 100644 index 000000000..38cddc4d4 --- /dev/null +++ b/experiments/results/baseline/sustained_load/run_004_time_analysis.csv @@ -0,0 +1,19 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,16955,16755,200,1.18,0,0.0,1.0 +30-60s,17477,17314,163,0.93,0,0.0,1.0 +60-90s,17506,17333,173,0.99,0,0.0,1.0 +90-120s,17361,17161,200,1.15,0,0.0,1.0 +120-150s,23915,4883,1054,4.41,17978,75.17,20.0 +150-180s,23370,2650,645,2.76,20075,85.9,20.0 +180-210s,22868,2723,665,2.91,19480,85.18,20.0 +210-240s,23106,2895,703,3.04,19508,84.43,20.0 +240-270s,22815,2728,710,3.11,19377,84.93,20.0 +270-300s,22666,2787,716,3.16,19163,84.55,20.0 +300-330s,22146,2790,698,3.15,18658,84.25,20.0 +330-360s,22131,2909,645,2.91,18577,83.94,20.0 +360-390s,22326,3142,771,3.45,18413,82.47,20.0 +390-420s,22738,2656,644,2.83,19438,85.49,20.0 +420-450s,20618,12235,143,0.69,8240,39.97,1.0 +450-480s,17404,17226,178,1.02,0,0.0,1.0 +480-510s,17403,17237,166,0.95,0,0.0,1.0 +510-540s,17431,17254,177,1.02,0,0.0,1.0 diff --git a/experiments/results/baseline/sustained_load/run_005_time_analysis.csv b/experiments/results/baseline/sustained_load/run_005_time_analysis.csv new file mode 100644 index 000000000..c4e3dcd77 --- /dev/null +++ b/experiments/results/baseline/sustained_load/run_005_time_analysis.csv @@ -0,0 +1,19 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,9570,9483,87,0.91,0,0.0,1.0 +30-60s,9770,9674,96,0.98,0,0.0,1.0 +60-90s,9667,9580,87,0.9,0,0.0,1.0 +90-120s,9749,9667,82,0.84,0,0.0,1.0 +120-150s,22430,3556,873,3.89,18001,80.25,20.0 +150-180s,22462,2617,638,2.84,19207,85.51,20.0 +180-210s,21953,2424,628,2.86,18901,86.1,20.0 +210-240s,22146,2252,580,2.62,19314,87.21,20.0 +240-270s,21884,2517,631,2.88,18736,85.62,20.0 +270-300s,21582,2874,690,3.2,18018,83.49,20.0 +300-330s,21451,2169,561,2.62,18721,87.27,20.0 +330-360s,21487,2658,647,3.01,18182,84.62,20.0 +360-390s,21251,2156,538,2.53,18557,87.32,20.0 +390-420s,21210,2749,644,3.04,17817,84.0,20.0 +420-450s,18175,7296,68,0.37,10811,59.48,1.0 +450-480s,9579,9476,103,1.08,0,0.0,1.0 +480-510s,9558,9459,99,1.04,0,0.0,1.0 +510-540s,9633,9536,97,1.01,0,0.0,1.0 diff --git a/experiments/results/baseline/sustained_load/run_006_time_analysis.csv b/experiments/results/baseline/sustained_load/run_006_time_analysis.csv new file mode 100644 index 000000000..ec5bbdf0a --- /dev/null +++ b/experiments/results/baseline/sustained_load/run_006_time_analysis.csv @@ -0,0 +1,19 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,17291,17111,180,1.04,0,0.0,1.0 +30-60s,17447,17281,166,0.95,0,0.0,1.0 +60-90s,17444,17277,167,0.96,0,0.0,1.0 +90-120s,17491,17310,181,1.03,0,0.0,1.0 +120-150s,23227,4123,1002,4.31,18102,77.94,20.0 +150-180s,22632,2551,623,2.75,19458,85.98,20.0 +180-210s,22129,2648,691,3.12,18790,84.91,20.0 +210-240s,22368,2830,730,3.26,18808,84.08,20.0 +240-270s,21663,2847,692,3.19,18124,83.66,20.0 +270-300s,21263,2552,639,3.01,18072,84.99,20.0 +300-330s,21471,2630,703,3.27,18138,84.48,20.0 +330-360s,21305,2959,734,3.45,17612,82.67,20.0 +360-390s,21968,3048,751,3.42,18169,82.71,20.0 +390-420s,21719,2706,653,3.01,18360,84.53,20.0 +420-450s,21309,12154,130,0.61,9025,42.35,1.0 +450-480s,17387,17247,140,0.81,0,0.0,1.0 +480-510s,17412,17255,157,0.9,0,0.0,1.0 +510-540s,17391,17234,157,0.9,0,0.0,1.0 diff --git a/experiments/results/baseline/sustained_load/run_007_time_analysis.csv b/experiments/results/baseline/sustained_load/run_007_time_analysis.csv new file mode 100644 index 000000000..0da075802 --- /dev/null +++ b/experiments/results/baseline/sustained_load/run_007_time_analysis.csv @@ -0,0 +1,19 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,16773,16592,181,1.08,0,0.0,1.0 +30-60s,16758,16576,182,1.09,0,0.0,1.0 +60-90s,16778,16615,163,0.97,0,0.0,1.0 +90-120s,16829,16638,191,1.13,0,0.0,1.0 +120-150s,24128,4525,1071,4.44,18532,76.81,20.0 +150-180s,23466,2644,654,2.79,20168,85.95,20.0 +180-210s,22664,2494,636,2.81,19534,86.19,20.0 +210-240s,22183,2626,654,2.95,18903,85.21,20.0 +240-270s,18847,2783,663,3.52,15401,81.72,20.0 +270-300s,18561,2394,612,3.3,15555,83.8,20.0 +300-330s,18739,2579,657,3.51,15503,82.73,20.0 +330-360s,18529,2563,676,3.65,15290,82.52,20.0 +360-390s,18385,2758,635,3.45,14992,81.54,20.0 +390-420s,18468,2875,696,3.77,14897,80.66,20.0 +420-450s,18230,10668,119,0.65,7443,40.83,1.0 +450-480s,16312,16142,170,1.04,0,0.0,1.0 +480-510s,16256,16082,174,1.07,0,0.0,1.0 +510-540s,16241,16076,165,1.02,0,0.0,1.0 diff --git a/experiments/results/baseline/sustained_load/run_008_time_analysis.csv b/experiments/results/baseline/sustained_load/run_008_time_analysis.csv new file mode 100644 index 000000000..c86c5848b --- /dev/null +++ b/experiments/results/baseline/sustained_load/run_008_time_analysis.csv @@ -0,0 +1,19 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,5817,5743,74,1.27,0,0.0,1.0 +30-60s,5778,5710,68,1.18,0,0.0,1.0 +60-90s,6020,5963,57,0.95,0,0.0,1.0 +90-120s,5934,5876,58,0.98,0,0.0,1.0 +120-150s,21578,3191,752,3.49,17635,81.73,20.0 +150-180s,22605,2269,611,2.7,19725,87.26,20.0 +180-210s,22306,2548,599,2.69,19159,85.89,20.0 +210-240s,22234,2233,598,2.69,19403,87.27,20.0 +240-270s,22041,2065,560,2.54,19416,88.09,20.0 +270-300s,22084,2531,599,2.71,18954,85.83,20.0 +300-330s,22116,2473,592,2.68,19051,86.14,20.0 +330-360s,22662,1931,495,2.18,20236,89.29,20.0 +360-390s,21165,2398,601,2.84,18166,85.83,20.0 +390-420s,21118,2279,555,2.63,18284,86.58,20.0 +420-450s,16865,4586,55,0.33,12224,72.48,1.0 +450-480s,5946,5885,61,1.03,0,0.0,1.0 +480-510s,5840,5776,64,1.1,0,0.0,1.0 +510-540s,6114,6055,59,0.96,0,0.0,1.0 diff --git a/experiments/results/baseline/sustained_load/run_009_time_analysis.csv b/experiments/results/baseline/sustained_load/run_009_time_analysis.csv new file mode 100644 index 000000000..725f3c380 --- /dev/null +++ b/experiments/results/baseline/sustained_load/run_009_time_analysis.csv @@ -0,0 +1,19 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,3392,3355,37,1.09,0,0.0,1.0 +30-60s,3566,3530,36,1.01,0,0.0,1.0 +60-90s,3450,3415,35,1.01,0,0.0,1.0 +90-120s,3583,3546,37,1.03,0,0.0,1.0 +120-150s,18005,2748,669,3.72,14588,81.02,20.0 +150-180s,23362,2130,549,2.35,20683,88.53,20.0 +180-210s,23416,2208,517,2.21,20691,88.36,20.0 +210-240s,23172,2201,536,2.31,20435,88.19,20.0 +240-270s,23143,2209,550,2.38,20384,88.08,20.0 +270-300s,23139,2168,537,2.32,20434,88.31,20.0 +300-330s,22970,2005,523,2.28,20442,88.99,20.0 +330-360s,21918,2007,553,2.52,19358,88.32,20.0 +360-390s,21223,2198,538,2.53,18487,87.11,20.0 +390-420s,21483,2332,536,2.49,18615,86.65,20.0 +420-450s,19924,3145,44,0.22,16735,83.99,1.0 +450-480s,3464,3430,34,0.98,0,0.0,1.0 +480-510s,3524,3497,27,0.77,0,0.0,1.0 +510-540s,3410,3375,35,1.03,0,0.0,1.0 diff --git a/experiments/results/baseline/sustained_load/run_010_time_analysis.csv b/experiments/results/baseline/sustained_load/run_010_time_analysis.csv new file mode 100644 index 000000000..47c572a6a --- /dev/null +++ b/experiments/results/baseline/sustained_load/run_010_time_analysis.csv @@ -0,0 +1,19 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,13292,13155,137,1.03,0,0.0,1.0 +30-60s,13490,13340,150,1.11,0,0.0,1.0 +60-90s,13589,13444,145,1.07,0,0.0,1.0 +90-120s,13513,13378,135,1.0,0,0.0,1.0 +120-150s,23639,4421,1009,4.27,18209,77.03,20.0 +150-180s,23760,2728,663,2.79,20369,85.73,20.0 +180-210s,23456,2757,684,2.92,20015,85.33,20.0 +210-240s,23492,2722,671,2.86,20099,85.56,20.0 +240-270s,23228,2557,647,2.79,20024,86.21,20.0 +270-300s,23118,2820,692,2.99,19606,84.81,20.0 +300-330s,22958,2741,701,3.05,19516,85.01,20.0 +330-360s,22873,2466,667,2.92,19740,86.3,20.0 +360-390s,22288,2935,695,3.12,18658,83.71,20.0 +390-420s,23059,2627,636,2.76,19796,85.85,20.0 +420-450s,21733,9258,102,0.47,12373,56.93,1.0 +450-480s,13441,13300,141,1.05,0,0.0,1.0 +480-510s,13516,13366,150,1.11,0,0.0,1.0 +510-540s,13592,13477,115,0.85,0,0.0,1.0 diff --git a/experiments/results/baseline/sustained_load/run_011_time_analysis.csv b/experiments/results/baseline/sustained_load/run_011_time_analysis.csv new file mode 100644 index 000000000..918a22ceb --- /dev/null +++ b/experiments/results/baseline/sustained_load/run_011_time_analysis.csv @@ -0,0 +1,19 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,15224,15075,149,0.98,0,0.0,1.0 +30-60s,15602,15460,142,0.91,0,0.0,1.0 +60-90s,15690,15544,146,0.93,0,0.0,1.0 +90-120s,15626,15453,173,1.11,0,0.0,1.0 +120-150s,23027,4326,961,4.17,17740,77.04,20.0 +150-180s,22491,2328,636,2.83,19527,86.82,20.0 +180-210s,22093,2632,639,2.89,18822,85.19,20.0 +210-240s,22024,2547,645,2.93,18832,85.51,20.0 +240-270s,21812,2734,735,3.37,18343,84.1,20.0 +270-300s,21272,2601,657,3.09,18014,84.68,20.0 +300-330s,21542,2491,613,2.85,18438,85.59,20.0 +330-360s,21007,3049,704,3.35,17254,82.13,20.0 +360-390s,21176,2637,654,3.09,17885,84.46,20.0 +390-420s,21247,2622,675,3.18,17950,84.48,20.0 +420-450s,18550,11385,111,0.6,7054,38.03,1.0 +450-480s,15578,15429,149,0.96,0,0.0,1.0 +480-510s,15501,15357,144,0.93,0,0.0,1.0 +510-540s,15546,15399,147,0.95,0,0.0,1.0 diff --git a/experiments/results/baseline/sustained_load/run_012_time_analysis.csv b/experiments/results/baseline/sustained_load/run_012_time_analysis.csv new file mode 100644 index 000000000..91a0bf09b --- /dev/null +++ b/experiments/results/baseline/sustained_load/run_012_time_analysis.csv @@ -0,0 +1,19 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,15307,15136,171,1.12,0,0.0,1.0 +30-60s,15339,15202,137,0.89,0,0.0,1.0 +60-90s,15349,15191,158,1.03,0,0.0,1.0 +90-120s,15284,15120,164,1.07,0,0.0,1.0 +120-150s,23727,4225,1039,4.38,18463,77.81,20.0 +150-180s,23775,2453,632,2.66,20690,87.02,20.0 +180-210s,23212,2576,676,2.91,19960,85.99,20.0 +210-240s,22937,2706,665,2.9,19566,85.3,20.0 +240-270s,22604,2713,668,2.96,19223,85.04,20.0 +270-300s,22818,2562,632,2.77,19624,86.0,20.0 +300-330s,23030,2669,654,2.84,19707,85.57,20.0 +330-360s,23012,2831,697,3.03,19484,84.67,20.0 +360-390s,22889,2654,671,2.93,19564,85.47,20.0 +390-420s,22917,2784,674,2.94,19459,84.91,20.0 +420-450s,20265,11081,111,0.55,9073,44.77,1.0 +450-480s,15418,15253,165,1.07,0,0.0,1.0 +480-510s,15294,15141,153,1.0,0,0.0,1.0 +510-540s,15313,15169,144,0.94,0,0.0,1.0 diff --git a/experiments/results/baseline/sustained_load/run_013_time_analysis.csv b/experiments/results/baseline/sustained_load/run_013_time_analysis.csv new file mode 100644 index 000000000..6a5000725 --- /dev/null +++ b/experiments/results/baseline/sustained_load/run_013_time_analysis.csv @@ -0,0 +1,19 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,14390,14256,134,0.93,0,0.0,1.0 +30-60s,14784,14638,146,0.99,0,0.0,1.0 +60-90s,14859,14730,129,0.87,0,0.0,1.0 +90-120s,14737,14583,154,1.04,0,0.0,1.0 +120-150s,23801,4020,946,3.97,18835,79.14,20.0 +150-180s,23261,2588,659,2.83,20014,86.04,20.0 +180-210s,23167,2657,642,2.77,19868,85.76,20.0 +210-240s,23196,2594,657,2.83,19945,85.98,20.0 +240-270s,23189,2849,699,3.01,19641,84.7,20.0 +270-300s,23429,2443,622,2.65,20364,86.92,20.0 +300-330s,23623,2477,651,2.76,20495,86.76,20.0 +330-360s,23015,3057,703,3.05,19255,83.66,20.0 +360-390s,23097,2664,692,3.0,19741,85.47,20.0 +390-420s,22471,2903,752,3.35,18816,83.73,20.0 +420-450s,20496,10103,97,0.47,10296,50.23,1.0 +450-480s,14801,14674,127,0.86,0,0.0,1.0 +480-510s,14740,14594,146,0.99,0,0.0,1.0 +510-540s,14717,14562,155,1.05,0,0.0,1.0 diff --git a/experiments/results/baseline/sustained_load/run_014_time_analysis.csv b/experiments/results/baseline/sustained_load/run_014_time_analysis.csv new file mode 100644 index 000000000..d0a621cd5 --- /dev/null +++ b/experiments/results/baseline/sustained_load/run_014_time_analysis.csv @@ -0,0 +1,19 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,11139,11035,104,0.93,0,0.0,1.0 +30-60s,11640,11522,118,1.01,0,0.0,1.0 +60-90s,11524,11419,105,0.91,0,0.0,1.0 +90-120s,11607,11497,110,0.95,0,0.0,1.0 +120-150s,23191,4081,919,3.96,18191,78.44,20.0 +150-180s,23338,2887,673,2.88,19778,84.75,20.0 +180-210s,23238,2665,685,2.95,19888,85.58,20.0 +210-240s,23369,2260,589,2.52,20520,87.81,20.0 +240-270s,22721,2561,629,2.77,19531,85.96,20.0 +270-300s,23080,2521,619,2.68,19940,86.4,20.0 +300-330s,22165,2358,596,2.69,19211,86.67,20.0 +330-360s,22666,2505,649,2.86,19512,86.08,20.0 +360-390s,22556,2653,635,2.82,19268,85.42,20.0 +390-420s,22223,2544,632,2.84,19047,85.71,20.0 +420-450s,18351,8648,105,0.57,9598,52.3,1.0 +450-480s,11541,11436,105,0.91,0,0.0,1.0 +480-510s,11559,11430,129,1.12,0,0.0,1.0 +510-540s,11546,11435,111,0.96,0,0.0,1.0 diff --git a/experiments/results/baseline/sustained_load/run_015_time_analysis.csv b/experiments/results/baseline/sustained_load/run_015_time_analysis.csv new file mode 100644 index 000000000..8fd1eabfe --- /dev/null +++ b/experiments/results/baseline/sustained_load/run_015_time_analysis.csv @@ -0,0 +1,19 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,12876,12748,128,0.99,0,0.0,1.0 +30-60s,12991,12850,141,1.09,0,0.0,1.0 +60-90s,13143,13012,131,1.0,0,0.0,1.0 +90-120s,13089,12946,143,1.09,0,0.0,1.0 +120-150s,23787,4007,999,4.2,18781,78.95,20.0 +150-180s,23531,2414,597,2.54,20520,87.2,20.0 +180-210s,23640,2709,670,2.83,20261,85.71,20.0 +210-240s,23748,2852,692,2.91,20204,85.08,20.0 +240-270s,23552,2673,622,2.64,20257,86.01,20.0 +270-300s,23732,2621,739,3.11,20372,85.84,20.0 +300-330s,23611,2461,618,2.62,20532,86.96,20.0 +330-360s,23686,2451,658,2.78,20577,86.87,20.0 +360-390s,23590,2559,634,2.69,20397,86.46,20.0 +390-420s,23371,2733,647,2.77,19991,85.54,20.0 +420-450s,22108,9395,94,0.43,12619,57.08,1.0 +450-480s,13041,12920,121,0.93,0,0.0,1.0 +480-510s,13042,12903,139,1.07,0,0.0,1.0 +510-540s,13039,12923,116,0.89,0,0.0,1.0 diff --git a/experiments/results/baseline/sustained_load_adaptive/computed_baseline.txt b/experiments/results/baseline/sustained_load_adaptive/computed_baseline.txt new file mode 100644 index 000000000..0de87ef7f --- /dev/null +++ b/experiments/results/baseline/sustained_load_adaptive/computed_baseline.txt @@ -0,0 +1,15 @@ +# Baseline computed at 2025-12-19 13:05:58 -0500 +# Source files: run_010_time_analysis.csv, run_015_time_analysis.csv, run_009_time_analysis.csv, run_011_time_analysis.csv, run_014_time_analysis.csv, run_008_time_analysis.csv, run_012_time_analysis.csv, run_013_time_analysis.csv, run_003_time_analysis.csv, run_006_time_analysis.csv, run_002_time_analysis.csv, run_007_time_analysis.csv, run_001_time_analysis.csv, run_004_time_analysis.csv, run_005_time_analysis.csv +# Total data points: 270 + +deviation_p5=31.25000000000001 +deviation_p50=79.85 +deviation_p95=458.29999999999984 + +error_rate_p5=0.86 +error_rate_p50=15.635000000000002 +error_rate_p95=16.371 + +rejection_rate_p5=0.3160000000000001 +rejection_rate_p50=18.525 +rejection_rate_p95=20.73 diff --git a/experiments/results/baseline/sustained_load_adaptive/run_001_time_analysis.csv b/experiments/results/baseline/sustained_load_adaptive/run_001_time_analysis.csv new file mode 100644 index 000000000..5720b69df --- /dev/null +++ b/experiments/results/baseline/sustained_load_adaptive/run_001_time_analysis.csv @@ -0,0 +1,19 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,12685,12548,109,0.86,28,0.22,1.0 +30-60s,13059,12848,130,1.0,81,0.62,1.0 +60-90s,13141,12898,122,0.93,121,0.92,1.0 +90-120s,13117,12864,130,0.99,123,0.94,1.0 +120-150s,17873,11782,2989,16.72,3102,17.36,20.0 +150-180s,18752,12012,2888,15.4,3852,20.54,20.0 +180-210s,18516,11919,2899,15.66,3698,19.97,20.0 +210-240s,18878,11995,3075,16.29,3808,20.17,20.0 +240-270s,19203,12134,3070,15.99,3999,20.82,20.0 +270-300s,18358,11847,2928,15.95,3583,19.52,20.0 +300-330s,19140,12180,3066,16.02,3894,20.34,20.0 +330-360s,18960,12132,3022,15.94,3806,20.07,20.0 +360-390s,18625,11944,2943,15.8,3738,20.07,20.0 +390-420s,18601,12021,2994,16.1,3586,19.28,20.0 +420-450s,13741,12779,235,1.71,727,5.29,1.0 +450-480s,12939,12725,128,0.99,86,0.66,1.0 +480-510s,13158,12918,128,0.97,112,0.85,1.0 +510-540s,13288,13003,154,1.16,131,0.99,1.0 diff --git a/experiments/results/baseline/sustained_load_adaptive/run_002_time_analysis.csv b/experiments/results/baseline/sustained_load_adaptive/run_002_time_analysis.csv new file mode 100644 index 000000000..4f8130938 --- /dev/null +++ b/experiments/results/baseline/sustained_load_adaptive/run_002_time_analysis.csv @@ -0,0 +1,19 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,16358,16139,176,1.08,43,0.26,1.0 +30-60s,16043,15798,174,1.08,71,0.44,1.0 +60-90s,16314,16031,155,0.95,128,0.78,1.0 +90-120s,16565,16234,167,1.01,164,0.99,1.0 +120-150s,22457,15135,3660,16.3,3662,16.31,20.0 +150-180s,23739,15163,3757,15.83,4819,20.3,20.0 +180-210s,23349,15149,3624,15.52,4576,19.6,20.0 +210-240s,23492,15087,3768,16.04,4637,19.74,20.0 +240-270s,23093,14648,3756,16.26,4689,20.3,20.0 +270-300s,22749,14573,3635,15.98,4541,19.96,20.0 +300-330s,22644,14304,3647,16.11,4693,20.73,20.0 +330-360s,23356,15171,3666,15.7,4519,19.35,20.0 +360-390s,22537,14641,3530,15.66,4366,19.37,20.0 +390-420s,22275,14384,3489,15.66,4402,19.76,20.0 +420-450s,17282,16221,177,1.02,884,5.12,1.0 +450-480s,16424,16148,163,0.99,113,0.69,1.0 +480-510s,16458,16141,162,0.98,155,0.94,1.0 +510-540s,16433,16163,145,0.88,125,0.76,1.0 diff --git a/experiments/results/baseline/sustained_load_adaptive/run_003_time_analysis.csv b/experiments/results/baseline/sustained_load_adaptive/run_003_time_analysis.csv new file mode 100644 index 000000000..0578eafc7 --- /dev/null +++ b/experiments/results/baseline/sustained_load_adaptive/run_003_time_analysis.csv @@ -0,0 +1,19 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,4230,4143,52,1.23,35,0.83,1.0 +30-60s,4193,4116,44,1.05,33,0.79,1.0 +60-90s,4406,4298,50,1.13,58,1.32,1.0 +90-120s,4381,4299,43,0.98,39,0.89,1.0 +120-150s,6038,4035,1011,16.74,992,16.43,20.0 +150-180s,6348,4008,1024,16.13,1316,20.73,20.0 +180-210s,6014,3830,962,16.0,1222,20.32,20.0 +210-240s,6256,4015,1007,16.1,1234,19.73,20.0 +240-270s,6007,3928,929,15.47,1150,19.14,20.0 +270-300s,6419,3988,1086,16.92,1345,20.95,20.0 +300-330s,6558,4102,1069,16.3,1387,21.15,20.0 +330-360s,6274,3967,1018,16.23,1289,20.55,20.0 +360-390s,6539,4151,1037,15.86,1351,20.66,20.0 +390-420s,5951,3893,913,15.34,1145,19.24,20.0 +420-450s,4540,4224,67,1.48,249,5.48,1.0 +450-480s,4314,4218,47,1.09,49,1.14,1.0 +480-510s,4330,4265,30,0.69,35,0.81,1.0 +510-540s,4355,4264,48,1.1,43,0.99,1.0 diff --git a/experiments/results/baseline/sustained_load_adaptive/run_004_time_analysis.csv b/experiments/results/baseline/sustained_load_adaptive/run_004_time_analysis.csv new file mode 100644 index 000000000..85b1f1325 --- /dev/null +++ b/experiments/results/baseline/sustained_load_adaptive/run_004_time_analysis.csv @@ -0,0 +1,19 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,11469,11307,131,1.14,31,0.27,1.0 +30-60s,11599,11426,112,0.97,61,0.53,1.0 +60-90s,11652,11451,107,0.92,94,0.81,1.0 +90-120s,11718,11436,151,1.29,131,1.12,1.0 +120-150s,15845,10673,2598,16.4,2574,16.24,20.0 +150-180s,16847,10728,2729,16.2,3390,20.12,20.0 +180-210s,16602,10658,2647,15.94,3297,19.86,20.0 +210-240s,17302,10871,2795,16.15,3636,21.01,20.0 +240-270s,16931,10866,2735,16.15,3330,19.67,20.0 +270-300s,16993,10791,2743,16.14,3459,20.36,20.0 +300-330s,17051,10760,2767,16.23,3524,20.67,20.0 +330-360s,16541,10621,2647,16.0,3273,19.79,20.0 +360-390s,16796,10687,2711,16.14,3398,20.23,20.0 +390-420s,16940,10764,2754,16.26,3422,20.2,20.0 +420-450s,12453,11530,176,1.41,747,6.0,1.0 +450-480s,11816,11597,113,0.96,106,0.9,1.0 +480-510s,11794,11584,116,0.98,94,0.8,1.0 +510-540s,11828,11611,110,0.93,107,0.9,1.0 diff --git a/experiments/results/baseline/sustained_load_adaptive/run_005_time_analysis.csv b/experiments/results/baseline/sustained_load_adaptive/run_005_time_analysis.csv new file mode 100644 index 000000000..4d75a7752 --- /dev/null +++ b/experiments/results/baseline/sustained_load_adaptive/run_005_time_analysis.csv @@ -0,0 +1,19 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,17201,17006,167,0.97,28,0.16,1.0 +30-60s,17446,17235,149,0.85,62,0.36,1.0 +60-90s,17612,17290,180,1.02,142,0.81,1.0 +90-120s,17626,17284,182,1.03,160,0.91,1.0 +120-150s,23102,15509,3775,16.34,3818,16.53,20.0 +150-180s,22410,14268,3633,16.21,4509,20.12,20.0 +180-210s,21898,13864,3557,16.24,4477,20.44,20.0 +210-240s,21980,14116,3479,15.83,4385,19.95,20.0 +240-270s,21832,14128,3439,15.75,4265,19.54,20.0 +270-300s,21485,13629,3500,16.29,4356,20.27,20.0 +300-330s,21372,13738,3405,15.93,4229,19.79,20.0 +330-360s,21400,13763,3361,15.71,4276,19.98,20.0 +360-390s,21159,13513,3400,16.07,4246,20.07,20.0 +390-420s,21064,13458,3356,15.93,4250,20.18,20.0 +420-450s,18361,17163,222,1.21,976,5.32,1.0 +450-480s,17437,17122,179,1.03,136,0.78,1.0 +480-510s,17440,17115,181,1.04,144,0.83,1.0 +510-540s,17498,17158,177,1.01,163,0.93,1.0 diff --git a/experiments/results/baseline/sustained_load_adaptive/run_006_time_analysis.csv b/experiments/results/baseline/sustained_load_adaptive/run_006_time_analysis.csv new file mode 100644 index 000000000..1cc0bb82e --- /dev/null +++ b/experiments/results/baseline/sustained_load_adaptive/run_006_time_analysis.csv @@ -0,0 +1,19 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,9144,9026,93,1.02,25,0.27,1.0 +30-60s,8918,8797,68,0.76,53,0.59,1.0 +60-90s,9189,9026,83,0.9,80,0.87,1.0 +90-120s,9142,8954,95,1.04,93,1.02,1.0 +120-150s,12142,8061,1987,16.36,2094,17.25,20.0 +150-180s,12930,8195,2058,15.92,2677,20.7,20.0 +180-210s,12695,8203,1984,15.63,2508,19.76,20.0 +210-240s,12736,8259,1985,15.59,2492,19.57,20.0 +240-270s,12825,8209,2056,16.03,2560,19.96,20.0 +270-300s,12635,8091,2030,16.07,2514,19.9,20.0 +300-330s,12846,8246,2065,16.08,2535,19.73,20.0 +330-360s,13077,8374,2093,16.01,2610,19.96,20.0 +360-390s,12412,8026,1958,15.78,2428,19.56,20.0 +390-420s,13313,8397,2156,16.19,2760,20.73,20.0 +420-450s,9457,8932,90,0.95,435,4.6,1.0 +450-480s,8973,8798,93,1.04,82,0.91,1.0 +480-510s,9070,8892,95,1.05,83,0.92,1.0 +510-540s,8993,8849,75,0.83,69,0.77,1.0 diff --git a/experiments/results/baseline/sustained_load_adaptive/run_007_time_analysis.csv b/experiments/results/baseline/sustained_load_adaptive/run_007_time_analysis.csv new file mode 100644 index 000000000..25eed0a25 --- /dev/null +++ b/experiments/results/baseline/sustained_load_adaptive/run_007_time_analysis.csv @@ -0,0 +1,19 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,15283,15121,144,0.94,18,0.12,1.0 +30-60s,15390,15166,150,0.97,74,0.48,1.0 +60-90s,15424,15162,150,0.97,112,0.73,1.0 +90-120s,15453,15121,160,1.04,172,1.11,1.0 +120-150s,21055,14143,3393,16.11,3519,16.71,20.0 +150-180s,22292,14154,3569,16.01,4569,20.5,20.0 +180-210s,21810,14093,3464,15.88,4253,19.5,20.0 +210-240s,21951,14123,3514,16.01,4314,19.65,20.0 +240-270s,19342,12442,3040,15.72,3860,19.96,20.0 +270-300s,18427,11700,2991,16.23,3736,20.27,20.0 +300-330s,18641,11941,2986,16.02,3714,19.92,20.0 +330-360s,18475,12072,2861,15.49,3542,19.17,20.0 +360-390s,18237,11857,2864,15.7,3516,19.28,20.0 +390-420s,18393,11943,2903,15.78,3547,19.28,20.0 +420-450s,15709,14827,159,1.01,723,4.6,1.0 +450-480s,15041,14778,146,0.97,117,0.78,1.0 +480-510s,15022,14761,156,1.04,105,0.7,1.0 +510-540s,15018,14737,149,0.99,132,0.88,1.0 diff --git a/experiments/results/baseline/sustained_load_adaptive/run_008_time_analysis.csv b/experiments/results/baseline/sustained_load_adaptive/run_008_time_analysis.csv new file mode 100644 index 000000000..836deb6c2 --- /dev/null +++ b/experiments/results/baseline/sustained_load_adaptive/run_008_time_analysis.csv @@ -0,0 +1,19 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,9375,9258,100,1.07,17,0.18,1.0 +30-60s,9720,9576,86,0.88,58,0.6,1.0 +60-90s,9475,9296,92,0.97,87,0.92,1.0 +90-120s,9703,9506,99,1.02,98,1.01,1.0 +120-150s,13054,8789,2125,16.28,2140,16.39,20.0 +150-180s,13877,8735,2286,16.47,2856,20.58,20.0 +180-210s,13968,8914,2192,15.69,2862,20.49,20.0 +210-240s,13863,8821,2194,15.83,2848,20.54,20.0 +240-270s,13511,8849,2094,15.5,2568,19.01,20.0 +270-300s,13619,8938,2116,15.54,2565,18.83,20.0 +300-330s,13886,8852,2218,15.97,2816,20.28,20.0 +330-360s,13480,8718,2120,15.73,2642,19.6,20.0 +360-390s,13848,8812,2228,16.09,2808,20.28,20.0 +390-420s,13719,8829,2173,15.84,2717,19.8,20.0 +420-450s,10049,9352,155,1.54,542,5.39,1.0 +450-480s,9644,9493,78,0.81,73,0.76,1.0 +480-510s,9479,9295,101,1.07,83,0.88,1.0 +510-540s,9624,9453,85,0.88,86,0.89,1.0 diff --git a/experiments/results/baseline/sustained_load_adaptive/run_009_time_analysis.csv b/experiments/results/baseline/sustained_load_adaptive/run_009_time_analysis.csv new file mode 100644 index 000000000..59e647add --- /dev/null +++ b/experiments/results/baseline/sustained_load_adaptive/run_009_time_analysis.csv @@ -0,0 +1,19 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,16138,15969,147,0.91,22,0.14,1.0 +30-60s,16477,16229,169,1.03,79,0.48,1.0 +60-90s,16509,16198,186,1.13,125,0.76,1.0 +90-120s,16538,16228,147,0.89,163,0.99,1.0 +120-150s,22543,15074,3740,16.59,3729,16.54,20.0 +150-180s,23719,15077,3760,15.85,4882,20.58,20.0 +180-210s,23519,15113,3780,16.07,4626,19.67,20.0 +210-240s,23393,14941,3798,16.24,4654,19.89,20.0 +240-270s,23152,14734,3681,15.9,4737,20.46,20.0 +270-300s,23093,14789,3701,16.03,4603,19.93,20.0 +300-330s,22955,14678,3671,15.99,4606,20.07,20.0 +330-360s,21856,13995,3525,16.13,4336,19.84,20.0 +360-390s,21040,13728,3365,15.99,3947,18.76,20.0 +390-420s,21373,13739,3397,15.89,4237,19.82,20.0 +420-450s,17171,16145,194,1.13,832,4.85,1.0 +450-480s,16442,16145,169,1.03,128,0.78,1.0 +480-510s,16458,16137,183,1.11,138,0.84,1.0 +510-540s,16345,16033,177,1.08,135,0.83,1.0 diff --git a/experiments/results/baseline/sustained_load_adaptive/run_010_time_analysis.csv b/experiments/results/baseline/sustained_load_adaptive/run_010_time_analysis.csv new file mode 100644 index 000000000..31a388cc5 --- /dev/null +++ b/experiments/results/baseline/sustained_load_adaptive/run_010_time_analysis.csv @@ -0,0 +1,19 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,16748,16545,181,1.08,22,0.13,1.0 +30-60s,17202,16865,207,1.2,130,0.76,1.0 +60-90s,17203,16929,171,0.99,103,0.6,1.0 +90-120s,17203,16919,164,0.95,120,0.7,1.0 +120-150s,23477,15740,3817,16.26,3920,16.7,20.0 +150-180s,23979,15635,3723,15.53,4621,19.27,20.0 +180-210s,23470,14965,3770,16.06,4735,20.17,20.0 +210-240s,23477,15101,3758,16.01,4618,19.67,20.0 +240-270s,23198,14874,3735,16.1,4589,19.78,20.0 +270-300s,23076,14609,3757,16.28,4710,20.41,20.0 +300-330s,22914,14810,3583,15.64,4521,19.73,20.0 +330-360s,22827,14777,3573,15.65,4477,19.61,20.0 +360-390s,22211,14260,3550,15.98,4401,19.81,20.0 +390-420s,22986,14844,3670,15.97,4472,19.46,20.0 +420-450s,18049,16855,242,1.34,952,5.27,1.0 +450-480s,17229,16883,186,1.08,160,0.93,1.0 +480-510s,17112,16813,160,0.94,139,0.81,1.0 +510-540s,17203,16875,166,0.96,162,0.94,1.0 diff --git a/experiments/results/baseline/sustained_load_adaptive/run_011_time_analysis.csv b/experiments/results/baseline/sustained_load_adaptive/run_011_time_analysis.csv new file mode 100644 index 000000000..f0b2f4caa --- /dev/null +++ b/experiments/results/baseline/sustained_load_adaptive/run_011_time_analysis.csv @@ -0,0 +1,19 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,11546,11413,109,0.94,24,0.21,1.0 +30-60s,12116,11923,123,1.02,70,0.58,1.0 +60-90s,12048,11795,127,1.05,126,1.05,1.0 +90-120s,12043,11784,128,1.06,131,1.09,1.0 +120-150s,16458,10957,2696,16.38,2805,17.04,20.0 +150-180s,17272,10900,2802,16.22,3570,20.67,20.0 +180-210s,17444,10995,2868,16.44,3581,20.53,20.0 +210-240s,17510,10976,2827,16.15,3707,21.17,20.0 +240-270s,17135,10989,2734,15.96,3412,19.91,20.0 +270-300s,17174,10996,2723,15.86,3455,20.12,20.0 +300-330s,17170,11011,2721,15.85,3438,20.02,20.0 +330-360s,17048,10915,2706,15.87,3427,20.1,20.0 +360-390s,17159,10952,2751,16.03,3456,20.14,20.0 +390-420s,17021,11015,2698,15.85,3308,19.43,20.0 +420-450s,12591,11706,200,1.59,685,5.44,1.0 +450-480s,11902,11711,106,0.89,85,0.71,1.0 +480-510s,11986,11775,119,0.99,92,0.77,1.0 +510-540s,11898,11687,104,0.87,107,0.9,1.0 diff --git a/experiments/results/baseline/sustained_load_adaptive/run_012_time_analysis.csv b/experiments/results/baseline/sustained_load_adaptive/run_012_time_analysis.csv new file mode 100644 index 000000000..7ad3cf2ef --- /dev/null +++ b/experiments/results/baseline/sustained_load_adaptive/run_012_time_analysis.csv @@ -0,0 +1,19 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,4314,4273,29,0.67,12,0.28,1.0 +30-60s,4094,4027,44,1.07,23,0.56,1.0 +60-90s,4461,4369,40,0.9,52,1.17,1.0 +90-120s,4489,4396,42,0.94,51,1.14,1.0 +120-150s,6227,4066,1022,16.41,1139,18.29,20.0 +150-180s,6622,4106,1086,16.4,1430,21.59,20.0 +180-210s,6024,3911,962,15.97,1151,19.11,20.0 +210-240s,6348,3987,1047,16.49,1314,20.7,20.0 +240-270s,6188,3916,999,16.14,1273,20.57,20.0 +270-300s,5965,3792,974,16.33,1199,20.1,20.0 +300-330s,5988,3835,944,15.76,1209,20.19,20.0 +330-360s,5950,3836,938,15.76,1176,19.76,20.0 +360-390s,6034,3893,975,16.16,1166,19.32,20.0 +390-420s,6046,3816,985,16.29,1245,20.59,20.0 +420-450s,4589,4279,54,1.18,256,5.58,1.0 +450-480s,4353,4287,36,0.83,30,0.69,1.0 +480-510s,4273,4171,45,1.05,57,1.33,1.0 +510-540s,4464,4374,45,1.01,45,1.01,1.0 diff --git a/experiments/results/baseline/sustained_load_adaptive/run_013_time_analysis.csv b/experiments/results/baseline/sustained_load_adaptive/run_013_time_analysis.csv new file mode 100644 index 000000000..60eb4e2b6 --- /dev/null +++ b/experiments/results/baseline/sustained_load_adaptive/run_013_time_analysis.csv @@ -0,0 +1,19 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,13396,13248,120,0.9,28,0.21,1.0 +30-60s,13850,13621,150,1.08,79,0.57,1.0 +60-90s,13782,13514,138,1.0,130,0.94,1.0 +90-120s,13725,13481,131,0.95,113,0.82,1.0 +120-150s,18307,12473,2940,16.06,2894,15.81,20.0 +150-180s,19722,12521,3118,15.81,4083,20.7,20.0 +180-210s,19658,12702,3119,15.87,3837,19.52,20.0 +210-240s,19684,12654,3176,16.13,3854,19.58,20.0 +240-270s,19623,12678,3053,15.56,3892,19.83,20.0 +270-300s,19755,12581,3185,16.12,3989,20.19,20.0 +300-330s,19866,12693,3161,15.91,4012,20.2,20.0 +330-360s,19529,12511,3085,15.8,3933,20.14,20.0 +360-390s,19627,12578,3164,16.12,3885,19.79,20.0 +390-420s,19446,12515,3089,15.89,3842,19.76,20.0 +420-450s,14523,13451,234,1.61,838,5.77,1.0 +450-480s,13784,13529,150,1.09,105,0.76,1.0 +480-510s,13816,13508,155,1.12,153,1.11,1.0 +510-540s,13719,13457,136,0.99,126,0.92,1.0 diff --git a/experiments/results/baseline/sustained_load_adaptive/run_014_time_analysis.csv b/experiments/results/baseline/sustained_load_adaptive/run_014_time_analysis.csv new file mode 100644 index 000000000..688c709f8 --- /dev/null +++ b/experiments/results/baseline/sustained_load_adaptive/run_014_time_analysis.csv @@ -0,0 +1,19 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,2274,2249,19,0.84,6,0.26,1.0 +30-60s,2085,2051,18,0.86,16,0.77,1.0 +60-90s,2431,2373,20,0.82,38,1.56,1.0 +90-120s,2381,2334,24,1.01,23,0.97,1.0 +120-150s,3273,2155,553,16.9,565,17.26,20.0 +150-180s,3483,2114,560,16.08,809,23.23,20.0 +180-210s,3543,2180,525,14.82,838,23.65,20.0 +210-240s,4684,2159,514,10.97,2011,42.93,20.0 +240-270s,3050,1956,478,15.67,616,20.2,20.0 +270-300s,3065,1940,488,15.92,637,20.78,20.0 +300-330s,3389,2139,552,16.29,698,20.6,20.0 +330-360s,3204,2026,485,15.14,693,21.63,20.0 +360-390s,3439,2148,555,16.14,736,21.4,20.0 +390-420s,3495,2167,541,15.48,787,22.52,20.0 +420-450s,2237,2080,16,0.72,141,6.3,1.0 +450-480s,2418,2371,24,0.99,23,0.95,1.0 +480-510s,2470,2416,20,0.81,34,1.38,1.0 +510-540s,2147,2111,18,0.84,18,0.84,1.0 diff --git a/experiments/results/baseline/sustained_load_adaptive/run_015_time_analysis.csv b/experiments/results/baseline/sustained_load_adaptive/run_015_time_analysis.csv new file mode 100644 index 000000000..db3035a0a --- /dev/null +++ b/experiments/results/baseline/sustained_load_adaptive/run_015_time_analysis.csv @@ -0,0 +1,19 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,15632,15443,167,1.07,22,0.14,1.0 +30-60s,15779,15586,132,0.84,61,0.39,1.0 +60-90s,15899,15626,144,0.91,129,0.81,1.0 +90-120s,15909,15625,147,0.92,137,0.86,1.0 +120-150s,21858,14513,3617,16.55,3728,17.06,20.0 +150-180s,22733,14539,3603,15.85,4591,20.2,20.0 +180-210s,22903,14557,3752,16.38,4594,20.06,20.0 +210-240s,22739,14577,3602,15.84,4560,20.05,20.0 +240-270s,22679,14451,3605,15.9,4623,20.38,20.0 +270-300s,22591,14587,3610,15.98,4394,19.45,20.0 +300-330s,22670,14569,3622,15.98,4479,19.76,20.0 +330-360s,22527,14611,3545,15.74,4371,19.4,20.0 +360-390s,22430,14553,3602,16.06,4275,19.06,20.0 +390-420s,22844,14503,3699,16.19,4642,20.32,20.0 +420-450s,16749,15628,179,1.07,942,5.62,1.0 +450-480s,15914,15602,162,1.02,150,0.94,1.0 +480-510s,15979,15693,154,0.96,132,0.83,1.0 +510-540s,15966,15647,170,1.06,149,0.93,1.0 diff --git a/experiments/results/csv/gradual_increase_adaptive_pid_controller.csv b/experiments/results/csv/gradual_increase_adaptive_pid_controller.csv new file mode 100644 index 000000000..56db08f31 --- /dev/null +++ b/experiments/results/csv/gradual_increase_adaptive_pid_controller.csv @@ -0,0 +1,603 @@ +Window,Thread Count,Error Rate Avg,Error Rate Min,Error Rate Max,Ideal Error Rate,Rejection Rate Avg,Rejection Rate Min,Rejection Rate Max,Integral Avg,Integral Min,Integral Max,Derivative Avg,Derivative Min,Derivative Max,P Value Avg,P Value Min,P Value Max,Total Request Time +1,60,1.07,0.0,20.0,4.61,0.89,0.0,18.0,-0.0356,-0.0461,0.15,0.0,-0.0,-0.0,-0.0356,-0.0461,0.15,37.34 +2,60,1.4,0.0,25.0,4.25,1.13,0.0,23.55,-0.0728,-0.0886,0.1578,0.0,0.0,0.0,-0.0372,-0.0704,0.2039,101.72 +3,60,1.32,0.0,16.67,3.92,0.75,0.0,15.7,-0.1103,-0.1278,0.0813,0.0,0.0,0.0,-0.0374,-0.1159,0.0289,161.76 +4,60,1.64,0.0,11.11,3.61,0.53,0.0,7.08,-0.1389,-0.1639,0.0045,0.0,0.0,0.0,-0.0287,-0.0863,0.0719,222.07 +5,60,1.4,0.0,12.5,3.33,0.26,0.0,8.59,-0.1658,-0.1972,-0.018,0.0,0.0,0.0,-0.0269,-0.0564,0.044,274.96 +6,60,1.73,0.0,12.5,3.07,0.32,0.0,8.95,-0.185,-0.228,-0.0071,0.0,0.0,0.0,-0.0191,-0.0307,0.0542,336.36 +7,60,1.55,0.0,9.52,2.83,0.19,0.0,4.49,-0.2048,-0.2563,-0.0134,0.0,0.0,0.0,-0.0198,-0.0376,0.0149,399.96 +8,60,1.4,0.0,8.33,2.61,0.12,0.0,3.56,-0.2233,-0.2824,-0.0236,0.0,0.0,0.0,-0.0185,-0.0261,0.0168,460.63 +9,60,1.36,0.0,8.0,2.41,0.09,0.0,2.93,-0.2401,-0.3065,-0.0229,0.0,0.0,0.0,-0.0168,-0.0241,0.0043,524.68 +10,60,1.32,0.0,8.0,2.22,0.07,0.0,2.68,-0.2556,-0.3287,-0.0185,0.0,0.0,0.0,-0.0156,-0.0222,0.0171,573.68 +11,60,1.45,0.0,5.71,2.05,0.03,0.0,0.83,-0.2685,-0.3491,-0.031,0.0,0.0,0.0,-0.0129,-0.0433,0.0148,640.22 +12,60,1.54,0.0,7.41,1.89,0.06,0.0,1.68,-0.2789,-0.368,-0.0188,0.0,0.0,0.0,-0.0104,-0.0399,0.0535,700.98 +13,60,1.49,0.0,6.67,1.74,0.02,0.0,1.15,-0.2891,-0.3854,-0.0311,0.0,0.0,0.0,-0.0101,-0.0368,0.046,751.63 +14,60,1.4,0.0,7.14,1.6,0.02,0.0,1.09,-0.2986,-0.4014,-0.0323,0.0,0.0,0.0,-0.0096,-0.0484,0.0507,818.7 +15,60,1.4,0.0,6.67,1.48,0.02,0.0,1.37,-0.3072,-0.4162,-0.0289,0.0,0.0,0.0,-0.0086,-0.0352,0.0409,879.45 +16,60,1.15,0.0,7.14,1.36,0.01,0.0,0.5,-0.3172,-0.4298,-0.0457,0.0,0.0,0.0,-0.01,-0.0419,0.0497,938.89 +17,60,1.19,0.0,7.32,1.48,0.1,0.0,3.33,-0.3256,-0.4424,-0.0576,0.0,0.0,0.0,-0.0084,-0.0387,0.0489,995.19 +18,60,1.23,0.0,9.09,1.49,0.19,0.0,5.38,-0.3334,-0.454,-0.0754,0.0,-0.0,-0.0,-0.0078,-0.0372,0.0462,1061.39 +19,60,1.25,0.0,8.33,1.07,0.21,0.0,4.98,-0.3409,-0.4647,-0.0636,0.0,0.0,0.0,-0.0075,-0.0343,0.0408,1116.67 +20,60,1.29,0.0,8.57,0.99,0.28,0.0,5.22,-0.3473,-0.4746,-0.051,0.0,0.0,0.0,-0.0064,-0.0316,0.0508,1179.56 +21,60,0.99,0.0,6.82,0.91,0.11,0.0,4.03,-0.3565,-0.4836,-0.0424,0.0,0.0,0.0,-0.0092,-0.0744,0.0548,1234.39 +22,60,0.84,0.0,6.45,1.49,0.04,0.0,2.66,-0.3648,-0.492,-0.073,0.0,-0.0,-0.0,-0.0083,-0.0371,0.0526,1302.97 +23,60,1.1,0.0,10.71,1.49,0.13,0.0,4.05,-0.3689,-0.4997,-0.0684,0.0,-0.0,-0.0,-0.0041,-0.0248,0.0954,1356.27 +24,60,1.11,0.0,10.34,1.49,0.15,0.0,5.15,-0.3729,-0.5069,-0.0613,0.0,-0.0,-0.0,-0.004,-0.0228,0.0549,1420.34 +25,60,1.12,0.0,10.0,1.49,0.16,0.0,5.7,-0.3765,-0.5134,-0.0654,0.0,0.0,0.0,-0.0035,-0.0332,0.051,1474.38 +26,60,1.1,0.0,10.0,0.61,0.24,0.0,6.72,-0.3796,-0.5195,-0.0073,0.0,0.0,0.0,-0.0031,-0.0194,0.0614,1543.95 +27,60,1.11,0.0,9.09,0.56,0.21,0.0,6.06,-0.3827,-0.5251,-0.0116,0.0,0.0,0.0,-0.0031,-0.0224,0.0487,1586.32 +28,60,1.03,0.0,9.52,0.51,0.24,0.0,6.6,-0.3857,-0.5302,-0.0052,0.0,0.0,0.0,-0.003,-0.0181,0.0445,1668.64 +29,60,1.14,0.0,10.0,0.47,0.17,0.0,7.26,-0.3874,-0.5349,0.0012,0.0,0.0,0.0,-0.0017,-0.0167,0.0474,1719.13 +30,60,1.1,0.0,9.09,1.0,0.17,0.0,6.12,-0.3883,-0.5393,-0.0085,0.0,0.0,0.0,-0.0009,-0.0248,0.0745,1785.77 +31,60,1.04,0.0,7.14,0.92,0.11,0.0,3.59,-0.3893,-0.5434,-0.0282,0.0,0.0,0.0,-0.001,-0.0207,0.0407,1840.74 +32,60,1.1,0.0,8.0,0.85,0.16,0.0,4.64,-0.3887,-0.5471,-0.0148,0.0,0.0,0.0,0.0006,-0.0191,0.0492,1898.54 +33,59,1.1,0.0,7.69,0.78,0.13,0.0,4.36,-0.3881,-0.5505,-0.0146,0.0,0.0,0.0,0.0005,-0.033,0.0333,1963.84 +34,60,1.05,0.0,7.69,0.78,0.07,0.0,4.29,-0.3875,-0.5559,-0.0603,0.0,0.0,0.0,0.0007,-0.0457,0.0389,2018.29 +35,60,1.01,0.0,6.25,0.72,0.05,0.0,3.06,-0.3862,-0.562,-0.0681,0.0,0.0,0.0,0.0013,-0.0203,0.0324,2083.16 +36,59,0.94,0.0,7.14,0.66,0.08,0.0,4.5,-0.3852,-0.5677,-0.076,0.0,0.0,0.0,0.0011,-0.0292,0.0341,2140.71 +37,60,0.99,0.0,6.45,0.47,0.08,0.0,4.03,-0.3832,-0.5729,-0.0673,0.0,0.0,0.0,0.0019,-0.0269,0.0407,2203.62 +38,60,1.14,0.0,7.69,0.48,0.14,0.0,5.8,-0.3796,-0.5777,-0.0413,0.0,-0.0,-0.0,0.0036,-0.0248,0.0462,2261.71 +39,60,1.1,0.0,8.33,0.49,0.11,0.0,3.29,-0.3767,-0.5821,-0.0627,0.0,0.0,0.0,0.0029,-0.0261,0.0784,2324.99 +40,59,1.02,0.0,7.32,0.5,0.1,0.0,3.24,-0.3713,-0.5862,-0.0424,0.0,-0.0,-0.0,0.0026,-0.031,0.0456,2377.8 +41,60,1.02,0.0,9.38,0.37,0.15,0.0,6.52,-0.371,-0.5899,-0.0354,0.0,0.0,0.0,0.0031,-0.0194,0.0591,2436.2 +42,54,1.1,0.0,6.9,0.34,0.18,0.0,4.22,-0.3642,-0.5934,-0.0171,0.0,0.0,0.0,0.0036,-0.0179,0.0426,2498.33 +43,55,0.85,0.0,6.9,0.17,0.18,0.0,4.54,-0.3751,-0.5966,-0.0159,0.0,0.0,0.0,0.0015,-0.0234,0.0492,2558.5 +44,59,0.91,0.0,6.9,0.39,0.27,0.0,5.51,-0.3655,-0.5995,0.0001,0.0,-0.0,-0.0,0.002,-0.0216,0.052,2620.11 +45,54,1.23,0.0,8.57,0.39,0.39,0.0,6.59,-0.3482,-0.6022,-0.003,0.0,-0.0,-0.0,0.0042,-0.0199,0.0602,2683.43 +46,53,1.01,0.0,6.52,0.13,0.34,0.0,5.19,-0.3739,-0.6047,-0.0027,0.0,0.0,0.0,0.0022,-0.0142,0.0339,2737.13 +47,58,0.9,0.0,5.71,1.29,0.16,0.0,3.54,-0.3663,-0.607,-0.0203,0.0,0.0,0.0,0.0017,-0.0605,0.0498,2802.69 +48,57,1.04,0.0,6.98,1.69,0.31,0.0,6.11,-0.3573,-0.6092,-0.0292,0.0,0.0,0.0,0.0037,-0.0204,0.0513,2857.76 +49,59,0.88,0.0,5.56,0.25,0.2,0.0,3.78,-0.3486,-0.6111,-0.0463,0.0,0.0,0.0,0.0017,-0.038,0.0332,2916.53 +50,57,0.95,0.0,6.67,0.2,0.24,0.0,4.49,-0.3595,-0.6129,-0.03,0.0,0.0,0.0,0.0036,-0.0148,0.0627,2977.42 +51,58,1.0,0.0,7.14,0.46,0.31,0.0,5.29,-0.3377,-0.6146,-0.0184,0.0,0.0,0.0,0.0038,-0.0133,0.0459,3038.38 +52,58,0.98,0.0,6.45,0.17,0.32,0.0,4.07,-0.3454,-0.6161,-0.0228,0.0,0.0,0.0,0.0032,-0.0122,0.0364,3096.92 +53,59,1.02,0.0,5.71,0.34,0.25,0.0,4.61,-0.3391,-0.6176,-0.0168,0.0,-0.0,-0.0,0.0036,-0.0178,0.0492,3150.24 +54,59,1.01,0.0,5.71,0.34,0.24,0.0,4.18,-0.3304,-0.6189,-0.0142,0.0,-0.0,-0.0,0.0042,-0.0167,0.055,3222.21 +55,57,0.9,0.0,7.14,0.14,0.35,0.0,5.32,-0.3248,-0.6201,-0.0051,0.0,0.0,0.0,0.0033,-0.0153,0.0588,3276.02 +56,58,0.92,0.0,7.14,0.33,0.28,0.0,6.19,-0.3232,-0.6212,-0.0315,0.0,0.0,0.0,0.0027,-0.0366,0.0467,3339.38 +57,59,0.73,0.0,7.14,0.24,0.19,0.0,6.6,-0.3293,-0.6222,-0.025,0.0,0.0,0.0,0.0022,-0.0104,0.042,3401.19 +58,60,0.78,0.0,6.25,0.25,0.23,0.0,4.32,-0.3233,-0.6232,-0.0231,0.0,0.0,0.0,0.0028,-0.0148,0.0465,3458.11 +59,59,0.77,0.0,6.9,0.26,0.27,0.0,5.31,-0.3163,-0.624,-0.0156,0.0,-0.0,-0.0,0.0028,-0.0117,0.049,3515.62 +60,58,0.77,0.0,6.9,0.09,0.26,0.0,5.72,-0.3215,-0.6248,-0.017,0.0,0.0,0.0,0.0025,-0.0341,0.0345,3573.32 +61,60,0.75,0.0,8.0,0.1,0.3,0.0,7.39,-0.3155,-0.6256,-0.0178,0.0,0.0,0.0,0.0027,-0.0404,0.0572,3637.2 +62,59,0.93,0.0,8.33,0.09,0.51,0.0,7.68,-0.3145,-0.6263,0.0078,0.0,0.0,0.0,0.0044,-0.0131,0.0603,3704.42 +63,60,1.06,0.0,7.14,0.4,0.47,0.0,6.34,-0.3078,-0.6269,0.0121,0.0,-0.0,-0.0,0.0034,-0.0402,0.0519,3753.42 +64,57,0.88,0.0,6.45,0.37,0.41,0.0,6.5,-0.2995,-0.6099,0.0173,0.0,-0.0,-0.0,0.002,-0.0255,0.0565,3820.84 +65,58,1.0,0.0,7.14,0.06,0.42,0.0,6.77,-0.2997,-0.6275,0.0068,0.0,0.0,0.0,0.0041,-0.0104,0.0492,3875.27 +66,59,1.09,0.0,7.41,0.08,0.47,0.0,7.29,-0.292,-0.628,-0.0073,0.0,0.0,0.0,0.0051,-0.0254,0.0538,3939.15 +67,60,1.08,0.0,7.69,0.02,0.48,0.0,7.77,-0.2923,-0.6285,-0.0089,0.0,0.0,0.0,0.0046,-0.0215,0.0578,4000.88 +68,59,1.36,0.0,7.41,0.07,0.6,0.0,5.99,-0.2843,-0.6289,-0.0069,0.0,0.0,0.0,0.0072,-0.0127,0.0648,4052.1 +69,60,1.35,0.0,7.41,0.12,0.59,0.0,6.62,-0.279,-0.6294,-0.0038,0.0,0.0,0.0,0.0062,-0.031,0.0533,4112.96 +70,60,1.4,0.0,7.5,0.13,0.59,0.0,5.98,-0.2722,-0.6298,-0.0064,0.0,0.0,0.0,0.0068,-0.0068,0.0741,4175.73 +71,60,1.55,0.0,8.7,0.13,0.72,0.0,8.65,-0.2638,-0.6301,-0.002,0.0,-0.0,-0.0,0.0084,-0.0318,0.0664,4237.04 +72,60,1.43,0.0,10.0,0.24,0.62,0.0,9.94,-0.2579,-0.6304,-0.0113,0.0,0.0,0.0,0.0059,-0.0896,0.0659,4300.33 +73,60,1.59,0.0,12.5,0.09,0.79,0.0,12.86,-0.2492,-0.6307,0.0092,0.0,0.0,0.0,0.0087,-0.0334,0.1243,4360.71 +74,60,1.65,0.0,13.04,0.1,0.84,0.0,13.22,-0.2414,-0.631,0.0107,0.0,0.0,0.0,0.0078,-0.0049,0.054,4419.11 +75,60,1.7,0.0,13.33,0.09,0.89,0.0,12.8,-0.2336,-0.6313,-0.0029,0.0,-0.0,-0.0,0.0078,-0.0858,0.048,4478.75 +76,60,1.79,0.0,11.76,0.08,1.0,0.0,11.29,-0.2254,-0.6315,0.0009,0.0,0.0,0.0,0.0082,-0.0187,0.0471,4539.98 +77,60,1.89,0.0,11.43,0.08,1.24,0.0,11.01,-0.2172,-0.6317,0.0018,0.0,0.0,0.0,0.0082,-0.0127,0.0512,4592.38 +78,60,1.74,0.0,11.43,0.07,1.17,0.0,11.3,-0.2129,-0.6319,0.0336,0.0,0.0,0.0,0.0043,-0.0595,0.0591,4655.68 +79,60,1.8,0.0,11.43,0.07,1.21,0.0,12.88,-0.2071,-0.6321,0.042,0.0,0.0,0.0,0.0058,-0.0532,0.0451,4724.22 +80,60,1.77,0.0,12.12,0.14,1.24,0.0,12.78,-0.2019,-0.6323,0.0171,0.0,-0.0,-0.0,0.0052,-0.0264,0.059,4769.4 +81,60,1.77,0.0,11.43,0.14,1.16,0.0,12.14,-0.1971,-0.6325,0.0154,0.0,-0.0,-0.0,0.0048,-0.0294,0.0475,4842.56 +82,60,1.63,0.0,13.79,0.05,1.12,0.0,15.37,-0.1929,-0.6326,0.0123,0.0,0.0,0.0,0.0042,-0.034,0.0398,4895.4 +83,60,1.51,0.0,9.52,0.15,0.92,0.0,10.25,-0.1895,-0.6327,0.0159,0.0,-0.0,-0.0,0.0033,-0.1148,0.0546,4957.29 +84,60,1.46,0.0,10.53,0.14,0.95,0.0,11.63,-0.1848,-0.6329,0.0203,0.0,-0.0,-0.0,0.0047,-0.0285,0.0365,5015.19 +85,60,1.57,0.0,12.5,0.13,1.03,0.0,12.67,-0.1792,-0.633,0.0283,0.0,0.0,0.0,0.0056,-0.0276,0.1249,5076.81 +86,60,1.74,0.0,12.5,0.12,1.08,0.0,12.17,-0.1724,-0.6331,0.0194,0.0,0.0,0.0,0.0067,-0.0295,0.0678,5135.32 +87,60,1.63,0.0,11.76,0.03,1.01,0.0,8.98,-0.1674,-0.6332,-0.0008,0.0,0.0,0.0,0.005,-0.0475,0.0556,5205.05 +88,60,1.48,0.0,11.76,0.03,0.9,0.0,9.78,-0.1633,-0.6333,-0.0077,0.0,0.0,0.0,0.004,-0.0728,0.0385,5250.35 +89,60,1.47,0.0,11.11,0.03,0.96,0.0,9.63,-0.1582,-0.6333,-0.0032,0.0,0.0,0.0,0.0052,-0.0149,0.0401,5314.82 +90,60,1.4,0.0,11.11,0.03,0.95,0.0,10.12,-0.1543,-0.6334,0.0036,0.0,0.0,0.0,0.0038,-0.0366,0.0437,5384.81 +91,60,1.34,0.0,9.52,0.08,1.03,0.0,8.48,-0.151,-0.6335,0.0139,0.0,0.0,0.0,0.0033,-0.0117,0.0358,5436.67 +92,60,1.39,0.0,8.7,0.02,1.11,0.0,7.59,-0.1479,-0.6336,0.0206,0.0,0.0,0.0,0.0031,-0.0216,0.0393,5494.74 +93,60,1.51,0.0,12.5,0.02,1.25,0.0,12.77,-0.1442,-0.6336,0.0349,0.0,0.0,0.0,0.0037,-0.0162,0.0581,5555.4 +94,60,1.61,0.0,13.64,0.02,1.3,0.0,15.21,-0.1408,-0.6337,0.0335,0.0,0.0,0.0,0.0034,-0.01,0.0605,5618.18 +95,60,1.33,0.0,8.0,0.02,0.94,0.0,8.94,-0.1408,-0.6337,0.0194,0.0,0.0,0.0,-0.0,-0.0887,0.0586,5673.61 +96,60,1.17,0.0,9.09,0.02,0.79,0.0,10.17,-0.1391,-0.6338,0.0265,0.0,0.0,0.0,0.0017,-0.0367,0.0552,5736.89 +97,60,1.27,0.0,8.82,0.05,0.88,0.0,8.61,-0.1349,-0.6338,0.0067,0.0,0.0,0.0,0.0042,-0.0197,0.0461,5792.03 +98,60,1.21,0.0,9.09,0.01,0.87,0.0,9.33,-0.1322,-0.6339,0.0073,0.0,0.0,0.0,0.0027,-0.0369,0.0471,5862.17 +99,60,1.39,0.0,11.76,0.01,1.0,0.0,13.5,-0.1275,-0.5969,0.0563,0.0,0.0,0.0,0.0048,-0.0197,0.0577,5917.95 +100,60,1.45,0.0,9.38,0.01,1.1,0.0,10.57,-0.1233,-0.5889,0.0263,0.0,0.0,0.0,0.0042,-0.0338,0.0661,5983.63 +101,60,1.67,0.0,10.0,0.06,1.31,0.0,11.35,-0.1177,-0.5889,0.0405,0.0,-0.0,-0.0,0.0055,-0.0346,0.0515,6036.03 +102,60,1.41,0.0,7.89,0.01,1.05,0.0,8.02,-0.117,-0.589,0.0089,0.0,0.0,0.0,0.0008,-0.0417,0.0414,6100.68 +103,60,1.56,0.0,8.33,0.01,1.27,0.0,8.73,-0.1122,-0.589,0.0174,0.0,0.0,0.0,0.0048,-0.0293,0.0385,6159.23 +104,60,1.48,0.0,8.57,0.01,1.26,0.0,9.17,-0.1103,-0.589,0.0147,0.0,0.0,0.0,0.0019,-0.0133,0.0366,6216.76 +105,60,1.38,0.0,8.33,0.07,1.18,0.0,9.04,-0.1093,-0.589,0.0116,0.0,-0.0,-0.0,0.0009,-0.0207,0.043,6281.63 +106,60,1.34,0.0,9.09,0.07,1.11,0.0,10.01,-0.1081,-0.5891,0.0143,0.0,0.0,0.0,0.0013,-0.0407,0.0429,6339.27 +107,60,1.23,0.0,8.82,0.01,1.04,0.0,9.68,-0.1072,-0.5891,0.0147,0.0,0.0,0.0,0.0009,-0.0329,0.052,6393.86 +108,60,1.24,0.0,9.68,0.01,1.02,0.0,10.71,-0.1055,-0.5684,0.0163,0.0,0.0,0.0,0.0017,-0.0371,0.0409,6458.2 +109,60,1.04,0.0,9.09,0.01,0.83,0.0,9.97,-0.1058,-0.5684,0.0073,0.0,-0.0,-0.0,-0.0003,-0.0484,0.0395,6512.7 +110,60,0.89,0.0,10.34,0.02,0.72,0.0,11.51,-0.1057,-0.5684,0.019,0.0,0.0,0.0,0.0001,-0.0603,0.0368,6580.51 +111,60,0.85,0.0,5.0,0.03,0.6,0.0,5.28,-0.1049,-0.5488,0.0152,0.0,-0.0,-0.0,0.0007,-0.0692,0.0351,6638.22 +112,60,0.97,0.0,8.7,0.03,0.73,0.0,8.21,-0.1018,-0.5126,0.014,0.0,-0.0,-0.0,0.0032,-0.0114,0.0702,6696.11 +113,60,0.8,0.0,8.7,0.04,0.6,0.0,8.97,-0.1016,-0.4805,-0.0,0.0,0.0,0.0,0.0002,-0.0517,0.0321,6754.08 +114,60,0.84,0.0,8.33,0.04,0.63,0.0,8.63,-0.0997,-0.4299,0.0049,0.0,-0.0,-0.0,0.0019,-0.0026,0.0506,6816.29 +115,60,1.02,0.0,10.34,0.05,0.73,0.0,11.28,-0.0961,-0.3747,0.0185,0.0,0.0,0.0,0.0036,-0.0058,0.0552,6881.31 +116,60,1.1,0.0,10.71,0.05,0.75,0.0,12.07,-0.0928,-0.3713,0.0131,0.0,-0.0,-0.0,0.0033,-0.0614,0.0572,6942.47 +117,60,1.13,0.0,11.11,0.06,0.79,0.0,12.65,-0.0892,-0.3714,0.0169,0.0,0.0,0.0,0.0036,-0.0214,0.0512,6994.51 +118,60,1.22,0.0,11.11,0.05,0.94,0.0,12.67,-0.0852,-0.3714,0.0151,0.0,-0.0,-0.0,0.004,-0.0062,0.053,7063.41 +119,60,1.31,0.0,9.52,0.05,1.06,0.0,10.45,-0.0817,-0.3714,0.0213,0.0,0.0,0.0,0.0035,-0.0231,0.0496,7121.78 +120,60,1.31,0.0,9.09,0.05,1.09,0.0,9.63,-0.0793,-0.3715,0.0141,0.0,0.0,0.0,0.0024,-0.0073,0.0349,7174.26 +121,60,1.21,0.0,11.11,0.0,1.06,0.0,12.25,-0.0781,-0.3715,0.0144,0.0,0.0,0.0,0.0011,-0.0243,0.024,7235.98 +122,60,1.39,0.0,6.45,0.04,1.18,0.0,7.04,-0.0751,-0.3715,0.0167,0.0,0.0,0.0,0.003,-0.0731,0.047,7293.43 +123,60,1.51,0.0,8.33,0.04,1.28,0.0,9.74,-0.072,-0.3715,0.0531,0.0,0.0,0.0,0.0032,-0.0354,0.0364,7362.02 +124,60,1.78,0.0,10.53,0.0,1.56,0.0,12.88,-0.067,-0.3715,0.0704,0.0,0.0,0.0,0.005,-0.0138,0.0822,7418.73 +125,60,1.68,0.0,8.33,0.0,1.47,0.0,10.0,-0.0658,-0.3715,0.0347,0.0,0.0,0.0,0.0012,-0.041,0.0409,7473.62 +126,60,1.68,0.0,8.7,0.0,1.52,0.0,10.03,-0.0637,-0.3716,0.0292,0.0,0.0,0.0,0.0021,-0.0398,0.0471,7540.01 +127,60,1.64,0.0,8.33,0.0,1.5,0.0,8.58,-0.0625,-0.3716,0.0123,0.0,0.0,0.0,0.0012,-0.0382,0.0526,7604.58 +128,60,1.65,0.0,10.34,0.0,1.47,0.0,11.85,-0.061,-0.3716,0.0375,0.0,0.0,0.0,0.0014,-0.0763,0.047,7658.64 +129,60,2.04,0.0,10.34,0.0,1.85,0.0,12.11,-0.0552,-0.3716,0.0333,0.0,0.0,0.0,0.0058,-0.0255,0.0516,7719.49 +130,60,2.14,0.0,10.0,0.0,2.01,0.0,11.67,-0.052,-0.3716,0.0666,0.0,0.0,0.0,0.0032,-0.0199,0.0525,7773.41 +131,60,2.42,0.0,9.68,0.0,2.33,0.0,10.84,-0.0475,-0.3716,0.0338,0.0,0.0,0.0,0.0045,-0.0328,0.0539,7844.79 +132,60,2.29,0.0,10.0,0.0,2.1,0.0,10.64,-0.0476,-0.3716,0.0187,0.0,0.0,0.0,-0.0001,-0.0567,0.0653,7898.38 +133,60,2.41,0.0,8.11,0.0,2.18,0.0,8.26,-0.0443,-0.3716,0.0217,0.0,0.0,0.0,0.0033,-0.041,0.0491,7967.92 +134,60,2.15,0.0,8.33,0.0,1.9,0.0,9.44,-0.0445,-0.3716,0.0335,0.0,0.0,0.0,-0.0002,-0.0762,0.0463,8016.43 +135,60,2.35,0.0,8.33,0.01,2.07,0.0,9.49,-0.0399,-0.336,0.0284,0.0,0.0,0.0,0.0046,-0.0207,0.0537,8082.39 +136,60,2.43,0.0,8.33,0.01,2.15,0.0,9.43,-0.0363,-0.3028,0.0376,0.0,-0.0,-0.0,0.0037,-0.0526,0.0345,8137.65 +137,60,2.51,0.0,7.69,0.02,2.29,0.0,8.73,-0.0326,-0.2659,0.028,0.0,0.0,0.0,0.0037,-0.0347,0.0374,8194.04 +138,60,2.35,0.0,10.64,0.03,2.13,0.0,12.51,-0.032,-0.2017,0.0658,0.0,-0.0,-0.0,0.0006,-0.0891,0.0642,8256.89 +139,60,2.36,0.0,11.9,0.04,2.22,0.0,14.84,-0.0296,-0.1558,0.0742,0.0,-0.0,-0.0,0.0024,-0.0368,0.061,8318.25 +140,60,2.32,0.0,12.5,0.04,2.24,0.0,15.69,-0.0283,-0.1198,0.069,0.0,-0.0,-0.0,0.0012,-0.036,0.0443,8382.95 +141,60,2.12,0.0,11.36,0.05,2.06,0.0,13.97,-0.0294,-0.1172,0.0431,0.0,0.0,0.0,-0.001,-0.0418,0.0467,8438.08 +142,60,2.06,0.0,13.89,0.05,2.0,0.0,17.01,-0.0293,-0.1172,0.0613,0.0,-0.0,-0.0,0.0,-0.0459,0.0275,8509.16 +143,60,1.77,0.0,14.29,0.06,1.72,0.0,17.83,-0.0315,-0.1172,0.0579,0.0,-0.0,-0.0,-0.0022,-0.038,0.0221,8564.35 +144,60,1.73,0.0,11.43,0.06,1.69,0.0,13.7,-0.0315,-0.1173,0.0236,0.0,0.0,0.0,0.0,-0.0563,0.0427,8611.26 +145,60,1.68,0.0,8.33,0.07,1.58,0.0,8.84,-0.032,-0.1173,0.0349,0.0,-0.0,-0.0,-0.0004,-0.0428,0.0375,8682.54 +146,60,1.82,0.0,8.33,0.07,1.76,0.0,9.48,-0.0299,-0.1173,0.0426,0.0,0.0,0.0,0.0021,-0.0326,0.0568,8739.73 +147,60,1.93,0.0,15.38,0.08,1.91,0.0,19.04,-0.0282,-0.1173,0.1152,0.0,0.0,0.0,0.0017,-0.0419,0.0726,8798.46 +148,60,1.65,0.0,12.12,0.08,1.64,0.0,15.67,-0.0309,-0.1173,0.0679,0.0,-0.0,-0.0,-0.0027,-0.0992,0.0338,8859.67 +149,60,1.6,0.0,11.43,0.08,1.59,0.0,13.95,-0.0313,-0.1173,0.0423,0.0,-0.0,-0.0,-0.0004,-0.0265,0.0284,8912.91 +150,60,1.86,0.0,11.43,0.09,1.89,0.0,13.55,-0.0287,-0.1173,0.0384,0.0,0.0,0.0,0.0026,-0.0205,0.0677,8977.71 +151,60,2.07,0.0,10.81,0.09,2.12,0.0,12.52,-0.0267,-0.1173,0.0476,0.0,-0.0,-0.0,0.002,-0.0407,0.0535,9033.7 +152,60,1.99,0.0,10.34,0.09,2.03,0.0,12.02,-0.0278,-0.1173,0.0476,0.0,0.0,0.0,-0.0011,-0.0284,0.031,9102.92 +153,60,2.1,0.0,9.68,0.1,2.16,0.0,11.41,-0.0269,-0.1173,0.0444,0.0,0.0,0.0,0.0008,-0.0214,0.0407,9158.77 +154,60,2.0,0.0,12.0,0.09,1.99,0.0,14.47,-0.0284,-0.1173,0.07,0.0,-0.0,-0.0,-0.0014,-0.045,0.0257,9222.25 +155,60,2.03,0.0,12.12,0.08,2.01,0.0,14.92,-0.0279,-0.1173,0.062,0.0,0.0,0.0,0.0005,-0.0325,0.0357,9277.44 +156,60,2.04,0.0,10.26,0.08,1.98,0.0,12.17,-0.0276,-0.1142,0.0386,0.0,0.0,0.0,0.0003,-0.0509,0.0605,9340.89 +157,60,2.04,0.0,10.53,0.08,1.99,0.0,12.08,-0.027,-0.1146,0.0332,0.0,0.0,0.0,0.0006,-0.0366,0.0355,9394.39 +158,60,2.16,0.0,10.53,0.08,2.19,0.0,11.98,-0.0254,-0.1149,0.0584,0.0,-0.0,-0.0,0.0017,-0.0498,0.068,9452.68 +159,60,2.15,0.0,12.0,0.09,2.2,0.0,14.71,-0.0255,-0.1152,0.0734,0.0,-0.0,-0.0,-0.0001,-0.0462,0.0324,9519.21 +160,60,1.93,0.0,10.64,0.09,1.96,0.0,12.63,-0.0281,-0.1155,0.0415,0.0,-0.0,-0.0,-0.0026,-0.0688,0.0365,9580.04 +161,60,1.99,0.0,10.2,0.1,2.02,0.0,12.01,-0.0277,-0.1157,0.0491,0.0,0.0,0.0,0.0004,-0.027,0.0271,9638.75 +162,60,2.08,0.0,10.71,0.1,2.1,0.0,12.55,-0.027,-0.116,0.0541,0.0,-0.0,-0.0,0.0007,-0.0324,0.0327,9692.47 +163,60,2.17,0.0,10.0,0.11,2.12,0.0,11.64,-0.0261,-0.0947,0.0439,0.0,-0.0,-0.0,0.0009,-0.0495,0.0382,9760.69 +164,60,2.07,0.0,8.82,0.11,2.02,0.0,10.14,-0.0266,-0.095,0.0241,0.0,0.0,0.0,-0.0005,-0.0227,0.0234,9819.31 +165,60,1.89,0.0,9.68,0.11,1.86,0.0,10.61,-0.028,-0.0953,0.0351,0.0,-0.0,-0.0,-0.0013,-0.04,0.031,9889.77 +166,60,1.79,0.0,7.89,0.12,1.72,0.0,9.17,-0.0287,-0.0956,0.0363,0.0,-0.0,-0.0,-0.0008,-0.0343,0.0345,9941.11 +167,60,1.83,0.0,9.09,0.11,1.74,0.0,9.66,-0.0278,-0.0959,0.0319,0.0,-0.0,-0.0,0.0009,-0.0337,0.0309,9998.43 +168,60,1.64,0.0,8.33,0.1,1.57,0.0,8.96,-0.0291,-0.0961,0.0232,0.0,0.0,0.0,-0.0013,-0.0561,0.0348,10061.27 +169,60,1.69,0.0,11.54,0.09,1.65,0.0,12.86,-0.0281,-0.0963,0.0402,0.0,0.0,0.0,0.001,-0.0332,0.0336,10118.96 +170,60,1.62,0.0,9.38,0.09,1.56,0.0,10.78,-0.0286,-0.0965,0.0288,0.0,0.0,0.0,-0.0005,-0.0383,0.0243,10176.59 +171,60,1.41,0.0,10.71,0.08,1.35,0.0,11.66,-0.0304,-0.0967,0.0228,0.0,0.0,0.0,-0.0017,-0.0404,0.0183,10247.3 +172,60,1.3,0.0,7.14,0.07,1.25,0.0,7.05,-0.0312,-0.0969,0.0122,0.0,0.0,0.0,-0.0009,-0.0422,0.0365,10303.24 +173,60,1.15,0.0,10.34,0.07,1.09,0.0,10.87,-0.0327,-0.0971,0.0156,0.0,0.0,0.0,-0.0015,-0.0346,0.0351,10347.33 +174,60,1.28,0.0,10.34,0.06,1.25,0.0,11.26,-0.0313,-0.0972,0.0235,0.0,0.0,0.0,0.0015,-0.0154,0.0251,10417.38 +175,60,1.36,0.0,10.34,0.07,1.38,0.0,11.25,-0.0304,-0.0974,0.0427,0.0,0.0,0.0,0.0009,-0.0355,0.0349,10474.65 +176,60,1.39,0.0,11.11,0.08,1.42,0.0,13.17,-0.0304,-0.0975,0.0543,0.0,-0.0,-0.0,0.0001,-0.0415,0.0284,10545.55 +177,60,1.51,0.0,11.76,0.09,1.5,0.0,13.82,-0.0294,-0.0817,0.0508,0.0,-0.0,-0.0,0.001,-0.0369,0.0276,10595.67 +178,60,1.56,0.0,12.5,0.1,1.54,0.0,14.17,-0.0288,-0.0827,0.0284,0.0,0.0,0.0,0.0006,-0.0498,0.038,10656.98 +179,60,1.69,0.0,11.76,0.11,1.69,0.0,13.2,-0.0273,-0.0836,0.0415,0.0,0.0,0.0,0.0015,-0.0448,0.0729,10724.7 +180,60,1.68,0.0,10.34,0.13,1.7,0.0,11.39,-0.0274,-0.0844,0.039,0.0,0.0,0.0,-0.0001,-0.072,0.0339,10773.98 +181,60,1.95,0.0,10.34,0.14,1.98,0.0,11.67,-0.0248,-0.0852,0.0332,0.0,-0.0,-0.0,0.0026,-0.036,0.035,10844.95 +182,60,2.15,0.0,10.71,0.15,2.19,0.0,12.11,-0.0228,-0.0859,0.0479,0.0,-0.0,-0.0,0.0019,-0.024,0.0394,10896.81 +183,60,2.34,0.0,11.11,0.1,2.39,0.0,13.34,-0.021,-0.0866,0.0584,0.0,-0.0,-0.0,0.0018,-0.0198,0.0489,10966.5 +184,60,2.32,0.0,12.0,0.09,2.33,0.0,14.61,-0.0213,-0.0713,0.0592,0.0,-0.0,-0.0,-0.0003,-0.0381,0.0554,11017.9 +185,60,2.27,0.0,12.5,0.08,2.29,0.0,15.24,-0.0216,-0.0713,0.0546,0.0,0.0,0.0,-0.0003,-0.0429,0.0259,11075.8 +186,60,2.47,0.0,12.0,0.07,2.46,0.0,14.43,-0.0195,-0.0713,0.0388,0.0,0.0,0.0,0.002,-0.0393,0.0603,11141.02 +187,60,2.45,0.0,13.04,0.19,2.45,0.0,15.59,-0.0193,-0.0713,0.0419,0.0,0.0,0.0,0.0002,-0.0322,0.0384,11195.24 +188,60,2.53,0.0,10.34,0.19,2.58,0.0,11.86,-0.0182,-0.0713,0.0344,0.0,0.0,0.0,0.0011,-0.0381,0.0471,11265.42 +189,60,2.5,0.0,8.82,0.2,2.5,0.0,10.08,-0.0187,-0.0713,0.0352,0.0,0.0,0.0,-0.0005,-0.0717,0.0374,11319.61 +190,60,2.54,0.0,9.62,0.2,2.57,0.0,11.33,-0.018,-0.0721,0.047,0.0,-0.0,-0.0,0.0007,-0.0295,0.0308,11383.36 +191,60,2.53,0.0,8.89,0.2,2.53,0.0,10.26,-0.0181,-0.0612,0.0415,0.0,0.0,0.0,-0.0001,-0.0423,0.0444,11442.6 +192,60,2.7,0.0,9.76,0.21,2.75,0.0,11.02,-0.0159,-0.0614,0.039,0.0,-0.0,-0.0,0.0021,-0.0383,0.0381,11497.78 +193,60,2.85,0.0,9.76,0.21,2.94,0.0,11.12,-0.0144,-0.0616,0.0509,0.0,0.0,0.0,0.0015,-0.03,0.0506,11558.91 +194,60,2.89,0.0,11.32,0.21,2.96,0.0,13.24,-0.0144,-0.0617,0.0604,0.0,-0.0,-0.0,0.0001,-0.0308,0.041,11609.96 +195,60,2.98,0.0,10.42,0.04,3.07,0.0,12.24,-0.0136,-0.0619,0.0551,0.0,0.0,0.0,0.0008,-0.0455,0.0504,11679.43 +196,60,2.85,0.0,11.76,0.03,2.94,0.0,14.53,-0.0152,-0.062,0.0831,0.0,0.0,0.0,-0.0016,-0.038,0.0291,11736.81 +197,60,2.77,0.0,8.7,0.03,2.74,0.0,10.58,-0.0165,-0.0621,0.0364,0.0,0.0,0.0,-0.0014,-0.0467,0.0439,11805.22 +198,60,2.81,0.0,10.87,0.03,2.79,0.0,12.17,-0.0158,-0.0622,0.048,0.0,0.0,0.0,0.0008,-0.0348,0.0395,11857.33 +199,60,2.85,0.0,11.63,0.03,2.89,0.0,13.49,-0.0149,-0.0623,0.0411,0.0,0.0,0.0,0.0008,-0.0477,0.0468,11924.42 +200,60,2.73,0.0,10.2,0.13,2.76,0.0,11.6,-0.0163,-0.0624,0.0409,0.0,0.0,0.0,-0.0014,-0.053,0.0397,11976.28 +201,60,2.55,0.0,8.77,0.02,2.54,0.0,10.3,-0.0183,-0.0625,0.0448,0.0,0.0,0.0,-0.002,-0.0557,0.032,12051.95 +202,60,2.36,0.0,8.93,0.02,2.35,0.0,9.84,-0.0202,-0.0626,0.0335,0.0,0.0,0.0,-0.0019,-0.0326,0.0286,12094.2 +203,60,2.31,0.0,8.0,0.1,2.29,0.0,9.2,-0.0208,-0.0627,0.0329,0.0,0.0,0.0,-0.0006,-0.0513,0.0338,12154.64 +204,60,2.24,0.0,8.33,0.09,2.18,0.0,9.24,-0.0215,-0.0613,0.0234,0.0,0.0,0.0,-0.0007,-0.0398,0.0255,12217.33 +205,60,2.2,0.0,11.54,0.09,2.16,0.0,13.6,-0.0215,-0.0613,0.0602,0.0,0.0,0.0,0.0,-0.0323,0.0368,12278.64 +206,34,2.55,0.0,14.81,0.03,2.57,0.0,18.49,-0.017,-0.0622,0.0909,0.0,-0.0,-0.0,0.0021,-0.0195,0.0379,12319.76 +207,60,2.34,0.0,14.29,0.48,2.41,0.0,18.24,-0.0197,-0.0669,0.0737,0.0,0.0,0.0,0.0006,-0.0635,0.0579,12414.4 +208,60,2.32,0.0,9.09,0.48,2.34,0.0,10.51,-0.0207,-0.069,0.0326,0.0,0.0,0.0,-0.0009,-0.0767,0.0355,12450.77 +209,60,2.28,0.0,9.09,0.49,2.27,0.0,10.33,-0.0215,-0.071,0.0316,0.0,0.0,0.0,-0.0008,-0.0419,0.0287,12509.33 +210,60,2.22,0.0,8.33,0.49,2.19,0.0,9.32,-0.0222,-0.0729,0.0258,0.0,-0.0,-0.0,-0.0007,-0.0533,0.0382,12582.11 +211,60,2.25,0.0,8.57,0.5,2.23,0.0,9.44,-0.022,-0.069,0.0405,0.0,0.0,0.0,0.0002,-0.0295,0.0435,12627.81 +212,60,2.12,0.0,8.0,0.5,2.13,0.0,9.39,-0.0235,-0.071,0.0373,0.0,-0.0,-0.0,-0.0015,-0.0434,0.0354,12695.7 +213,60,2.21,0.0,11.11,0.51,2.25,0.0,13.36,-0.0229,-0.0729,0.0642,0.0,-0.0,-0.0,0.0006,-0.0336,0.0429,12756.57 +214,60,2.31,0.0,10.0,0.52,2.37,0.0,12.1,-0.0224,-0.073,0.0661,0.0,-0.0,-0.0,0.0005,-0.0385,0.0314,12822.66 +215,60,2.38,0.0,9.52,0.52,2.42,0.0,11.11,-0.0222,-0.0743,0.0426,0.0,0.0,0.0,0.0001,-0.0403,0.0415,12881.36 +216,60,2.16,0.0,9.52,0.52,2.19,0.0,10.87,-0.0249,-0.0756,0.0254,0.0,0.0,0.0,-0.0027,-0.0487,0.0439,12928.41 +217,60,2.26,0.0,8.7,0.53,2.24,0.0,9.73,-0.0244,-0.0767,0.032,0.0,-0.0,-0.0,0.0006,-0.0446,0.0316,12999.33 +218,60,2.37,0.0,10.53,0.53,2.38,0.0,11.89,-0.0233,-0.0778,0.0264,0.0,-0.0,-0.0,0.0011,-0.0517,0.0379,13059.8 +219,60,2.41,0.0,10.53,0.54,2.42,0.0,12.07,-0.023,-0.0788,0.0283,0.0,0.0,0.0,0.0003,-0.0346,0.0469,13120.36 +220,60,2.34,0.0,7.69,0.54,2.29,0.0,8.43,-0.024,-0.0796,0.043,0.0,0.0,0.0,-0.001,-0.0736,0.0418,13174.7 +221,60,2.41,0.0,9.76,0.5,2.4,0.0,10.95,-0.023,-0.0805,0.0444,0.0,-0.0,-0.0,0.001,-0.0289,0.0422,13240.0 +222,60,2.43,0.0,9.3,0.46,2.41,0.0,10.74,-0.0228,-0.0812,0.033,0.0,0.0,0.0,0.0003,-0.0273,0.0466,13294.62 +223,60,2.55,0.0,10.53,0.42,2.53,0.0,12.21,-0.0215,-0.0722,0.0398,0.0,0.0,0.0,0.0013,-0.0353,0.0658,13352.88 +224,60,2.45,0.0,8.33,0.39,2.4,0.0,9.26,-0.0223,-0.0732,0.0279,0.0,0.0,0.0,-0.0009,-0.0528,0.0365,13410.6 +225,60,2.33,0.0,8.7,0.36,2.29,0.0,9.4,-0.0233,-0.0743,0.0318,0.0,0.0,0.0,-0.0009,-0.0385,0.0319,13472.81 +226,60,2.62,0.0,12.5,0.33,2.59,0.0,14.61,-0.0202,-0.0754,0.0662,0.0,0.0,0.0,0.0031,-0.039,0.0609,13537.52 +227,60,2.65,0.0,12.5,0.31,2.67,0.0,15.45,-0.0195,-0.0765,0.0621,0.0,0.0,0.0,0.0006,-0.0287,0.0536,13593.81 +228,60,2.5,0.0,11.76,0.28,2.52,0.0,14.3,-0.0211,-0.0774,0.0423,0.0,0.0,0.0,-0.0015,-0.0447,0.033,13659.08 +229,60,2.54,0.0,11.76,0.26,2.53,0.0,13.98,-0.0209,-0.0783,0.0436,0.0,0.0,0.0,0.0002,-0.0354,0.0317,13723.05 +230,60,2.4,0.0,12.5,0.24,2.39,0.0,14.81,-0.0222,-0.079,0.0399,0.0,0.0,0.0,-0.0013,-0.0436,0.027,13775.18 +231,60,2.26,0.0,10.26,0.22,2.2,0.0,11.7,-0.0238,-0.0798,0.0264,0.0,0.0,0.0,-0.0015,-0.0493,0.0301,13839.31 +232,60,2.47,0.0,10.26,0.2,2.41,0.0,11.31,-0.0215,-0.0805,0.0527,0.0,0.0,0.0,0.0023,-0.0343,0.0995,13896.94 +233,60,2.22,0.0,7.69,0.19,2.19,0.0,8.53,-0.0236,-0.0811,0.0325,0.0,0.0,0.0,-0.0022,-0.0508,0.0248,13954.86 +234,60,2.36,0.0,8.06,0.17,2.32,0.0,8.9,-0.0222,-0.0744,0.025,0.0,0.0,0.0,0.0014,-0.0265,0.0443,14026.69 +235,60,2.39,0.0,11.54,0.16,2.35,0.0,13.08,-0.0218,-0.0745,0.0512,0.0,0.0,0.0,0.0004,-0.0732,0.0643,14074.25 +236,60,2.31,0.0,10.2,0.15,2.25,0.0,11.72,-0.0223,-0.0746,0.0394,0.0,0.0,0.0,-0.0005,-0.0297,0.0373,14138.42 +237,60,2.21,0.0,9.76,0.14,2.18,0.0,11.16,-0.023,-0.0747,0.0282,0.0,0.0,0.0,-0.0007,-0.0778,0.0578,14197.17 +238,60,2.37,0.0,11.9,0.13,2.39,0.0,13.85,-0.0213,-0.0756,0.0459,0.0,0.0,0.0,0.0017,-0.0303,0.0434,14263.5 +239,60,2.15,0.0,10.26,0.12,2.17,0.0,11.79,-0.0238,-0.0767,0.0374,0.0,0.0,0.0,-0.0025,-0.0459,0.0313,14309.45 +240,60,2.3,0.0,9.09,0.11,2.31,0.0,9.67,-0.0227,-0.0778,0.0303,0.0,0.0,0.0,0.0011,-0.0225,0.0353,14376.4 +241,60,2.38,0.0,8.57,0.1,2.34,0.0,9.58,-0.0221,-0.0791,0.0351,0.0,0.0,0.0,0.0005,-0.0363,0.0314,14437.34 +242,60,2.35,0.0,7.32,0.09,2.31,0.0,7.98,-0.0223,-0.0805,0.0348,0.0,0.0,0.0,-0.0002,-0.0339,0.0517,14495.36 +243,60,2.43,0.0,12.12,0.08,2.43,0.0,13.36,-0.0213,-0.0818,0.0402,0.0,0.0,0.0,0.001,-0.0359,0.0565,14553.4 +244,60,2.68,0.0,10.71,0.08,2.73,0.0,12.21,-0.019,-0.083,0.0468,0.0,0.0,0.0,0.0024,-0.0374,0.0699,14621.23 +245,60,2.55,0.0,12.5,0.07,2.64,0.0,14.39,-0.0206,-0.0841,0.0485,0.0,0.0,0.0,-0.0016,-0.0596,0.0488,14687.91 +246,60,2.85,0.0,10.81,0.07,2.93,0.0,12.24,-0.0183,-0.0851,0.0511,0.0,0.0,0.0,0.0023,-0.0357,0.0546,14734.07 +247,60,2.75,0.0,10.81,0.06,2.83,0.0,12.94,-0.0198,-0.0861,0.0538,0.0,0.0,0.0,-0.0015,-0.0756,0.0473,14795.34 +248,60,2.73,0.0,11.43,0.06,2.79,0.0,13.74,-0.0207,-0.0869,0.0514,0.0,0.0,0.0,-0.0008,-0.0355,0.0449,14861.99 +249,60,2.8,0.0,11.76,0.05,2.92,0.0,14.1,-0.0203,-0.0877,0.0623,0.0,0.0,0.0,0.0004,-0.0737,0.0355,14912.63 +250,60,2.76,0.0,10.53,0.05,2.86,0.0,12.27,-0.0215,-0.0884,0.0619,0.0,0.0,0.0,-0.0012,-0.0613,0.0422,14987.0 +251,60,2.69,0.0,11.43,0.04,2.77,0.0,13.95,-0.0229,-0.0891,0.0657,0.0,0.0,0.0,-0.0014,-0.0303,0.0304,15037.65 +252,60,2.81,0.0,13.79,0.04,2.86,0.0,17.15,-0.0221,-0.0897,0.0814,0.0,0.0,0.0,0.0008,-0.0412,0.0415,15093.17 +253,60,2.54,0.0,14.29,0.04,2.54,0.0,18.04,-0.0251,-0.0903,0.0753,0.0,0.0,0.0,-0.0029,-0.0785,0.0203,15164.15 +254,60,2.41,0.0,14.81,0.03,2.36,0.0,18.64,-0.0264,-0.0909,0.0677,0.0,0.0,0.0,-0.0013,-0.1089,0.043,15217.03 +255,60,2.4,0.0,16.0,0.03,2.3,0.0,20.16,-0.0261,-0.0866,0.0691,0.0,0.0,0.0,0.0003,-0.064,0.0348,15279.03 +256,60,2.44,0.0,11.76,0.03,2.33,0.0,14.07,-0.0249,-0.0869,0.0412,0.0,0.0,0.0,0.0012,-0.0623,0.064,15330.36 +257,60,2.43,0.0,8.11,0.03,2.31,0.0,9.34,-0.0242,-0.0872,0.0285,0.0,0.0,0.0,0.0007,-0.055,0.0246,15394.56 +258,60,2.54,0.0,8.77,0.02,2.48,0.0,9.94,-0.0223,-0.0883,0.0406,0.0,0.0,0.0,0.0019,-0.0278,0.047,15461.52 +259,59,2.46,0.0,10.0,0.02,2.45,0.0,11.54,-0.0229,-0.0895,0.0375,0.0,0.0,0.0,-0.0009,-0.0555,0.0475,15513.86 +260,60,2.45,0.0,12.5,0.06,2.45,0.0,14.94,-0.0228,-0.0905,0.0597,0.0,0.0,0.0,0.0003,-0.0339,0.0343,15571.69 +261,60,2.52,0.0,10.53,0.06,2.52,0.0,12.24,-0.022,-0.0915,0.0414,0.0,0.0,0.0,0.0008,-0.0367,0.0384,15643.94 +262,60,2.65,0.0,10.87,0.07,2.62,0.0,12.87,-0.0208,-0.0924,0.0412,0.0,-0.0,-0.0,0.0012,-0.0442,0.0386,15697.8 +263,60,2.61,0.0,11.11,0.08,2.61,0.0,12.86,-0.0209,-0.0933,0.041,0.0,-0.0,-0.0,-0.0001,-0.0335,0.0376,15758.06 +264,60,2.91,0.0,17.39,0.08,2.97,0.0,21.49,-0.0178,-0.094,0.1002,0.0,-0.0,-0.0,0.0031,-0.0437,0.0694,15818.09 +265,59,3.03,0.0,17.39,0.09,3.08,0.0,22.87,-0.0162,-0.0947,0.095,0.0,0.0,0.0,0.0016,-0.029,0.0656,15882.19 +266,59,3.15,0.0,15.63,0.24,3.28,0.0,20.17,-0.0157,-0.0954,0.0567,0.0,-0.0,-0.0,0.0001,-0.0431,0.0224,15940.7 +267,58,3.18,0.0,13.89,0.14,3.31,0.0,16.94,-0.0164,-0.096,0.0549,0.0,0.0,0.0,-0.0004,-0.0364,0.0378,15992.9 +268,58,3.24,0.0,15.0,0.03,3.41,0.0,18.71,-0.0164,-0.0966,0.1042,0.0,0.0,0.0,0.0002,-0.068,0.0493,16058.19 +269,58,3.18,0.0,16.67,0.06,3.32,0.0,21.92,-0.0168,-0.0971,0.1136,0.0,-0.0,-0.0,-0.0003,-0.038,0.0367,16115.29 +270,59,3.2,0.0,17.02,0.07,3.34,0.0,22.62,-0.0179,-0.0976,0.1005,0.0,0.0,0.0,-0.0012,-0.0443,0.0621,16181.67 +271,59,3.19,0.0,18.6,0.06,3.36,0.0,24.69,-0.0187,-0.098,0.101,0.0,-0.0,-0.0,-0.0013,-0.0429,0.0369,16233.68 +272,59,2.86,0.0,17.14,0.28,2.98,0.0,22.56,-0.0229,-0.0984,0.0664,0.0,0.0,0.0,-0.0037,-0.0508,0.0266,16302.9 +273,58,3.24,0.0,20.0,0.26,3.35,0.0,26.06,-0.0197,-0.0988,0.0845,0.0,0.0,0.0,0.0024,-0.0188,0.0368,16357.49 +274,60,2.93,0.0,18.75,0.16,2.91,0.0,24.67,-0.0229,-0.0991,0.0588,0.0,0.0,0.0,-0.0025,-0.0628,0.0329,16413.91 +275,60,2.64,0.0,16.13,0.22,2.58,0.0,20.2,-0.0255,-0.0994,0.0436,0.0,0.0,0.0,-0.0026,-0.0511,0.0694,16482.85 +276,60,2.81,0.0,14.29,0.21,2.77,0.0,16.64,-0.0232,-0.0997,0.0634,0.0,0.0,0.0,0.0022,-0.0458,0.0604,16534.52 +277,59,2.91,0.0,12.5,0.19,2.89,0.0,13.61,-0.0213,-0.0914,0.0576,0.0,0.0,0.0,0.0015,-0.0233,0.0362,16603.28 +278,60,2.66,0.0,13.89,0.22,2.58,0.0,17.15,-0.0241,-0.1144,0.0816,0.0,0.0,0.0,-0.0024,-0.0726,0.0263,16653.9 +279,60,2.86,0.0,14.29,0.22,2.84,0.0,18.04,-0.0215,-0.1258,0.0754,0.0,-0.0,-0.0,0.0027,-0.0279,0.0694,16720.31 +280,60,2.67,0.0,12.0,0.15,2.7,0.0,15.04,-0.0232,-0.1311,0.0792,0.0,0.0,0.0,-0.0018,-0.0642,0.0303,16778.45 +281,60,2.94,0.0,14.71,0.06,2.98,0.0,17.65,-0.0208,-0.1322,0.0808,0.0,-0.0,-0.0,0.0024,-0.0383,0.0786,16842.13 +282,60,3.32,0.0,16.67,0.21,3.46,0.0,20.86,-0.0169,-0.1332,0.0768,0.0,0.0,0.0,0.0039,-0.0249,0.0473,16890.32 +283,60,3.03,0.0,14.29,0.2,3.14,0.0,17.75,-0.0206,-0.1341,0.0519,0.0,0.0,0.0,-0.0037,-0.0564,0.043,16959.52 +284,60,3.26,0.0,13.79,0.18,3.33,0.0,16.39,-0.0191,-0.1349,0.0404,0.0,0.0,0.0,0.0015,-0.0388,0.0759,17016.82 +285,59,3.16,0.0,11.76,0.27,3.21,0.0,13.26,-0.0205,-0.1357,0.0306,0.0,-0.0,-0.0,-0.0021,-0.068,0.0414,17077.19 +286,60,3.08,0.0,11.11,0.07,3.06,0.0,13.14,-0.0218,-0.1364,0.0525,0.0,0.0,0.0,-0.0007,-0.0566,0.0475,17136.45 +287,59,3.08,0.0,12.0,0.07,3.1,0.0,14.56,-0.0221,-0.1371,0.0557,0.0,0.0,0.0,-0.0003,-0.0268,0.0367,17190.91 +288,60,3.09,0.0,9.68,0.07,3.1,0.0,11.33,-0.0216,-0.1377,0.0313,0.0,0.0,0.0,0.0005,-0.0362,0.032,17254.5 +289,60,3.06,0.0,10.0,0.06,3.05,0.0,11.69,-0.0221,-0.1383,0.0462,0.0,0.0,0.0,-0.0005,-0.027,0.0468,17316.93 +290,60,3.21,0.0,9.52,0.06,3.18,0.0,11.13,-0.0205,-0.1111,0.0343,0.0,0.0,0.0,0.0016,-0.0323,0.0349,17374.76 +291,60,2.95,0.0,12.5,0.05,2.91,0.0,14.84,-0.0228,-0.0928,0.0659,0.0,0.0,0.0,-0.0023,-0.0479,0.0451,17434.73 +292,60,2.77,0.0,11.11,0.06,2.7,0.0,13.53,-0.0244,-0.0745,0.0464,0.0,0.0,0.0,-0.0016,-0.0515,0.0307,17498.78 +293,60,3.01,0.0,13.95,0.07,3.0,0.0,17.06,-0.0213,-0.0752,0.0662,0.0,-0.0,-0.0,0.0031,-0.0243,0.0276,17556.33 +294,60,2.98,0.0,15.0,0.08,2.96,0.0,18.85,-0.0215,-0.0757,0.07,0.0,0.0,0.0,-0.0002,-0.0742,0.0348,17623.21 +295,60,3.14,0.0,13.79,0.03,3.14,0.0,16.77,-0.0196,-0.0763,0.0734,0.0,0.0,0.0,0.0019,-0.0393,0.069,17683.51 +296,59,3.14,0.0,16.67,0.03,3.19,0.0,20.95,-0.0195,-0.0768,0.0999,0.0,0.0,0.0,0.0003,-0.049,0.0381,17731.95 +297,59,3.28,0.0,16.13,0.18,3.38,0.0,20.68,-0.0182,-0.0773,0.081,0.0,0.0,0.0,0.0014,-0.0357,0.0403,17797.26 +298,60,3.24,0.0,15.15,0.23,3.29,0.0,18.89,-0.019,-0.0783,0.0526,0.0,-0.0,-0.0,-0.0012,-0.0384,0.0737,17852.16 +299,60,3.13,0.0,10.34,0.23,3.15,0.0,11.5,-0.0205,-0.0797,0.0426,0.0,0.0,0.0,-0.0015,-0.0703,0.0301,17914.87 +300,60,3.1,0.0,10.34,0.24,3.06,0.0,12.05,-0.021,-0.0809,0.0603,0.0,0.0,0.0,-0.0005,-0.044,0.034,17968.97 +301,60,3.17,0.0,11.76,0.25,3.14,0.0,13.06,-0.0199,-0.0821,0.0567,0.0,-0.0,-0.0,0.0011,-0.0465,0.0545,18040.98 +302,60,3.35,0.0,13.89,0.26,3.28,0.0,16.61,-0.0178,-0.0831,0.0738,0.0,-0.0,-0.0,0.0021,-0.0331,0.0384,18086.98 +303,60,3.09,0.0,11.43,0.26,2.97,0.0,13.45,-0.0199,-0.0999,0.0351,0.0,0.0,0.0,-0.0021,-0.0689,0.0456,18160.51 +304,59,3.11,0.0,11.43,0.26,3.06,0.0,12.89,-0.0188,-0.1013,0.0326,0.0,0.0,0.0,0.0009,-0.0346,0.0588,18214.44 +305,57,3.1,0.0,10.53,0.02,3.09,0.0,11.5,-0.0185,-0.1026,0.0355,0.0,0.0,0.0,-0.0004,-0.0398,0.0316,18279.95 +306,59,3.28,0.0,9.52,0.16,3.26,0.0,10.09,-0.0171,-0.1037,0.0516,0.0,0.0,0.0,0.0017,-0.035,0.055,18342.08 +307,60,3.37,0.0,11.36,0.12,3.39,0.0,13.18,-0.0162,-0.0758,0.0667,0.0,0.0,0.0,0.0015,-0.0353,0.0543,18397.84 +308,60,3.54,0.0,11.76,0.15,3.61,0.0,13.49,-0.0146,-0.0766,0.0646,0.0,-0.0,-0.0,0.0016,-0.0581,0.0463,18457.48 +309,60,3.7,0.0,12.5,0.16,3.77,0.0,14.53,-0.0134,-0.0772,0.0565,0.0,0.0,0.0,0.0012,-0.0429,0.0358,18507.5 +310,60,3.72,0.0,13.89,0.11,3.81,0.0,16.67,-0.0135,-0.0779,0.0649,0.0,0.0,0.0,-0.0001,-0.0374,0.046,18581.31 +311,60,3.77,0.0,12.5,0.11,3.82,0.0,14.92,-0.0137,-0.0785,0.059,0.0,-0.0,-0.0,-0.0002,-0.0694,0.0577,18632.58 +312,60,3.85,0.0,16.0,0.12,3.95,0.0,19.91,-0.0131,-0.079,0.0908,0.0,0.0,0.0,0.0006,-0.0444,0.0497,18704.76 +313,60,3.63,0.0,15.38,0.13,3.72,0.0,19.6,-0.0159,-0.0795,0.0731,0.0,-0.0,-0.0,-0.0028,-0.0534,0.0261,18758.91 +314,60,3.34,0.0,16.0,0.13,3.35,0.0,20.14,-0.0193,-0.0804,0.0654,0.0,-0.0,-0.0,-0.0034,-0.0505,0.02,18815.01 +315,60,3.06,0.0,13.33,0.14,3.04,0.0,16.14,-0.0222,-0.0823,0.0432,0.0,0.0,0.0,-0.0029,-0.0443,0.0203,18879.97 +316,60,3.1,0.0,12.5,0.33,3.01,0.0,14.94,-0.0219,-0.0824,0.05,0.0,-0.0,-0.0,0.0004,-0.0843,0.04,18934.58 +317,60,3.08,0.0,11.76,0.34,3.02,0.0,13.97,-0.0217,-0.1302,0.051,0.0,0.0,0.0,0.0002,-0.067,0.0605,18993.7 +318,60,3.07,0.0,13.33,0.34,3.0,0.0,15.17,-0.0216,-0.1325,0.0335,0.0,0.0,0.0,0.0001,-0.0411,0.0425,19065.68 +319,60,3.23,0.0,11.76,0.34,3.13,0.0,13.62,-0.0197,-0.1345,0.0391,0.0,-0.0,-0.0,0.0019,-0.0227,0.0985,19112.3 +320,59,3.22,0.0,12.2,0.35,3.18,0.0,13.93,-0.0195,-0.1365,0.0595,0.0,0.0,0.0,0.0005,-0.0482,0.0627,19180.6 +321,60,3.14,0.0,11.54,0.22,3.06,0.0,14.07,-0.0197,-0.104,0.0721,0.0,0.0,0.0,-0.0006,-0.0568,0.0361,19232.2 +322,59,3.24,0.0,15.15,0.22,3.23,0.0,19.09,-0.0182,-0.0828,0.1019,0.0,-0.0,-0.0,0.0014,-0.0455,0.0299,19298.37 +323,60,3.4,0.0,15.15,0.2,3.49,0.0,19.59,-0.0161,-0.1007,0.089,0.0,0.0,0.0,0.0023,-0.0628,0.0367,19354.93 +324,60,3.6,0.0,13.89,0.21,3.78,0.0,17.51,-0.0144,-0.1025,0.0685,0.0,-0.0,-0.0,0.0017,-0.0475,0.0538,19416.91 +325,59,4.07,0.0,13.04,0.21,4.34,0.0,16.11,-0.0105,-0.1042,0.0956,0.0,0.0,0.0,0.0032,-0.0469,0.0556,19471.33 +326,59,4.0,0.0,13.51,0.11,4.24,0.0,16.25,-0.0133,-0.1058,0.0669,0.0,0.0,0.0,-0.0019,-0.0743,0.1009,19535.46 +327,59,3.93,0.0,15.38,0.1,4.13,0.0,19.29,-0.0149,-0.1072,0.1212,0.0,0.0,0.0,-0.0005,-0.071,0.0543,19588.78 +328,60,3.95,0.0,15.38,0.37,4.1,0.0,20.23,-0.0155,-0.1086,0.1089,0.0,-0.0,-0.0,-0.0019,-0.0564,0.0393,19659.88 +329,60,3.78,0.0,14.81,0.39,3.88,0.0,19.14,-0.018,-0.1098,0.0817,0.0,0.0,0.0,-0.0024,-0.0454,0.044,19719.44 +330,60,3.78,0.0,14.29,0.4,3.85,0.0,17.87,-0.0184,-0.1109,0.0574,0.0,0.0,0.0,-0.0005,-0.0535,0.062,19775.15 +331,60,3.78,0.0,12.82,0.41,3.86,0.0,15.35,-0.0185,-0.112,0.0616,0.0,-0.0,-0.0,-0.0001,-0.0367,0.0451,19843.46 +332,59,3.55,0.0,12.82,0.42,3.59,0.0,14.86,-0.0216,-0.1129,0.0591,0.0,-0.0,-0.0,-0.0023,-0.0454,0.034,19893.13 +333,60,3.59,0.0,13.51,0.16,3.61,0.0,15.67,-0.0212,-0.1138,0.0554,0.0,-0.0,-0.0,-0.0004,-0.0737,0.0383,19957.49 +334,59,3.46,0.0,13.51,0.17,3.44,0.0,15.71,-0.0222,-0.1147,0.0533,0.0,0.0,0.0,-0.0007,-0.0442,0.0738,20010.32 +335,60,3.42,0.0,14.71,0.47,3.38,0.0,17.3,-0.0229,-0.1146,0.0401,0.0,-0.0,-0.0,-0.0011,-0.0403,0.0364,20080.56 +336,60,3.1,0.0,10.0,0.48,2.99,0.0,11.42,-0.0261,-0.1159,0.0315,0.0,0.0,0.0,-0.0031,-0.1382,0.0364,20132.42 +337,60,3.17,0.0,10.0,0.49,3.03,0.0,11.5,-0.0248,-0.1171,0.0311,0.0,-0.0,-0.0,0.0013,-0.0473,0.0472,20198.32 +338,60,3.16,0.0,10.53,0.5,3.05,0.0,12.11,-0.0241,-0.1182,0.0339,0.0,0.0,0.0,0.0007,-0.0355,0.0267,20249.88 +339,60,3.04,0.0,11.11,0.5,2.96,0.0,12.86,-0.0248,-0.1192,0.0292,0.0,-0.0,-0.0,-0.0007,-0.0457,0.0374,20318.8 +340,60,2.99,0.0,9.09,0.51,2.89,0.0,10.31,-0.0253,-0.1101,0.0415,0.0,0.0,0.0,-0.0005,-0.0768,0.0523,20379.11 +341,60,2.74,0.0,10.0,0.51,2.68,0.0,10.88,-0.0275,-0.1112,0.0336,0.0,0.0,0.0,-0.0022,-0.0488,0.0365,20440.27 +342,60,2.66,0.0,8.82,0.52,2.56,0.0,9.54,-0.0285,-0.1122,0.0241,0.0,-0.0,-0.0,-0.001,-0.0556,0.0309,20498.06 +343,60,2.56,0.0,15.79,0.53,2.5,0.0,17.58,-0.0295,-0.1132,0.092,0.0,0.0,0.0,-0.001,-0.0448,0.1393,20545.97 +344,60,2.71,0.0,16.67,0.53,2.67,0.0,21.37,-0.0279,-0.1141,0.1083,0.0,-0.0,-0.0,0.0015,-0.065,0.0402,20620.21 +345,60,2.63,0.0,15.63,0.54,2.53,0.0,20.17,-0.0289,-0.1149,0.0802,0.0,-0.0,-0.0,-0.0009,-0.059,0.0562,20678.69 +346,60,2.81,0.0,16.67,0.55,2.73,0.0,21.13,-0.0265,-0.1156,0.0748,0.0,0.0,0.0,0.0023,-0.0589,0.0867,20740.63 +347,59,3.07,0.0,18.75,0.55,3.04,0.0,24.04,-0.0234,-0.1163,0.0867,0.0,-0.0,-0.0,0.0038,-0.0809,0.045,20792.92 +348,60,3.16,0.0,16.22,0.26,3.19,0.0,20.57,-0.0223,-0.1169,0.0459,0.0,0.0,0.0,0.0005,-0.0434,0.0313,20857.96 +349,59,3.32,0.0,20.69,0.26,3.41,0.0,26.21,-0.0201,-0.1175,0.083,0.0,0.0,0.0,0.0033,-0.0197,0.0475,20913.94 +350,60,3.54,0.0,23.08,0.6,3.66,0.0,30.87,-0.0188,-0.118,0.108,0.0,-0.0,-0.0,0.0002,-0.0543,0.0498,20973.06 +351,60,3.65,0.0,21.43,0.62,3.88,0.0,29.12,-0.0178,-0.1185,0.0755,0.0,-0.0,-0.0,0.001,-0.0326,0.0493,21034.66 +352,59,3.85,0.0,25.0,0.27,4.18,0.0,33.91,-0.0168,-0.119,0.1028,0.0,-0.0,-0.0,0.0016,-0.0281,0.0388,21097.73 +353,59,3.73,0.0,12.5,0.18,3.84,0.0,14.81,-0.0192,-0.1572,0.0719,0.0,0.0,0.0,-0.0047,-0.26,0.0518,21159.54 +354,60,3.74,0.0,14.29,0.04,3.76,0.0,16.87,-0.0207,-0.1431,0.0638,0.0,0.0,0.0,0.0001,-0.038,0.0418,21213.32 +355,57,4.0,0.0,14.29,0.21,4.07,0.0,17.53,-0.0163,-0.1061,0.075,0.0,0.0,0.0,0.0026,-0.0219,0.0647,21280.23 +356,50,3.83,0.0,14.29,0.36,3.7,0.0,17.41,-0.021,-0.1256,0.0478,0.0,0.0,0.0,-0.0008,-0.0639,0.0291,21338.31 +357,60,3.66,0.0,13.64,0.41,3.53,0.0,16.28,-0.0205,-0.1122,0.0598,0.0,0.0,0.0,-0.0016,-0.032,0.0352,21390.74 +358,59,3.63,0.0,12.0,0.05,3.58,0.0,14.67,-0.0198,-0.1321,0.062,0.0,0.0,0.0,0.0008,-0.0376,0.0385,21460.81 +359,60,3.54,0.0,13.04,0.22,3.53,0.0,15.06,-0.0199,-0.1352,0.0767,0.0,-0.0,-0.0,-0.0002,-0.0366,0.0664,21515.43 +360,59,3.6,0.0,14.29,0.22,3.58,0.0,17.86,-0.0195,-0.1381,0.1008,0.0,-0.0,-0.0,0.0001,-0.0734,0.0457,21574.66 +361,60,3.34,0.0,15.0,0.1,3.32,0.0,19.21,-0.0218,-0.1407,0.0952,0.0,0.0,0.0,-0.0019,-0.0676,0.046,21636.92 +362,60,3.34,0.0,13.64,0.09,3.35,0.0,17.12,-0.0218,-0.1432,0.0619,0.0,0.0,0.0,0.0,-0.0379,0.0583,21704.49 +363,56,3.82,0.0,13.95,0.09,3.78,0.0,16.98,-0.0182,-0.1454,0.0504,0.0,0.0,0.0,0.0032,-0.0334,0.0641,21759.07 +364,57,3.5,0.0,13.33,0.11,3.32,0.0,15.88,-0.0209,-0.1132,0.0448,0.0,0.0,0.0,-0.0014,-0.051,0.0356,21825.4 +365,58,3.51,0.0,13.51,0.27,3.41,0.0,15.83,-0.0188,-0.1054,0.0477,0.0,0.0,0.0,0.0014,-0.0369,0.0415,21868.37 +366,59,3.48,0.0,15.15,0.23,3.47,0.0,17.99,-0.0187,-0.1089,0.0418,0.0,0.0,0.0,0.0006,-0.0626,0.0237,21939.62 +367,60,3.33,0.0,14.71,0.39,3.28,0.0,17.58,-0.02,-0.1121,0.0555,0.0,-0.0,-0.0,-0.0018,-0.0637,0.0602,21987.99 +368,60,3.66,0.0,17.14,0.39,3.62,0.0,20.83,-0.0164,-0.115,0.0523,0.0,0.0,0.0,0.0036,-0.0573,0.0656,22061.03 +369,60,3.89,0.0,11.11,0.4,3.85,0.0,13.22,-0.0138,-0.1177,0.0501,0.0,-0.0,-0.0,0.0026,-0.0871,0.0457,22109.39 +370,60,3.87,0.0,15.0,0.41,3.86,0.0,18.55,-0.0137,-0.0955,0.0862,0.0,0.0,0.0,0.0001,-0.0493,0.036,22177.86 +371,60,3.74,0.0,11.76,0.42,3.74,0.0,14.23,-0.0148,-0.085,0.0685,0.0,0.0,0.0,-0.0011,-0.0554,0.0268,22231.13 +372,60,3.96,0.0,15.63,0.43,4.02,0.0,17.67,-0.0125,-0.0693,0.0971,0.0,-0.0,-0.0,0.0023,-0.0393,0.1217,22293.68 +373,60,3.85,0.0,13.16,0.44,3.92,0.0,16.37,-0.014,-0.072,0.0701,0.0,0.0,0.0,-0.0015,-0.0826,0.0546,22350.83 +374,60,4.02,0.0,13.79,0.44,4.12,0.0,15.81,-0.013,-0.0746,0.0674,0.0,-0.0,-0.0,0.0011,-0.0896,0.0715,22418.17 +375,60,4.1,0.0,16.0,0.44,4.19,0.0,19.74,-0.0128,-0.077,0.0817,0.0,-0.0,-0.0,0.0002,-0.0383,0.0759,22481.73 +376,60,4.33,0.0,16.13,0.44,4.49,0.0,20.45,-0.0106,-0.0792,0.1114,0.0,0.0,0.0,0.0021,-0.0279,0.0398,22536.79 +377,60,4.6,0.0,16.67,0.34,4.82,0.0,20.94,-0.0084,-0.0676,0.0896,0.0,0.0,0.0,0.0023,-0.0438,0.0565,22600.52 +378,60,4.64,0.0,20.0,0.44,4.8,0.0,25.98,-0.009,-0.0711,0.1168,0.0,0.0,0.0,-0.0006,-0.0734,0.0479,22647.68 +379,60,4.43,0.0,17.5,0.44,4.62,0.0,22.92,-0.0115,-0.0788,0.0738,0.0,-0.0,-0.0,-0.0026,-0.0474,0.0255,22726.06 +380,60,4.29,0.0,14.58,0.44,4.4,0.0,17.71,-0.014,-0.0845,0.06,0.0,-0.0,-0.0,-0.0025,-0.0554,0.0376,22768.82 +381,60,4.48,0.0,14.29,0.44,4.62,0.0,17.32,-0.0124,-0.0845,0.0654,0.0,0.0,0.0,0.0016,-0.0485,0.0482,22842.78 +382,60,4.28,0.0,16.67,0.44,4.35,0.0,20.72,-0.0153,-0.0829,0.0828,0.0,0.0,0.0,-0.0028,-0.0802,0.0342,22890.89 +383,60,4.12,0.0,12.0,0.37,4.11,0.0,13.52,-0.0172,-0.0853,0.0336,0.0,-0.0,-0.0,-0.002,-0.0874,0.0529,22954.1 +384,60,4.26,0.0,12.0,0.46,4.18,0.0,13.49,-0.0157,-0.0727,0.0471,0.0,0.0,0.0,0.0015,-0.0445,0.0409,23018.51 +385,60,4.31,0.0,15.56,0.39,4.29,0.0,17.93,-0.0145,-0.1259,0.0729,0.0,-0.0,-0.0,0.0013,-0.1384,0.0465,23079.54 +386,60,4.26,0.0,13.64,0.4,4.24,0.0,16.01,-0.0145,-0.1287,0.0701,0.0,-0.0,-0.0,-0.0001,-0.0507,0.037,23134.53 +387,60,4.09,0.0,13.64,0.4,4.07,0.0,15.53,-0.0161,-0.1314,0.0538,0.0,-0.0,-0.0,-0.0015,-0.0491,0.0555,23197.7 +388,60,3.96,0.0,14.29,0.49,3.82,0.0,16.23,-0.0176,-0.1018,0.0625,0.0,-0.0,-0.0,-0.0015,-0.0536,0.0476,23248.21 +389,60,4.03,0.0,15.79,0.5,3.9,0.0,19.53,-0.0157,-0.0885,0.1067,0.0,0.0,0.0,0.0019,-0.0274,0.0443,23321.68 +390,60,4.05,0.0,13.64,0.51,4.08,0.0,17.23,-0.0143,-0.0939,0.0698,0.0,0.0,0.0,0.0014,-0.0582,0.057,23376.91 +391,60,4.31,0.0,14.29,0.51,4.41,0.0,16.93,-0.0117,-0.0741,0.0789,0.0,0.0,0.0,0.0026,-0.0533,0.0566,23430.2 +392,60,4.62,0.0,16.22,0.43,4.79,0.0,20.65,-0.0088,-0.075,0.0967,0.0,-0.0,-0.0,0.0029,-0.0597,0.0537,23501.71 +393,60,4.72,0.0,16.67,0.51,4.93,0.0,20.6,-0.0083,-0.0759,0.0684,0.0,-0.0,-0.0,0.0005,-0.0546,0.076,23562.35 +394,60,4.48,0.0,13.16,0.12,4.6,0.0,15.74,-0.0119,-0.0766,0.0576,0.0,0.0,0.0,-0.0037,-0.083,0.0433,23617.44 +395,60,4.83,0.0,13.51,0.39,4.93,0.0,16.12,-0.0091,-0.0774,0.0651,0.0,-0.0,-0.0,0.0029,-0.037,0.0448,23667.17 +396,60,4.76,0.0,12.9,0.39,4.84,0.0,15.52,-0.0103,-0.0789,0.0637,0.0,-0.0,-0.0,-0.0013,-0.0757,0.0597,23739.42 +397,60,4.68,0.0,13.79,0.1,4.74,0.0,16.97,-0.0116,-0.0787,0.0592,0.0,0.0,0.0,-0.0012,-0.0382,0.0515,23799.29 +398,60,4.39,0.0,12.12,0.09,4.41,0.0,14.63,-0.0149,-0.0795,0.0512,0.0,0.0,0.0,-0.0034,-0.0536,0.0286,23857.8 +399,60,4.39,0.0,10.71,0.08,4.44,0.0,12.08,-0.015,-0.0818,0.0557,0.0,0.0,0.0,-0.0001,-0.0333,0.0376,23920.98 +400,60,4.03,0.0,10.64,0.08,3.98,0.0,11.94,-0.0192,-0.0839,0.0463,0.0,0.0,0.0,-0.0042,-0.0766,0.0193,23975.4 +401,60,3.84,0.0,12.5,0.07,3.78,0.0,14.39,-0.0211,-0.0922,0.0612,0.0,0.0,0.0,-0.0019,-0.0466,0.0851,24044.8 +402,60,3.75,0.0,11.36,0.08,3.75,0.0,12.89,-0.0217,-0.0948,0.0519,0.0,0.0,0.0,-0.0007,-0.0536,0.0555,24093.85 +403,60,3.96,0.0,10.53,0.08,3.91,0.0,11.91,-0.0202,-0.0892,0.0357,0.0,-0.0,-0.0,0.0015,-0.0759,0.0451,24151.7 +404,60,4.12,0.0,13.16,0.09,4.09,0.0,15.33,-0.0186,-0.0907,0.0648,0.0,-0.0,-0.0,0.0016,-0.0637,0.0919,24219.55 +405,60,4.1,0.0,12.12,0.09,3.99,0.0,14.28,-0.0189,-0.0921,0.0591,0.0,-0.0,-0.0,-0.0004,-0.0463,0.0829,24269.88 +406,60,4.22,0.0,13.04,0.09,4.15,0.0,15.72,-0.0171,-0.0934,0.071,0.0,0.0,0.0,0.0018,-0.0445,0.0432,24333.7 +407,60,4.23,0.0,12.5,0.1,4.2,0.0,14.48,-0.0166,-0.0946,0.05,0.0,-0.0,-0.0,0.0005,-0.0573,0.0374,24394.17 +408,60,4.55,0.0,12.5,0.1,4.55,0.0,14.8,-0.0132,-0.0957,0.0554,0.0,0.0,0.0,0.0034,-0.0388,0.0538,24459.16 +409,60,4.54,0.0,13.16,0.11,4.57,0.0,15.8,-0.0133,-0.0967,0.0708,0.0,0.0,0.0,-0.0001,-0.0443,0.0299,24517.87 +410,60,4.72,0.0,13.16,0.12,4.75,0.0,15.97,-0.0118,-0.0976,0.0604,0.0,-0.0,-0.0,0.0015,-0.0318,0.0394,24571.81 +411,60,4.37,0.0,14.29,0.11,4.25,0.0,17.32,-0.0157,-0.0992,0.0616,0.0,-0.0,-0.0,-0.004,-0.0839,0.0369,24645.13 +412,60,4.17,0.0,12.5,0.1,4.05,0.0,14.79,-0.017,-0.1027,0.0616,0.0,0.0,0.0,-0.0013,-0.0438,0.0699,24696.42 +413,60,4.03,0.0,12.12,0.38,3.91,0.0,14.19,-0.018,-0.106,0.0501,0.0,0.0,0.0,-0.0009,-0.0471,0.0492,24756.17 +414,60,3.75,0.0,12.12,0.39,3.62,0.0,14.44,-0.0204,-0.109,0.0534,0.0,0.0,0.0,-0.0024,-0.0545,0.0312,24813.58 +415,60,3.83,0.0,12.5,0.08,3.7,0.0,14.21,-0.0192,-0.1013,0.0521,0.0,0.0,0.0,0.0012,-0.0603,0.0389,24878.55 +416,60,4.06,0.0,14.29,0.65,3.98,0.0,17.16,-0.0164,-0.1018,0.0745,0.0,-0.0,-0.0,0.0028,-0.0335,0.0517,24934.19 +417,60,3.93,0.0,14.29,0.65,3.9,0.0,17.38,-0.0173,-0.1024,0.0585,0.0,0.0,0.0,-0.001,-0.0502,0.0348,24998.78 +418,60,3.94,0.0,14.29,0.08,3.83,0.0,17.18,-0.0177,-0.1028,0.0555,0.0,0.0,0.0,-0.0003,-0.0661,0.0581,25054.5 +419,60,3.91,0.0,14.71,0.07,3.81,0.0,18.05,-0.0177,-0.1033,0.057,0.0,0.0,0.0,0.0,-0.0359,0.0693,25121.25 +420,60,3.84,0.0,13.79,0.24,3.76,0.0,16.76,-0.0182,-0.1037,0.0574,0.0,0.0,0.0,-0.0005,-0.0518,0.0816,25166.05 +421,60,4.0,0.0,12.5,0.24,3.95,0.0,14.93,-0.0166,-0.1041,0.0744,0.0,-0.0,-0.0,0.0016,-0.0328,0.039,25236.3 +422,60,3.98,0.0,13.79,0.25,3.97,0.0,16.88,-0.017,-0.1044,0.0783,0.0,0.0,0.0,-0.0004,-0.051,0.0501,25302.02 +423,60,3.85,0.0,17.86,0.61,3.82,0.0,22.57,-0.0188,-0.1047,0.1127,0.0,-0.0,-0.0,-0.0019,-0.0632,0.0649,25351.55 +424,60,3.89,0.0,15.63,0.05,3.82,0.0,20.03,-0.0187,-0.105,0.0727,0.0,0.0,0.0,0.0001,-0.04,0.0563,25412.89 +425,60,3.78,0.0,12.2,0.52,3.79,0.0,14.34,-0.0199,-0.1053,0.0604,0.0,0.0,0.0,-0.0012,-0.0596,0.0369,25479.51 +426,60,3.7,0.0,12.5,0.14,3.68,0.0,15.28,-0.0216,-0.1056,0.0793,0.0,-0.0,-0.0,-0.0017,-0.0603,0.049,25529.95 +427,60,4.31,0.0,13.79,0.15,4.31,0.0,17.27,-0.0159,-0.1058,0.0826,0.0,-0.0,-0.0,0.0057,-0.0463,0.1041,25605.26 +428,60,4.12,0.0,18.18,0.16,4.11,0.0,23.43,-0.018,-0.106,0.1202,0.0,0.0,0.0,-0.0022,-0.0596,0.0531,25651.51 +429,60,4.01,0.0,15.0,0.43,4.04,0.0,19.57,-0.0194,-0.1062,0.068,0.0,-0.0,-0.0,-0.0013,-0.0523,0.0583,25718.33 +430,60,4.33,0.0,15.79,0.43,4.42,0.0,19.74,-0.0166,-0.1064,0.0581,0.0,-0.0,-0.0,0.0028,-0.04,0.0576,25779.03 +431,60,4.53,0.0,13.51,0.43,4.66,0.0,16.27,-0.0153,-0.1066,0.0564,0.0,0.0,0.0,0.0013,-0.046,0.0651,25838.08 +432,60,4.42,0.0,12.9,0.44,4.5,0.0,15.49,-0.0173,-0.1011,0.0602,0.0,0.0,0.0,-0.002,-0.0526,0.0304,25898.02 +433,60,4.51,0.0,14.29,0.22,4.49,0.0,17.41,-0.0172,-0.1009,0.0661,0.0,-0.0,-0.0,0.0001,-0.0562,0.0644,25960.19 +434,60,4.35,0.0,12.9,0.31,4.24,0.0,15.51,-0.0189,-0.1013,0.0393,0.0,-0.0,-0.0,-0.0017,-0.0499,0.0437,26021.4 +435,60,3.98,0.0,12.12,0.24,3.82,0.0,14.39,-0.0222,-0.1016,0.0741,0.0,-0.0,-0.0,-0.0033,-0.0547,0.0539,26079.57 +436,60,4.02,0.0,12.12,0.46,3.8,0.0,13.7,-0.0211,-0.0933,0.056,0.0,0.0,0.0,0.0012,-0.0301,0.0313,26141.44 +437,60,3.53,0.0,11.54,0.26,3.15,0.0,13.97,-0.025,-0.0954,0.0489,0.0,0.0,0.0,-0.0039,-0.0722,0.0266,26200.95 +438,60,3.44,0.0,10.71,0.24,3.12,0.0,12.68,-0.0237,-0.0973,0.0372,0.0,-0.0,-0.0,0.0013,-0.0622,0.0317,26251.9 +439,60,3.39,0.0,14.71,0.11,3.15,0.0,17.8,-0.0226,-0.0991,0.0676,0.0,0.0,0.0,0.0012,-0.0384,0.0408,26316.32 +440,60,3.75,0.0,14.71,0.11,3.56,0.0,18.42,-0.0179,-0.0811,0.0616,0.0,-0.0,-0.0,0.0046,-0.0291,0.1346,26380.09 +441,60,3.57,0.0,10.81,0.11,3.4,0.0,12.75,-0.0191,-0.0839,0.0321,0.0,-0.0,-0.0,-0.0012,-0.0924,0.0335,26428.4 +442,60,4.02,0.0,14.29,0.13,3.95,0.0,15.87,-0.0141,-0.0866,0.0791,0.0,0.0,0.0,0.005,-0.0307,0.1127,26494.46 +443,60,3.99,0.0,14.71,0.15,3.91,0.0,18.27,-0.0143,-0.089,0.086,0.0,0.0,0.0,-0.0003,-0.0537,0.0355,26551.66 +444,60,4.31,0.0,16.67,0.16,4.31,0.0,21.13,-0.0108,-0.0912,0.0954,0.0,0.0,0.0,0.0036,-0.0458,0.0374,26615.72 +445,60,4.23,0.0,15.63,0.17,4.19,0.0,19.79,-0.012,-0.0933,0.0683,0.0,-0.0,-0.0,-0.0012,-0.0351,0.0382,26675.75 +446,60,4.24,0.0,17.95,0.19,4.21,0.0,22.61,-0.012,-0.0952,0.0805,0.0,0.0,0.0,-0.0001,-0.0618,0.07,26739.55 +447,60,4.6,0.0,15.22,0.2,4.64,0.0,18.86,-0.0085,-0.0941,0.0548,0.0,-0.0,-0.0,0.0035,-0.0446,0.0569,26795.9 +448,60,4.8,0.0,17.02,0.31,4.96,0.0,20.63,-0.0069,-0.0968,0.0948,0.0,0.0,0.0,0.0016,-0.0347,0.0796,26859.69 +449,60,4.96,0.0,17.02,0.32,5.18,0.0,20.8,-0.0064,-0.0992,0.0949,0.0,-0.0,-0.0,0.0005,-0.0678,0.0671,26915.14 +450,60,4.67,0.0,19.15,0.32,4.84,0.0,23.76,-0.0108,-0.1014,0.1011,0.0,-0.0,-0.0,-0.0044,-0.0786,0.0575,26981.63 +451,60,5.17,0.0,17.02,0.33,5.33,0.0,21.04,-0.0069,-0.1035,0.0899,0.0,0.0,0.0,0.0039,-0.0533,0.0532,27038.21 +452,60,4.86,0.0,16.67,0.33,4.99,0.0,21.41,-0.0111,-0.1054,0.0839,0.0,0.0,0.0,-0.0042,-0.1056,0.0608,27094.85 +453,60,4.63,0.0,17.86,0.68,4.67,0.0,22.93,-0.0144,-0.1071,0.079,0.0,0.0,0.0,-0.0033,-0.0575,0.0559,27150.13 +454,60,4.59,0.0,17.24,0.69,4.6,0.0,22.03,-0.0151,-0.1087,0.0583,0.0,0.0,0.0,-0.0007,-0.0493,0.0323,27216.5 +455,60,4.91,0.0,14.29,0.28,4.98,0.0,15.85,-0.0118,-0.1102,0.0567,0.0,0.0,0.0,0.0033,-0.0928,0.0485,27269.32 +456,60,4.7,0.0,12.9,0.26,4.68,0.0,14.93,-0.0146,-0.0795,0.0784,0.0,0.0,0.0,-0.0028,-0.0903,0.0738,27334.62 +457,60,4.44,0.0,17.14,0.24,4.38,0.0,19.46,-0.0172,-0.0748,0.0693,0.0,0.0,0.0,-0.0026,-0.0667,0.0627,27388.66 +458,60,4.07,0.0,14.29,0.25,3.93,0.0,16.63,-0.0209,-0.11,0.0376,0.0,0.0,0.0,-0.0037,-0.0832,0.0418,27459.61 +459,60,4.07,0.0,14.29,0.25,3.95,0.0,15.91,-0.0205,-0.0934,0.0874,0.0,-0.0,-0.0,0.0004,-0.0745,0.1416,27513.47 +460,60,3.97,0.0,14.29,0.26,3.91,0.0,18.26,-0.021,-0.1025,0.0924,0.0,0.0,0.0,-0.0005,-0.0407,0.0246,27568.48 +461,60,3.65,0.0,13.64,0.26,3.56,0.0,17.37,-0.0246,-0.105,0.0696,0.0,-0.0,-0.0,-0.0035,-0.058,0.0332,27639.3 +462,60,3.66,0.0,13.79,0.27,3.54,0.0,17.17,-0.0247,-0.1074,0.0563,0.0,0.0,0.0,-0.0001,-0.0598,0.0393,27695.45 +463,60,4.0,0.0,13.79,0.28,3.9,0.0,16.91,-0.021,-0.1013,0.0653,0.0,-0.0,-0.0,0.0037,-0.0444,0.0599,27761.33 +464,60,4.16,0.0,13.79,0.29,4.15,0.0,16.69,-0.0189,-0.1041,0.0687,0.0,0.0,0.0,0.0021,-0.0416,0.0495,27814.49 +465,60,4.16,0.0,13.79,0.29,4.14,0.0,16.51,-0.0194,-0.1066,0.0764,0.0,-0.0,-0.0,-0.0005,-0.0885,0.0769,27879.45 +466,60,4.38,0.0,14.29,0.3,4.41,0.0,17.06,-0.0172,-0.1089,0.0664,0.0,0.0,0.0,0.0021,-0.0211,0.0576,27932.67 +467,60,4.4,0.0,14.81,0.3,4.4,0.0,17.78,-0.0174,-0.1111,0.0645,0.0,0.0,0.0,-0.0002,-0.0593,0.0386,28004.86 +468,60,4.5,0.0,14.29,0.28,4.51,0.0,17.05,-0.0165,-0.1131,0.0588,0.0,-0.0,-0.0,0.0009,-0.0461,0.0519,28058.13 +469,60,4.67,0.0,14.29,0.26,4.61,0.0,17.32,-0.0151,-0.1149,0.0836,0.0,0.0,0.0,0.0014,-0.133,0.0566,28118.61 +470,60,4.59,0.0,15.38,0.24,4.58,0.0,18.98,-0.0154,-0.1166,0.0934,0.0,0.0,0.0,-0.0003,-0.0409,0.0429,28173.09 +471,60,4.7,0.0,15.38,0.22,4.7,0.0,19.73,-0.0142,-0.1182,0.0841,0.0,0.0,0.0,0.0012,-0.0472,0.0538,28239.03 +472,60,4.52,0.0,20.0,0.2,4.56,0.0,25.47,-0.0159,-0.1196,0.114,0.0,0.0,0.0,-0.0017,-0.0342,0.0452,28295.58 +473,60,4.36,0.0,16.13,0.19,4.36,0.0,20.78,-0.018,-0.1209,0.0559,0.0,0.0,0.0,-0.0021,-0.0646,0.048,28359.33 +474,60,4.32,0.0,17.24,0.17,4.32,0.0,21.29,-0.0186,-0.1222,0.065,0.0,0.0,0.0,-0.0006,-0.0373,0.0577,28411.73 +475,60,4.06,0.0,16.67,0.16,3.99,0.0,20.35,-0.0217,-0.1233,0.0504,0.0,0.0,0.0,-0.0031,-0.0632,0.0522,28475.26 +476,60,3.89,0.0,14.29,0.15,3.81,0.0,16.59,-0.0235,-0.1243,0.0413,0.0,0.0,0.0,-0.0017,-0.0371,0.0394,28537.12 +477,60,3.64,0.0,12.0,0.14,3.48,0.0,12.78,-0.0264,-0.1253,0.0371,0.0,0.0,0.0,-0.0029,-0.0536,0.029,28596.75 +478,60,3.76,0.0,13.64,0.12,3.62,0.0,14.6,-0.025,-0.1262,0.0427,0.0,0.0,0.0,0.0014,-0.0418,0.0341,28655.03 +479,60,3.49,0.0,11.11,0.13,3.26,0.0,12.93,-0.0278,-0.127,0.0461,0.0,0.0,0.0,-0.0028,-0.0798,0.0441,28715.86 +480,60,3.41,0.0,11.11,0.14,3.21,0.0,12.82,-0.028,-0.1277,0.0533,0.0,-0.0,-0.0,-0.0002,-0.0488,0.0674,28776.67 +481,60,3.43,0.0,15.38,0.15,3.33,0.0,18.46,-0.0272,-0.1284,0.0752,0.0,-0.0,-0.0,0.0008,-0.0402,0.0534,28837.78 +482,60,3.77,0.0,15.15,0.16,3.7,0.0,19.06,-0.0237,-0.1291,0.1064,0.0,0.0,0.0,0.0034,-0.0497,0.059,28897.47 +483,60,3.92,0.0,14.81,0.16,3.86,0.0,19.09,-0.0224,-0.1297,0.089,0.0,-0.0,-0.0,0.0013,-0.0968,0.0591,28961.92 +484,60,4.06,0.0,14.29,0.16,4.07,0.0,17.98,-0.021,-0.1302,0.0649,0.0,0.0,0.0,0.0015,-0.0433,0.0547,29004.93 +485,60,4.12,0.0,14.81,0.17,4.07,0.0,18.53,-0.0209,-0.1307,0.0857,0.0,0.0,0.0,0.0001,-0.06,0.045,29078.1 +486,60,4.46,0.0,15.38,0.17,4.51,0.0,19.69,-0.0172,-0.1312,0.0811,0.0,0.0,0.0,0.0037,-0.0247,0.0603,29132.52 +487,60,4.59,0.0,14.29,0.18,4.73,0.0,17.23,-0.0163,-0.1318,0.0517,0.0,0.0,0.0,0.0009,-0.0368,0.0384,29198.93 +488,60,4.58,0.0,11.9,0.18,4.62,0.0,14.0,-0.0178,-0.132,0.0699,0.0,0.0,0.0,-0.0015,-0.0543,0.0805,29253.17 +489,60,4.6,0.0,11.32,0.19,4.67,0.0,12.67,-0.018,-0.1323,0.04,0.0,-0.0,-0.0,-0.0002,-0.0427,0.048,29319.32 +490,60,4.83,0.0,12.77,0.21,4.86,0.0,14.68,-0.0165,-0.1327,0.0453,0.0,0.0,0.0,0.0015,-0.0421,0.0747,29372.05 +491,60,4.63,0.0,12.5,0.22,4.65,0.0,14.55,-0.0189,-0.133,0.0508,0.0,-0.0,-0.0,-0.0024,-0.0676,0.034,29433.57 +492,60,4.85,0.0,13.64,0.23,4.89,0.0,16.26,-0.017,-0.1333,0.0647,0.0,0.0,0.0,0.002,-0.0569,0.0553,29496.99 +493,60,4.71,0.0,11.11,0.25,4.65,0.0,12.91,-0.0191,-0.1335,0.0588,0.0,0.0,0.0,-0.0021,-0.0961,0.0654,29559.68 +494,60,4.77,0.0,14.81,0.25,4.71,0.0,17.23,-0.0181,-0.1338,0.0662,0.0,0.0,0.0,0.0009,-0.0428,0.0579,29609.74 +495,60,5.0,0.0,15.0,0.25,4.99,0.0,18.46,-0.0152,-0.134,0.0655,0.0,-0.0,-0.0,0.0029,-0.0341,0.0682,29674.12 +496,60,4.94,0.0,12.5,0.25,4.97,0.0,14.64,-0.0156,-0.1036,0.0664,0.0,0.0,0.0,-0.0004,-0.0707,0.0766,29732.18 +497,60,4.97,0.0,13.51,0.26,5.0,0.0,15.83,-0.0154,-0.1093,0.0713,0.0,-0.0,-0.0,0.0002,-0.0459,0.0735,29803.23 +498,60,5.47,0.0,15.15,0.27,5.51,0.0,18.87,-0.0103,-0.0891,0.1018,0.0,-0.0,-0.0,0.0051,-0.0744,0.0628,29860.33 +499,60,5.56,0.0,16.0,0.27,5.69,0.0,19.11,-0.0089,-0.09,0.0763,0.0,0.0,0.0,0.0014,-0.0559,0.0416,29907.8 +500,60,5.52,0.0,16.67,0.28,5.62,0.0,20.6,-0.0096,-0.0908,0.1058,0.0,-0.0,-0.0,-0.0007,-0.0593,0.0558,29981.79 +501,60,5.78,0.0,15.79,0.28,5.93,0.0,19.5,-0.0068,-0.0916,0.0712,0.0,0.0,0.0,0.0027,-0.0756,0.0442,30035.98 +502,60,5.77,0.0,18.18,0.29,6.07,0.0,21.68,-0.007,-0.0923,0.0689,0.0,-0.0,-0.0,-0.0002,-0.0573,0.0578,30088.61 +503,60,5.79,0.0,16.13,0.29,5.95,0.0,20.08,-0.0083,-0.0929,0.0524,0.0,-0.0,-0.0,-0.0013,-0.0993,0.0413,30156.98 +504,60,5.79,0.0,19.35,0.3,5.96,0.0,24.69,-0.0088,-0.0935,0.0744,0.0,-0.0,-0.0,-0.0004,-0.0609,0.0438,30212.53 +505,60,5.73,0.0,18.18,0.3,5.86,0.0,21.43,-0.01,-0.094,0.0914,0.0,-0.0,-0.0,-0.0012,-0.0723,0.1137,30273.51 +506,60,5.72,0.0,17.39,0.3,5.83,0.0,22.41,-0.0105,-0.0955,0.0872,0.0,-0.0,-0.0,-0.0004,-0.0581,0.0683,30332.14 +507,60,5.33,0.0,11.76,0.31,5.36,0.0,13.16,-0.015,-0.1059,0.0392,0.0,-0.0,-0.0,-0.0045,-0.1117,0.0465,30401.71 +508,60,5.1,0.0,16.67,0.31,5.02,0.0,19.74,-0.0177,-0.1136,0.0862,0.0,0.0,0.0,-0.0027,-0.0746,0.0626,30451.6 +509,60,5.14,0.0,20.0,0.29,5.12,0.0,25.26,-0.0163,-0.0949,0.1426,0.0,-0.0,-0.0,0.0014,-0.0784,0.0806,30515.79 +510,60,5.29,0.0,17.24,0.27,5.35,0.0,23.11,-0.014,-0.0971,0.1009,0.0,0.0,0.0,0.0023,-0.0417,0.0654,30577.09 +511,60,5.16,0.0,18.18,0.24,5.17,0.0,22.88,-0.0153,-0.0803,0.0817,0.0,0.0,0.0,-0.0014,-0.0681,0.076,30639.81 +512,60,5.09,0.0,16.67,0.23,5.08,0.0,20.66,-0.0158,-0.0843,0.0643,0.0,0.0,0.0,-0.0005,-0.0786,0.0595,30694.79 +513,60,5.21,0.0,16.67,0.21,5.22,0.0,20.07,-0.0143,-0.0897,0.0897,0.0,0.0,0.0,0.0015,-0.0492,0.0591,30758.93 +514,60,4.82,0.0,13.79,0.19,4.69,0.0,15.74,-0.0186,-0.0947,0.0712,0.0,0.0,0.0,-0.0042,-0.0535,0.0683,30815.06 +515,60,4.31,0.0,10.53,0.18,4.13,0.0,11.72,-0.0234,-0.0993,0.0494,0.0,0.0,0.0,-0.0048,-0.077,0.0407,30880.31 +516,60,4.59,0.0,11.11,0.16,4.41,0.0,12.29,-0.0199,-0.0913,0.0613,0.0,0.0,0.0,0.0035,-0.0384,0.045,30933.3 +517,60,4.9,0.0,13.04,0.15,4.82,0.0,14.64,-0.0158,-0.097,0.0559,0.0,0.0,0.0,0.0041,-0.036,0.0575,30998.7 +518,60,4.92,0.0,12.5,0.14,4.84,0.0,14.19,-0.0156,-0.1022,0.0613,0.0,0.0,0.0,0.0003,-0.0967,0.0894,31055.19 +519,60,4.94,0.0,13.33,0.13,4.84,0.0,16.05,-0.0153,-0.107,0.0665,0.0,0.0,0.0,0.0003,-0.064,0.0684,31122.8 +520,60,4.73,0.0,12.5,0.12,4.5,0.0,14.79,-0.0173,-0.0881,0.0547,0.0,0.0,0.0,-0.002,-0.0549,0.0308,31179.25 +521,60,4.81,0.0,12.5,0.12,4.57,0.0,14.72,-0.0152,-0.0887,0.042,0.0,0.0,0.0,0.002,-0.0681,0.0462,31234.63 +522,60,5.13,0.0,16.67,0.13,5.0,0.0,19.96,-0.0105,-0.0892,0.0789,0.0,-0.0,-0.0,0.0047,-0.0726,0.0727,31300.79 +523,60,4.9,0.0,19.44,0.13,4.88,0.0,24.93,-0.012,-0.0912,0.1073,0.0,-0.0,-0.0,-0.0015,-0.0927,0.0528,31352.61 +524,60,5.03,0.0,21.88,0.14,5.1,0.0,29.28,-0.0107,-0.094,0.1256,0.0,0.0,0.0,0.0013,-0.0458,0.0301,31417.79 +525,60,5.03,0.0,20.0,0.14,5.07,0.0,26.99,-0.0114,-0.0906,0.0856,0.0,0.0,0.0,-0.0008,-0.0564,0.0445,31478.85 +526,60,4.98,0.0,20.69,0.15,5.06,0.0,27.16,-0.0122,-0.0839,0.1065,0.0,0.0,0.0,-0.0008,-0.0282,0.0998,31537.31 +527,60,4.66,0.0,20.69,0.16,4.76,0.0,26.91,-0.016,-0.0848,0.089,0.0,-0.0,-0.0,-0.0038,-0.0522,0.0509,31598.93 +528,60,4.75,0.0,18.92,0.17,4.82,0.0,24.34,-0.0162,-0.0877,0.093,0.0,0.0,0.0,-0.0003,-0.0868,0.0606,31656.45 +529,60,4.69,0.0,19.35,0.18,4.73,0.0,25.37,-0.0177,-0.0909,0.086,0.0,-0.0,-0.0,-0.0014,-0.0358,0.0413,31713.19 +530,60,5.02,0.0,19.44,0.19,5.07,0.0,25.4,-0.0148,-0.0938,0.0719,0.0,0.0,0.0,0.0029,-0.0259,0.0481,31770.75 +531,60,4.99,0.0,20.59,0.19,4.99,0.0,26.84,-0.0154,-0.0965,0.0719,0.0,-0.0,-0.0,-0.0007,-0.0455,0.0344,31839.61 +532,60,4.67,0.0,24.24,0.19,4.64,0.0,32.46,-0.0186,-0.099,0.1068,0.0,0.0,0.0,-0.0032,-0.0585,0.0349,31889.42 +533,60,4.66,0.0,19.35,0.2,4.6,0.0,25.88,-0.0187,-0.108,0.0591,0.0,0.0,0.0,-0.0001,-0.0727,0.0289,31950.07 +534,60,4.56,0.0,19.35,0.2,4.49,0.0,24.24,-0.0195,-0.1035,0.064,0.0,0.0,0.0,-0.0008,-0.05,0.037,32013.06 +535,60,4.38,0.0,17.24,0.21,4.36,0.0,20.66,-0.0211,-0.1054,0.0779,0.0,-0.0,-0.0,-0.0016,-0.0483,0.0326,32079.73 +536,60,3.99,0.0,12.5,0.19,3.88,0.0,14.06,-0.0259,-0.1448,0.0587,0.0,-0.0,-0.0,-0.0048,-0.1554,0.0476,32130.84 +537,60,4.3,0.0,13.79,0.17,4.22,0.0,15.6,-0.0229,-0.1479,0.0498,0.0,0.0,0.0,0.0031,-0.0272,0.0408,32198.25 +538,60,3.96,0.0,12.5,0.16,3.79,0.0,14.42,-0.0267,-0.1507,0.0436,0.0,0.0,0.0,-0.0039,-0.0769,0.0313,32253.92 +539,60,3.79,0.0,11.36,0.15,3.64,0.0,13.36,-0.0284,-0.1533,0.069,0.0,0.0,0.0,-0.0017,-0.0703,0.0562,32316.21 +540,60,3.69,0.0,10.71,0.14,3.56,0.0,12.15,-0.0296,-0.1557,0.0702,0.0,0.0,0.0,-0.0012,-0.0425,0.0552,32375.29 +541,60,3.29,0.0,10.71,0.13,3.11,0.0,12.97,-0.0341,-0.1579,0.0653,0.0,0.0,0.0,-0.0045,-0.0357,0.0491,32434.3 +542,60,2.89,0.0,9.09,0.12,2.6,0.0,8.97,-0.0385,-0.16,0.0211,0.0,0.0,0.0,-0.0044,-0.0579,0.0291,32503.83 +543,60,2.6,0.0,8.7,0.11,2.26,0.0,8.8,-0.0412,-0.1619,0.01,0.0,0.0,0.0,-0.0027,-0.0984,0.0494,32550.83 +544,60,2.49,0.0,11.11,0.1,2.15,0.0,12.08,-0.0417,-0.1636,0.0613,0.0,0.0,0.0,-0.0005,-0.0421,0.0669,32617.37 +545,60,2.32,0.0,8.62,0.09,2.04,0.0,9.06,-0.0426,-0.1652,0.0284,0.0,0.0,0.0,-0.001,-0.0501,0.0249,32679.77 +546,60,2.43,0.0,9.68,0.08,2.15,0.0,10.58,-0.0413,-0.1667,0.028,0.0,0.0,0.0,0.0013,-0.0316,0.0391,32735.77 +547,60,2.02,0.0,9.09,0.08,1.69,0.0,9.99,-0.0454,-0.168,0.0229,0.0,0.0,0.0,-0.0041,-0.0562,0.0432,32787.92 +548,60,1.8,0.0,7.5,0.07,1.5,0.0,7.73,-0.047,-0.1693,0.0082,0.0,0.0,0.0,-0.0016,-0.0389,0.0343,32855.29 +549,60,1.44,0.0,7.14,0.07,1.15,0.0,6.77,-0.0504,-0.1705,0.0102,0.0,0.0,0.0,-0.0035,-0.0618,0.0255,32912.4 +550,60,0.98,0.0,6.25,0.06,0.76,0.0,5.81,-0.0551,-0.1715,0.0059,0.0,0.0,0.0,-0.0047,-0.0488,0.0253,32977.61 +551,60,1.03,0.0,6.45,0.06,0.81,0.0,5.87,-0.0553,-0.1725,0.0048,0.0,0.0,0.0,-0.0002,-0.0238,0.0222,33034.72 +552,60,1.14,0.0,8.33,0.05,0.93,0.0,9.1,-0.0547,-0.1734,0.0214,0.0,0.0,0.0,0.0006,-0.0628,0.0427,33095.13 +553,60,1.32,0.0,8.7,0.05,1.12,0.0,9.78,-0.0532,-0.1743,0.0235,0.0,0.0,0.0,0.0015,-0.0257,0.0348,33156.12 +554,60,1.27,0.0,8.33,0.04,1.08,0.0,8.58,-0.0541,-0.175,0.0251,0.0,0.0,0.0,-0.0008,-0.036,0.0201,33213.68 +555,59,1.36,0.0,7.14,0.04,1.2,0.0,7.53,-0.0538,-0.1757,0.0221,0.0,0.0,0.0,0.0005,-0.024,0.021,33274.11 +556,60,1.18,0.0,6.98,0.06,1.0,0.0,7.19,-0.0559,-0.1764,0.0235,0.0,0.0,0.0,-0.0022,-0.0619,0.0333,33340.65 +557,60,1.11,0.0,6.9,0.06,0.97,0.0,6.87,-0.0569,-0.177,0.0243,0.0,0.0,0.0,-0.001,-0.0283,0.0395,33398.7 +558,60,1.04,0.0,8.0,0.05,0.93,0.0,8.5,-0.0582,-0.1776,0.0339,0.0,0.0,0.0,-0.0013,-0.0246,0.0227,33460.65 +559,60,1.06,0.0,7.69,0.05,0.97,0.0,7.73,-0.0588,-0.1781,0.0189,0.0,0.0,0.0,-0.0006,-0.0213,0.0223,33509.39 +560,60,1.08,0.0,6.9,0.05,0.99,0.0,6.71,-0.0596,-0.1785,0.0215,0.0,0.0,0.0,-0.0008,-0.0413,0.0289,33573.38 +561,60,1.1,0.0,6.67,0.04,0.96,0.0,6.48,-0.0602,-0.179,0.0104,0.0,0.0,0.0,-0.0007,-0.0342,0.0331,33639.75 +562,60,0.88,0.0,6.9,0.04,0.75,0.0,6.74,-0.0628,-0.1794,0.0087,0.0,0.0,0.0,-0.0025,-0.0325,0.0327,33693.04 +563,60,0.7,0.0,6.9,0.04,0.57,0.0,6.72,-0.065,-0.1798,0.0068,0.0,0.0,0.0,-0.0022,-0.0307,0.0216,33758.44 +564,60,0.73,0.0,4.17,0.03,0.55,0.0,4.3,-0.0651,-0.1801,0.0076,0.0,0.0,0.0,-0.0001,-0.0323,0.0414,33814.22 +565,57,0.85,0.0,5.0,0.03,0.66,0.0,4.12,-0.0634,-0.1804,0.0043,0.0,0.0,0.0,0.0011,-0.0049,0.04,33878.78 +566,59,0.74,0.0,5.56,0.02,0.61,0.0,4.65,-0.0652,-0.1807,-0.001,0.0,0.0,0.0,-0.0006,-0.0311,0.019,33931.76 +567,59,0.83,0.0,6.06,0.1,0.71,0.0,5.5,-0.0635,-0.181,0.0074,0.0,0.0,0.0,0.0007,-0.0439,0.0294,33995.69 +568,59,0.92,0.0,5.26,0.01,0.74,0.0,5.5,-0.0636,-0.1812,0.0099,0.0,0.0,0.0,0.0007,-0.0191,0.0289,34062.83 +569,60,0.87,0.0,5.56,0.03,0.71,0.0,5.95,-0.0632,-0.1815,0.0111,0.0,0.0,0.0,0.0001,-0.0242,0.016,34111.0 +570,60,0.99,0.0,5.56,0.03,0.8,0.0,5.82,-0.0617,-0.1817,0.009,0.0,0.0,0.0,0.0015,-0.0346,0.0496,34183.54 +571,60,0.99,0.0,5.56,0.07,0.81,0.0,5.39,-0.061,-0.1819,0.004,0.0,0.0,0.0,0.0007,-0.0245,0.0283,34237.31 +572,58,0.98,0.0,5.41,0.06,0.81,0.0,5.12,-0.0612,-0.182,0.0135,0.0,0.0,0.0,0.0009,-0.0295,0.0283,34290.12 +573,45,1.06,0.0,4.88,0.31,0.89,0.0,4.99,-0.0577,-0.1822,0.0109,0.0,-0.0,-0.0,0.0013,-0.0314,0.0277,34353.11 +574,60,1.16,0.0,6.06,0.21,0.98,0.0,5.97,-0.0575,-0.1824,0.0157,0.0,0.0,0.0,0.0017,-0.0421,0.0324,34422.1 +575,60,1.18,0.0,6.67,0.22,1.02,0.0,7.17,-0.0564,-0.1825,0.0247,0.0,0.0,0.0,0.0011,-0.0312,0.0382,34476.22 +576,60,1.18,0.0,6.06,0.23,1.03,0.0,5.93,-0.0557,-0.1826,0.0086,0.0,-0.0,-0.0,0.0008,-0.025,0.0291,34528.59 +577,60,1.18,0.0,6.45,0.24,1.04,0.0,6.48,-0.0551,-0.1827,0.0094,0.0,0.0,0.0,0.0005,-0.0302,0.0271,34594.71 +578,60,1.04,0.0,6.45,0.25,0.93,0.0,6.53,-0.0559,-0.1829,0.0051,0.0,-0.0,-0.0,-0.0008,-0.0448,0.0138,34648.38 +579,60,1.07,0.0,6.06,0.26,0.98,0.0,6.28,-0.0555,-0.183,0.0144,0.0,-0.0,-0.0,0.0005,-0.0326,0.046,34718.5 +580,60,1.12,0.0,6.9,0.27,1.06,0.0,7.84,-0.0548,-0.183,0.0378,0.0,0.0,0.0,0.0007,-0.0518,0.0355,34780.36 +581,60,1.24,0.0,9.68,0.28,1.22,0.0,10.7,-0.0536,-0.1831,0.057,0.0,0.0,0.0,0.0012,-0.0359,0.0657,34831.78 +582,60,1.14,0.0,8.0,0.3,1.11,0.0,9.15,-0.0549,-0.1832,0.0397,0.0,-0.0,-0.0,-0.0012,-0.0482,0.0202,34893.39 +583,60,1.23,0.0,7.89,0.31,1.17,0.0,8.45,-0.0542,-0.1833,0.0161,0.0,0.0,0.0,0.0007,-0.046,0.0619,34957.24 +584,59,1.17,0.0,9.09,0.32,1.12,0.0,9.99,-0.0539,-0.1834,0.0243,0.0,0.0,0.0,-0.0006,-0.04,0.0139,35011.56 +585,60,1.03,0.0,8.33,0.03,0.97,0.0,9.04,-0.0559,-0.1834,0.0148,0.0,0.0,0.0,-0.0011,-0.0297,0.0081,35085.37 +586,60,1.03,0.0,6.25,0.03,0.96,0.0,6.74,-0.0559,-0.1835,0.0231,0.0,0.0,0.0,0.0,-0.0319,0.0267,35132.11 +587,60,1.18,0.0,6.25,0.03,1.09,0.0,6.97,-0.0542,-0.1835,0.0247,0.0,0.0,0.0,0.0017,-0.0224,0.0341,35192.46 +588,60,1.31,0.0,8.82,0.03,1.17,0.0,10.18,-0.0524,-0.1566,0.0444,0.0,0.0,0.0,0.0017,-0.0129,0.0363,35257.46 +589,60,1.12,0.0,7.32,0.02,0.98,0.0,8.33,-0.0534,-0.1538,0.0216,0.0,0.0,0.0,-0.001,-0.0519,0.0255,35325.12 +590,60,1.08,0.0,8.57,0.02,0.88,0.0,9.7,-0.053,-0.138,0.0294,0.0,0.0,0.0,0.0005,-0.0283,0.0341,35370.52 +591,60,0.97,0.0,5.71,0.02,0.8,0.0,5.95,-0.0527,-0.138,0.0259,0.0,0.0,0.0,0.0002,-0.0446,0.0535,35438.95 +592,60,1.03,0.0,5.26,0.02,0.87,0.0,5.95,-0.0511,-0.138,0.0223,0.0,0.0,0.0,0.0016,-0.0056,0.0367,35497.62 +593,60,1.14,0.0,5.56,0.02,0.97,0.0,6.23,-0.0491,-0.1381,0.0208,0.0,0.0,0.0,0.002,-0.0256,0.0322,35558.91 +594,60,1.07,0.0,5.41,0.02,0.93,0.0,5.96,-0.0485,-0.1381,0.0151,0.0,0.0,0.0,0.0005,-0.0184,0.0216,35615.84 +595,60,1.13,0.0,5.13,0.02,1.0,0.0,5.52,-0.047,-0.1381,0.0089,0.0,0.0,0.0,0.0015,-0.0062,0.0241,35676.66 +596,60,1.17,0.0,6.06,0.01,1.06,0.0,6.45,-0.0459,-0.1381,0.016,0.0,0.0,0.0,0.0011,-0.0238,0.0343,35741.63 +597,60,0.99,0.0,3.85,0.02,0.85,0.0,3.77,-0.0471,-0.1382,0.003,0.0,0.0,0.0,-0.0012,-0.035,0.0339,35795.36 +598,57,1.14,0.0,7.41,0.02,1.04,0.0,8.2,-0.0456,-0.1382,0.0419,0.0,-0.0,-0.0,0.0023,-0.0212,0.0736,35848.68 +599,60,1.14,0.0,9.52,0.01,1.08,0.0,11.48,-0.0441,-0.1382,0.0623,0.0,0.0,0.0,0.0008,-0.0325,0.0237,35915.79 +600,59,1.03,0.0,8.7,0.01,0.95,0.0,10.48,-0.0451,-0.1233,0.0436,0.0,0.0,0.0,-0.0005,-0.0288,0.0312,35966.9 +601,60,1.06,0.0,10.0,0.25,1.01,0.0,11.91,-0.0441,-0.1233,0.0482,0.0,-0.0,-0.0,0.0004,-0.0374,0.0238,36011.53 +602,29,0.75,0.0,5.13,0.26,0.72,0.0,5.43,-0.0476,-0.1233,0.0062,0.0,0.0,0.0,-0.0001,-0.0351,0.0161,36026.62 diff --git a/experiments/results/csv/gradual_increase_adaptive_time_analysis.csv b/experiments/results/csv/gradual_increase_adaptive_time_analysis.csv new file mode 100644 index 000000000..42a6fd419 --- /dev/null +++ b/experiments/results/csv/gradual_increase_adaptive_time_analysis.csv @@ -0,0 +1,11 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-60s,12630,12467,138,1.09,25,0.2,1.0 +60-120s,12459,12174,175,1.4,110,0.88,1.5 +120-180s,13195,12717,251,1.9,227,1.72,2.0 +180-240s,13265,12598,323,2.43,344,2.59,2.5 +240-300s,13415,12627,387,2.88,401,2.99,3.0 +300-360s,13296,12378,444,3.34,474,3.56,3.5 +360-420s,13513,12382,551,4.08,580,4.29,4.0 +420-480s,13550,12418,547,4.04,585,4.32,4.5 +480-540s,13531,12219,633,4.68,679,5.02,5.0 +540-600s,13013,12705,145,1.11,163,1.25,1.0 diff --git a/experiments/results/csv/gradual_increase_time_analysis.csv b/experiments/results/csv/gradual_increase_time_analysis.csv new file mode 100644 index 000000000..fcc40e9ac --- /dev/null +++ b/experiments/results/csv/gradual_increase_time_analysis.csv @@ -0,0 +1,11 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-60s,31435,31113,322,1.02,0,0.0,1.0 +60-120s,32015,31568,447,1.4,0,0.0,1.5 +120-180s,32237,31593,644,2.0,0,0.0,2.0 +180-240s,32848,30447,772,2.35,1629,4.96,2.5 +240-300s,42282,29583,914,2.16,11785,27.87,3.0 +300-360s,43946,28892,1038,2.36,14016,31.89,3.5 +360-420s,42373,25450,1084,2.56,15839,37.38,4.0 +420-480s,42589,22462,1114,2.62,19013,44.64,4.5 +480-540s,41637,22560,1222,2.93,17855,42.88,5.0 +540-600s,36136,30243,322,0.89,5571,15.42,1.0 diff --git a/experiments/results/csv/near_target_error_rate_adaptive_pid_controller.csv b/experiments/results/csv/near_target_error_rate_adaptive_pid_controller.csv new file mode 100644 index 000000000..222f3dec4 --- /dev/null +++ b/experiments/results/csv/near_target_error_rate_adaptive_pid_controller.csv @@ -0,0 +1,181 @@ +Window,Thread Count,Error Rate Avg,Error Rate Min,Error Rate Max,Ideal Error Rate,Rejection Rate Avg,Rejection Rate Min,Rejection Rate Max,Integral Avg,Integral Min,Integral Max,Derivative Avg,Derivative Min,Derivative Max,P Value Avg,P Value Min,P Value Max,Total Request Time +1,60,1.92,0.0,22.22,4.61,1.51,0.0,20.67,-0.0274,-0.0461,0.1722,0.0,-0.0,-0.0,-0.0274,-0.0461,0.1722,61.73 +2,60,1.43,0.0,13.33,4.25,0.63,0.0,11.38,-0.0711,-0.0886,0.0667,0.0,0.0,0.0,-0.0437,-0.125,0.0164,122.27 +3,60,1.11,0.0,8.7,3.92,0.18,0.0,4.28,-0.1072,-0.1278,0.0121,0.0,0.0,0.0,-0.0361,-0.0767,0.0029,182.18 +4,60,1.38,0.0,8.82,4.17,0.12,0.0,3.68,-0.134,-0.1639,-0.0072,0.0,-0.0,-0.0,-0.0267,-0.0361,0.0458,241.77 +5,60,1.36,0.0,7.32,4.05,0.04,0.0,2.19,-0.1582,-0.1972,-0.0194,0.0,-0.0,-0.0,-0.0243,-0.0333,0.0126,301.38 +6,60,1.17,0.0,6.25,3.91,0.02,0.0,1.02,-0.1816,-0.228,-0.0273,0.0,-0.0,-0.0,-0.0234,-0.0307,0.0021,361.88 +7,60,1.09,0.0,5.26,3.75,0.0,0.0,0.0,-0.2037,-0.2563,-0.0398,0.0,-0.0,-0.0,-0.0221,-0.0283,0.0001,421.77 +8,60,1.08,0.0,4.76,3.59,0.0,0.0,0.0,-0.224,-0.2824,-0.0462,0.0,-0.0,-0.0,-0.0203,-0.0261,0.0051,482.3 +9,60,1.06,0.0,4.29,2.74,0.0,0.0,0.0,-0.243,-0.3065,-0.0459,0.0,-0.0,-0.0,-0.019,-0.0241,0.0004,542.0 +10,60,0.99,0.0,4.82,2.62,0.0,0.0,0.0,-0.2612,-0.3287,-0.0487,0.0,-0.0,-0.0,-0.0181,-0.0234,0.0034,601.38 +11,60,0.86,0.0,3.85,2.51,0.0,0.0,0.0,-0.2791,-0.3491,-0.0522,0.0,0.0,0.0,-0.0179,-0.0402,-0.0035,662.32 +12,60,0.88,0.0,5.06,2.4,0.0,0.0,0.0,-0.2954,-0.368,-0.0435,0.0,0.0,0.0,-0.0163,-0.0384,0.0087,721.83 +13,60,0.98,0.0,3.85,2.31,0.0,0.0,0.0,-0.3095,-0.3854,-0.0468,0.0,0.0,0.0,-0.0141,-0.0283,0.0045,781.59 +14,60,0.84,0.0,2.53,2.22,0.0,0.0,0.0,-0.3238,-0.4014,-0.0734,0.0,0.0,0.0,-0.0143,-0.0266,0.0051,842.36 +15,59,0.85,0.0,3.66,2.24,0.0,0.0,0.0,-0.3357,-0.4162,-0.0981,0.0,0.0,0.0,-0.0132,-0.0323,0.0051,901.56 +16,59,0.91,0.0,3.61,1.48,0.0,0.0,0.0,-0.347,-0.4298,-0.121,0.0,0.0,0.0,-0.0116,-0.0298,0.0058,961.8 +17,48,0.82,0.0,3.66,1.36,0.0,0.0,0.0,-0.3595,-0.4424,-0.142,0.0,0.0,0.0,-0.0114,-0.0275,0.0075,1020.44 +18,59,0.89,0.0,2.53,1.91,0.0,0.0,0.0,-0.3681,-0.454,-0.1615,0.0,-0.0,-0.0,-0.0099,-0.0254,0.0069,1082.38 +19,59,0.89,0.0,2.53,2.33,0.0,0.0,0.0,-0.3773,-0.4647,-0.1773,0.0,0.0,0.0,-0.0091,-0.0213,0.0064,1141.41 +20,60,0.85,0.0,2.53,2.34,0.0,0.0,0.0,-0.3848,-0.4746,-0.1911,0.0,0.0,0.0,-0.0088,-0.0329,0.0063,1201.36 +21,59,0.89,0.0,2.56,2.15,0.0,0.0,0.0,-0.3912,-0.4836,-0.2123,0.0,0.0,0.0,-0.0079,-0.0304,0.0137,1261.23 +22,58,0.82,0.0,2.5,0.99,0.0,0.0,0.0,-0.3995,-0.492,-0.2341,0.0,0.0,0.0,-0.0078,-0.028,0.0134,1321.64 +23,60,0.75,0.0,2.5,1.35,0.0,0.0,0.0,-0.4078,-0.4997,-0.253,0.0,0.0,0.0,-0.0077,-0.0258,0.0127,1381.46 +24,58,0.86,0.0,2.6,1.25,0.0,0.0,0.0,-0.4136,-0.5069,-0.2707,0.0,0.0,0.0,-0.006,-0.0238,0.0124,1441.43 +25,58,0.84,0.0,3.85,1.25,0.0,0.0,0.0,-0.4197,-0.5134,-0.2916,0.0,0.0,0.0,-0.0055,-0.0277,0.0182,1502.08 +26,60,0.83,0.0,3.66,2.23,0.0,0.0,0.0,-0.424,-0.5195,-0.2994,0.0,-0.0,-0.0,-0.0051,-0.0255,0.0248,1561.88 +27,60,0.81,0.0,3.66,2.06,0.0,0.0,0.0,-0.4287,-0.5251,-0.2963,0.0,0.0,0.0,-0.0048,-0.0235,0.0248,1621.75 +28,58,0.87,0.0,3.66,0.9,0.0,0.0,0.0,-0.4354,-0.5302,-0.2913,0.0,0.0,0.0,-0.0036,-0.0175,0.0248,1682.12 +29,59,0.87,0.0,3.7,2.12,0.0,0.0,0.0,-0.434,-0.5349,-0.2745,0.0,-0.0,-0.0,-0.0034,-0.0197,0.0169,1742.05 +30,57,0.87,0.0,3.61,0.47,0.0,0.0,0.0,-0.4401,-0.5393,-0.2587,0.0,0.0,0.0,-0.0026,-0.0148,0.0212,1801.78 +31,59,0.93,0.0,4.71,1.82,0.0,0.0,0.0,-0.4388,-0.5434,-0.2555,0.0,0.0,0.0,-0.002,-0.0182,0.0258,1861.57 +32,58,0.88,0.0,4.76,0.62,0.0,0.0,0.0,-0.4414,-0.5471,-0.2523,0.0,0.0,0.0,-0.002,-0.0168,0.0263,1921.56 +33,54,0.92,0.0,4.88,1.66,0.0,0.0,0.0,-0.4398,-0.5471,-0.2372,0.0,0.0,0.0,-0.0015,-0.0155,0.0308,1981.38 +34,57,1.0,0.0,4.88,0.34,0.0,0.0,0.0,-0.4422,-0.5505,-0.211,0.0,0.0,0.0,-0.0002,-0.0142,0.0308,2041.76 +35,58,0.97,0.0,3.7,0.62,0.0,0.0,0.0,-0.4448,-0.5537,-0.1959,0.0,0.0,0.0,-0.0001,-0.0131,0.0279,2101.87 +36,50,0.83,0.0,3.66,1.44,0.0,0.0,0.0,-0.4439,-0.5566,-0.1807,0.0,0.0,0.0,-0.0013,-0.0151,0.0247,2161.47 +37,59,0.97,0.0,4.49,0.79,0.0,0.0,0.0,-0.4439,-0.5593,-0.1648,0.0,-0.0,-0.0,0.0004,-0.0139,0.0281,2222.09 +38,59,1.03,0.0,4.4,0.95,0.0,0.0,0.0,-0.442,-0.5617,-0.161,0.0,-0.0,-0.0,0.0012,-0.0148,0.0271,2280.88 +39,57,1.17,0.0,4.55,0.67,0.0,0.0,0.0,-0.4404,-0.564,-0.1565,0.0,0.0,0.0,0.0029,-0.0161,0.0285,2340.77 +40,59,1.09,0.0,4.55,0.59,0.0,0.0,0.0,-0.4413,-0.5661,-0.1644,0.0,0.0,0.0,0.0024,-0.0148,0.0285,2400.97 +41,60,1.2,0.0,4.55,1.2,0.0,0.0,0.0,-0.4342,-0.5681,-0.1634,0.0,-0.0,-0.0,0.0037,-0.0192,0.0284,2461.67 +42,59,1.15,0.0,4.6,1.2,0.0,0.0,0.17,-0.4326,-0.5712,-0.1359,0.0,-0.0,-0.0,0.0033,-0.0177,0.0289,2521.61 +43,60,1.19,0.0,4.6,0.4,0.01,0.0,0.71,-0.427,-0.5758,-0.1087,0.0,0.0,0.0,0.004,-0.0163,0.0272,2581.16 +44,60,1.25,0.0,5.68,0.37,0.04,0.0,2.47,-0.4223,-0.5801,-0.076,0.0,0.0,0.0,0.0047,-0.0151,0.0328,2641.68 +45,60,1.18,0.0,3.85,0.34,0.0,0.0,0.06,-0.4184,-0.584,-0.0834,0.0,0.0,0.0,0.0039,-0.0138,0.0299,2701.79 +46,60,1.12,0.0,3.9,0.36,0.0,0.0,0.0,-0.4145,-0.5877,-0.0777,0.0,0.0,0.0,0.0039,-0.0128,0.0302,2762.43 +47,60,1.12,0.0,3.8,1.21,0.0,0.0,0.0,-0.4104,-0.591,-0.0824,0.0,0.0,0.0,0.0041,-0.0118,0.0313,2821.3 +48,60,1.05,0.0,4.71,1.22,0.0,0.0,0.0,-0.4068,-0.5941,-0.0864,0.0,0.0,0.0,0.0037,-0.0109,0.0426,2881.57 +49,60,0.98,0.0,4.71,1.22,0.03,0.0,1.7,-0.4037,-0.5969,-0.0785,0.0,0.0,0.0,0.0031,-0.01,0.0419,2941.76 +50,60,1.06,0.0,4.82,1.23,0.04,0.0,2.26,-0.3998,-0.5995,-0.0696,0.0,-0.0,-0.0,0.0039,-0.0094,0.0318,3001.68 +51,60,0.98,0.0,4.76,1.24,0.05,0.0,2.48,-0.3966,-0.602,-0.0562,0.0,-0.0,-0.0,0.0032,-0.0113,0.0322,3061.42 +52,60,0.96,0.0,4.71,1.24,0.06,0.0,2.64,-0.3936,-0.6042,-0.0455,0.0,-0.0,-0.0,0.003,-0.0081,0.0321,3121.75 +53,60,0.96,0.0,3.75,1.25,0.05,0.0,1.48,-0.3906,-0.6062,-0.046,0.0,-0.0,-0.0,0.003,-0.0074,0.0314,3181.37 +54,60,0.93,0.0,3.7,1.25,0.04,0.0,1.63,-0.3876,-0.6081,-0.0384,0.0,0.0,0.0,0.003,-0.0121,0.0288,3242.01 +55,60,1.03,0.0,3.7,1.25,0.04,0.0,1.42,-0.3833,-0.6099,-0.0417,0.0,-0.0,-0.0,0.0043,-0.0111,0.0265,3301.69 +56,60,0.94,0.0,3.7,1.25,0.05,0.0,1.8,-0.3798,-0.6115,-0.0338,0.0,0.0,0.0,0.0035,-0.013,0.0229,3361.68 +57,60,0.99,0.0,3.57,1.26,0.02,0.0,0.75,-0.3757,-0.613,-0.0268,0.0,-0.0,-0.0,0.0041,-0.012,0.0319,3421.25 +58,60,0.93,0.0,3.61,1.26,0.0,0.0,0.0,-0.3719,-0.6143,-0.0344,0.0,-0.0,-0.0,0.0039,-0.0142,0.0315,3480.92 +59,60,0.99,0.0,3.75,1.16,0.0,0.0,0.0,-0.367,-0.6156,-0.046,0.0,-0.0,-0.0,0.0049,-0.0131,0.0298,3540.55 +60,60,0.88,0.0,3.75,1.07,0.0,0.0,0.0,-0.3632,-0.6168,-0.0567,0.0,0.0,0.0,0.0039,-0.0121,0.0301,3600.81 +61,60,0.92,0.0,3.7,0.98,0.0,0.0,0.0,-0.3588,-0.6178,-0.0665,0.0,0.0,0.0,0.0044,-0.0112,0.0297,3661.41 +62,60,0.98,0.0,3.75,0.91,0.01,0.0,0.39,-0.3536,-0.6188,-0.0756,0.0,0.0,0.0,0.0051,-0.0104,0.0268,3721.26 +63,60,0.99,0.0,3.61,0.84,0.01,0.0,0.69,-0.3483,-0.6197,-0.0839,0.0,0.0,0.0,0.0053,-0.0095,0.0259,3781.12 +64,60,1.0,0.0,3.57,0.77,0.02,0.0,1.01,-0.3429,-0.5951,-0.0748,0.0,0.0,0.0,0.0054,-0.0087,0.0247,3840.82 +65,60,0.96,0.0,4.88,0.71,0.05,0.0,2.9,-0.3378,-0.5878,-0.0466,0.0,0.0,0.0,0.0051,-0.0081,0.0344,3901.92 +66,60,1.04,0.0,4.88,0.71,0.06,0.0,3.16,-0.3322,-0.5881,-0.0366,0.0,0.0,0.0,0.0056,-0.0074,0.0343,3961.32 +67,60,1.02,0.0,3.7,0.71,0.04,0.0,2.26,-0.3267,-0.5895,-0.0272,0.0,-0.0,-0.0,0.0054,-0.0171,0.0339,4021.3 +68,60,1.04,0.0,5.0,0.71,0.06,0.0,2.36,-0.3209,-0.5908,-0.0218,0.0,-0.0,-0.0,0.0059,-0.0063,0.0488,4080.8 +69,60,0.99,0.0,4.94,0.71,0.04,0.0,1.25,-0.3155,-0.592,-0.0293,0.0,-0.0,-0.0,0.0053,-0.0131,0.0481,4141.44 +70,60,1.21,0.0,4.94,0.72,0.06,0.0,1.61,-0.3077,-0.5931,-0.0319,0.0,-0.0,-0.0,0.0078,-0.0094,0.0481,4201.26 +71,60,1.26,0.0,4.88,0.72,0.07,0.0,1.95,-0.2996,-0.5941,-0.0261,0.0,-0.0,-0.0,0.0081,-0.0087,0.0474,4261.27 +72,60,1.16,0.0,4.76,0.72,0.06,0.0,2.23,-0.2926,-0.595,-0.0209,0.0,0.0,0.0,0.007,-0.009,0.0461,4321.37 +73,60,1.16,0.0,4.76,0.72,0.09,0.0,2.46,-0.2853,-0.5959,-0.0157,0.0,-0.0,-0.0,0.0073,-0.0096,0.0467,4381.33 +74,60,1.06,0.0,4.76,0.72,0.12,0.0,2.6,-0.2793,-0.5967,-0.0126,0.0,-0.0,-0.0,0.006,-0.0089,0.0433,4441.29 +75,60,0.99,0.0,4.65,0.72,0.1,0.0,2.1,-0.2741,-0.5974,-0.0195,0.0,-0.0,-0.0,0.0052,-0.0106,0.0355,4501.55 +76,60,1.03,0.0,4.71,0.66,0.09,0.0,2.69,-0.2683,-0.5981,-0.0158,0.0,-0.0,-0.0,0.0058,-0.0075,0.036,4561.8 +77,60,1.05,0.0,4.71,0.61,0.14,0.0,3.11,-0.2621,-0.5987,-0.0184,0.0,0.0,0.0,0.0062,-0.0091,0.0355,4621.48 +78,60,0.97,0.0,4.65,0.56,0.14,0.0,3.18,-0.257,-0.5993,-0.0162,0.0,0.0,0.0,0.005,-0.0079,0.035,4680.78 +79,60,0.96,0.0,3.75,0.52,0.11,0.0,1.51,-0.2521,-0.5998,-0.0011,0.0,0.0,0.0,0.005,-0.0091,0.0354,4741.52 +80,60,0.79,0.0,4.88,0.48,0.09,0.0,2.6,-0.2484,-0.6003,-0.014,0.0,0.0,0.0,0.0037,-0.0129,0.0405,4801.05 +81,60,0.83,0.0,4.88,0.44,0.1,0.0,3.11,-0.244,-0.6008,-0.0124,0.0,0.0,0.0,0.0044,-0.0106,0.0239,4861.58 +82,60,0.89,0.0,4.94,1.03,0.14,0.0,3.54,-0.239,-0.6012,-0.0109,0.0,0.0,0.0,0.005,-0.0098,0.0238,4921.21 +83,60,0.87,0.0,3.75,0.06,0.1,0.0,2.34,-0.2346,-0.6016,-0.0097,0.0,-0.0,-0.0,0.0044,-0.011,0.0341,4981.98 +84,60,0.91,0.0,3.75,0.07,0.13,0.0,2.54,-0.2293,-0.6019,-0.0085,0.0,-0.0,-0.0,0.0053,-0.0101,0.0345,5042.16 +85,60,0.97,0.0,3.7,0.07,0.21,0.0,2.69,-0.2236,-0.6023,0.0039,0.0,0.0,0.0,0.0057,-0.0077,0.0322,5100.83 +86,60,0.91,0.0,3.8,0.08,0.18,0.0,2.07,-0.2193,-0.6026,0.0033,0.0,-0.0,-0.0,0.0043,-0.0096,0.0237,5161.67 +87,60,0.92,0.0,3.8,0.08,0.19,0.0,3.53,-0.2147,-0.6028,0.0026,0.0,0.0,0.0,0.0047,-0.0094,0.0246,5220.57 +88,60,0.96,0.0,4.76,1.04,0.22,0.0,3.79,-0.2096,-0.6031,0.0015,0.0,0.0,0.0,0.0051,-0.0045,0.0262,5280.81 +89,60,1.02,0.0,4.88,0.09,0.25,0.0,4.2,-0.2041,-0.6033,0.008,0.0,-0.0,-0.0,0.0055,-0.0118,0.0365,5341.53 +90,60,1.0,0.0,5.0,1.04,0.26,0.0,4.51,-0.199,-0.5912,0.0062,0.0,-0.0,-0.0,0.0051,-0.0061,0.0364,5401.39 +91,60,0.94,0.0,3.75,1.04,0.19,0.0,3.54,-0.1946,-0.5792,0.0013,0.0,-0.0,-0.0,0.0044,-0.0131,0.0368,5461.24 +92,60,0.99,0.0,3.75,0.96,0.2,0.0,3.63,-0.1891,-0.5668,0.0019,0.0,-0.0,-0.0,0.0056,-0.0096,0.035,5522.09 +93,60,1.0,0.0,3.7,0.89,0.21,0.0,3.57,-0.1834,-0.5543,0.0011,0.0,0.0,0.0,0.0056,-0.0109,0.0345,5581.03 +94,60,1.08,0.0,3.66,0.82,0.26,0.0,2.09,-0.177,-0.5418,0.0081,0.0,0.0,0.0,0.0064,-0.0124,0.0338,5640.99 +95,60,1.12,0.0,3.8,0.75,0.27,0.0,2.31,-0.1707,-0.5292,0.0064,0.0,0.0,0.0,0.0063,-0.0108,0.0365,5701.27 +96,60,1.1,0.0,3.85,0.69,0.33,0.0,2.79,-0.1646,-0.5166,0.0051,0.0,0.0,0.0,0.0061,-0.0085,0.0246,5761.45 +97,60,1.12,0.0,4.71,0.64,0.37,0.0,4.33,-0.1588,-0.5042,0.0035,0.0,0.0,0.0,0.0058,-0.0113,0.0243,5820.89 +98,60,1.18,0.0,4.65,0.59,0.38,0.0,4.4,-0.1527,-0.4918,0.0025,0.0,0.0,0.0,0.006,-0.0094,0.0242,5880.24 +99,60,1.22,0.0,4.6,0.54,0.36,0.0,4.37,-0.1464,-0.4669,0.0017,0.0,0.0,0.0,0.0064,-0.0241,0.0248,5941.76 +100,60,1.3,0.0,4.6,0.55,0.43,0.0,4.4,-0.139,-0.4546,0.0008,0.0,0.0,0.0,0.0074,-0.0115,0.0335,6001.12 +101,60,1.29,0.0,5.06,0.55,0.53,0.0,5.06,-0.1323,-0.4421,0.0009,0.0,0.0,0.0,0.0067,-0.0088,0.0247,6060.97 +102,60,1.32,0.0,6.98,0.11,0.65,0.0,7.42,-0.1263,-0.4298,0.0194,0.0,-0.0,-0.0,0.006,-0.011,0.0345,6120.48 +103,60,1.35,0.0,5.06,0.11,0.72,0.0,5.13,-0.1211,-0.4172,0.003,0.0,-0.0,-0.0,0.0052,-0.027,0.0445,6180.57 +104,60,1.3,0.0,4.65,0.12,0.67,0.0,4.44,-0.1171,-0.405,0.0027,0.0,0.0,0.0,0.004,-0.0265,0.0379,6240.81 +105,60,1.27,0.0,4.71,0.12,0.68,0.0,4.52,-0.1128,-0.3806,0.0116,0.0,-0.0,-0.0,0.0042,-0.0137,0.0347,6301.55 +106,60,1.33,0.0,4.65,0.55,0.77,0.0,3.83,-0.1081,-0.3566,0.0097,0.0,0.0,0.0,0.0048,-0.0135,0.0347,6360.83 +107,60,1.33,0.0,4.82,0.56,0.75,0.0,4.66,-0.1041,-0.3381,0.0089,0.0,-0.0,-0.0,0.004,-0.0243,0.0243,6421.19 +108,60,1.27,0.0,4.71,0.56,0.68,0.0,4.64,-0.1005,-0.3267,0.0062,0.0,-0.0,-0.0,0.0036,-0.0147,0.024,6481.03 +109,60,1.18,0.0,4.65,0.14,0.58,0.0,4.59,-0.0972,-0.3279,-0.0004,0.0,-0.0,-0.0,0.0033,-0.0154,0.0289,6541.45 +110,60,1.2,0.0,4.76,0.14,0.65,0.0,4.75,-0.0926,-0.329,0.0055,0.0,-0.0,-0.0,0.0045,-0.0098,0.0333,6601.2 +111,60,1.22,0.0,4.88,0.13,0.68,0.0,4.92,-0.0885,-0.33,0.0064,0.0,-0.0,-0.0,0.0041,-0.0108,0.0236,6660.78 +112,60,1.21,0.0,3.85,0.12,0.73,0.0,4.19,-0.0848,-0.331,0.0189,0.0,0.0,0.0,0.0038,-0.0234,0.0241,6721.35 +113,60,1.21,0.0,3.9,0.11,0.7,0.0,4.25,-0.0814,-0.3318,0.0162,0.0,0.0,0.0,0.0033,-0.0127,0.024,6780.71 +114,60,1.3,0.0,5.13,0.1,0.79,0.0,5.71,-0.077,-0.3326,0.0257,0.0,0.0,0.0,0.0045,-0.0126,0.0242,6841.25 +115,60,1.24,0.0,4.71,0.09,0.76,0.0,4.94,-0.074,-0.3334,0.0077,0.0,0.0,0.0,0.003,-0.018,0.0244,6901.54 +116,60,1.2,0.0,4.76,0.08,0.76,0.0,4.98,-0.071,-0.334,0.0143,0.0,0.0,0.0,0.0029,-0.0115,0.0325,6961.18 +117,60,1.15,0.0,4.82,0.08,0.76,0.0,5.03,-0.0686,-0.3347,0.0084,0.0,0.0,0.0,0.0024,-0.0199,0.025,7021.87 +118,60,1.13,0.0,4.82,0.03,0.74,0.0,5.0,-0.0664,-0.3352,0.0068,0.0,0.0,0.0,0.0023,-0.0262,0.0249,7081.56 +119,60,1.15,0.0,4.82,0.03,0.77,0.0,5.08,-0.0637,-0.3358,0.0132,0.0,0.0,0.0,0.0027,-0.0129,0.025,7140.52 +120,60,1.07,0.0,3.8,0.16,0.74,0.0,3.76,-0.062,-0.3363,0.0098,0.0,0.0,0.0,0.0017,-0.0228,0.0164,7200.92 +121,60,1.15,0.0,3.8,0.05,0.8,0.0,3.73,-0.0593,-0.3367,0.0116,0.0,0.0,0.0,0.0027,-0.0134,0.024,7261.38 +122,60,1.1,0.0,4.76,0.14,0.73,0.0,4.48,-0.0577,-0.3244,0.0181,0.0,0.0,0.0,0.0016,-0.014,0.0238,7320.61 +123,60,1.06,0.0,3.61,0.3,0.71,0.0,3.71,-0.0557,-0.3124,0.0085,0.0,0.0,0.0,0.002,-0.0159,0.0309,7380.48 +124,60,1.08,0.0,3.66,0.31,0.81,0.0,3.67,-0.0533,-0.3005,0.0113,0.0,-0.0,-0.0,0.0024,-0.0108,0.0196,7440.53 +125,60,1.16,0.0,3.66,0.31,0.85,0.0,3.71,-0.0511,-0.2889,0.0156,0.0,-0.0,-0.0,0.0022,-0.0147,0.0243,7501.0 +126,60,1.2,0.0,3.8,0.31,0.87,0.0,3.79,-0.0488,-0.277,0.0137,0.0,-0.0,-0.0,0.0022,-0.0135,0.0232,7560.75 +127,60,1.21,0.0,3.75,0.31,0.89,0.0,3.73,-0.0466,-0.2771,0.0113,0.0,0.0,0.0,0.0022,-0.0107,0.0344,7620.91 +128,60,1.29,0.0,4.65,0.31,1.02,0.0,5.08,-0.0438,-0.2773,0.021,0.0,-0.0,-0.0,0.0029,-0.0111,0.0312,7680.72 +129,60,1.25,0.0,4.82,0.31,0.95,0.0,4.99,-0.0427,-0.2775,0.0168,0.0,0.0,0.0,0.0011,-0.0138,0.0355,7741.16 +130,60,1.24,0.0,4.82,0.32,0.95,0.0,4.95,-0.0409,-0.2659,0.0129,0.0,-0.0,-0.0,0.0018,-0.0148,0.0354,7800.11 +131,60,1.26,0.0,4.82,0.32,0.95,0.0,5.22,-0.0389,-0.2544,0.0163,0.0,-0.0,-0.0,0.002,-0.0264,0.0349,7861.56 +132,60,1.24,0.0,4.71,0.32,0.95,0.0,5.1,-0.0371,-0.2428,0.0139,0.0,0.0,0.0,0.0018,-0.012,0.018,7920.08 +133,60,1.19,0.0,4.82,0.29,0.92,0.0,5.17,-0.0358,-0.2313,0.0116,0.0,-0.0,-0.0,0.0013,-0.0126,0.0232,7980.93 +134,60,1.22,0.0,4.71,0.3,0.88,0.0,4.98,-0.0339,-0.2198,0.0087,0.0,0.0,0.0,0.0019,-0.0231,0.0329,8040.96 +135,60,1.26,0.0,5.81,0.3,0.96,0.0,6.33,-0.0312,-0.2115,0.0172,0.0,-0.0,-0.0,0.0027,-0.0124,0.0152,8100.41 +136,60,1.26,0.0,4.71,0.3,0.95,0.0,4.93,-0.0293,-0.212,0.01,0.0,-0.0,-0.0,0.0019,-0.0193,0.0169,8160.63 +137,60,1.3,0.0,4.76,0.09,1.04,0.0,4.9,-0.027,-0.2123,0.0157,0.0,0.0,0.0,0.0023,-0.0122,0.0262,8221.54 +138,60,1.24,0.0,4.94,0.09,1.01,0.0,5.51,-0.0261,-0.2127,0.0254,0.0,0.0,0.0,0.0009,-0.012,0.0226,8280.87 +139,60,1.31,0.0,4.94,0.06,1.11,0.0,5.49,-0.0242,-0.213,0.0209,0.0,-0.0,-0.0,0.0019,-0.0174,0.0231,8340.59 +140,60,1.37,0.0,5.0,0.06,1.2,0.0,5.47,-0.0226,-0.2133,0.0182,0.0,0.0,0.0,0.0017,-0.0129,0.0228,8401.27 +141,60,1.36,0.0,6.25,0.07,1.16,0.0,6.97,-0.022,-0.2003,0.0269,0.0,-0.0,-0.0,0.0005,-0.0244,0.0211,8460.96 +142,60,1.28,0.0,5.75,0.11,1.06,0.0,6.43,-0.0218,-0.1875,0.0216,0.0,0.0,0.0,0.0002,-0.0172,0.0265,8520.28 +143,60,1.34,0.0,5.88,0.12,1.14,0.0,6.5,-0.02,-0.1749,0.0186,0.0,-0.0,-0.0,0.0018,-0.0158,0.0266,8580.77 +144,60,1.27,0.0,5.88,0.12,1.11,0.0,6.42,-0.0195,-0.1628,0.0155,0.0,0.0,0.0,0.0004,-0.0253,0.0244,8640.52 +145,60,1.38,0.0,4.88,0.08,1.18,0.0,5.11,-0.0178,-0.1507,0.0244,0.0,-0.0,-0.0,0.0018,-0.0155,0.019,8701.05 +146,60,1.34,0.0,4.94,0.03,1.13,0.0,5.11,-0.0171,-0.1383,0.0207,0.0,-0.0,-0.0,0.0007,-0.0144,0.0145,8760.5 +147,60,1.24,0.0,4.94,0.09,1.03,0.0,5.02,-0.017,-0.1132,0.0165,0.0,0.0,0.0,0.0001,-0.0253,0.0252,8819.88 +148,60,1.18,0.0,4.82,0.09,0.99,0.0,4.79,-0.0165,-0.0905,0.0119,0.0,0.0,0.0,0.0005,-0.0106,0.0227,8881.2 +149,60,1.21,0.0,3.7,0.29,1.0,0.0,3.65,-0.0153,-0.0861,0.008,0.0,-0.0,-0.0,0.0011,-0.0142,0.0178,8940.15 +150,60,1.1,0.0,3.66,0.3,0.92,0.0,3.67,-0.0154,-0.0864,0.011,0.0,0.0,0.0,-0.0001,-0.0139,0.0139,9000.58 +151,60,1.12,0.0,5.0,0.09,0.98,0.0,4.87,-0.0144,-0.0866,0.0182,0.0,0.0,0.0,0.001,-0.0134,0.0143,9060.5 +152,60,1.1,0.0,4.94,0.07,0.98,0.0,4.83,-0.0142,-0.0868,0.016,0.0,0.0,0.0,0.0002,-0.011,0.0119,9121.09 +153,60,1.1,0.0,4.76,0.31,0.97,0.0,4.9,-0.014,-0.0869,0.0145,0.0,0.0,0.0,0.0002,-0.0278,0.0234,9180.95 +154,60,1.18,0.0,5.0,0.07,1.06,0.0,5.59,-0.0129,-0.0871,0.0227,0.0,-0.0,-0.0,0.0011,-0.0144,0.0362,9240.45 +155,60,1.01,0.0,3.75,0.08,0.91,0.0,4.0,-0.0143,-0.0873,0.0151,0.0,-0.0,-0.0,-0.0014,-0.0171,0.0116,9300.92 +156,60,0.99,0.0,3.75,0.04,0.88,0.0,4.03,-0.0144,-0.0874,0.0144,0.0,-0.0,-0.0,-0.0001,-0.0148,0.0134,9360.58 +157,60,0.91,0.0,3.7,0.09,0.81,0.0,3.93,-0.0151,-0.0875,0.0132,0.0,0.0,0.0,-0.0007,-0.0121,0.007,9419.99 +158,60,0.93,0.0,3.75,0.09,0.83,0.0,3.95,-0.0148,-0.0877,0.0109,0.0,0.0,0.0,0.0003,-0.0114,0.0119,9480.53 +159,60,0.9,0.0,3.8,0.2,0.79,0.0,3.98,-0.0151,-0.0878,0.0136,0.0,0.0,0.0,-0.0003,-0.0133,0.0118,9540.63 +160,60,0.9,0.0,3.7,0.2,0.8,0.0,3.83,-0.0149,-0.0879,0.0113,0.0,0.0,0.0,0.0002,-0.0139,0.0132,9600.92 +161,60,0.86,0.0,3.75,0.18,0.75,0.0,3.87,-0.0153,-0.088,0.0093,0.0,-0.0,-0.0,-0.0004,-0.015,0.0206,9660.8 +162,60,0.82,0.0,4.71,0.17,0.73,0.0,5.12,-0.0155,-0.0881,0.0194,0.0,0.0,0.0,-0.0002,-0.0123,0.0108,9720.42 +163,60,0.68,0.0,3.85,0.16,0.59,0.0,3.95,-0.0169,-0.0881,0.0061,0.0,0.0,0.0,-0.0014,-0.0268,0.0038,9781.08 +164,60,0.66,0.0,4.76,0.14,0.58,0.0,5.08,-0.0172,-0.0882,0.0234,0.0,0.0,0.0,-0.0003,-0.0272,0.0241,9840.38 +165,60,0.78,0.0,5.88,0.13,0.72,0.0,6.54,-0.016,-0.0883,0.0317,0.0,0.0,0.0,0.0012,-0.0102,0.0234,9900.95 +166,60,0.84,0.0,5.95,0.12,0.79,0.0,6.59,-0.0155,-0.0883,0.0268,0.0,0.0,0.0,0.0005,-0.0142,0.0148,9960.62 +167,60,0.94,0.0,5.95,0.11,0.88,0.0,6.47,-0.0147,-0.0884,0.0214,0.0,0.0,0.0,0.0009,-0.0054,0.0123,10020.91 +168,60,1.0,0.0,5.95,0.1,0.94,0.0,6.37,-0.0142,-0.0885,0.0169,0.0,0.0,0.0,0.0005,-0.0124,0.015,10080.26 +169,60,1.06,0.0,6.1,0.1,0.99,0.0,6.46,-0.0137,-0.0885,0.0149,0.0,0.0,0.0,0.0005,-0.0147,0.0147,10140.86 +170,60,1.12,0.0,6.1,0.09,1.06,0.0,6.4,-0.0131,-0.0885,0.0119,0.0,0.0,0.0,0.0006,-0.013,0.0126,10200.88 +171,60,1.0,0.0,3.7,0.08,0.9,0.0,3.84,-0.0143,-0.0763,0.0122,0.0,0.0,0.0,-0.0013,-0.0279,0.0123,10261.2 +172,60,1.04,0.0,3.61,0.08,0.94,0.0,3.74,-0.0137,-0.0548,0.0093,0.0,0.0,0.0,0.0007,-0.0045,0.0243,10321.08 +173,60,1.2,0.0,3.66,0.07,1.11,0.0,3.78,-0.0118,-0.0553,0.0109,0.0,0.0,0.0,0.0018,-0.0118,0.0137,10380.05 +174,60,1.14,0.0,3.66,0.06,1.05,0.0,3.81,-0.0122,-0.0558,0.0107,0.0,0.0,0.0,-0.0003,-0.0221,0.0193,10440.84 +175,60,1.05,0.0,3.61,0.06,0.96,0.0,3.71,-0.0128,-0.0562,0.0125,0.0,0.0,0.0,-0.0006,-0.0246,0.0217,10500.54 +176,60,1.01,0.0,3.75,0.05,0.94,0.0,4.0,-0.013,-0.0566,0.0128,0.0,0.0,0.0,-0.0001,-0.0135,0.0167,10560.68 +177,60,0.94,0.0,3.53,0.05,0.88,0.0,3.38,-0.0136,-0.0569,0.009,0.0,0.0,0.0,-0.0006,-0.0157,0.0138,10620.31 +178,60,0.91,0.0,3.61,0.05,0.84,0.0,3.53,-0.014,-0.0573,0.0074,0.0,0.0,0.0,-0.0004,-0.0135,0.0122,10680.98 +179,60,0.88,0.0,3.61,0.04,0.79,0.0,3.92,-0.0143,-0.0576,0.0139,0.0,0.0,0.0,-0.0003,-0.015,0.0135,10740.59 +180,60,0.91,0.0,4.76,0.07,0.8,0.0,5.0,-0.0138,-0.0578,0.0091,0.0,0.0,0.0,0.0005,-0.0148,0.0145,10799.82 diff --git a/experiments/results/csv/near_target_error_rate_adaptive_time_analysis.csv b/experiments/results/csv/near_target_error_rate_adaptive_time_analysis.csv new file mode 100644 index 000000000..b6e9a6841 --- /dev/null +++ b/experiments/results/csv/near_target_error_rate_adaptive_time_analysis.csv @@ -0,0 +1,7 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,14170,14025,131,0.92,14,0.1,1.0 +30-60s,14618,14462,153,1.05,3,0.02,1.2 +60-90s,14654,14486,147,1.0,21,0.14,1.2 +90-120s,14711,14440,176,1.2,95,0.65,1.2 +120-150s,14798,14459,185,1.25,154,1.04,1.2 +150-180s,14752,14484,142,0.96,126,0.85,1.0 diff --git a/experiments/results/csv/near_target_error_rate_time_analysis.csv b/experiments/results/csv/near_target_error_rate_time_analysis.csv new file mode 100644 index 000000000..0c90b2856 --- /dev/null +++ b/experiments/results/csv/near_target_error_rate_time_analysis.csv @@ -0,0 +1,7 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,16963,16810,153,0.9,0,0.0,1.0 +30-60s,17494,17271,223,1.27,0,0.0,1.2 +60-90s,17545,17350,195,1.11,0,0.0,1.2 +90-120s,20706,16675,196,0.95,3835,18.52,1.2 +120-150s,17549,17350,199,1.13,0,0.0,1.2 +150-180s,17548,17362,186,1.06,0,0.0,1.0 diff --git a/experiments/results/csv/one_of_many_services_latency_degradation_adaptive_pid_controller.csv b/experiments/results/csv/one_of_many_services_latency_degradation_adaptive_pid_controller.csv new file mode 100644 index 000000000..4c6349ece --- /dev/null +++ b/experiments/results/csv/one_of_many_services_latency_degradation_adaptive_pid_controller.csv @@ -0,0 +1,427 @@ +Window,Thread Count,Error Rate Avg,Error Rate Min,Error Rate Max,Ideal Error Rate,Rejection Rate Avg,Rejection Rate Min,Rejection Rate Max,Integral Avg,Integral Min,Integral Max,Derivative Avg,Derivative Min,Derivative Max,P Value Avg,P Value Min,P Value Max,Total Request Time +1,9,0.0,0.0,0.0,4.61,0.0,0.0,0.0,-0.0461,-0.0461,-0.0461,0.0,-0.0,-0.0,-0.0461,-0.0461,-0.0461,62.7 +2,31,0.0,0.0,0.0,4.61,0.0,0.0,0.0,-0.0584,-0.0886,-0.0461,0.0,-0.0,-0.0,-0.0451,-0.0461,-0.0425,115.89 +3,42,0.6,0.0,25.0,4.61,0.56,0.0,23.55,-0.08,-0.1278,0.1578,0.0,-0.0,-0.0,-0.0369,-0.0461,0.2039,169.56 +4,50,0.5,0.0,25.0,4.25,0.57,0.0,28.68,-0.1066,-0.1639,0.1743,0.0,0.0,0.0,-0.0394,-0.0461,0.0165,220.43 +5,53,0.47,0.0,25.0,3.92,0.55,0.0,29.23,-0.1381,-0.1972,0.1499,0.0,0.0,0.0,-0.0376,-0.0461,-0.0244,268.05 +6,53,0.79,0.0,25.0,3.61,0.78,0.0,28.77,-0.1698,-0.228,0.121,0.0,0.0,0.0,-0.0317,-0.0425,0.1305,309.34 +7,52,1.03,0.0,20.0,3.33,0.88,0.0,16.06,-0.1951,-0.2563,-0.0105,0.0,0.0,0.0,-0.0296,-0.1325,0.1667,361.69 +8,53,0.9,0.0,20.0,3.07,0.75,0.0,19.39,-0.2232,-0.2824,0.0023,0.0,0.0,0.0,-0.0292,-0.078,0.0329,431.72 +9,55,1.34,0.0,20.0,2.83,0.99,0.0,20.05,-0.2367,-0.3065,0.0074,0.0,0.0,0.0,-0.022,-0.0461,0.1167,498.08 +10,59,3.72,0.0,100.0,2.41,3.5,0.0,100.0,-0.2245,-0.3287,0.95,0.0,0.0,0.0,0.0009,-0.0461,0.95,561.15 +11,59,3.79,0.0,100.0,2.41,4.07,0.0,100.0,-0.2266,-0.3491,1.85,0.0,0.0,0.0,-0.0021,-0.0425,0.9,622.72 +12,59,3.95,0.0,100.0,2.05,4.55,0.0,100.0,-0.2284,-0.368,2.75,0.0,0.0,0.0,-0.0018,-0.0392,0.9,683.96 +13,60,3.79,0.0,100.0,1.89,4.64,0.0,100.0,-0.2297,-0.3854,3.65,0.0,0.0,0.0,-0.0051,-0.079,0.9,733.66 +14,60,3.81,0.0,100.0,1.74,4.69,0.0,100.0,-0.234,-0.4014,4.55,0.0,0.0,0.0,-0.0044,-0.0889,0.9,794.1 +15,59,4.67,0.0,100.0,1.6,5.76,0.0,100.0,-0.2249,-0.4162,5.45,0.0,0.0,0.0,0.0065,-0.0896,0.9,865.68 +16,59,4.24,0.0,100.0,1.6,5.49,0.0,100.0,-0.2298,-0.4298,6.35,0.0,0.0,0.0,-0.0053,-0.4437,0.9,926.26 +17,60,3.21,0.0,100.0,1.36,3.91,0.0,100.0,-0.248,-0.4424,7.25,0.0,0.0,0.0,-0.0152,-0.7247,0.9,965.87 +18,59,3.63,0.0,100.0,1.26,4.13,0.0,100.0,-0.2415,-0.454,8.15,0.0,0.0,0.0,0.0042,-0.0537,0.9,1024.95 +19,60,3.08,0.0,100.0,1.6,3.64,0.0,100.0,-0.2464,-0.4647,9.05,0.0,0.0,0.0,-0.0025,-0.3226,0.9,1082.89 +20,60,0.44,0.0,16.67,1.48,2.04,0.0,100.0,-0.2936,-0.8438,7.9578,0.0,0.0,0.0,-0.0472,-1.0922,0.0212,1140.74 +21,60,0.52,0.0,16.67,1.36,2.12,0.0,100.0,-0.3225,-0.8864,6.8728,0.0,0.0,0.0,-0.0289,-1.085,0.0626,1220.41 +22,60,0.48,0.0,14.29,1.26,2.09,0.0,100.0,-0.3515,-0.9255,5.7944,0.0,0.0,0.0,-0.029,-1.0784,0.0111,1287.73 +23,60,0.42,0.0,12.5,1.16,1.8,0.0,87.22,-0.3799,-0.9617,4.7221,0.0,0.0,0.0,-0.0284,-1.0723,0.0058,1336.95 +24,60,0.42,0.0,14.29,1.07,1.52,0.0,69.52,-0.4044,-0.995,3.7876,0.0,0.0,0.0,-0.0246,-0.9345,0.0228,1400.52 +25,60,0.19,0.0,11.11,0.99,1.07,0.0,55.6,-0.4279,-1.0257,3.0404,0.0,0.0,0.0,-0.0234,-0.7472,0.0247,1463.51 +26,60,0.19,0.0,11.11,0.91,0.89,0.0,44.4,-0.4459,-1.054,2.4403,0.0,0.0,0.0,-0.018,-0.6001,0.0216,1517.69 +27,60,0.24,0.0,14.29,0.84,0.81,0.0,35.4,-0.4608,-1.0801,1.9586,0.0,0.0,0.0,-0.0149,-0.4817,0.0519,1586.57 +28,60,0.15,0.0,9.09,0.77,0.47,0.0,28.18,-0.4754,-1.1042,1.572,0.0,0.0,0.0,-0.0146,-0.3866,0.0836,1639.83 +29,59,0.17,0.0,10.0,0.71,0.42,0.0,22.39,-0.4851,-1.1264,1.2617,0.0,0.0,0.0,-0.0104,-0.3103,0.0926,1693.15 +30,59,0.19,0.0,11.11,0.61,0.4,0.0,17.75,-0.4944,-1.1469,1.0128,0.0,0.0,0.0,-0.009,-0.2489,0.08,1747.18 +31,60,0.19,0.0,11.11,0.71,0.35,0.0,14.04,-0.5026,-1.1657,0.8131,0.0,0.0,0.0,-0.0081,-0.1997,0.0532,1787.56 +32,60,0.21,0.0,12.5,0.66,0.35,0.0,11.07,-0.5096,-1.1831,0.6528,0.0,0.0,0.0,-0.007,-0.1602,0.0558,1828.38 +33,60,0.24,0.0,14.29,0.61,0.36,0.0,13.05,-0.5157,-1.1992,0.5243,0.0,0.0,0.0,-0.0061,-0.1285,0.0512,1870.55 +34,60,0.24,0.0,14.29,0.56,0.35,0.0,13.95,-0.5215,-1.214,0.4212,0.0,0.0,0.0,-0.0058,-0.1031,0.0226,1891.54 +35,60,0.28,0.0,16.67,0.4,0.38,0.0,17.63,-0.5263,-1.2276,0.3384,0.0,0.0,0.0,-0.0048,-0.0827,0.0419,1915.99 +36,60,0.33,0.0,20.0,0.47,0.45,0.0,23.14,-0.5304,-1.2402,0.2721,0.0,0.0,0.0,-0.0041,-0.0664,0.0503,1954.22 +37,60,0.56,0.0,33.33,0.44,0.79,0.0,44.02,-0.5319,-1.2518,0.2188,0.0,0.0,0.0,-0.0016,-0.0532,0.1699,1965.24 +38,60,0.0,0.0,0.0,0.4,0.04,0.0,2.42,-0.5434,-1.2624,0.1761,0.0,0.0,0.0,-0.0114,-0.45,-0.0023,1969.4 +39,60,0.0,0.0,0.0,0.37,0.03,0.0,1.83,-0.547,-1.2723,0.1418,0.0,0.0,0.0,-0.0036,-0.0343,-0.0021,1969.96 +40,59,0.0,0.0,0.0,0.34,0.02,0.0,1.36,-0.5501,-1.2814,0.1143,0.0,0.0,0.0,-0.0033,-0.0275,-0.0019,2020.19 +41,59,18.64,0.0,100.0,0.23,18.64,0.0,100.0,-0.3667,-1.2898,1.1051,0.0,0.0,0.0,0.1836,-0.0084,0.9981,2143.18 +42,60,40.0,0.0,100.0,0.34,40.0,0.0,100.0,0.027,-1.2975,2.0869,0.0,0.0,0.0,0.3967,-0.0077,0.9982,2310.78 +43,60,58.33,0.0,100.0,0.34,58.33,0.0,100.0,0.6066,-1.3046,3.0688,0.0,0.0,0.0,0.5795,-0.0071,0.9982,2437.45 +44,60,71.67,0.0,100.0,0.34,71.55,0.0,100.0,1.3191,-0.5744,4.0506,0.0,-0.0,-0.0,0.7125,-0.0042,0.9982,2483.36 +45,60,78.33,0.0,100.0,0.34,78.33,0.0,100.0,2.0979,-0.5757,5.0324,0.0,0.0,0.0,0.7788,-0.0039,0.9986,2589.12 +46,60,83.33,0.0,100.0,0.34,83.33,0.0,100.0,2.9267,-0.5769,6.0142,0.0,0.0,0.0,0.8287,-0.0036,0.9983,2629.25 +47,60,86.67,0.0,100.0,0.34,86.67,0.0,100.0,3.7886,-0.5769,6.9961,0.0,0.0,0.0,0.862,-0.0033,0.9988,2710.51 +48,60,91.67,0.0,100.0,0.34,91.67,0.0,100.0,4.7006,-0.578,7.9779,0.0,0.0,0.0,0.9119,-0.003,0.9987,2761.03 +49,60,93.33,0.0,100.0,0.34,93.33,0.0,100.0,5.6291,-0.579,8.9597,0.0,0.0,0.0,0.9285,-0.0011,0.9976,2805.62 +50,60,95.0,0.0,100.0,0.34,95.0,0.0,100.0,6.5743,-0.58,9.9416,0.0,0.0,0.0,0.9452,-0.001,0.999,2854.53 +51,60,80.0,0.0,100.0,0.34,95.0,0.0,100.0,7.1911,-0.5808,10.0,0.0,0.0,0.0,0.6452,-1.0107,0.998,2924.54 +52,60,65.0,0.0,100.0,0.34,96.67,0.0,100.0,7.4557,-0.5816,10.0,0.0,0.0,0.0,0.3287,-1.0098,0.9991,2995.2 +53,59,52.54,0.0,100.0,0.32,98.31,0.0,100.0,7.5511,-0.5824,10.0,0.0,-0.0,-0.0,0.0632,-1.0091,0.9981,3068.44 +54,59,42.37,0.0,100.0,0.07,96.36,0.0,100.0,7.1476,-0.583,10.0,0.0,0.0,0.0,-0.123,-1.0131,0.9981,3128.1 +55,60,40.0,0.0,100.0,0.14,97.78,68.36,100.0,6.7778,0.4163,10.0,0.0,0.0,0.0,-0.2017,-1.0121,0.9993,3216.37 +56,59,38.98,0.0,100.0,0.13,93.39,54.69,100.0,6.4013,1.4149,10.0,0.0,0.0,0.0,-0.2016,-1.0112,0.9986,3269.68 +57,60,35.0,0.0,100.0,0.13,86.91,43.74,100.0,5.9236,2.2062,10.0,0.0,0.0,0.0,-0.2387,-1.0103,0.9986,3354.76 +58,60,33.33,0.0,100.0,0.12,79.1,34.98,100.0,5.4857,1.7655,10.0,0.0,0.0,0.0,-0.2058,-1.0046,0.9986,3407.46 +59,60,28.33,0.0,100.0,0.11,71.64,27.97,100.0,5.0428,1.4128,10.0,0.0,0.0,0.0,-0.2275,-1.0056,0.9986,3456.57 +60,60,28.33,0.0,100.0,0.1,65.1,22.36,100.0,4.6681,1.1306,10.0,0.0,0.0,0.0,-0.1526,-1.0052,0.9986,3510.0 +61,60,23.33,0.0,100.0,0.09,59.53,17.88,100.0,4.2986,0.9048,10.0,0.0,0.0,0.0,-0.187,-1.0168,0.9986,3562.01 +62,60,20.0,0.0,100.0,0.09,54.34,14.29,100.0,3.9448,0.7241,10.0,0.0,0.0,0.0,-0.1977,-1.0154,0.9986,3620.56 +63,60,15.0,0.0,100.0,0.08,49.65,11.42,100.0,3.5829,0.5795,10.0,0.0,0.0,0.0,-0.2456,-1.0142,0.9986,3656.32 +64,58,12.07,0.0,100.0,0.07,44.83,9.12,100.0,3.2058,0.4638,10.0,0.0,0.0,0.0,-0.2521,-1.0131,0.9986,3704.03 +65,60,5.0,0.0,100.0,0.14,41.98,7.28,100.0,2.8496,0.3712,10.0,0.0,0.0,0.0,-0.3566,-1.0121,0.9981,3728.53 +66,60,5.0,0.0,100.0,0.08,38.22,5.81,100.0,2.4783,0.2971,10.0,0.0,0.0,0.0,-0.3215,-1.007,0.9981,3769.65 +67,60,6.67,0.0,100.0,0.07,38.0,4.64,100.0,2.1638,0.2378,10.0,0.0,0.0,0.0,-0.2812,-1.0054,0.9994,3825.9 +68,59,10.17,0.0,100.0,0.07,39.37,4.62,100.0,1.7998,0.2368,8.9978,0.0,0.0,0.0,-0.2312,-1.005,0.9994,3874.72 +69,60,18.33,0.0,100.0,0.09,42.47,3.68,100.0,1.8198,0.1896,10.0,0.0,0.0,0.0,-0.1,-1.0026,0.9995,3928.11 +70,59,23.73,0.0,100.0,0.09,43.73,3.04,100.0,1.822,0.1543,10.0,0.0,0.0,0.0,-0.0055,-1.0019,0.9995,3998.62 +71,59,33.9,0.0,100.0,0.09,49.91,2.46,100.0,1.9297,0.1282,10.0,0.0,0.0,0.0,0.1461,-1.0017,0.9996,4088.79 +72,60,40.0,0.0,100.0,0.08,53.15,1.95,100.0,2.1467,0.1027,10.0,0.0,0.0,0.0,0.2385,-1.0016,0.9996,4148.69 +73,60,40.0,0.0,100.0,0.07,52.14,1.55,100.0,2.398,0.0822,8.9983,0.0,0.0,0.0,0.2514,-1.0017,0.9996,4205.77 +74,60,50.0,0.0,100.0,0.07,59.8,1.23,100.0,2.7787,0.0658,8.3679,0.0,0.0,0.0,0.3806,-1.0016,0.9997,4271.43 +75,60,51.67,0.0,100.0,0.06,59.82,1.55,100.0,3.1965,0.0792,9.3668,0.0,0.0,0.0,0.4179,-1.0015,0.9993,4348.86 +76,59,57.63,0.0,100.0,0.06,64.39,1.24,100.0,3.6083,0.0633,10.0,0.0,0.0,0.0,0.4949,-1.0014,0.9997,4381.06 +77,59,59.32,0.0,100.0,0.05,66.6,0.99,100.0,4.1165,0.0507,10.0,0.0,0.0,0.0,0.5097,-1.0012,0.9997,4428.97 +78,59,55.93,0.0,100.0,0.04,66.82,0.79,100.0,4.5705,0.0406,10.0,0.0,0.0,0.0,0.4391,-1.002,0.9995,4478.12 +79,60,50.0,0.0,100.0,0.05,66.9,0.63,100.0,4.7916,0.0325,10.0,0.0,0.0,0.0,0.3211,-1.002,0.9998,4556.71 +80,60,53.33,0.0,100.0,0.04,71.07,0.5,100.0,5.0713,0.026,10.0,0.0,0.0,0.0,0.3482,-1.0019,0.9998,4642.23 +81,59,45.76,0.0,100.0,0.04,73.37,0.63,100.0,5.148,0.0325,10.0,0.0,0.0,0.0,0.1751,-1.0033,0.9998,4722.18 +82,59,49.15,0.0,100.0,0.03,79.07,0.5,100.0,5.355,0.026,10.0,0.0,0.0,0.0,0.1843,-1.003,0.9998,4795.32 +83,59,47.46,0.0,100.0,0.08,77.49,0.4,100.0,5.266,0.0208,10.0,0.0,0.0,0.0,0.1575,-1.0028,0.9998,4854.46 +84,59,45.76,0.0,100.0,0.08,80.52,0.31,100.0,5.3047,0.0167,10.0,0.0,0.0,0.0,0.09,-1.0026,0.9997,4908.88 +85,60,45.0,0.0,100.0,0.03,78.32,0.25,100.0,5.2608,0.0134,10.0,0.0,0.0,0.0,0.0908,-1.0024,0.9997,4984.41 +86,60,43.33,0.0,100.0,0.03,79.27,0.9,100.0,5.1379,0.0462,10.0,0.0,0.0,0.0,0.0333,-1.0015,0.9998,5055.98 +87,58,43.1,0.0,100.0,0.03,77.97,0.86,100.0,5.0961,0.0462,10.0,0.0,0.0,0.0,0.0418,-1.0014,0.9997,5124.73 +88,59,40.68,0.0,100.0,0.03,73.2,0.68,100.0,4.9881,0.037,10.0,0.0,0.0,0.0,0.046,-1.0013,0.9997,5167.4 +89,60,40.0,0.0,100.0,0.03,69.25,0.54,100.0,4.8625,0.0297,10.0,0.0,0.0,0.0,0.0629,-1.0012,0.9997,5220.7 +90,60,33.33,0.0,100.0,0.03,65.45,0.43,100.0,4.7178,0.0238,10.0,0.0,0.0,0.0,-0.0265,-1.0016,0.9997,5266.78 +91,60,35.0,0.0,100.0,0.03,63.0,0.34,100.0,4.5998,0.0191,10.0,0.0,0.0,0.0,0.0285,-1.0015,0.9998,5307.87 +92,60,28.33,0.0,100.0,0.03,59.4,0.26,100.0,4.3987,0.0153,10.0,0.0,0.0,0.0,-0.0639,-1.0014,0.9997,5367.6 +93,60,33.33,0.0,100.0,0.03,62.4,0.21,100.0,4.2702,0.0123,10.0,0.0,0.0,0.0,0.0111,-1.0012,0.9998,5449.74 +94,60,33.33,0.0,100.0,0.03,62.78,0.16,100.0,4.1308,0.0098,10.0,0.0,0.0,0.0,0.0104,-1.0015,0.9999,5486.74 +95,60,33.33,0.0,100.0,0.03,60.8,0.12,100.0,4.0192,0.0079,10.0,0.0,0.0,0.0,0.0228,-1.0014,0.9998,5590.25 +96,60,31.67,0.0,100.0,0.01,59.54,0.1,100.0,3.8932,0.0064,10.0,0.0,0.0,0.0,0.0093,-1.0012,0.9999,5637.01 +97,60,28.33,0.0,100.0,0.01,57.63,0.07,100.0,3.7308,0.0051,10.0,0.0,0.0,0.0,-0.0458,-1.0046,0.9999,5694.68 +98,60,31.67,0.0,100.0,0.01,57.61,0.06,100.0,3.6394,0.0041,10.0,0.0,0.0,0.0,0.0252,-1.0042,0.9999,5767.25 +99,60,36.67,0.0,100.0,0.01,59.2,0.04,100.0,3.6324,0.0033,10.0,0.0,0.0,0.0,0.1096,-1.0039,0.9999,5825.5 +100,60,35.0,0.0,100.0,0.01,56.35,0.03,100.0,3.6387,0.0027,10.0,0.0,0.0,0.0,0.1077,-1.0036,0.9998,5880.43 +101,60,35.0,0.0,100.0,0.01,56.34,0.02,100.0,3.6624,0.0021,10.0,0.0,0.0,0.0,0.1077,-1.0033,0.9998,5919.94 +102,60,40.0,0.0,100.0,0.01,59.54,0.02,100.0,3.7408,0.0017,10.0,0.0,0.0,0.0,0.1721,-1.0007,0.9999,5991.78 +103,60,33.33,0.0,100.0,0.01,58.57,0.01,100.0,3.7381,0.0014,10.0,0.0,0.0,0.0,0.0551,-1.0007,0.9999,6023.96 +104,60,28.33,0.0,100.0,0.01,56.52,0.01,100.0,3.6798,0.0011,10.0,0.0,0.0,0.0,-0.0193,-1.0006,0.9999,6059.94 +105,60,33.33,0.0,100.0,0.01,60.91,0.0,100.0,3.6791,0.0009,10.0,0.0,0.0,0.0,0.0383,-1.0006,0.9999,6098.32 +106,60,30.0,0.0,100.0,0.01,60.36,0.0,100.0,3.6532,0.0007,10.0,0.0,0.0,0.0,-0.0257,-1.0005,0.9999,6159.62 +107,60,33.33,0.0,100.0,0.01,61.56,0.0,100.0,3.6575,0.0006,10.0,0.0,0.0,0.0,0.0302,-1.0005,0.9999,6251.42 +108,60,43.33,0.0,100.0,0.01,71.19,0.0,100.0,3.7493,0.0005,10.0,0.0,0.0,0.0,0.1223,-1.0004,0.9999,6313.69 +109,60,41.67,0.0,100.0,0.01,67.62,0.0,100.0,3.8154,0.0004,10.0,0.0,0.0,0.0,0.1212,-1.0004,0.9999,6385.39 +110,60,45.0,0.0,100.0,0.01,67.67,0.0,100.0,3.9373,0.0003,10.0,0.0,0.0,0.0,0.1914,-1.0004,1.0,6465.96 +111,60,46.67,0.0,100.0,0.01,67.38,0.0,100.0,4.0826,0.0002,10.0,0.0,-0.0,-0.0,0.2242,-1.0007,1.0,6514.61 +112,60,45.0,0.0,100.0,0.01,67.76,0.0,100.0,4.1902,0.0001,10.0,0.0,0.0,0.0,0.1945,-1.0006,0.9999,6575.25 +113,60,48.33,0.0,100.0,0.01,69.7,0.0,100.0,4.3479,0.0,10.0,0.0,0.0,0.0,0.2411,-1.0006,1.0,6622.39 +114,60,53.33,0.0,100.0,0.01,71.91,0.92,100.0,4.5676,0.0461,10.0,0.0,0.0,0.0,0.3218,-1.0005,0.9999,6675.9 +115,60,51.67,0.0,100.0,0.01,71.45,0.74,100.0,4.7474,0.0369,10.0,0.0,0.0,0.0,0.2983,-1.0005,0.9999,6715.2 +116,60,51.67,0.0,100.0,0.01,71.15,1.79,100.0,4.9291,0.0901,10.0,0.0,0.0,0.0,0.3021,-1.0003,1.0,6776.31 +117,59,49.15,0.0,100.0,0.01,71.33,2.25,100.0,4.978,0.1126,10.0,0.0,0.0,0.0,0.2438,-1.0002,0.9999,6820.22 +118,59,45.76,0.0,100.0,0.01,70.53,1.8,100.0,5.1244,0.0901,10.0,0.0,0.0,0.0,0.186,-1.0002,0.9999,6908.0 +119,60,43.33,0.0,100.0,0.01,70.7,1.44,100.0,5.0634,0.0721,10.0,0.0,-0.0,-0.0,0.1411,-1.0002,1.0,6976.14 +120,60,48.33,0.0,100.0,0.01,74.87,1.15,100.0,5.0895,0.0577,10.0,0.0,0.0,0.0,0.1973,-1.0002,1.0,7059.41 +121,60,46.67,0.0,100.0,0.01,74.55,3.51,100.0,5.0986,0.1759,10.0,0.0,0.0,0.0,0.168,-1.0003,1.0,7120.53 +122,60,48.33,0.0,100.0,0.01,76.78,2.81,100.0,5.1116,0.1407,10.0,0.0,0.0,0.0,0.1735,-1.0003,1.0,7186.45 +123,60,50.0,0.0,100.0,0.01,78.53,3.51,100.0,5.1017,0.1759,10.0,0.0,0.0,0.0,0.1848,-1.0003,1.0,7287.06 +124,60,50.0,0.0,100.0,0.01,74.85,2.81,100.0,5.1119,0.1407,10.0,0.0,0.0,0.0,0.2145,-1.0003,0.9999,7334.36 +125,60,48.33,0.0,100.0,0.01,75.06,2.81,100.0,5.1313,0.1407,10.0,0.0,0.0,0.0,0.1867,-1.0011,1.0,7383.78 +126,60,48.33,0.0,100.0,0.01,73.67,2.81,100.0,5.1463,0.1407,10.0,0.0,0.0,0.0,0.1998,-1.001,1.0,7445.69 +127,60,48.33,0.0,100.0,0.01,72.21,2.25,100.0,5.1655,0.1126,10.0,0.0,0.0,0.0,0.2139,-1.0009,1.0,7511.03 +128,60,40.0,0.0,100.0,0.0,69.44,1.8,100.0,5.1028,0.0901,10.0,0.0,0.0,0.0,0.0778,-1.0008,1.0,7556.85 +129,60,40.0,0.0,100.0,0.0,68.52,2.25,100.0,5.0365,0.1126,10.0,0.0,0.0,0.0,0.0892,-1.0008,1.0,7593.79 +130,60,33.33,0.0,100.0,0.0,67.08,1.8,100.0,4.8845,0.0901,10.0,0.0,0.0,0.0,-0.0344,-1.0003,1.0,7669.92 +131,60,36.67,0.0,100.0,0.0,69.13,2.81,100.0,4.7709,0.1407,10.0,0.0,0.0,0.0,0.0149,-1.0003,1.0,7713.36 +132,60,33.33,0.0,100.0,0.0,68.21,2.25,100.0,4.6003,0.1126,10.0,0.0,0.0,0.0,-0.0402,-1.0003,1.0,7752.97 +133,60,26.67,0.0,100.0,0.0,64.57,1.8,100.0,4.3514,0.0901,10.0,0.0,0.0,0.0,-0.1488,-1.0002,1.0,7812.29 +134,59,25.42,0.0,100.0,0.0,63.94,1.8,100.0,4.0461,0.0901,10.0,0.0,0.0,0.0,-0.1637,-1.0002,1.0,7886.8 +135,60,28.33,0.0,100.0,0.0,63.53,1.44,100.0,3.9202,0.0721,10.0,0.0,0.0,0.0,-0.1108,-1.0001,1.0,7956.56 +136,60,31.67,0.0,100.0,0.0,63.08,2.81,100.0,3.7965,0.1407,10.0,0.0,0.0,0.0,-0.0343,-1.0001,1.0,7984.12 +137,60,35.0,0.0,100.0,0.0,65.56,3.52,100.0,3.7186,0.1759,10.0,0.0,-0.0,-0.0,0.0054,-1.0001,1.0,8055.9 +138,60,35.0,0.0,100.0,0.0,62.69,2.81,100.0,3.6792,0.1407,10.0,0.0,0.0,0.0,0.0288,-1.0001,1.0,8120.02 +139,60,38.33,0.0,100.0,0.0,61.74,2.81,100.0,3.6987,0.1407,10.0,0.0,0.0,0.0,0.1074,-1.0001,1.0,8169.35 +140,60,38.33,0.0,100.0,0.0,61.31,3.51,100.0,3.7366,0.1759,10.0,0.0,0.0,0.0,0.1169,-1.0001,1.0,8215.2 +141,60,38.33,0.0,100.0,0.0,61.61,3.51,100.0,3.7691,0.1759,10.0,0.0,0.0,0.0,0.1215,-1.0001,1.0,8253.65 +142,60,40.0,0.0,100.0,0.0,61.6,2.81,100.0,3.8407,0.1407,10.0,0.0,0.0,0.0,0.1549,-1.0001,1.0,8305.37 +143,60,45.0,0.0,100.0,0.0,65.33,2.25,100.0,3.9876,0.1126,10.0,0.0,0.0,0.0,0.2208,-1.0001,1.0,8392.92 +144,60,50.0,0.0,100.0,0.0,69.26,1.8,100.0,4.1862,0.0901,10.0,0.0,0.0,0.0,0.2884,-1.0001,1.0,8486.61 +145,58,51.72,0.0,100.0,0.0,70.87,1.44,100.0,4.345,0.0721,10.0,0.0,0.0,0.0,0.3037,-1.0001,1.0,8553.18 +146,59,54.24,0.0,100.0,0.0,71.15,1.15,100.0,4.6027,0.0576,10.0,0.0,0.0,0.0,0.3521,-1.0001,1.0,8584.12 +147,60,51.67,0.0,100.0,0.0,69.04,0.92,100.0,4.755,0.0461,10.0,0.0,0.0,0.0,0.3204,-1.0001,1.0,8673.87 +148,59,57.63,0.0,100.0,0.0,72.08,2.81,100.0,5.002,0.1407,10.0,0.0,0.0,0.0,0.4125,-1.0001,1.0,8749.21 +149,60,58.33,0.0,100.0,0.0,74.71,2.25,100.0,5.1833,0.1126,10.0,0.0,0.0,0.0,0.3994,-1.0,1.0,8809.71 +150,60,58.33,0.0,100.0,0.0,74.41,4.4,100.0,5.3654,0.2199,10.0,0.0,0.0,0.0,0.4032,-1.0001,1.0,8859.65 +151,60,56.67,0.0,100.0,0.0,74.12,3.52,100.0,5.5176,0.1759,10.0,0.0,0.0,0.0,0.3735,-1.0001,1.0,8895.87 +152,60,51.67,0.0,100.0,0.0,72.3,2.81,100.0,5.6092,0.1407,10.0,0.0,0.0,0.0,0.2921,-1.0001,1.0,8955.5 +153,60,50.0,0.0,100.0,0.0,72.39,2.25,100.0,5.6286,0.1126,10.0,0.0,0.0,0.0,0.2618,-1.0002,1.0,9024.46 +154,59,50.85,0.0,100.0,0.0,76.36,1.8,100.0,5.7024,0.0901,10.0,0.0,0.0,0.0,0.2327,-1.0002,1.0,9111.69 +155,60,45.0,0.0,100.0,0.0,75.07,1.44,100.0,5.5182,0.0721,10.0,0.0,0.0,0.0,0.1324,-1.0002,1.0,9184.99 +156,60,46.67,0.0,100.0,0.0,77.98,1.15,100.0,5.4518,0.0576,10.0,0.0,0.0,0.0,0.1335,-1.0002,1.0,9238.89 +157,60,45.0,0.0,100.0,0.0,76.96,0.92,100.0,5.3799,0.0461,10.0,0.0,-0.0,-0.0,0.1046,-1.0002,1.0,9313.01 +158,60,43.33,0.0,100.0,0.0,75.88,0.74,100.0,5.266,0.0369,10.0,0.0,0.0,0.0,0.0806,-1.0,1.0,9391.34 +159,60,40.0,0.0,100.0,0.0,74.28,0.59,100.0,5.1065,0.0295,10.0,0.0,0.0,0.0,0.0256,-1.0,1.0,9449.98 +160,60,35.0,0.0,100.0,0.0,70.42,0.47,100.0,4.9091,0.0236,10.0,0.0,0.0,0.0,-0.0428,-1.0001,1.0,9515.82 +161,60,36.67,0.0,100.0,0.0,69.91,1.44,100.0,4.7561,0.0721,10.0,0.0,0.0,0.0,-0.003,-1.0001,1.0,9554.27 +162,60,35.0,0.0,100.0,0.0,66.26,1.15,100.0,4.6165,0.0576,10.0,0.0,0.0,0.0,0.0009,-1.0001,1.0,9595.68 +163,60,33.33,0.0,100.0,0.0,64.29,0.92,100.0,4.4765,0.0461,10.0,0.0,0.0,0.0,-0.012,-1.0,1.0,9646.97 +164,60,26.67,0.0,100.0,0.0,62.09,1.44,100.0,4.2652,0.0721,10.0,0.0,0.0,0.0,-0.1261,-1.0001,1.0,9693.96 +165,60,25.0,0.0,100.0,0.0,59.62,1.15,100.0,4.0566,0.0576,10.0,0.0,0.0,0.0,-0.137,-1.0001,1.0,9725.77 +166,60,21.67,0.0,100.0,0.0,56.03,0.92,100.0,3.8046,0.0461,10.0,0.0,-0.0,-0.0,-0.1629,-1.0,1.0,9802.71 +167,60,21.67,0.0,100.0,0.0,56.07,0.74,100.0,3.5775,0.0369,10.0,0.0,0.0,0.0,-0.1592,-1.0,1.0,9849.04 +168,60,23.33,0.0,100.0,0.0,57.75,0.59,100.0,3.379,0.0295,10.0,0.0,0.0,0.0,-0.1428,-1.0,1.0,9934.19 +169,59,27.12,0.0,100.0,0.0,57.66,1.8,100.0,3.1732,0.0901,10.0,0.0,0.0,0.0,-0.0767,-1.0,1.0,9986.4 +170,60,30.0,0.0,100.0,0.0,57.49,1.44,100.0,3.1831,0.0721,10.0,0.0,0.0,0.0,-0.0145,-1.0,1.0,10057.48 +171,60,35.0,0.0,100.0,0.0,61.65,1.15,100.0,3.1791,0.0576,10.0,0.0,0.0,0.0,0.0461,-1.0,1.0,10109.99 +172,60,38.33,0.0,100.0,0.0,61.49,0.92,100.0,3.2451,0.0461,10.0,0.0,0.0,0.0,0.1189,-1.0,1.0,10173.4 +173,60,41.67,0.0,100.0,0.0,62.73,2.81,100.0,3.3644,0.1407,10.0,0.0,0.0,0.0,0.17,-1.0,1.0,10244.11 +174,60,41.67,0.0,100.0,0.0,62.68,2.25,100.0,3.503,0.1126,10.0,0.0,0.0,0.0,0.1748,-1.0,1.0,10291.75 +175,60,45.0,0.0,100.0,0.0,63.27,1.8,100.0,3.6954,0.0901,10.0,0.0,0.0,0.0,0.2424,-1.0,1.0,10361.83 +176,60,46.67,0.0,100.0,0.0,63.86,1.44,100.0,3.925,0.0721,10.0,0.0,0.0,0.0,0.2685,-1.0,1.0,10426.84 +177,60,46.67,0.0,100.0,0.0,63.34,1.15,100.0,4.1477,0.0576,10.0,0.0,0.0,0.0,0.279,-1.0,1.0,10481.08 +178,60,41.67,0.0,100.0,0.0,62.94,0.92,100.0,4.2877,0.0461,10.0,0.0,0.0,0.0,0.1841,-1.0,1.0,10511.25 +179,60,40.0,0.0,100.0,0.0,62.34,1.8,100.0,4.3792,0.0901,10.0,0.0,0.0,0.0,0.1541,-1.0,1.0,10574.81 +180,60,38.33,0.0,100.0,0.0,63.77,1.44,100.0,4.4207,0.0721,10.0,0.0,0.0,0.0,0.1111,-1.0,1.0,10641.99 +181,58,43.1,0.0,100.0,0.0,69.17,1.15,100.0,4.5354,0.0576,10.0,0.0,0.0,0.0,0.1569,-1.0,1.0,10700.96 +182,59,38.98,0.0,100.0,0.0,66.44,0.92,100.0,4.4578,0.0461,10.0,0.0,0.0,0.0,0.0974,-1.0,1.0,10727.9 +183,59,38.98,0.0,100.0,0.0,67.28,0.74,100.0,4.5088,0.0369,10.0,0.0,0.0,0.0,0.0827,-1.0,1.0,10836.86 +184,60,40.0,0.0,100.0,0.0,66.25,0.59,100.0,4.3967,0.0295,10.0,0.0,0.0,0.0,0.1056,-1.0,1.0,10912.11 +185,59,38.98,0.0,100.0,0.0,67.27,0.47,100.0,4.2685,0.0236,10.0,0.0,0.0,0.0,0.0744,-1.0,1.0,10979.44 +186,60,41.67,0.0,100.0,0.0,67.8,0.38,100.0,4.3494,0.0189,10.0,0.0,0.0,0.0,0.1233,-1.0,1.0,11038.63 +187,60,43.33,0.0,100.0,0.0,67.83,0.3,100.0,4.3678,0.0151,10.0,0.0,0.0,0.0,0.1563,-1.0,1.0,11109.67 +188,60,45.0,0.0,100.0,0.0,68.17,0.24,100.0,4.4233,0.0121,10.0,0.0,0.0,0.0,0.1896,-1.0,1.0,11162.51 +189,60,43.33,0.0,100.0,0.0,67.13,0.19,100.0,4.47,0.0097,10.0,0.0,0.0,0.0,0.1692,-1.0,1.0,11198.78 +190,60,41.67,0.0,100.0,0.0,64.03,0.15,100.0,4.4793,0.0077,10.0,0.0,0.0,0.0,0.1621,-1.0,1.0,11270.11 +191,60,35.0,0.0,100.0,0.0,64.47,0.12,100.0,4.4068,0.0062,10.0,0.0,0.0,0.0,0.0275,-1.0,1.0,11309.57 +192,60,36.67,0.0,100.0,0.0,63.56,0.1,100.0,4.376,0.005,10.0,0.0,0.0,0.0,0.0721,-1.0,1.0,11357.43 +193,60,36.67,0.0,100.0,0.0,64.5,0.38,100.0,4.3506,0.0189,10.0,0.0,0.0,0.0,0.0646,-1.0,1.0,11398.32 +194,60,30.0,0.0,100.0,0.0,61.93,0.3,100.0,4.2439,0.0151,10.0,0.0,0.0,0.0,-0.045,-1.0,1.0,11470.84 +195,60,31.67,0.0,100.0,0.0,61.14,0.24,100.0,4.1346,0.0121,10.0,0.0,0.0,0.0,-0.0018,-1.0,1.0,11543.01 +196,60,31.67,0.0,100.0,0.0,60.48,0.19,100.0,4.0196,0.0097,10.0,0.0,0.0,0.0,-0.0101,-1.0,1.0,11595.66 +197,60,33.33,0.0,100.0,0.0,62.23,0.15,100.0,3.9275,0.0077,10.0,0.0,0.0,0.0,0.0138,-1.0,1.0,11681.1 +198,60,38.33,0.0,100.0,0.0,67.19,0.38,100.0,3.8871,0.0189,10.0,0.0,0.0,0.0,0.0642,-1.0,1.0,11752.71 +199,60,40.0,0.0,100.0,0.0,66.57,0.3,100.0,3.8842,0.0151,10.0,0.0,0.0,0.0,0.0971,-1.0,1.0,11807.09 +200,60,36.67,0.0,100.0,0.0,63.59,0.24,100.0,3.8628,0.0121,10.0,0.0,0.0,0.0,0.0677,-1.0,1.0,11865.48 +201,60,40.0,0.0,100.0,0.0,65.37,0.19,100.0,3.8951,0.0097,10.0,0.0,0.0,0.0,0.1162,-1.0,1.0,11940.49 +202,60,40.0,0.0,100.0,0.0,63.87,0.15,100.0,3.9415,0.0077,10.0,0.0,0.0,0.0,0.1308,-1.0,1.0,11980.38 +203,60,40.0,0.0,100.0,0.0,63.91,0.12,100.0,3.9885,0.0062,10.0,0.0,0.0,0.0,0.1303,-1.0,1.0,12041.58 +204,53,43.4,0.0,100.0,0.0,63.62,0.1,100.0,4.0893,0.005,10.0,0.0,0.0,0.0,0.2001,-1.0,1.0,12080.25 +205,30,43.33,0.0,100.0,0.0,68.69,0.08,100.0,5.0628,0.004,10.0,0.0,0.0,0.0,0.1663,-1.0,1.0,12119.71 +206,59,37.29,0.0,100.0,0.0,66.68,0.06,100.0,4.2175,0.0032,10.0,0.0,0.0,0.0,0.0521,-1.0,1.0,12206.11 +207,60,33.33,0.0,100.0,0.0,66.21,0.05,100.0,4.1214,0.0025,10.0,0.0,0.0,0.0,-0.0234,-1.0,1.0,12248.04 +208,45,31.11,0.0,100.0,0.0,64.05,3.52,100.0,3.8273,0.1759,10.0,0.0,0.0,0.0,-0.0506,-1.0,1.0,12275.08 +209,60,30.0,0.0,100.0,0.0,64.93,0.24,100.0,3.9684,0.0121,10.0,0.0,0.0,0.0,-0.07,-1.0,1.0,12382.54 +210,60,33.33,0.0,100.0,0.0,67.18,2.25,100.0,3.8991,0.1126,10.0,0.0,0.0,0.0,-0.0303,-1.0,1.0,12475.68 +211,60,36.67,0.0,100.0,0.0,69.37,1.8,100.0,3.8489,0.0901,10.0,0.0,0.0,0.0,-0.0002,-1.0,1.0,12538.77 +212,60,38.33,0.0,100.0,0.0,66.92,1.44,100.0,3.8506,0.0721,10.0,0.0,0.0,0.0,0.0574,-1.0,1.0,12581.32 +213,60,38.33,0.0,100.0,0.0,64.13,1.15,100.0,3.8611,0.0576,10.0,0.0,0.0,0.0,0.0817,-1.0,1.0,12650.73 +214,60,38.33,0.0,100.0,0.0,63.58,1.8,100.0,3.8706,0.0901,10.0,0.0,0.0,0.0,0.0928,-1.0,1.0,12700.89 +215,60,41.67,0.0,100.0,0.0,62.82,1.44,100.0,3.9366,0.0721,10.0,0.0,0.0,0.0,0.166,-1.0,1.0,12741.04 +216,60,36.67,0.0,100.0,0.0,61.24,1.15,100.0,3.9254,0.0576,10.0,0.0,0.0,0.0,0.0887,-1.0,1.0,12806.43 +217,60,40.0,0.0,100.0,0.0,60.02,0.92,100.0,3.9978,0.0461,10.0,0.0,0.0,0.0,0.1724,-1.0,1.0,12881.27 +218,60,40.0,0.0,100.0,0.0,58.62,0.74,100.0,4.0921,0.0369,10.0,0.0,0.0,0.0,0.1846,-1.0,1.0,12914.15 +219,60,35.0,0.0,100.0,0.0,57.86,0.59,100.0,4.1015,0.0295,10.0,0.0,0.0,0.0,0.0976,-1.0,1.0,12970.09 +220,60,35.0,0.0,100.0,0.0,57.3,0.47,100.0,4.0984,0.0236,10.0,0.0,0.0,0.0,0.1052,-1.0,1.0,13029.9 +221,60,35.0,0.0,100.0,0.0,59.68,0.74,100.0,4.0646,0.0369,10.0,0.0,0.0,0.0,0.079,-1.0,1.0,13122.0 +222,60,36.67,0.0,100.0,0.0,62.66,0.92,100.0,4.0476,0.0461,10.0,0.0,0.0,0.0,0.0876,-1.0,1.0,13157.98 +223,60,35.0,0.0,100.0,0.0,62.37,0.74,100.0,4.0183,0.0369,10.0,0.0,-0.0,-0.0,0.0579,-1.0,1.0,13225.49 +224,60,38.33,0.0,100.0,0.0,64.67,0.59,100.0,4.0054,0.0295,10.0,0.0,0.0,0.0,0.0958,-1.0,1.0,13314.33 +225,60,41.67,0.0,100.0,0.0,66.9,0.47,100.0,4.0263,0.0236,10.0,0.0,0.0,0.0,0.1388,-1.0,1.0,13362.58 +226,60,40.0,0.0,100.0,0.0,65.51,0.38,100.0,4.0336,0.0189,10.0,0.0,0.0,0.0,0.1145,-1.0,1.0,13415.94 +227,60,40.0,0.0,100.0,0.0,65.67,0.3,100.0,4.0555,0.0151,10.0,0.0,0.0,0.0,0.1124,-1.0,1.0,13471.87 +228,60,46.67,0.0,100.0,0.0,69.04,1.8,100.0,4.1652,0.0901,10.0,0.0,0.0,0.0,0.212,-1.0,1.0,13550.63 +229,60,46.67,0.0,100.0,0.0,67.88,1.44,100.0,4.2894,0.0721,10.0,0.0,0.0,0.0,0.2265,-1.0,1.0,13591.17 +230,60,45.0,0.0,100.0,0.0,66.92,1.15,100.0,4.4013,0.0576,10.0,0.0,0.0,0.0,0.2052,-1.0,1.0,13633.31 +231,60,40.0,0.0,100.0,0.0,65.83,0.92,100.0,4.4439,0.0461,10.0,0.0,0.0,0.0,0.1146,-1.0,1.0,13675.7 +232,59,38.98,0.0,100.0,0.0,65.42,0.74,100.0,4.5083,0.0369,10.0,0.0,-0.0,-0.0,0.0975,-1.0,1.0,13770.45 +233,60,41.67,0.0,100.0,0.0,67.22,0.92,100.0,4.4924,0.0461,10.0,0.0,0.0,0.0,0.1389,-1.0,1.0,13824.52 +234,60,41.67,0.0,100.0,0.0,66.76,0.74,100.0,4.5095,0.0369,10.0,0.0,0.0,0.0,0.1447,-1.0,1.0,13909.38 +235,60,41.67,0.0,100.0,0.0,70.79,0.59,100.0,4.5116,0.0295,10.0,0.0,0.0,0.0,0.1026,-1.0,1.0,13978.99 +236,60,40.0,0.0,100.0,0.0,67.63,0.47,100.0,4.4996,0.0236,10.0,0.0,0.0,0.0,0.0921,-1.0,1.0,14020.17 +237,60,38.33,0.0,100.0,0.0,64.44,0.38,100.0,4.463,0.0189,10.0,0.0,0.0,0.0,0.0904,-1.0,1.0,14053.86 +238,60,36.67,0.0,100.0,0.0,63.21,0.3,100.0,4.3839,0.0151,10.0,0.0,0.0,0.0,0.0723,-1.0,1.0,14134.98 +239,60,41.67,0.0,100.0,0.0,65.33,0.24,100.0,4.3683,0.0121,10.0,0.0,0.0,0.0,0.1541,-1.0,1.0,14187.28 +240,60,41.67,0.0,100.0,0.0,65.11,0.19,100.0,4.3645,0.0097,10.0,0.0,0.0,0.0,0.1487,-1.0,1.0,14235.22 +241,60,45.0,0.0,100.0,0.0,65.36,0.15,100.0,4.4109,0.0077,10.0,0.0,0.0,0.0,0.2163,-1.0,1.0,14305.93 +242,60,41.67,0.0,100.0,0.0,65.89,0.12,100.0,4.4185,0.0062,10.0,0.0,0.0,0.0,0.1472,-1.0,1.0,14373.25 +243,60,41.67,0.0,100.0,0.0,66.28,1.8,100.0,4.4265,0.0901,10.0,0.0,0.0,0.0,0.1423,-1.0,1.0,14411.83 +244,60,38.33,0.0,100.0,0.0,68.88,1.44,100.0,4.384,0.0721,10.0,0.0,0.0,0.0,0.0557,-1.0,1.0,14492.86 +245,60,38.33,0.0,100.0,0.0,67.99,1.15,100.0,4.3466,0.0576,10.0,0.0,-0.0,-0.0,0.0626,-1.0,1.0,14538.98 +246,60,38.33,0.0,100.0,0.0,67.46,0.92,100.0,4.3309,0.0461,10.0,0.0,0.0,0.0,0.0707,-1.0,1.0,14597.91 +247,60,41.67,0.0,100.0,0.0,67.82,0.74,100.0,4.3578,0.0369,10.0,0.0,0.0,0.0,0.1272,-1.0,1.0,14654.04 +248,60,40.0,0.0,100.0,0.0,69.75,0.92,100.0,4.3671,0.0461,10.0,0.0,0.0,0.0,0.074,-1.0,1.0,14729.16 +249,60,41.67,0.0,100.0,0.0,69.38,0.74,100.0,4.3773,0.0369,10.0,0.0,0.0,0.0,0.1036,-1.0,1.0,14821.31 +250,60,43.33,0.0,100.0,0.0,69.02,0.59,100.0,4.4153,0.0295,10.0,0.0,0.0,0.0,0.1414,-1.0,1.0,14895.91 +251,60,38.33,0.0,100.0,0.0,65.88,0.47,100.0,4.4039,0.0236,10.0,0.0,0.0,0.0,0.0764,-1.0,1.0,14967.73 +252,60,41.67,0.0,100.0,0.0,69.74,2.25,100.0,4.4264,0.1126,10.0,0.0,0.0,0.0,0.1116,-1.0,1.0,15024.97 +253,60,40.0,0.0,100.0,0.0,68.06,1.8,100.0,4.4206,0.0901,10.0,0.0,0.0,0.0,0.0867,-1.0,1.0,15077.55 +254,60,38.33,0.0,100.0,0.0,68.34,1.44,100.0,4.3843,0.0721,10.0,0.0,-0.0,-0.0,0.0541,-1.0,1.0,15141.74 +255,60,35.0,0.0,100.0,0.0,67.24,1.15,100.0,4.3325,0.0576,10.0,0.0,0.0,0.0,0.0011,-1.0,1.0,15174.31 +256,60,33.33,0.0,100.0,0.0,64.13,0.92,100.0,4.2677,0.0461,10.0,0.0,0.0,0.0,-0.0058,-1.0,1.0,15215.26 +257,60,33.33,0.0,100.0,0.0,64.25,0.74,100.0,4.1994,0.0369,10.0,0.0,0.0,0.0,-0.0073,-1.0,1.0,15270.61 +258,60,28.33,0.0,100.0,0.0,61.07,0.59,100.0,4.068,0.0295,10.0,0.0,0.0,0.0,-0.0759,-1.0,1.0,15330.81 +259,60,23.33,0.0,100.0,0.0,59.18,1.15,100.0,3.8816,0.0576,10.0,0.0,0.0,0.0,-0.1606,-1.0,1.0,15390.63 +260,60,23.33,0.0,100.0,0.0,58.47,0.92,100.0,3.709,0.0461,10.0,0.0,0.0,0.0,-0.1559,-1.0,1.0,15440.27 +261,60,30.0,0.0,100.0,0.0,61.55,0.74,100.0,3.6248,0.0369,10.0,0.0,0.0,0.0,-0.0486,-1.0,1.0,15516.21 +262,60,26.67,0.0,100.0,0.0,59.87,0.59,100.0,3.4894,0.0295,10.0,0.0,0.0,0.0,-0.0983,-1.0,1.0,15569.49 +263,60,30.0,0.0,100.0,0.0,61.16,2.25,100.0,3.4011,0.1126,10.0,0.0,0.0,0.0,-0.0478,-1.0,1.0,15615.66 +264,60,33.33,0.0,100.0,0.0,63.38,1.8,100.0,3.3531,0.0901,10.0,0.0,0.0,0.0,-0.009,-1.0,1.0,15694.18 +265,60,35.0,0.0,100.0,0.0,62.57,1.44,100.0,3.3543,0.0721,10.0,0.0,0.0,0.0,0.0346,-1.0,1.0,15755.67 +266,60,36.67,0.0,100.0,0.0,61.02,1.15,100.0,3.4092,0.0576,10.0,0.0,0.0,0.0,0.0914,-1.0,1.0,15791.59 +267,60,35.0,0.0,100.0,0.0,57.49,0.92,100.0,3.449,0.0461,10.0,0.0,0.0,0.0,0.0898,-1.0,1.0,15833.48 +268,60,36.67,0.0,100.0,0.0,55.9,0.74,100.0,3.5415,0.0369,10.0,0.0,0.0,0.0,0.1429,-1.0,1.0,15878.45 +269,60,38.33,0.0,100.0,0.0,57.52,2.25,100.0,3.6459,0.1126,10.0,0.0,0.0,0.0,0.1602,-1.0,1.0,15963.62 +270,60,46.67,0.0,100.0,0.0,64.35,1.8,100.0,3.8607,0.0901,10.0,0.0,0.0,0.0,0.2623,-1.0,1.0,16041.4 +271,60,45.0,0.0,100.0,0.0,63.76,1.44,100.0,4.0249,0.0721,10.0,0.0,0.0,0.0,0.2406,-1.0,1.0,16107.68 +272,60,41.67,0.0,100.0,0.0,61.67,1.15,100.0,4.1496,0.0576,10.0,0.0,0.0,0.0,0.1958,-1.0,1.0,16160.13 +273,60,41.67,0.0,100.0,0.0,63.21,0.92,100.0,4.2381,0.0461,10.0,0.0,0.0,0.0,0.1848,-1.0,1.0,16211.67 +274,60,41.67,0.0,100.0,0.0,66.36,2.25,100.0,4.2833,0.1126,10.0,0.0,0.0,0.0,0.1539,-1.0,1.0,16293.32 +275,60,41.67,0.0,100.0,0.0,67.6,1.8,100.0,4.3197,0.0901,10.0,0.0,0.0,0.0,0.1383,-1.0,1.0,16381.2 +276,60,50.0,0.0,100.0,0.0,75.06,2.25,100.0,4.4481,0.1126,10.0,0.0,0.0,0.0,0.2284,-1.0,1.0,16450.84 +277,60,48.33,0.0,100.0,0.0,72.72,1.8,100.0,4.5751,0.0901,10.0,0.0,-0.0,-0.0,0.216,-1.0,1.0,16484.21 +278,60,48.33,0.0,100.0,0.0,71.77,1.44,100.0,4.7031,0.0721,10.0,0.0,0.0,0.0,0.2237,-1.0,1.0,16536.56 +279,60,46.67,0.0,100.0,0.0,71.94,1.15,100.0,4.7831,0.0576,10.0,0.0,0.0,0.0,0.1841,-1.0,1.0,16606.06 +280,60,48.33,0.0,100.0,0.0,73.76,1.44,100.0,4.8282,0.0721,10.0,0.0,0.0,0.0,0.1988,-1.0,1.0,16704.21 +281,60,45.0,0.0,100.0,0.0,72.59,1.15,100.0,4.8584,0.0576,10.0,0.0,0.0,0.0,0.1468,-1.0,1.0,16750.72 +282,60,46.67,0.0,100.0,0.0,71.69,0.92,100.0,4.9255,0.0461,10.0,0.0,0.0,0.0,0.1914,-1.0,1.0,16801.92 +283,57,42.11,0.0,100.0,0.0,68.92,0.74,100.0,4.8912,0.0369,10.0,0.0,0.0,0.0,0.1298,-1.0,1.0,16828.44 +284,59,37.29,0.0,100.0,0.0,69.39,1.15,100.0,4.7945,0.0576,10.0,0.0,0.0,0.0,0.0224,-1.0,1.0,16881.97 +285,56,35.71,0.0,100.0,0.0,69.54,0.92,100.0,4.8172,0.0461,10.0,0.0,0.0,0.0,-0.0121,-1.0,1.0,16921.06 +286,57,36.84,0.0,100.0,0.0,69.22,1.44,100.0,4.6641,0.0721,10.0,0.0,0.0,0.0,0.0163,-1.0,1.0,17021.84 +287,58,36.21,0.0,100.0,0.0,69.74,1.15,100.0,4.6982,0.0576,10.0,0.0,0.0,0.0,-0.001,-1.0,1.0,17081.96 +288,56,33.93,0.0,100.0,0.0,68.99,0.92,100.0,4.4929,0.0461,10.0,0.0,0.0,0.0,-0.0454,-1.0,1.0,17132.75 +289,59,35.59,0.0,100.0,0.0,66.6,2.25,100.0,4.3732,0.1126,10.0,0.0,0.0,0.0,0.0064,-1.0,1.0,17172.45 +290,58,31.03,0.0,100.0,0.0,64.08,1.8,100.0,4.1899,0.0901,10.0,0.0,0.0,0.0,-0.051,-1.0,1.0,17257.72 +291,55,30.91,0.0,100.0,0.0,62.09,1.44,100.0,3.8611,0.0721,10.0,0.0,0.0,0.0,-0.0398,-1.0,1.0,17314.1 +292,60,33.33,0.0,100.0,0.0,63.5,2.25,100.0,3.9579,0.1126,10.0,0.0,0.0,0.0,-0.0063,-1.0,1.0,17391.85 +293,58,37.93,0.0,100.0,0.0,65.0,2.25,100.0,4.0474,0.1126,10.0,0.0,0.0,0.0,0.0719,-1.0,1.0,17429.91 +294,60,36.67,0.0,100.0,0.0,59.81,1.8,100.0,3.895,0.0901,10.0,0.0,0.0,0.0,0.1023,-1.0,1.0,17512.99 +295,58,41.38,0.0,100.0,0.0,61.17,1.44,100.0,4.0452,0.0721,10.0,0.0,0.0,0.0,0.1793,-1.0,1.0,17567.07 +296,60,36.67,0.0,100.0,0.0,55.53,1.15,100.0,3.9129,0.0576,10.0,0.0,0.0,0.0,0.1392,-1.0,1.0,17615.73 +297,60,38.33,0.0,100.0,0.0,58.8,1.15,100.0,3.9332,0.0576,10.0,0.0,0.0,0.0,0.1484,-1.0,1.0,17676.17 +298,56,35.71,0.0,100.0,0.0,58.35,0.92,100.0,3.8572,0.0461,10.0,0.0,0.0,0.0,0.1055,-1.0,1.0,17735.8 +299,58,37.93,0.0,100.0,0.0,58.7,0.74,100.0,4.0614,0.0369,10.0,0.0,0.0,0.0,0.1542,-1.0,1.0,17798.78 +300,60,40.0,0.0,100.0,0.0,62.6,0.92,100.0,4.0205,0.0461,10.0,0.0,0.0,0.0,0.1592,-1.0,1.0,17856.38 +301,59,37.29,0.0,100.0,0.0,64.96,0.74,100.0,4.0909,0.0369,10.0,0.0,0.0,0.0,0.0779,-1.0,1.0,17923.95 +302,58,36.21,0.0,100.0,0.0,61.85,0.59,100.0,3.9711,0.0295,10.0,0.0,0.0,0.0,0.0803,-1.0,1.0,17957.66 +303,60,33.33,0.0,100.0,0.0,62.12,0.47,100.0,3.9652,0.0236,10.0,0.0,0.0,0.0,0.0193,-1.0,1.0,18029.48 +304,58,34.48,0.0,100.0,0.0,64.92,0.47,100.0,3.994,0.0236,10.0,0.0,0.0,0.0,0.0161,-1.0,1.0,18094.67 +305,58,37.93,0.0,100.0,0.0,63.92,0.38,100.0,4.0535,0.0189,10.0,0.0,0.0,0.0,0.0975,-1.0,1.0,18162.38 +306,60,38.33,0.0,100.0,0.0,63.9,0.47,100.0,3.9894,0.0236,10.0,0.0,0.0,0.0,0.0929,-1.0,1.0,18214.73 +307,58,32.76,0.0,100.0,0.0,61.13,0.38,100.0,3.8894,0.0189,10.0,0.0,0.0,0.0,0.0118,-1.0,1.0,18261.67 +308,60,35.0,0.0,100.0,0.0,62.13,0.3,100.0,3.9263,0.0151,10.0,0.0,-0.0,-0.0,0.0442,-1.0,1.0,18339.5 +309,60,38.33,0.0,100.0,0.0,63.9,0.24,100.0,3.9658,0.0121,10.0,0.0,0.0,0.0,0.097,-1.0,1.0,18403.52 +310,59,40.68,0.0,100.0,0.0,65.55,0.19,100.0,4.0584,0.0097,10.0,0.0,0.0,0.0,0.134,-1.0,1.0,18460.3 +311,60,40.0,0.0,100.0,0.0,63.77,0.15,100.0,4.0323,0.0077,10.0,0.0,0.0,0.0,0.1362,-1.0,1.0,18516.27 +312,60,38.33,0.0,100.0,0.0,62.34,0.12,100.0,4.0417,0.0062,10.0,0.0,0.0,0.0,0.1124,-1.0,1.0,18564.63 +313,60,40.0,0.0,100.0,0.0,62.5,0.1,100.0,4.0795,0.005,10.0,0.0,0.0,0.0,0.1438,-1.0,1.0,18608.98 +314,59,40.68,0.0,100.0,0.0,62.97,0.47,100.0,4.12,0.0236,10.0,0.0,0.0,0.0,0.1578,-1.0,1.0,18644.52 +315,60,36.67,0.0,100.0,0.0,60.6,0.38,100.0,4.1333,0.0189,10.0,0.0,0.0,0.0,0.1008,-1.0,1.0,18719.22 +316,60,35.0,0.0,100.0,0.0,59.74,0.3,100.0,4.1206,0.0151,10.0,0.0,0.0,0.0,0.0782,-1.0,1.0,18806.61 +317,60,40.0,0.0,100.0,0.0,63.57,0.74,100.0,4.1506,0.0369,10.0,0.0,0.0,0.0,0.1387,-1.0,1.0,18863.04 +318,60,41.67,0.0,100.0,0.0,66.05,1.8,100.0,4.1914,0.0901,10.0,0.0,0.0,0.0,0.1494,-1.0,1.0,18935.7 +319,60,40.0,0.0,100.0,0.0,65.1,1.44,100.0,4.1919,0.0721,10.0,0.0,0.0,0.0,0.1237,-1.0,1.0,18978.91 +320,60,35.0,0.0,100.0,0.0,63.97,1.15,100.0,4.1411,0.0576,10.0,0.0,0.0,0.0,0.0338,-1.0,1.0,19044.05 +321,60,35.0,0.0,100.0,0.0,62.81,0.92,100.0,4.1014,0.0461,10.0,0.0,0.0,0.0,0.044,-1.0,1.0,19093.3 +322,60,38.33,0.0,100.0,0.0,65.1,0.74,100.0,4.1058,0.0369,10.0,0.0,0.0,0.0,0.0904,-1.0,1.0,19157.43 +323,60,38.33,0.0,100.0,0.0,63.97,0.59,100.0,4.1054,0.0295,10.0,0.0,0.0,0.0,0.1004,-1.0,1.0,19202.85 +324,59,33.9,0.0,100.0,0.0,60.52,0.47,100.0,3.9775,0.0236,10.0,0.0,0.0,0.0,0.0444,-1.0,1.0,19241.21 +325,59,40.68,0.0,100.0,0.0,63.41,0.38,100.0,4.1053,0.0189,10.0,0.0,0.0,0.0,0.1438,-1.0,1.0,19303.02 +326,60,43.33,0.0,100.0,0.0,64.14,0.3,100.0,4.1705,0.0151,10.0,0.0,0.0,0.0,0.194,-1.0,1.0,19396.94 +327,57,43.86,0.0,100.0,0.0,66.17,0.38,100.0,4.1159,0.0189,10.0,0.0,0.0,0.0,0.186,-1.0,1.0,19460.97 +328,60,46.67,0.0,100.0,0.0,66.9,0.3,100.0,4.3182,0.0151,10.0,0.0,0.0,0.0,0.2388,-1.0,1.0,19513.02 +329,60,45.0,0.0,100.0,0.0,65.85,0.47,100.0,4.3826,0.0236,10.0,0.0,0.0,0.0,0.2144,-1.0,1.0,19587.07 +330,60,51.67,0.0,100.0,0.0,70.19,2.25,100.0,4.5337,0.1126,10.0,0.0,0.0,0.0,0.3102,-1.0,1.0,19621.46 +331,60,47.5,0.0,100.0,0.0,69.57,1.8,100.0,4.6356,0.0901,10.0,0.0,0.0,0.0,0.2405,-1.0,1.0,19699.7 +332,60,49.17,0.0,100.0,0.0,70.89,1.44,100.0,4.7285,0.0721,10.0,0.0,0.0,0.0,0.2537,-1.0,1.0,19790.82 +333,60,53.06,0.0,100.0,0.0,74.3,2.81,100.0,4.8596,0.1407,10.0,0.0,0.0,0.0,0.2978,-1.0,1.0,19837.06 +334,60,50.56,0.0,100.0,0.0,72.15,2.25,100.0,4.9636,0.1126,10.0,0.0,0.0,0.0,0.2653,-1.0,1.0,19886.09 +335,60,48.89,0.0,100.0,0.0,70.18,1.8,100.0,5.0259,0.0901,10.0,0.0,0.0,0.0,0.2547,-1.0,1.0,19953.62 +336,60,47.78,0.0,100.0,0.0,69.99,1.44,100.0,5.0488,0.0721,10.0,0.0,-0.0,-0.0,0.2304,-1.0,1.0,20046.89 +337,60,44.17,0.0,100.0,0.0,72.19,1.44,100.0,4.9937,0.0654,10.0,0.0,0.0,0.0,0.1319,-1.0,1.0,20147.08 +338,60,41.58,0.0,100.0,0.0,71.38,1.15,100.0,4.9166,-0.0648,10.0,0.0,0.0,0.0,0.0898,-1.0,1.0,20226.98 +339,60,39.78,0.0,100.0,0.0,70.67,2.25,100.0,4.8182,-0.1228,10.0,0.0,0.0,0.0,0.0615,-1.0,1.0,20293.07 +340,60,34.78,0.0,100.0,0.0,69.67,1.8,100.0,4.6279,-0.112,10.0,0.0,0.0,0.0,-0.0236,-1.0,1.0,20352.66 +341,60,35.33,0.0,100.0,0.0,68.71,0.0,100.0,4.4492,-0.2875,10.0,0.0,0.0,0.0,-0.0034,-1.0,1.0,20400.15 +342,60,28.67,0.0,100.0,0.0,65.84,0.0,100.0,4.1837,-0.2875,10.0,0.0,0.0,0.0,-0.1193,-1.0,1.0,20460.29 +343,60,20.33,0.0,100.0,0.0,59.22,0.0,100.0,3.8293,-0.2875,10.0,0.0,0.0,0.0,-0.2544,-1.0,1.0,20522.71 +344,60,22.0,0.0,100.0,0.0,57.44,0.0,100.0,3.5582,-0.2875,10.0,0.0,0.0,0.0,-0.1711,-1.0,1.0,20585.39 +345,60,18.67,0.0,100.0,0.0,53.7,0.0,100.0,3.2861,-0.2875,10.0,0.0,0.0,0.0,-0.2035,-1.0,1.0,20656.44 +346,60,15.0,0.0,100.0,0.0,50.28,0.0,100.0,2.9956,-0.2875,10.0,0.0,0.0,0.0,-0.237,-1.0,1.0,20722.62 +347,60,7.5,0.0,100.0,0.0,45.03,0.0,100.0,2.6225,-0.2875,10.0,0.0,0.0,0.0,-0.3528,-1.0,1.0,20779.62 +348,60,5.83,0.0,100.0,0.0,40.69,0.0,100.0,2.2722,-0.2875,10.0,0.0,0.0,0.0,-0.3336,-1.0,1.0,20817.71 +349,60,5.0,0.0,100.0,0.0,35.57,0.0,100.0,1.9486,-0.2875,10.0,0.0,0.0,0.0,-0.3069,-1.0,1.0,20870.37 +350,60,2.5,0.0,100.0,0.0,30.46,0.0,100.0,1.6429,-0.2875,9.0,0.0,0.0,0.0,-0.3057,-1.0,1.0,20942.37 +351,60,1.67,0.0,100.0,0.0,25.37,0.0,100.0,1.3717,-0.2875,8.0721,0.0,0.0,0.0,-0.2712,-1.0,1.0,21005.19 +352,59,1.69,0.0,100.0,0.0,20.57,0.0,100.0,1.1166,-0.2875,9.0721,0.0,0.0,0.0,-0.2105,-1.0,1.0,21064.01 +353,60,1.67,0.0,100.0,0.0,17.91,0.0,100.0,0.9812,-0.2875,10.0,0.0,0.0,0.0,-0.1823,-1.0,1.0,21122.88 +354,60,0.0,0.0,0.0,0.0,15.0,0.0,100.0,0.8021,-0.2875,9.0,0.0,0.0,0.0,-0.1791,-1.0,0.0,21186.68 +355,58,0.0,0.0,0.0,0.0,12.05,0.0,100.0,0.6392,-0.2875,8.0,0.0,0.0,0.0,-0.1463,-1.0,0.0,21235.44 +356,60,0.0,0.0,0.0,0.0,10.34,0.0,100.0,0.5356,-0.2875,7.0,0.0,0.0,0.0,-0.125,-1.0,0.0,21304.43 +357,60,0.0,0.0,0.0,0.0,8.6,0.0,100.0,0.4322,-0.2875,6.0,0.0,0.0,0.0,-0.1034,-1.0,0.0,21367.52 +358,60,0.0,0.0,0.0,0.0,7.21,0.0,100.0,0.3462,-0.2875,5.0,0.0,0.0,0.0,-0.086,-1.0,0.0,21454.75 +359,60,0.0,0.0,0.0,0.0,5.77,0.0,80.0,0.2741,-0.2875,4.0,0.0,0.0,0.0,-0.0721,-1.0,0.0,21496.95 +360,60,0.0,0.0,0.0,0.0,4.62,0.0,64.0,0.2164,-0.2875,3.2,0.0,0.0,0.0,-0.0577,-0.8,0.0,21553.11 +361,59,0.0,0.0,0.0,0.0,3.64,0.0,51.2,0.1672,-0.2875,2.56,0.0,0.0,0.0,-0.0455,-0.64,0.0,21609.63 +362,60,0.0,0.0,0.0,0.0,2.98,0.0,40.96,0.1344,-0.2875,2.048,0.0,0.0,0.0,-0.0372,-0.512,0.0,21659.96 +363,59,0.0,0.0,0.0,0.0,2.42,0.0,32.77,0.1113,-0.2147,1.6384,0.0,0.0,0.0,-0.0303,-0.4096,0.0,21719.56 +364,60,0.0,0.0,0.0,0.0,1.91,0.0,26.21,0.0808,-0.2875,1.3107,0.0,0.0,0.0,-0.0238,-0.3277,0.0,21787.44 +365,60,0.0,0.0,0.0,0.0,1.52,0.0,20.97,0.0617,-0.2875,1.0486,0.0,0.0,0.0,-0.0191,-0.2621,0.0,21848.98 +366,60,0.0,0.0,0.0,0.0,1.22,0.0,16.78,0.0465,-0.2875,0.8389,0.0,0.0,0.0,-0.0152,-0.2097,0.0,21883.46 +367,60,0.0,0.0,0.0,0.0,0.98,0.0,13.42,0.0343,-0.2875,0.6711,0.0,0.0,0.0,-0.0122,-0.1678,0.0,21964.55 +368,60,0.83,0.0,50.0,0.0,1.81,0.0,63.94,0.0331,-0.2875,0.6267,0.0,0.0,0.0,-0.0012,-0.1342,0.4859,22037.82 +369,60,0.83,0.0,50.0,0.0,2.23,0.0,98.11,0.0287,-0.2875,0.807,0.0,0.0,0.0,-0.0044,-0.1074,0.1803,22091.62 +370,60,0.83,0.0,50.0,0.0,2.14,0.0,100.0,0.0229,-0.2875,0.8164,0.0,0.0,0.0,-0.0058,-0.0859,0.0095,22156.98 +371,60,0.83,0.0,50.0,0.0,2.05,0.0,100.0,0.0181,-0.2875,0.8164,0.0,0.0,0.0,-0.0048,-0.0687,0.0,22212.01 +372,60,0.83,0.0,50.0,0.0,1.97,0.0,100.0,0.0143,-0.2875,0.8164,0.0,0.0,0.0,-0.0038,-0.055,0.0,22276.53 +373,60,0.83,0.0,50.0,0.0,1.91,0.0,100.0,0.0113,-0.2875,0.8164,0.0,0.0,0.0,-0.003,-0.044,0.0,22322.42 +374,60,0.83,0.0,50.0,0.0,1.86,0.0,100.0,0.0088,-0.2875,0.8164,0.0,0.0,0.0,-0.0024,-0.0352,0.0,22388.09 +375,60,0.83,0.0,50.0,0.0,1.82,0.0,100.0,0.0069,-0.2875,0.8164,0.0,0.0,0.0,-0.0019,-0.0281,0.0,22453.7 +376,60,0.83,0.0,50.0,0.0,1.79,0.0,100.0,0.0053,-0.2875,0.8164,0.0,0.0,0.0,-0.0016,-0.0225,0.0,22502.28 +377,60,0.83,0.0,50.0,0.0,1.77,0.0,100.0,0.0041,-0.2875,0.8164,0.0,0.0,0.0,-0.0012,-0.018,0.0,22565.43 +378,60,0.67,0.0,20.0,0.0,0.88,0.0,24.1,-0.0069,-0.2875,0.2042,0.0,0.0,0.0,-0.011,-1.0,0.2,22642.2 +379,60,0.75,0.0,25.0,0.0,1.15,0.0,36.49,-0.0064,-0.2875,0.2734,0.0,0.0,0.0,0.0005,-0.0115,0.0692,22706.49 +380,60,1.02,0.0,33.33,0.0,1.53,0.0,49.95,-0.0051,-0.2875,0.3484,0.0,0.0,0.0,0.0013,-0.1374,0.1402,22773.14 +381,60,1.3,0.0,50.0,0.0,2.11,0.0,86.95,-0.0024,-0.2875,0.5986,0.0,0.0,0.0,0.0028,-0.0456,0.2502,22834.16 +382,60,1.3,0.0,50.0,0.0,2.3,0.0,100.0,-0.0024,-0.2875,0.6638,0.0,0.0,0.0,-0.0,-0.0227,0.0653,22884.35 +383,60,1.28,0.0,50.0,0.0,2.26,0.0,100.0,-0.0034,-0.2875,0.6638,0.0,0.0,0.0,-0.0011,-0.0301,0.0,22927.45 +384,60,1.3,0.0,50.0,0.0,2.26,0.0,100.0,-0.0039,-0.2875,0.6638,0.0,0.0,0.0,-0.0004,-0.0113,0.0,22987.04 +385,60,1.5,0.0,50.0,0.0,2.44,0.0,100.0,-0.0024,-0.2875,0.6638,0.0,0.0,0.0,0.0015,-0.0328,0.1429,23062.72 +386,60,2.38,0.0,100.0,0.0,2.53,0.0,100.0,0.0148,-0.2875,1.6638,0.0,0.0,0.0,0.0172,-0.0154,1.0,23120.33 +387,60,2.65,0.0,100.0,0.0,2.87,0.0,100.0,0.0339,-0.2875,2.6638,0.0,0.0,0.0,0.0192,-0.0457,1.0,23170.65 +388,60,0.8,0.0,14.29,0.0,1.56,0.0,33.28,0.0143,-0.2875,1.6638,0.0,0.0,0.0,-0.0196,-1.0,0.1111,23240.04 +389,60,0.85,0.0,14.29,0.0,1.52,0.0,26.62,0.0086,-0.2875,1.3311,0.0,0.0,0.0,-0.0057,-0.3328,0.0285,23289.42 +390,60,0.82,0.0,20.0,0.0,1.42,0.0,26.98,0.0031,-0.2875,1.0649,0.0,0.0,0.0,-0.0055,-0.2662,0.0453,23340.13 +391,60,1.13,0.0,25.0,0.0,1.75,0.0,35.81,0.0023,-0.2875,0.8519,0.0,0.0,0.0,-0.0008,-0.213,0.0824,23394.18 +392,60,1.26,0.0,25.0,0.0,1.91,0.0,37.65,0.0002,-0.2875,0.6815,0.0,0.0,0.0,-0.0021,-0.1704,0.0768,23447.27 +393,60,1.33,0.0,25.0,0.0,1.97,0.0,37.46,-0.0024,-0.2875,0.5452,0.0,0.0,0.0,-0.0026,-0.1363,0.0121,23530.8 +394,60,1.5,0.0,25.0,0.0,2.17,0.0,36.79,-0.0033,-0.2875,0.4362,0.0,0.0,0.0,-0.0009,-0.109,0.0524,23598.53 +395,60,1.29,0.0,25.0,0.0,1.82,0.0,36.11,-0.0093,-0.2875,0.3489,0.0,0.0,0.0,-0.006,-0.3371,0.0998,23656.19 +396,60,2.16,0.0,50.0,0.0,2.86,0.0,60.0,-0.0028,-0.2875,0.5,0.0,0.0,0.0,0.0065,-0.0698,0.5,23723.94 +397,60,2.35,0.0,50.0,0.0,3.55,0.0,94.0,-0.001,-0.2875,0.7,0.0,0.0,0.0,0.0017,-0.3552,0.3333,23771.3 +398,60,2.32,0.0,50.0,0.0,3.7,0.0,100.0,-0.0029,-0.2875,0.73,0.0,0.0,0.0,-0.0019,-0.3444,0.25,23824.49 +399,60,4.75,0.0,100.0,0.0,5.38,0.0,100.0,0.028,-0.2875,1.73,0.0,0.0,0.0,0.0309,-0.055,1.0,23872.18 +400,60,3.93,0.0,100.0,0.0,5.33,0.0,100.0,0.0421,-0.2875,2.73,0.0,0.0,0.0,0.0142,-0.1179,1.0,23938.5 +401,60,3.94,0.0,100.0,0.0,5.29,0.0,100.0,0.0563,-0.2875,3.73,0.0,0.0,0.0,0.0142,-0.2627,1.0,24005.37 +402,60,3.69,0.0,100.0,0.0,5.0,0.0,100.0,0.0684,-0.2875,4.73,0.0,0.0,0.0,0.0121,-0.2652,1.0,24055.74 +403,59,3.94,0.0,100.0,0.0,5.38,0.0,100.0,0.0875,-0.2875,5.73,0.0,0.0,0.0,0.018,-0.0509,1.0,24106.3 +404,60,3.9,0.0,100.0,0.0,5.4,0.0,100.0,0.1021,-0.2875,6.73,0.0,0.0,0.0,0.016,-0.0295,1.0,24170.7 +405,60,3.64,0.0,100.0,0.0,5.07,0.0,100.0,0.1141,-0.2875,7.73,0.0,0.0,0.0,0.0121,-0.2137,1.0,24243.73 +406,60,1.83,0.0,50.0,0.0,4.57,0.0,100.0,0.0913,-0.3561,6.73,0.0,0.0,0.0,-0.0228,-1.0,0.3333,24285.93 +407,60,1.87,0.0,50.0,0.0,4.83,0.0,100.0,0.0757,-0.3561,5.73,0.0,0.0,0.0,-0.0155,-1.0,0.0667,24347.59 +408,59,1.6,0.0,50.0,0.0,4.52,0.0,100.0,0.0557,-0.3561,4.73,0.0,0.0,0.0,-0.0214,-1.0,0.0179,24419.47 +409,60,0.74,0.0,33.33,0.0,2.47,0.0,75.68,0.0211,-0.3561,3.784,0.0,0.0,0.0,-0.0336,-1.0,0.0,24488.72 +410,60,0.76,0.0,33.33,0.0,2.23,0.0,60.54,0.0076,-0.3561,3.0272,0.0,0.0,0.0,-0.0135,-0.7568,0.01,24561.74 +411,60,0.56,0.0,33.33,0.0,1.75,0.0,56.57,-0.0059,-0.3561,2.4218,0.0,0.0,0.0,-0.0135,-0.6054,0.0,24620.45 +412,60,1.04,0.0,50.0,0.0,2.3,0.0,86.52,-0.0084,-0.3561,1.9374,0.0,0.0,0.0,-0.0024,-0.4844,0.2172,24690.43 +413,60,1.88,0.0,100.0,0.0,2.43,0.0,100.0,0.002,-0.3561,1.5499,0.0,0.0,0.0,0.0104,-0.3875,1.0,24746.24 +414,60,1.85,0.0,100.0,0.0,2.3,0.0,100.0,0.0131,-0.3561,2.4119,0.0,0.0,0.0,0.0111,-0.31,1.0,24804.92 +415,60,3.52,0.0,100.0,0.0,3.87,0.0,100.0,0.0423,-0.3561,3.4119,0.0,0.0,0.0,0.0291,-0.248,1.0,24865.48 +416,60,1.02,0.0,50.0,0.0,2.94,0.0,100.0,0.0223,-0.3561,2.4119,0.0,0.0,0.0,-0.02,-1.0,0.0,24914.63 +417,60,1.07,0.0,50.0,0.0,2.8,0.0,100.0,0.0121,-0.3561,1.9296,0.0,0.0,0.0,-0.0101,-0.4824,0.0349,24985.09 +418,60,1.04,0.0,50.0,0.0,2.6,0.0,100.0,0.0032,-0.3561,1.5436,0.0,0.0,0.0,-0.0089,-0.3859,0.0,25045.01 +419,60,1.07,0.0,50.0,0.0,2.5,0.0,100.0,-0.0034,-0.3561,1.2349,0.0,0.0,0.0,-0.0066,-0.3087,0.0149,25093.38 +420,60,2.2,0.0,50.0,0.0,3.7,0.0,100.0,0.0025,-0.3561,1.005,0.0,0.0,0.0,0.0059,-0.247,0.3333,25149.54 +421,60,2.17,0.0,50.0,0.0,3.92,0.0,100.0,-0.0008,-0.3561,1.005,0.0,0.0,0.0,-0.0033,-0.1976,0.0911,25164.27 +422,60,1.93,0.0,50.0,0.0,3.64,0.0,100.0,-0.0082,-0.3561,1.005,0.0,0.0,0.0,-0.0074,-0.1718,0.0,25178.26 +423,60,1.93,0.0,50.0,0.0,3.58,0.0,100.0,-0.0125,-0.3561,1.005,0.0,0.0,0.0,-0.0043,-0.1265,0.0,25196.81 +424,60,2.04,0.0,50.0,0.0,3.68,0.0,100.0,-0.0147,-0.3561,1.005,0.0,0.0,0.0,-0.0022,-0.1012,0.0348,25215.37 +425,60,1.25,0.0,33.33,0.0,2.04,0.0,54.42,-0.0338,-0.3561,0.3237,0.0,0.0,0.0,-0.0191,-1.0,0.0,25277.2 +426,8,6.25,0.0,50.0,0.0,10.55,0.0,84.43,0.0092,-0.2875,0.361,0.0,0.0,0.0,0.0285,0.0,0.2279,25283.39 diff --git a/experiments/results/csv/one_of_many_services_latency_degradation_adaptive_time_analysis.csv b/experiments/results/csv/one_of_many_services_latency_degradation_adaptive_time_analysis.csv new file mode 100644 index 000000000..9baf7b457 --- /dev/null +++ b/experiments/results/csv/one_of_many_services_latency_degradation_adaptive_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,9621,9341,85,0.88,195,2.03,1.0 +30-60s,5144,4571,120,2.33,453,8.81,1.0 +60-90s,5505,4866,111,2.02,528,9.59,1.0 +90-120s,5761,5089,120,2.08,552,9.58,1.0 +120-150s,5851,5085,140,2.39,626,10.7,1.0 +150-180s,6656,5829,117,1.76,710,10.67,1.0 +180-210s,5421,4779,109,2.01,533,9.83,1.0 +210-240s,5926,5166,124,2.09,636,10.73,1.0 +240-270s,5996,5263,109,1.82,624,10.41,1.0 +270-300s,6379,5553,139,2.18,687,10.77,1.0 +300-330s,5334,4653,125,2.34,556,10.42,1.0 +330-360s,8681,8050,97,1.12,534,6.15,1.0 +360-390s,9318,9062,84,0.9,172,1.85,1.0 +390-420s,9103,8811,97,1.07,195,2.14,1.0 diff --git a/experiments/results/csv/one_of_many_services_latency_degradation_time_analysis.csv b/experiments/results/csv/one_of_many_services_latency_degradation_time_analysis.csv new file mode 100644 index 000000000..75d35b9ae --- /dev/null +++ b/experiments/results/csv/one_of_many_services_latency_degradation_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,7731,7605,101,1.31,25,0.32,1.0 +30-60s,2768,2470,121,4.37,177,6.39,1.0 +60-90s,5413,4774,125,2.31,514,9.5,1.0 +90-120s,5925,5242,112,1.89,571,9.64,1.0 +120-150s,5560,4931,111,2.0,518,9.32,1.0 +150-180s,6041,5354,130,2.15,557,9.22,1.0 +180-210s,5399,4768,109,2.02,522,9.67,1.0 +210-240s,5202,4590,109,2.1,503,9.67,1.0 +240-270s,5497,4838,111,2.02,548,9.97,1.0 +270-300s,5269,4666,118,2.24,485,9.2,1.0 +300-330s,5424,4835,111,2.05,478,8.81,1.0 +330-360s,7661,7217,109,1.42,335,4.37,1.0 +360-390s,8603,8487,84,0.98,32,0.37,1.0 +390-420s,8025,7828,85,1.06,112,1.4,1.0 diff --git a/experiments/results/csv/oscillating_errors_adaptive_pid_controller.csv b/experiments/results/csv/oscillating_errors_adaptive_pid_controller.csv new file mode 100644 index 000000000..e68659d80 --- /dev/null +++ b/experiments/results/csv/oscillating_errors_adaptive_pid_controller.csv @@ -0,0 +1,221 @@ +Window,Thread Count,Error Rate Avg,Error Rate Min,Error Rate Max,Ideal Error Rate,Rejection Rate Avg,Rejection Rate Min,Rejection Rate Max,Integral Avg,Integral Min,Integral Max,Derivative Avg,Derivative Min,Derivative Max,P Value Avg,P Value Min,P Value Max,Total Request Time +1,60,2.02,0.0,20.0,4.61,1.32,0.0,18.0,-0.0266,-0.0461,0.15,0.0,-0.0,-0.0,-0.0266,-0.0461,0.15,64.19 +2,60,1.51,0.0,10.0,4.25,0.32,0.0,6.47,-0.0686,-0.0886,0.0428,0.0,0.0,0.0,-0.0419,-0.1211,0.0065,125.71 +3,60,1.48,0.0,6.67,3.92,0.13,0.0,1.79,-0.0987,-0.1278,0.0065,0.0,0.0,0.0,-0.0301,-0.0471,0.0241,183.61 +4,60,1.52,0.0,9.76,4.07,0.14,0.0,5.38,-0.1242,-0.1639,0.0283,0.0,-0.0,-0.0,-0.0255,-0.0361,0.0312,244.21 +5,60,1.46,0.0,9.8,3.33,0.12,0.0,5.53,-0.1484,-0.1972,0.0248,0.0,0.0,0.0,-0.0242,-0.0333,0.0129,305.03 +6,60,1.36,0.0,8.2,3.07,0.06,0.0,3.4,-0.1716,-0.228,0.0029,0.0,0.0,0.0,-0.0232,-0.0307,-0.0037,363.77 +7,60,1.26,0.0,7.04,3.56,0.04,0.0,1.87,-0.1933,-0.2563,-0.0104,0.0,-0.0,-0.0,-0.0217,-0.0283,0.01,424.5 +8,60,1.24,0.0,6.25,3.39,0.02,0.0,0.9,-0.2134,-0.2824,-0.0167,0.0,0.0,0.0,-0.0201,-0.0261,-0.0021,484.89 +9,60,1.25,0.0,5.56,3.21,0.0,0.0,0.11,-0.2316,-0.3065,-0.0205,0.0,0.0,0.0,-0.0182,-0.025,-0.002,544.29 +10,60,1.24,0.0,5.0,3.04,0.0,0.0,0.0,-0.2483,-0.3287,-0.022,0.0,0.0,0.0,-0.0167,-0.0335,-0.0015,603.6 +11,60,1.12,0.0,4.04,2.89,0.0,0.0,0.0,-0.2648,-0.3491,-0.0311,0.0,0.0,0.0,-0.0165,-0.0383,0.006,664.73 +12,60,1.07,0.0,3.06,2.74,0.0,0.0,0.0,-0.2804,-0.368,-0.0489,0.0,0.0,0.0,-0.0156,-0.0361,0.0056,724.41 +13,60,0.99,0.0,3.06,2.53,0.0,0.0,0.0,-0.2956,-0.3854,-0.0744,0.0,-0.0,-0.0,-0.0152,-0.0333,0.0059,783.77 +14,60,0.97,0.0,3.06,2.2,0.0,0.0,0.0,-0.3098,-0.4014,-0.0879,0.0,0.0,0.0,-0.0142,-0.0328,0.0094,844.34 +15,60,0.95,0.0,4.0,1.76,0.0,0.0,0.0,-0.3229,-0.4162,-0.1171,0.0,0.0,0.0,-0.0132,-0.0398,0.0191,903.13 +16,60,0.9,0.0,4.0,1.71,0.0,0.0,0.0,-0.3355,-0.4298,-0.144,0.0,0.0,0.0,-0.0126,-0.0367,0.019,963.95 +17,60,0.94,0.0,4.04,2.36,0.0,0.0,0.0,-0.3467,-0.4424,-0.1783,0.0,0.0,0.0,-0.0112,-0.0343,0.0194,1022.46 +18,60,0.87,0.0,4.0,2.26,0.0,0.0,0.0,-0.3576,-0.454,-0.2043,0.0,0.0,0.0,-0.0109,-0.0316,0.019,1084.44 +19,60,0.84,0.0,3.03,2.1,0.0,0.0,0.0,-0.3679,-0.4647,-0.2168,0.0,0.0,0.0,-0.0103,-0.0292,0.0093,1144.53 +20,60,0.9,0.0,3.03,2.02,0.0,0.0,0.0,-0.3768,-0.4746,-0.2378,0.0,0.0,0.0,-0.0089,-0.0269,0.0092,1203.94 +21,60,1.05,0.0,4.0,1.06,0.0,0.0,0.0,-0.3834,-0.4836,-0.2305,0.0,-0.0,-0.0,-0.0067,-0.0248,0.0211,1264.17 +22,60,1.21,0.0,5.0,1.06,0.0,0.0,0.0,-0.388,-0.492,-0.2017,0.0,0.0,0.0,-0.0045,-0.025,0.0289,1324.73 +23,60,1.39,0.0,4.95,1.27,0.0,0.0,0.0,-0.3902,-0.4997,-0.1733,0.0,0.0,0.0,-0.0022,-0.0231,0.0283,1383.59 +24,59,1.57,0.0,5.0,1.25,0.0,0.0,0.0,-0.3915,-0.5069,-0.1642,0.0,0.0,0.0,0.0001,-0.0154,0.031,1443.69 +25,60,1.61,0.0,4.95,2.13,0.0,0.0,0.0,-0.3895,-0.5134,-0.165,0.0,0.0,0.0,0.0006,-0.0213,0.0304,1504.1 +26,59,1.76,0.0,5.0,2.04,0.0,0.0,0.0,-0.3875,-0.5195,-0.1656,0.0,0.0,0.0,0.0024,-0.0141,0.0309,1564.22 +27,58,1.87,0.0,5.0,1.96,0.0,0.0,0.0,-0.3828,-0.5251,-0.1663,0.0,0.0,0.0,0.0037,-0.013,0.0308,1624.31 +28,56,2.03,0.0,5.0,1.93,0.0,0.0,0.0,-0.3778,-0.5302,-0.1601,0.0,-0.0,-0.0,0.0055,-0.016,0.0382,1684.1 +29,59,2.16,0.0,5.94,1.64,0.01,0.0,0.42,-0.3699,-0.5349,-0.1299,0.0,-0.0,-0.0,0.0069,-0.018,0.0414,1744.38 +30,55,2.21,0.0,5.0,0.84,0.0,0.0,0.0,-0.3629,-0.5393,-0.113,0.0,-0.0,-0.0,0.0075,-0.0195,0.0319,1803.86 +31,60,2.41,0.0,5.0,1.85,0.01,0.0,0.47,-0.3551,-0.5434,-0.0973,0.0,-0.0,-0.0,0.0098,-0.018,0.0385,1863.73 +32,57,2.75,0.0,6.0,1.51,0.03,0.0,1.02,-0.3428,-0.5471,-0.0782,0.0,0.0,0.0,0.0131,-0.0128,0.049,1924.11 +33,58,3.27,0.0,7.84,2.37,0.16,0.0,3.73,-0.3212,-0.5505,-0.0625,0.0,0.0,0.0,0.0182,-0.0118,0.0663,1984.06 +34,58,3.65,0.0,8.82,1.58,0.23,0.0,5.42,-0.3016,-0.5436,-0.05,0.0,-0.0,-0.0,0.0205,-0.0117,0.0518,2043.65 +35,59,4.02,1.02,8.82,1.34,0.38,0.0,6.83,-0.2834,-0.5368,-0.022,0.0,0.0,0.0,0.024,-0.0044,0.0646,2104.49 +36,55,4.27,1.03,7.92,2.41,0.52,0.0,5.86,-0.2626,-0.5299,-0.0264,0.0,-0.0,-0.0,0.0251,-0.0044,0.0614,2163.52 +37,55,4.81,1.02,9.71,1.65,0.99,0.0,6.73,-0.2267,-0.5232,-0.026,0.0,0.0,0.0,0.0287,-0.0057,0.0792,2224.51 +38,56,5.26,0.0,9.71,0.95,1.48,0.0,7.19,-0.2103,-0.4964,-0.0163,0.0,0.0,0.0,0.0296,-0.0147,0.0811,2283.85 +39,59,5.39,0.0,10.68,2.07,1.91,0.0,7.3,-0.1803,-0.4596,-0.0204,0.0,-0.0,-0.0,0.0263,-0.0136,0.0663,2344.16 +40,58,5.71,1.03,11.43,2.08,2.59,0.0,8.7,-0.1558,-0.4584,-0.0163,0.0,-0.0,-0.0,0.0243,-0.0029,0.0877,2404.01 +41,59,5.66,1.02,14.15,0.85,2.8,0.0,12.75,-0.1351,-0.4586,-0.0134,0.0,-0.0,-0.0,0.0174,-0.0119,0.0663,2463.88 +42,57,5.48,1.03,14.02,0.77,2.76,0.0,13.35,-0.1282,-0.4587,0.0014,0.0,-0.0,-0.0,0.0148,-0.0158,0.0708,2524.32 +43,54,5.12,1.03,13.21,1.45,2.52,0.0,12.4,-0.1172,-0.4587,-0.0131,0.0,0.0,0.0,0.011,-0.0238,0.0522,2583.75 +44,57,4.83,1.02,13.21,2.17,2.32,0.0,12.35,-0.0987,-0.3733,-0.0109,0.0,-0.0,-0.0,0.0081,-0.0229,0.0482,2643.87 +45,58,4.29,0.0,14.02,1.9,2.03,0.0,13.51,-0.1013,-0.4683,-0.0049,0.0,-0.0,-0.0,0.0065,-0.0273,0.0382,2704.45 +46,55,4.05,0.0,14.02,1.23,1.97,0.0,13.69,-0.0936,-0.4771,-0.0025,0.0,0.0,0.0,0.0056,-0.0263,0.0364,2763.92 +47,60,3.52,0.0,14.95,1.34,1.54,0.0,15.01,-0.0922,-0.4852,0.0088,0.0,-0.0,-0.0,0.0032,-0.0259,0.0363,2823.99 +48,60,3.19,0.0,14.02,1.91,1.23,0.0,13.89,-0.0894,-0.4927,-0.002,0.0,-0.0,-0.0,0.0028,-0.017,0.0363,2883.54 +49,60,2.98,0.0,13.21,1.91,1.08,0.0,12.62,-0.0858,-0.4996,-0.006,0.0,0.0,0.0,0.0036,-0.025,0.0316,2944.1 +50,60,2.61,0.0,7.84,1.91,0.79,0.0,5.95,-0.0844,-0.506,-0.0046,0.0,-0.0,-0.0,0.0013,-0.0595,0.0316,3004.09 +51,59,2.41,0.0,5.0,1.42,0.54,0.0,3.28,-0.0824,-0.5119,-0.0037,0.0,-0.0,-0.0,0.0019,-0.0301,0.0319,3063.61 +52,60,2.59,0.0,5.94,1.05,0.79,0.0,4.69,-0.0759,-0.5173,0.0073,0.0,0.0,0.0,0.0066,-0.0106,0.0414,3124.15 +53,60,2.97,0.0,6.0,1.06,1.22,0.0,5.18,-0.0679,-0.5223,0.0076,0.0,0.0,0.0,0.0081,-0.0148,0.037,3183.72 +54,60,3.45,0.0,6.93,1.07,1.73,0.0,6.41,-0.0591,-0.5269,0.0289,0.0,-0.0,-0.0,0.0087,-0.017,0.0422,3244.33 +55,60,3.81,0.0,6.93,1.07,2.15,0.0,6.69,-0.0516,-0.5311,0.0303,0.0,-0.0,-0.0,0.0075,-0.0157,0.0367,3303.63 +56,60,4.56,0.0,9.62,1.08,2.95,0.0,8.37,-0.0405,-0.5251,0.0298,0.0,-0.0,-0.0,0.0111,-0.0155,0.058,3364.06 +57,60,5.05,1.02,9.71,1.08,3.51,0.0,9.23,-0.032,-0.519,0.0339,0.0,-0.0,-0.0,0.0085,-0.0091,0.0512,3423.89 +58,60,5.38,1.02,11.54,1.09,3.97,0.0,11.45,-0.0256,-0.513,0.0404,0.0,0.0,0.0,0.0065,-0.0139,0.0464,3483.61 +59,60,5.75,1.02,11.43,1.1,4.45,0.0,11.48,-0.0196,-0.507,0.0433,0.0,-0.0,-0.0,0.0059,-0.0245,0.0455,3543.04 +60,60,6.07,1.03,10.68,1.1,4.82,0.0,10.37,-0.0151,-0.5009,0.0365,0.0,-0.0,-0.0,0.0046,-0.0148,0.0383,3603.61 +61,60,6.32,1.03,11.43,1.11,5.13,0.0,11.72,-0.0115,-0.4949,0.051,0.0,0.0,0.0,0.0036,-0.0256,0.0349,3664.17 +62,60,6.01,2.04,12.38,1.12,4.74,0.0,13.36,-0.0141,-0.4789,0.0547,0.0,-0.0,-0.0,-0.0026,-0.0345,0.0178,3723.95 +63,60,5.55,2.04,11.43,1.12,4.14,0.0,12.17,-0.018,-0.4628,0.0334,0.0,-0.0,-0.0,-0.0039,-0.0398,0.0261,3783.5 +64,60,5.05,1.03,10.58,1.12,3.57,0.0,10.75,-0.0213,-0.4468,0.023,0.0,0.0,0.0,-0.0033,-0.0341,0.0228,3843.62 +65,60,4.62,1.02,9.71,1.13,3.03,0.0,9.35,-0.0238,-0.4308,0.0195,0.0,-0.0,-0.0,-0.0024,-0.0316,0.0238,3903.72 +66,60,3.76,0.0,7.84,1.13,2.07,0.0,6.46,-0.03,-0.425,0.006,0.0,-0.0,-0.0,-0.0062,-0.0496,0.015,3963.6 +67,60,3.39,0.0,7.84,1.13,1.76,0.0,6.7,-0.0306,-0.4091,0.0139,0.0,-0.0,-0.0,-0.0006,-0.0198,0.0231,4023.63 +68,60,2.92,0.0,6.93,1.13,1.44,0.0,6.71,-0.0327,-0.3931,0.0116,0.0,-0.0,-0.0,-0.0021,-0.0281,0.0168,4084.21 +69,60,2.52,0.0,6.93,1.13,1.11,0.0,6.65,-0.0357,-0.3774,0.0092,0.0,0.0,0.0,-0.003,-0.0282,0.0239,4143.38 +70,60,2.18,0.0,5.0,1.12,0.69,0.0,3.6,-0.0388,-0.3616,0.0047,0.0,0.0,0.0,-0.003,-0.0328,0.0165,4203.47 +71,60,1.94,0.0,4.95,1.03,0.57,0.0,4.7,-0.0399,-0.3358,0.0131,0.0,-0.0,-0.0,-0.0011,-0.0182,0.0257,4263.74 +72,60,2.38,0.0,6.0,1.03,0.98,0.0,5.33,-0.0354,-0.32,0.0123,0.0,0.0,0.0,0.0045,-0.0149,0.0255,4323.94 +73,60,2.89,0.0,8.82,1.03,1.44,0.0,9.02,-0.0296,-0.2944,0.0342,0.0,-0.0,-0.0,0.0058,-0.0218,0.0397,4383.38 +74,60,3.21,0.0,7.84,1.44,1.74,0.0,7.94,-0.0249,-0.2587,0.0298,0.0,-0.0,-0.0,0.0047,-0.0147,0.0357,4443.57 +75,60,3.64,0.0,7.84,1.04,2.18,0.0,7.76,-0.0188,-0.2235,0.0246,0.0,0.0,0.0,0.0061,-0.0122,0.0352,4503.87 +76,60,4.01,0.0,7.84,1.44,2.68,0.0,7.67,-0.0131,-0.1783,0.0295,0.0,-0.0,-0.0,0.0057,-0.0112,0.0452,4563.72 +77,60,4.37,0.0,9.71,1.44,3.13,0.0,10.65,-0.0087,-0.1428,0.0529,0.0,-0.0,-0.0,0.0044,-0.0316,0.0355,4623.62 +78,60,4.75,0.0,10.48,1.45,3.64,0.0,11.83,-0.0045,-0.1135,0.054,0.0,-0.0,-0.0,0.0042,-0.0123,0.038,4683.5 +79,60,5.06,0.0,11.43,1.45,3.97,0.0,13.03,-0.002,-0.0902,0.055,0.0,0.0,0.0,0.0025,-0.0217,0.0325,4743.8 +80,60,5.39,0.0,11.43,1.45,4.37,0.0,12.66,0.0008,-0.0909,0.0564,0.0,-0.0,-0.0,0.0028,-0.0229,0.0274,4803.44 +81,60,5.7,1.02,11.43,1.46,4.69,0.0,12.66,0.0029,-0.0915,0.0444,0.0,0.0,0.0,0.0021,-0.0166,0.0309,4864.05 +82,60,5.27,1.02,10.48,1.46,4.13,0.0,11.13,-0.0027,-0.0921,0.0383,0.0,-0.0,-0.0,-0.0056,-0.0259,0.0153,4922.79 +83,60,4.8,1.02,10.58,1.46,3.55,0.0,10.99,-0.0077,-0.0927,0.0314,0.0,-0.0,-0.0,-0.0051,-0.0405,0.0145,4984.18 +84,60,4.53,1.02,9.71,1.46,3.19,0.0,9.73,-0.0101,-0.0831,0.0228,0.0,0.0,0.0,-0.0024,-0.0247,0.0148,5043.68 +85,60,4.14,0.0,9.71,1.43,2.77,0.0,9.55,-0.0131,-0.0736,0.0144,0.0,-0.0,-0.0,-0.003,-0.0314,0.0213,5103.31 +86,60,3.77,0.0,8.82,1.4,2.34,0.0,8.34,-0.0159,-0.0716,0.0123,0.0,0.0,0.0,-0.0027,-0.0216,0.0107,5163.49 +87,60,3.31,0.0,8.74,1.37,1.84,0.0,7.8,-0.0192,-0.0859,0.0126,0.0,0.0,0.0,-0.0033,-0.0301,0.0217,5224.01 +88,60,3.01,0.0,6.93,1.34,1.54,0.0,7.03,-0.0208,-0.0992,0.021,0.0,0.0,0.0,-0.0016,-0.0418,0.013,5283.31 +89,60,2.63,0.0,6.0,1.24,1.16,0.0,5.76,-0.0233,-0.1019,0.0086,0.0,-0.0,-0.0,-0.0025,-0.022,0.015,5344.26 +90,60,2.33,0.0,5.94,1.14,0.91,0.0,4.97,-0.0249,-0.1045,0.0071,0.0,0.0,0.0,-0.0016,-0.025,0.0201,5403.2 +91,60,2.0,0.0,5.05,1.05,0.79,0.0,4.39,-0.0274,-0.1068,0.0063,0.0,0.0,0.0,-0.0025,-0.0264,0.0247,5463.94 +92,60,2.35,0.0,6.0,1.05,1.07,0.0,5.65,-0.025,-0.109,0.0138,0.0,0.0,0.0,0.0024,-0.0165,0.0224,5523.82 +93,60,2.64,0.0,6.86,1.05,1.37,0.0,6.06,-0.0223,-0.111,0.0262,0.0,-0.0,-0.0,0.0027,-0.0134,0.0331,5583.06 +94,60,3.3,0.0,6.93,1.05,2.0,0.0,6.68,-0.0157,-0.1029,0.0354,0.0,0.0,0.0,0.0066,-0.0139,0.0325,5643.53 +95,60,3.69,1.02,7.84,1.05,2.38,0.0,7.53,-0.0114,-0.0947,0.0393,0.0,-0.0,-0.0,0.0044,-0.022,0.0283,5703.0 +96,60,4.23,1.02,8.74,1.05,2.97,0.0,8.69,-0.0052,-0.0868,0.0424,0.0,0.0,0.0,0.0061,-0.0154,0.0438,5763.8 +97,60,4.83,1.03,8.74,1.12,3.7,0.0,8.76,0.0014,-0.0688,0.0429,0.0,0.0,0.0,0.0066,-0.0146,0.0379,5823.31 +98,60,5.21,1.02,10.48,1.12,4.17,0.0,10.72,0.0049,-0.0569,0.057,0.0,-0.0,-0.0,0.0035,-0.0257,0.0336,5883.01 +99,60,5.64,1.03,10.58,1.07,4.69,0.0,11.28,0.0082,-0.059,0.0583,0.0,-0.0,-0.0,0.0033,-0.0239,0.0355,5943.4 +100,60,6.03,1.03,12.38,1.07,5.17,0.0,13.59,0.0107,-0.061,0.0679,0.0,-0.0,-0.0,0.0024,-0.0207,0.0293,6003.83 +101,60,6.22,1.02,12.26,1.08,5.4,0.0,13.47,0.0106,-0.0629,0.0555,0.0,-0.0,-0.0,-0.0001,-0.0175,0.0204,6062.73 +102,60,5.9,1.03,12.38,1.15,4.95,0.0,13.39,0.0048,-0.0646,0.0456,0.0,0.0,0.0,-0.0058,-0.0254,0.011,6123.22 +103,60,5.62,1.03,13.21,1.16,4.53,0.0,14.32,0.0004,-0.0661,0.0458,0.0,0.0,0.0,-0.0044,-0.0353,0.0193,6183.41 +104,60,5.0,1.02,12.26,1.17,3.73,0.0,12.98,-0.0067,-0.0676,0.0269,0.0,0.0,0.0,-0.007,-0.0331,0.0099,6243.36 +105,60,4.67,1.02,12.26,1.18,3.32,0.0,12.69,-0.0094,-0.069,0.0227,0.0,-0.0,-0.0,-0.0027,-0.0428,0.0203,6303.91 +106,60,4.15,1.02,11.43,1.19,2.7,0.0,11.45,-0.0136,-0.0702,0.0165,0.0,-0.0,-0.0,-0.0042,-0.0325,0.0129,6363.6 +107,60,3.57,0.0,7.84,1.19,2.05,0.0,7.35,-0.0178,-0.0713,0.0132,0.0,0.0,0.0,-0.0042,-0.0426,0.0162,6423.67 +108,60,3.08,0.0,6.93,1.2,1.64,0.0,6.71,-0.0207,-0.0819,0.0104,0.0,0.0,0.0,-0.0029,-0.0263,0.0133,6482.77 +109,60,2.67,0.0,6.93,1.2,1.28,0.0,6.02,-0.0237,-0.0916,0.0179,0.0,0.0,0.0,-0.003,-0.0308,0.0149,6543.71 +110,60,2.31,0.0,6.0,1.21,1.05,0.0,5.94,-0.0266,-0.1005,0.0143,0.0,-0.0,-0.0,-0.0029,-0.03,0.0263,6602.93 +111,60,2.28,0.0,6.93,1.21,1.01,0.0,7.13,-0.0274,-0.1087,0.0218,0.0,0.0,0.0,-0.0008,-0.0198,0.0183,6663.47 +112,60,2.94,0.0,6.0,1.28,1.57,0.0,5.92,-0.0211,-0.1163,0.0233,0.0,0.0,0.0,0.0063,-0.0137,0.0317,6723.7 +113,60,3.45,0.0,7.77,1.29,2.1,0.0,7.42,-0.0151,-0.1136,0.0319,0.0,0.0,0.0,0.006,-0.013,0.0325,6783.07 +114,60,3.68,0.0,7.84,1.29,2.33,0.0,7.55,-0.0118,-0.091,0.0376,0.0,0.0,0.0,0.0033,-0.017,0.0356,6842.75 +115,60,4.08,0.0,9.71,1.29,2.83,0.0,9.84,-0.0067,-0.0724,0.0418,0.0,-0.0,-0.0,0.0051,-0.0223,0.0382,6903.37 +116,60,4.56,0.0,10.58,1.26,3.45,0.0,10.58,-0.0014,-0.0604,0.0367,0.0,0.0,0.0,0.0053,-0.0173,0.0335,6963.13 +117,60,5.16,0.0,10.58,1.27,4.19,0.0,11.51,0.0042,-0.0623,0.0623,0.0,0.0,0.0,0.0055,-0.0165,0.034,7023.42 +118,60,5.5,0.0,13.08,1.28,4.59,0.0,14.77,0.0062,-0.0717,0.0711,0.0,-0.0,-0.0,0.002,-0.0236,0.0278,7083.17 +119,60,5.78,1.03,12.38,1.29,4.89,0.0,14.02,0.0074,-0.0709,0.0531,0.0,-0.0,-0.0,0.0012,-0.023,0.032,7143.49 +120,60,6.13,1.02,11.43,1.29,5.27,0.0,12.41,0.0092,-0.0701,0.0447,0.0,0.0,0.0,0.0018,-0.0358,0.0259,7202.97 +121,60,6.18,2.04,12.38,1.3,5.3,0.0,13.12,0.0078,-0.0591,0.0432,0.0,0.0,0.0,-0.0013,-0.0244,0.0264,7263.14 +122,60,5.44,1.03,11.43,1.31,4.33,0.0,12.5,-0.0017,-0.0482,0.0462,0.0,-0.0,-0.0,-0.0095,-0.0336,0.0109,7323.52 +123,60,4.86,0.0,10.58,1.31,3.61,0.0,10.44,-0.0081,-0.0419,0.0227,0.0,0.0,0.0,-0.0064,-0.0374,0.0123,7383.41 +124,60,4.55,0.0,8.82,1.32,3.21,0.0,8.55,-0.0108,-0.0418,0.0188,0.0,-0.0,-0.0,-0.0027,-0.0211,0.0181,7442.7 +125,60,4.12,0.0,8.74,1.37,2.69,0.0,7.98,-0.0141,-0.0506,0.0149,0.0,0.0,0.0,-0.0033,-0.0334,0.0131,7503.33 +126,60,3.7,1.02,8.74,1.38,2.2,0.0,8.01,-0.0167,-0.0598,0.0117,0.0,0.0,0.0,-0.0026,-0.0294,0.0153,7563.35 +127,60,3.06,0.0,7.92,1.39,1.66,0.0,6.97,-0.0212,-0.0647,0.0101,0.0,-0.0,-0.0,-0.0045,-0.0369,0.0148,7623.01 +128,60,2.69,0.0,6.86,1.33,1.25,0.0,5.93,-0.024,-0.0736,0.0105,0.0,-0.0,-0.0,-0.0028,-0.0226,0.0223,7683.02 +129,60,2.41,0.0,6.86,1.33,1.05,0.0,5.55,-0.0256,-0.0819,0.0116,0.0,-0.0,-0.0,-0.0016,-0.0179,0.0221,7743.35 +130,60,2.03,0.0,6.86,1.33,0.7,0.0,5.7,-0.029,-0.0898,0.015,0.0,-0.0,-0.0,-0.0033,-0.0264,0.0192,7803.07 +131,60,2.06,0.0,5.94,1.34,0.74,0.0,4.59,-0.0284,-0.1038,0.0119,0.0,0.0,0.0,0.0006,-0.027,0.0254,7863.01 +132,60,2.64,0.0,6.93,1.4,1.31,0.0,6.22,-0.0222,-0.1167,0.0307,0.0,0.0,0.0,0.0062,-0.0129,0.0446,7923.04 +133,60,3.14,0.0,6.93,1.41,1.8,0.0,6.32,-0.0165,-0.1245,0.0264,0.0,-0.0,-0.0,0.0057,-0.011,0.0235,7983.43 +134,60,3.43,0.0,6.93,1.41,2.14,0.0,6.25,-0.0127,-0.1346,0.0278,0.0,-0.0,-0.0,0.0039,-0.0146,0.0274,8043.36 +135,60,3.58,0.0,6.93,1.42,2.3,0.0,6.71,-0.0106,-0.1439,0.0324,0.0,0.0,0.0,0.002,-0.0142,0.0244,8103.16 +136,60,3.89,0.0,7.84,1.43,2.64,0.0,7.18,-0.0069,-0.1524,0.0247,0.0,0.0,0.0,0.0037,-0.0158,0.0267,8163.17 +137,60,4.37,0.0,8.82,1.44,3.23,0.0,8.42,-0.0017,-0.1604,0.0336,0.0,0.0,0.0,0.0053,-0.0121,0.0294,8223.29 +138,60,4.89,0.0,9.71,1.45,3.86,0.0,10.32,0.0033,-0.1677,0.0485,0.0,-0.0,-0.0,0.005,-0.0157,0.0299,8282.85 +139,60,5.33,0.0,9.71,1.46,4.43,0.0,10.23,0.0067,-0.1744,0.0475,0.0,-0.0,-0.0,0.0034,-0.0184,0.0353,8342.53 +140,60,5.69,1.03,10.58,1.46,4.81,0.0,10.77,0.0083,-0.1708,0.056,0.0,0.0,0.0,0.0016,-0.0345,0.0364,8403.48 +141,60,5.52,1.02,10.58,1.47,4.61,0.0,10.96,0.0046,-0.1673,0.0435,0.0,-0.0,-0.0,-0.0037,-0.0265,0.0209,8463.52 +142,60,5.03,1.02,9.71,1.49,3.93,0.0,9.63,-0.0024,-0.1638,0.0299,0.0,-0.0,-0.0,-0.007,-0.047,0.0166,8522.89 +143,60,4.55,1.03,8.82,1.5,3.29,0.0,8.58,-0.008,-0.1602,0.0253,0.0,0.0,0.0,-0.0056,-0.0332,0.0116,8583.15 +144,60,4.32,0.0,9.71,1.51,3.05,0.0,9.68,-0.0098,-0.1468,0.0179,0.0,0.0,0.0,-0.0018,-0.0321,0.023,8643.24 +145,60,4.13,0.0,9.62,1.52,2.8,0.0,8.33,-0.0113,-0.1332,0.0159,0.0,0.0,0.0,-0.0015,-0.0232,0.0237,8702.82 +146,60,3.85,0.0,8.74,1.53,2.47,0.0,7.2,-0.0132,-0.1196,0.0203,0.0,-0.0,-0.0,-0.0019,-0.0233,0.0314,8762.81 +147,60,3.49,0.0,8.74,1.2,2.07,0.0,7.08,-0.0158,-0.106,0.0175,0.0,-0.0,-0.0,-0.0025,-0.0292,0.0148,8823.74 +148,60,2.86,0.0,7.84,1.55,1.42,0.0,5.9,-0.0208,-0.0925,0.0135,0.0,0.0,0.0,-0.005,-0.0207,0.0136,8882.59 +149,60,2.39,0.0,6.86,1.55,1.12,0.0,6.28,-0.0241,-0.089,0.008,0.0,0.0,0.0,-0.0033,-0.0292,0.0155,8942.98 +150,60,2.05,0.0,5.94,1.56,0.79,0.0,3.98,-0.0277,-0.0857,0.0101,0.0,-0.0,-0.0,-0.0036,-0.0379,0.0248,9003.13 +151,60,1.96,0.0,5.94,1.45,0.75,0.0,3.98,-0.0288,-0.098,0.0103,0.0,0.0,0.0,-0.0011,-0.0176,0.018,9063.19 +152,60,2.48,0.0,6.93,1.45,1.25,0.0,5.18,-0.0241,-0.1117,0.017,0.0,-0.0,-0.0,0.0046,-0.0137,0.0339,9122.79 +153,60,2.84,0.0,6.93,1.57,1.62,0.0,6.39,-0.0206,-0.1049,0.0231,0.0,-0.0,-0.0,0.0035,-0.0116,0.0278,9183.04 +154,60,3.48,0.0,7.84,1.57,2.24,0.0,8.59,-0.0142,-0.0982,0.0446,0.0,-0.0,-0.0,0.0064,-0.0171,0.0373,9243.26 +155,60,3.87,0.0,8.74,1.22,2.74,0.0,9.68,-0.0097,-0.1041,0.0487,0.0,-0.0,-0.0,0.0045,-0.0143,0.0345,9302.61 +156,60,4.32,0.0,9.62,1.22,3.28,0.0,10.87,-0.0054,-0.1034,0.0452,0.0,0.0,0.0,0.0043,-0.0294,0.0276,9363.06 +157,60,4.52,1.02,10.58,1.23,3.4,0.0,10.79,-0.0043,-0.0926,0.0492,0.0,-0.0,-0.0,0.0012,-0.0187,0.0206,9422.87 +158,60,4.96,1.02,10.48,1.59,3.89,0.0,11.78,0.0003,-0.0817,0.0404,0.0,0.0,0.0,0.0046,-0.015,0.0241,9483.14 +159,60,5.34,1.02,11.43,1.6,4.39,0.0,11.81,0.004,-0.0709,0.0428,0.0,-0.0,-0.0,0.0037,-0.0177,0.0265,9542.99 +160,60,5.78,1.03,10.58,1.24,4.9,0.0,10.6,0.0074,-0.0545,0.0436,0.0,0.0,0.0,0.0034,-0.0279,0.0338,9603.05 +161,60,5.99,1.03,10.58,1.62,5.13,0.0,11.12,0.0081,-0.0474,0.0445,0.0,0.0,0.0,0.0007,-0.0339,0.0274,9662.97 +162,60,5.59,1.03,9.71,1.63,4.6,0.0,9.99,0.0021,-0.0408,0.0294,0.0,-0.0,-0.0,-0.006,-0.0363,0.0279,9723.25 +163,60,5.33,1.03,10.58,1.25,4.22,0.0,10.13,-0.0015,-0.0417,0.0267,0.0,0.0,0.0,-0.0036,-0.0234,0.0226,9783.57 +164,60,4.66,1.03,10.58,1.26,3.36,0.0,10.2,-0.0086,-0.046,0.021,0.0,-0.0,-0.0,-0.0072,-0.0398,0.0209,9842.59 +165,60,4.29,1.02,11.54,1.65,2.93,0.0,11.42,-0.0113,-0.0492,0.022,0.0,-0.0,-0.0,-0.0027,-0.0281,0.0154,9903.0 +166,60,3.79,0.0,9.71,1.26,2.39,0.0,9.01,-0.0149,-0.0543,0.0152,0.0,0.0,0.0,-0.0036,-0.0237,0.0126,9963.17 +167,60,3.56,1.02,8.74,1.26,2.11,0.0,8.22,-0.0158,-0.0608,0.01,0.0,-0.0,-0.0,-0.0009,-0.023,0.0345,10022.66 +168,60,3.2,0.0,8.82,1.26,1.84,0.0,8.39,-0.0176,-0.0762,0.0094,0.0,0.0,0.0,-0.0018,-0.0206,0.0156,10083.06 +169,60,2.72,0.0,7.92,1.26,1.34,0.0,7.09,-0.0215,-0.0904,0.0052,0.0,-0.0,-0.0,-0.0039,-0.0217,0.0117,10142.84 +170,60,2.38,0.0,7.84,1.68,1.0,0.0,6.33,-0.024,-0.1034,0.0067,0.0,-0.0,-0.0,-0.0025,-0.0313,0.0152,10202.88 +171,60,2.21,0.0,6.93,1.55,0.88,0.0,5.21,-0.0248,-0.1155,0.013,0.0,-0.0,-0.0,-0.0008,-0.0243,0.0236,10263.22 +172,60,2.62,0.0,7.84,1.51,1.32,0.0,6.57,-0.0201,-0.1266,0.0232,0.0,0.0,0.0,0.0047,-0.018,0.0334,10322.79 +173,60,2.85,0.0,7.84,1.27,1.59,0.0,7.83,-0.0173,-0.1369,0.0396,0.0,-0.0,-0.0,0.0028,-0.0193,0.0298,10382.71 +174,60,3.0,0.0,8.82,1.28,1.77,0.0,8.78,-0.0156,-0.1463,0.0436,0.0,0.0,0.0,0.0018,-0.0171,0.0248,10442.9 +175,60,3.31,0.0,8.74,1.29,2.04,0.0,8.59,-0.0124,-0.155,0.0366,0.0,-0.0,-0.0,0.0032,-0.0141,0.0375,10503.02 +176,60,3.66,1.02,8.74,1.37,2.42,0.0,8.42,-0.0084,-0.1534,0.0308,0.0,0.0,0.0,0.004,-0.0141,0.0315,10562.61 +177,60,3.98,0.0,8.82,1.3,2.87,0.0,8.91,-0.0047,-0.1518,0.0304,0.0,0.0,0.0,0.0037,-0.0293,0.0293,10622.75 +178,60,4.48,1.02,9.71,1.3,3.42,0.0,9.95,-0.0002,-0.13,0.0387,0.0,0.0,0.0,0.0044,-0.0149,0.0399,10682.1 +179,60,5.09,1.02,9.71,1.31,4.14,0.0,10.05,0.0052,-0.0984,0.0569,0.0,-0.0,-0.0,0.0055,-0.0166,0.046,10743.78 +180,60,5.29,1.02,10.58,1.32,4.35,0.0,10.9,0.0059,-0.0784,0.0438,0.0,-0.0,-0.0,0.0007,-0.0188,0.031,10801.96 +181,60,5.16,1.03,10.68,1.33,4.17,0.0,11.13,0.0031,-0.0656,0.0408,0.0,0.0,0.0,-0.0028,-0.0344,0.0208,10862.33 +182,60,4.65,1.02,9.71,1.28,3.53,0.0,9.8,-0.0035,-0.0681,0.0229,0.0,0.0,0.0,-0.0066,-0.0328,0.0122,10923.26 +183,60,4.37,1.02,9.71,1.26,3.18,0.0,9.55,-0.0068,-0.0705,0.0226,0.0,0.0,0.0,-0.0033,-0.032,0.015,10983.15 +184,60,4.13,1.02,9.71,1.35,2.86,0.0,9.44,-0.0093,-0.0727,0.017,0.0,-0.0,-0.0,-0.0024,-0.0335,0.0166,11042.64 +185,60,3.89,1.02,9.71,1.35,2.55,0.0,9.36,-0.0112,-0.0746,0.0113,0.0,0.0,0.0,-0.0019,-0.0311,0.0218,11102.63 +186,60,3.64,0.0,6.93,1.35,2.28,0.0,6.49,-0.0127,-0.0765,0.0134,0.0,0.0,0.0,-0.0015,-0.0326,0.0205,11163.17 +187,60,3.23,0.0,6.93,1.36,1.89,0.0,6.48,-0.0157,-0.0782,0.0122,0.0,0.0,0.0,-0.003,-0.0324,0.0213,11222.59 +188,60,2.72,0.0,6.0,1.37,1.34,0.0,5.3,-0.0201,-0.0851,0.0033,0.0,-0.0,-0.0,-0.0044,-0.0383,0.0121,11283.42 +189,60,2.19,0.0,5.0,1.37,0.85,0.0,3.67,-0.0246,-0.0959,0.0064,0.0,0.0,0.0,-0.0044,-0.0396,0.0163,11343.16 +190,60,1.87,0.0,4.04,1.16,0.73,0.0,3.51,-0.0271,-0.1059,0.0132,0.0,0.0,0.0,-0.0025,-0.0291,0.0255,11402.02 +191,60,2.2,0.0,6.0,1.38,0.97,0.0,5.93,-0.025,-0.1151,0.0311,0.0,-0.0,-0.0,0.0021,-0.0136,0.029,11462.9 +192,60,2.75,0.0,6.86,1.17,1.46,0.0,7.04,-0.0196,-0.1141,0.0352,0.0,-0.0,-0.0,0.0054,-0.0125,0.0335,11522.19 +193,60,3.11,0.0,7.84,1.17,1.9,0.0,8.22,-0.0152,-0.1032,0.0392,0.0,-0.0,-0.0,0.0044,-0.012,0.03,11582.8 +194,60,3.49,0.0,7.84,1.18,2.33,0.0,8.14,-0.0112,-0.1137,0.0403,0.0,0.0,0.0,0.004,-0.0213,0.0211,11642.71 +195,60,3.87,0.0,8.74,1.18,2.81,0.0,9.29,-0.0074,-0.1235,0.0397,0.0,-0.0,-0.0,0.0038,-0.0141,0.0308,11702.91 +196,60,4.21,0.0,11.43,1.19,3.19,0.0,12.88,-0.0047,-0.1325,0.063,0.0,-0.0,-0.0,0.0027,-0.0236,0.0311,11762.26 +197,60,4.72,0.0,11.43,1.2,3.74,0.0,13.09,-0.0005,-0.1313,0.0543,0.0,-0.0,-0.0,0.0042,-0.0154,0.0377,11822.92 +198,60,5.05,0.0,10.58,1.21,4.09,0.0,11.75,0.0018,-0.1199,0.041,0.0,0.0,0.0,0.0023,-0.0203,0.0382,11883.07 +199,60,5.35,0.0,11.43,1.22,4.43,0.0,12.59,0.0038,-0.0984,0.0501,0.0,-0.0,-0.0,0.002,-0.0157,0.0254,11942.64 +200,60,5.65,1.02,10.48,1.22,4.76,0.0,11.27,0.0056,-0.0925,0.0531,0.0,0.0,0.0,0.0018,-0.025,0.0295,12002.69 +201,60,5.44,1.02,9.71,1.23,4.48,0.0,10.6,0.0021,-0.0924,0.0434,0.0,-0.0,-0.0,-0.0036,-0.0304,0.0312,12062.04 +202,60,4.89,1.03,9.62,1.23,3.74,0.0,10.54,-0.0047,-0.0923,0.0336,0.0,0.0,0.0,-0.0067,-0.0303,0.0136,12120.32 +203,60,4.44,1.02,9.62,1.23,3.19,0.0,10.38,-0.0091,-0.0923,0.0267,0.0,-0.0,-0.0,-0.0044,-0.0407,0.0148,12181.97 +204,60,4.14,1.03,8.82,1.23,2.8,0.0,8.23,-0.0113,-0.0922,0.0206,0.0,0.0,0.0,-0.0023,-0.0252,0.0154,12242.98 +205,60,3.59,1.02,8.82,1.23,2.19,0.0,8.1,-0.0155,-0.0921,0.0156,0.0,-0.0,-0.0,-0.0042,-0.0288,0.02,12303.0 +206,6,3.24,2.15,5.32,0.63,1.8,0.0,4.15,-0.0145,-0.0318,0.007,0.0,0.0,0.0,0.0017,-0.0096,0.0147,12335.59 +207,60,2.67,0.0,7.78,1.0,1.36,0.0,6.87,-0.0229,-0.0905,0.0028,0.0,-0.0,-0.0,-0.0075,-0.037,0.0148,12419.3 +208,60,2.3,0.0,7.87,1.0,1.12,0.0,7.27,-0.0258,-0.0889,0.0097,0.0,0.0,0.0,-0.0029,-0.034,0.0166,12480.3 +209,55,1.86,0.0,5.68,1.32,0.67,0.0,4.75,-0.0311,-0.0872,0.0089,0.0,0.0,0.0,-0.0051,-0.0345,0.015,12515.12 +210,60,1.34,0.0,6.41,0.76,0.4,0.0,5.39,-0.0362,-0.0966,0.0103,0.0,-0.0,-0.0,-0.0057,-0.0217,0.0102,12600.19 +211,60,1.09,0.0,3.95,0.76,0.24,0.0,2.83,-0.0413,-0.0931,0.007,0.0,-0.0,-0.0,-0.005,-0.0375,0.0226,12658.74 +212,59,1.15,0.0,4.0,0.76,0.27,0.0,2.59,-0.0432,-0.096,0.0004,0.0,0.0,0.0,-0.0024,-0.0148,0.0152,12719.81 +213,60,1.13,0.0,3.95,1.15,0.28,0.0,2.18,-0.0462,-0.1008,-0.0046,0.0,0.0,0.0,-0.0026,-0.0126,0.018,12780.83 +214,60,1.04,0.0,3.95,1.06,0.24,0.0,2.46,-0.0494,-0.1098,0.0034,0.0,0.0,0.0,-0.0032,-0.014,0.0198,12838.6 +215,60,1.06,0.0,5.26,0.98,0.27,0.0,3.83,-0.0518,-0.12,0.0094,0.0,0.0,0.0,-0.0023,-0.0217,0.0159,12899.66 +216,60,1.11,0.0,3.7,0.98,0.32,0.0,2.85,-0.0536,-0.1295,0.0038,0.0,0.0,0.0,-0.0019,-0.0175,0.017,12960.2 +217,60,1.0,0.0,3.37,0.98,0.25,0.0,2.42,-0.0568,-0.1381,0.0012,0.0,-0.0,-0.0,-0.0031,-0.0133,0.015,13018.63 +218,60,0.96,0.0,3.41,0.98,0.29,0.0,2.56,-0.0593,-0.1461,0.012,0.0,-0.0,-0.0,-0.0025,-0.0152,0.0181,13078.58 +219,60,0.89,0.0,3.33,0.98,0.25,0.0,2.5,-0.0625,-0.1535,0.0095,0.0,-0.0,-0.0,-0.0033,-0.0157,0.0122,13139.92 +220,60,0.92,0.0,3.06,0.98,0.23,0.0,2.12,-0.0648,-0.1603,0.0048,0.0,-0.0,-0.0,-0.0023,-0.0145,0.0156,13196.84 diff --git a/experiments/results/csv/oscillating_errors_adaptive_time_analysis.csv b/experiments/results/csv/oscillating_errors_adaptive_time_analysis.csv new file mode 100644 index 000000000..7e849ee46 --- /dev/null +++ b/experiments/results/csv/oscillating_errors_adaptive_time_analysis.csv @@ -0,0 +1,23 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-10s,5303,5222,66,1.24,15,0.28,1.0 +10-20s,5829,5779,50,0.86,0,0.0,1.0 +20-30s,5888,5761,127,2.16,0,0.0,2.0 +30-40s,6044,5677,342,5.66,25,0.41,6.0 +40-50s,6023,5746,157,2.61,120,1.99,2.0 +50-60s,6172,5654,368,5.96,150,2.43,6.0 +60-70s,6112,5766,129,2.11,217,3.55,2.0 +70-80s,6169,5709,323,5.24,137,2.22,6.0 +80-90s,6073,5751,143,2.35,179,2.95,2.0 +90-100s,6176,5674,362,5.86,140,2.27,6.0 +100-110s,6113,5761,140,2.29,212,3.47,2.0 +110-120s,6199,5670,367,5.92,162,2.61,6.0 +120-130s,6059,5756,127,2.1,176,2.9,2.0 +130-140s,6184,5683,342,5.53,159,2.57,6.0 +140-150s,6120,5780,125,2.04,215,3.51,2.0 +150-160s,6199,5700,344,5.55,155,2.5,6.0 +160-170s,6112,5762,139,2.27,211,3.45,2.0 +170-180s,6123,5700,319,5.21,104,1.7,6.0 +180-190s,6066,5772,119,1.96,175,2.88,2.0 +190-200s,6195,5703,334,5.39,158,2.55,6.0 +200-210s,5009,4779,82,1.64,148,2.95,1.0 +210-220s,5599,5533,52,0.93,14,0.25,1.0 diff --git a/experiments/results/csv/oscillating_errors_time_analysis.csv b/experiments/results/csv/oscillating_errors_time_analysis.csv new file mode 100644 index 000000000..9e2d5d0f0 --- /dev/null +++ b/experiments/results/csv/oscillating_errors_time_analysis.csv @@ -0,0 +1,23 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-10s,5148,5093,55,1.07,0,0.0,1.0 +10-20s,5731,5678,53,0.92,0,0.0,1.0 +20-30s,5773,5668,105,1.82,0,0.0,2.0 +30-40s,7421,5307,311,4.19,1803,24.3,6.0 +40-50s,7417,4234,98,1.32,3085,41.59,2.0 +50-60s,7252,4258,251,3.46,2743,37.82,6.0 +60-70s,7499,4808,121,1.61,2570,34.27,2.0 +70-80s,7727,4492,262,3.39,2973,38.48,6.0 +80-90s,7485,3561,91,1.22,3833,51.21,2.0 +90-100s,6952,4133,244,3.51,2575,37.04,6.0 +100-110s,7263,4327,101,1.39,2835,39.03,2.0 +110-120s,7426,4192,260,3.5,2974,40.05,6.0 +120-130s,7500,4208,119,1.59,3173,42.31,2.0 +130-140s,7462,4566,277,3.71,2619,35.1,6.0 +140-150s,7642,4156,89,1.16,3397,44.45,2.0 +150-160s,7567,4384,234,3.09,2949,38.97,6.0 +160-170s,7610,4556,121,1.59,2933,38.54,2.0 +170-180s,7435,4942,260,3.5,2233,30.03,6.0 +180-190s,7580,4612,120,1.58,2848,37.57,2.0 +190-200s,7454,4299,267,3.58,2888,38.74,6.0 +200-210s,5968,3361,54,0.9,2553,42.78,1.0 +210-220s,6260,5019,58,0.93,1183,18.9,1.0 diff --git a/experiments/results/csv/slow_query_adaptive_pid_controller.csv b/experiments/results/csv/slow_query_adaptive_pid_controller.csv new file mode 100644 index 000000000..ec79b0fc5 --- /dev/null +++ b/experiments/results/csv/slow_query_adaptive_pid_controller.csv @@ -0,0 +1,421 @@ +Window,Thread Count,Error Rate Avg,Error Rate Min,Error Rate Max,Ideal Error Rate,Rejection Rate Avg,Rejection Rate Min,Rejection Rate Max,Integral Avg,Integral Min,Integral Max,Derivative Avg,Derivative Min,Derivative Max,P Value Avg,P Value Min,P Value Max,Total Request Time +1,27,0.0,0.0,0.0,4.61,0.0,0.0,0.0,-0.0461,-0.0461,-0.0461,0.0,-0.0,-0.0,-0.0461,-0.0461,-0.0461,95.59 +2,48,0.42,0.0,20.0,4.61,0.38,0.0,18.0,-0.0659,-0.0886,0.15,0.0,-0.0,-0.0,-0.04,-0.0461,0.15,156.7 +3,54,0.77,0.0,25.0,4.61,0.73,0.0,23.55,-0.0953,-0.1278,0.1578,0.0,0.0,0.0,-0.0367,-0.0461,0.2039,214.8 +4,59,2.12,0.0,50.0,5.0,2.21,0.0,54.0,-0.1107,-0.1639,0.45,0.0,0.0,0.0,-0.0235,-0.0461,0.45,274.1 +5,60,2.08,0.0,50.0,5.0,2.82,0.0,81.36,-0.1394,-0.1972,0.603,0.0,-0.0,-0.0,-0.0305,-0.0461,0.153,337.13 +6,59,2.33,0.0,50.0,5.0,3.2,0.0,93.72,-0.1707,-0.228,0.6055,0.0,-0.0,-0.0,-0.0297,-0.0935,0.1667,393.71 +7,60,2.64,0.0,50.0,4.25,3.37,0.0,97.98,-0.1949,-0.2563,0.54,0.0,0.0,0.0,-0.0263,-0.0655,0.136,455.71 +8,60,2.67,0.0,50.0,3.92,3.44,0.0,98.11,-0.2205,-0.2824,0.4512,0.0,0.0,0.0,-0.0256,-0.0889,0.084,517.77 +9,60,2.35,0.0,50.0,3.61,2.93,0.0,96.38,-0.2489,-0.3065,0.3616,0.0,0.0,0.0,-0.0284,-0.1527,0.0253,576.11 +10,60,2.17,0.0,50.0,3.33,2.55,0.0,94.0,-0.2735,-0.3287,0.2815,0.0,0.0,0.0,-0.0246,-0.1399,0.025,636.23 +11,60,2.09,0.0,50.0,3.07,2.36,0.0,91.59,-0.2943,-0.3491,0.2145,0.0,0.0,0.0,-0.0208,-0.131,0.0551,695.77 +12,60,2.59,0.0,50.0,2.83,2.64,0.0,89.43,-0.3069,-0.368,0.1607,0.0,0.0,0.0,-0.0126,-0.0537,0.1426,757.28 +13,60,2.03,0.0,50.0,2.61,2.26,0.0,87.62,-0.3271,-0.3854,0.1188,0.0,0.0,0.0,-0.0202,-0.2139,0.049,819.06 +14,60,1.43,0.0,16.67,2.41,0.96,0.0,14.41,-0.3551,-0.8438,0.0138,0.0,0.0,0.0,-0.028,-0.9627,0.0825,877.86 +15,60,1.31,0.0,16.67,2.22,0.87,0.0,14.92,-0.3694,-0.8864,0.0143,0.0,0.0,0.0,-0.0142,-0.0495,0.0387,934.43 +16,60,1.35,0.0,14.29,2.05,0.86,0.0,12.0,-0.3813,-0.9255,0.0134,0.0,0.0,0.0,-0.012,-0.1317,0.1268,995.66 +17,60,0.96,0.0,14.29,1.89,0.61,0.0,11.92,-0.396,-0.9617,-0.0286,0.0,0.0,0.0,-0.0147,-0.1381,0.0449,1056.95 +18,60,0.8,0.0,16.67,1.74,0.59,0.0,15.38,-0.4087,-0.995,-0.029,0.0,0.0,0.0,-0.0127,-0.1262,0.0458,1116.4 +19,60,1.13,0.0,16.67,1.6,0.76,0.0,16.09,-0.4168,-1.0257,-0.0182,0.0,0.0,0.0,-0.008,-0.0426,0.0846,1173.69 +20,60,1.21,0.0,16.67,1.48,0.92,0.0,16.28,-0.4246,-1.054,-0.0136,0.0,0.0,0.0,-0.0078,-0.0393,0.0881,1237.8 +21,60,1.24,0.0,16.67,1.36,1.01,0.0,16.37,-0.4325,-1.0801,-0.0106,0.0,0.0,0.0,-0.0079,-0.0362,0.0613,1296.0 +22,59,1.09,0.0,16.67,1.26,0.87,0.0,17.32,-0.4421,-1.1042,0.0213,0.0,0.0,0.0,-0.0102,-0.1895,0.0906,1356.39 +23,60,1.2,0.0,16.67,0.99,0.92,0.0,17.89,-0.4487,-1.1264,0.0226,0.0,0.0,0.0,-0.0062,-0.0308,0.0684,1416.5 +24,60,0.83,0.0,12.5,0.91,0.53,0.0,10.84,-0.4591,-1.1469,-0.0153,0.0,0.0,0.0,-0.0104,-0.1985,0.0628,1477.21 +25,60,0.86,0.0,16.67,0.84,0.61,0.0,16.16,-0.4645,-1.1657,0.0316,0.0,0.0,0.0,-0.0054,-0.0262,0.058,1536.02 +26,60,0.72,0.0,20.0,0.77,0.55,0.0,21.58,-0.4713,-1.1831,0.0714,0.0,0.0,0.0,-0.0069,-0.0831,0.0579,1595.63 +27,60,0.98,0.0,20.0,0.71,0.71,0.0,22.42,-0.4744,-1.1992,0.0665,0.0,0.0,0.0,-0.0031,-0.0222,0.1368,1655.22 +28,60,1.08,0.0,16.67,0.66,0.7,0.0,17.43,-0.4774,-1.214,0.0139,0.0,0.0,0.0,-0.003,-0.0527,0.1194,1716.55 +29,60,0.87,0.0,14.29,0.61,0.43,0.0,8.23,-0.4826,-1.2276,-0.041,0.0,0.0,0.0,-0.0052,-0.203,0.106,1776.04 +30,60,0.87,0.0,14.29,0.56,0.52,0.0,10.85,-0.4844,-1.2402,-0.0387,0.0,0.0,0.0,-0.0018,-0.0226,0.0867,1836.89 +31,58,0.9,0.0,14.29,0.51,0.63,0.0,12.4,-0.4899,-1.2518,-0.0166,0.0,0.0,0.0,-0.0017,-0.0161,0.071,1893.24 +32,60,0.75,0.0,12.5,2.08,0.57,0.0,10.8,-0.4899,-1.2624,-0.0219,0.0,0.0,0.0,-0.0038,-0.0909,0.0677,1945.11 +33,59,0.57,0.0,12.5,1.92,0.44,0.0,11.09,-0.4942,-1.2723,-0.1046,0.0,0.0,0.0,-0.005,-0.1158,0.0578,1995.48 +34,59,0.77,0.0,20.0,0.44,0.73,0.0,20.52,-0.495,-1.2814,-0.0135,0.0,0.0,0.0,-0.001,-0.0177,0.1367,2037.95 +35,60,2.03,0.0,25.0,0.34,1.67,0.0,26.91,-0.4862,-1.2898,0.042,0.0,0.0,0.0,0.0097,-0.0163,0.2468,2076.88 +36,60,7.87,0.0,50.0,0.34,5.89,0.0,60.83,-0.4243,-1.0981,0.0967,0.0,0.0,0.0,0.0619,-0.015,0.4035,2129.78 +37,60,12.41,0.0,66.67,0.34,12.15,0.0,100.0,-0.343,-0.9065,0.5555,0.0,-0.0,-0.0,0.0813,-0.0819,0.4588,2168.88 +38,60,21.44,0.0,100.0,0.34,23.93,0.0,100.0,-0.195,-0.6218,1.5492,0.0,0.0,0.0,0.148,-0.0091,0.9937,2218.93 +39,60,29.6,0.0,100.0,0.34,39.03,0.0,100.0,-0.022,-0.6015,2.5429,0.0,0.0,0.0,0.1729,-0.1341,0.9937,2261.23 +40,60,35.63,0.0,100.0,0.34,52.4,0.0,100.0,0.1621,-0.6092,3.5365,0.0,0.0,0.0,0.1841,-0.0754,0.9937,2337.03 +41,60,41.16,0.0,100.0,0.34,59.67,0.0,100.0,0.3751,-0.6163,4.5302,0.0,0.0,0.0,0.213,-0.0115,0.9937,2426.36 +42,59,45.63,0.0,100.0,0.34,62.26,0.0,100.0,0.6441,-0.6229,5.5239,0.0,0.0,0.0,0.2628,-0.1017,0.9942,2512.22 +43,60,52.02,0.0,100.0,0.34,64.48,0.0,100.0,1.0113,-0.629,6.5176,0.0,-0.0,-0.0,0.3779,-0.0514,0.995,2591.52 +44,59,57.82,0.0,100.0,0.34,65.41,0.0,100.0,1.4353,-0.6346,7.5112,0.0,0.0,0.0,0.4804,-0.2874,0.9959,2640.14 +45,60,60.44,0.0,100.0,0.73,66.04,0.0,100.0,2.0075,-0.6397,8.5049,0.0,0.0,0.0,0.5237,-0.247,0.9954,2703.44 +46,60,59.47,0.0,100.0,0.73,64.93,0.0,100.0,2.5154,-0.6445,9.4986,0.0,0.0,0.0,0.5079,-0.3294,0.9954,2749.45 +47,60,55.86,0.0,100.0,0.73,63.04,0.0,100.0,2.9567,-0.6489,10.0,0.0,0.0,0.0,0.4495,-1.0058,0.9954,2794.37 +48,60,38.39,0.0,100.0,0.73,60.58,0.0,100.0,3.0727,-0.6529,8.9942,0.0,0.0,0.0,0.1161,-1.0241,0.9954,2837.66 +49,59,22.15,0.0,100.0,0.68,55.92,0.0,100.0,2.9328,-0.58,8.9881,0.0,-0.0,-0.0,-0.2018,-1.0277,0.995,2884.07 +50,60,8.46,0.0,100.0,0.09,48.51,0.0,100.0,2.4518,-0.5808,9.6074,0.0,0.0,0.0,-0.4225,-1.013,0.9931,2934.87 +51,59,5.17,0.0,50.0,0.09,44.73,0.0,100.0,2.0007,-0.5816,8.601,0.0,0.0,0.0,-0.4137,-1.0154,0.2471,3025.56 +52,60,5.39,0.0,50.0,0.23,41.44,0.0,100.0,1.6625,-0.5824,7.5952,0.0,0.0,0.0,-0.3824,-1.0142,0.3567,3083.47 +53,60,5.92,0.0,50.0,0.21,37.17,0.0,100.0,1.3341,-0.583,6.5898,0.0,0.0,0.0,-0.3284,-1.0131,0.305,3151.06 +54,60,7.96,0.0,100.0,0.19,32.5,0.0,100.0,1.0931,-0.5837,5.5849,0.0,0.0,0.0,-0.2409,-1.005,0.9968,3230.72 +55,59,8.43,0.0,100.0,0.18,28.49,0.0,100.0,0.8857,-0.5842,5.2682,0.0,0.0,0.0,-0.1772,-1.0046,0.9961,3303.41 +56,60,9.07,0.0,100.0,0.35,26.42,0.0,100.0,0.7852,-0.5848,6.2643,0.0,0.0,0.0,-0.1337,-0.9155,0.9961,3361.73 +57,60,9.75,0.0,100.0,0.32,23.27,0.0,100.0,0.6962,-0.5853,7.2604,0.0,0.0,0.0,-0.089,-0.7323,0.9977,3419.62 +58,60,9.89,0.0,100.0,0.3,21.54,0.0,100.0,0.6414,-0.5857,8.2565,0.0,0.0,0.0,-0.0548,-0.586,0.9974,3454.84 +59,60,10.84,0.0,100.0,0.27,22.16,0.0,100.0,0.5976,-0.5861,9.2527,0.0,0.0,0.0,-0.0438,-1.0024,0.9961,3514.15 +60,60,13.34,0.0,100.0,0.25,25.9,0.0,100.0,0.5656,-0.5865,10.0,0.0,0.0,0.0,-0.0279,-1.0054,0.9961,3558.14 +61,60,16.98,0.0,100.0,0.23,28.83,0.0,100.0,0.5414,-0.6954,10.0,0.0,0.0,0.0,-0.0075,-1.0098,0.9961,3614.54 +62,60,18.55,0.0,100.0,0.23,32.33,0.0,100.0,0.5346,-0.6979,10.0,0.0,0.0,0.0,0.0097,-0.8855,0.9961,3672.12 +63,60,23.68,0.0,100.0,0.23,38.2,0.0,100.0,0.5641,-0.5875,10.0,0.0,-0.0,-0.0,0.0461,-0.7083,0.999,3712.06 +64,59,25.59,0.0,100.0,0.23,43.3,0.0,100.0,0.6023,-0.5878,8.9964,0.0,0.0,0.0,0.0353,-1.0036,0.9981,3790.34 +65,59,30.14,0.0,100.0,0.09,48.94,0.0,100.0,0.6948,-0.588,7.9931,0.0,0.0,0.0,0.0887,-1.0033,0.9981,3864.65 +66,59,34.85,0.0,100.0,0.04,53.33,0.0,100.0,0.8293,-0.5882,6.9901,0.0,-0.0,-0.0,0.1418,-1.003,0.9981,3938.67 +67,60,44.98,0.0,100.0,0.04,60.4,0.0,100.0,1.1235,-0.5885,5.9873,0.0,0.0,0.0,0.298,-1.0028,0.9991,4010.6 +68,60,48.86,0.0,100.0,0.18,63.52,0.0,100.0,1.46,-0.5887,6.5249,0.0,0.0,0.0,0.3365,-1.0026,0.9991,4051.45 +69,60,47.39,0.0,100.0,0.04,65.17,0.0,100.0,1.7213,-0.5887,7.523,0.0,0.0,0.0,0.2613,-1.0046,0.9991,4106.56 +70,60,43.92,0.0,100.0,0.23,63.57,0.0,100.0,1.8942,-0.5888,8.5211,0.0,0.0,0.0,0.1729,-1.0074,0.9991,4152.25 +71,60,35.5,0.0,100.0,0.23,59.4,0.0,100.0,1.9141,-0.68,9.5192,0.0,0.0,0.0,0.0199,-1.0053,0.9981,4207.73 +72,60,40.22,0.0,100.0,0.23,65.36,0.0,100.0,2.0428,-0.6803,10.0,0.0,0.0,0.0,0.1373,-1.0028,0.9991,4251.2 +73,60,37.33,0.0,100.0,0.23,63.83,0.0,100.0,2.1145,-0.6806,9.7337,0.0,0.0,0.0,0.0717,-1.0046,0.9985,4309.51 +74,60,35.58,0.0,100.0,0.23,61.23,0.0,100.0,2.1429,-0.6809,10.0,0.0,0.0,0.0,0.0406,-1.0114,0.9988,4388.74 +75,60,26.17,0.0,100.0,0.23,55.34,0.0,100.0,2.0184,-0.6812,10.0,0.0,0.0,0.0,-0.1079,-1.0105,0.9985,4468.8 +76,60,28.31,0.0,100.0,0.21,53.0,0.0,100.0,2.0132,-0.6814,9.7596,0.0,-0.0,-0.0,-0.0052,-1.0097,0.9993,4547.76 +77,60,29.18,0.0,100.0,0.2,50.96,0.0,100.0,2.0491,-0.6816,8.7568,0.0,0.0,0.0,0.0359,-1.0089,0.9996,4625.05 +78,59,28.83,0.0,100.0,0.18,48.15,0.0,100.0,2.1181,-0.6818,9.0436,0.0,0.0,0.0,0.056,-1.0042,0.9996,4671.12 +79,59,21.67,0.0,100.0,0.04,42.09,0.0,100.0,2.0708,-0.682,10.0,0.0,-0.0,-0.0,-0.0702,-1.0034,0.9992,4723.84 +80,59,25.37,0.0,100.0,0.04,43.62,0.0,100.0,2.0893,-0.6822,10.0,0.0,0.0,0.0,0.0373,-1.0031,0.9996,4770.43 +81,59,25.51,0.0,100.0,0.02,45.97,0.0,100.0,2.0129,-0.6823,10.0,0.0,0.0,0.0,0.0067,-1.0054,0.9996,4814.74 +82,60,28.84,0.0,100.0,0.03,52.44,0.0,100.0,2.0292,-0.6825,10.0,0.0,-0.0,-0.0,0.034,-1.005,0.9994,4872.41 +83,58,25.46,0.0,100.0,0.03,51.3,0.0,100.0,1.891,-0.6826,8.9984,0.0,0.0,0.0,-0.0412,-1.0063,0.9994,4927.4 +84,60,23.89,0.0,100.0,0.17,48.16,0.0,100.0,1.9227,-0.6827,8.1904,0.0,0.0,0.0,-0.0667,-1.0058,0.9996,4975.24 +85,60,24.64,0.0,100.0,0.15,46.67,0.0,100.0,1.9129,-0.6828,9.1894,0.0,0.0,0.0,-0.0098,-1.0054,0.9996,5068.44 +86,60,25.43,0.0,100.0,0.14,44.61,0.0,100.0,1.9342,-0.6829,10.0,0.0,0.0,0.0,0.0244,-1.005,0.9996,5144.4 +87,60,27.06,0.0,100.0,0.13,44.33,0.0,100.0,1.9912,-0.683,10.0,0.0,0.0,0.0,0.0736,-1.0046,0.9996,5199.08 +88,60,28.81,0.0,100.0,0.11,42.08,0.0,100.0,2.0872,-0.6831,10.0,0.0,-0.0,-0.0,0.1145,-1.003,0.9997,5273.38 +89,59,29.29,0.0,100.0,0.11,41.03,0.0,100.0,2.2008,-0.6832,10.0,0.0,-0.0,-0.0,0.1461,-0.7988,0.9996,5321.83 +90,60,27.19,0.0,100.0,0.03,40.24,0.0,100.0,2.1845,-0.6833,10.0,0.0,0.0,0.0,0.1114,-1.001,0.9996,5369.39 +91,60,27.53,0.0,100.0,0.02,46.31,0.0,100.0,2.1956,-0.5906,10.0,0.0,0.0,0.0,0.0711,-1.0047,0.9996,5416.98 +92,60,15.89,0.0,100.0,0.02,45.52,0.0,100.0,1.9727,-0.5907,10.0,0.0,0.0,0.0,-0.2063,-1.0044,0.9988,5458.91 +93,60,23.03,0.0,100.0,0.02,54.7,0.0,100.0,1.8723,-0.5907,8.9945,0.0,-0.0,-0.0,-0.1004,-1.0055,0.9998,5514.65 +94,60,28.78,0.0,100.0,0.02,60.96,0.0,100.0,1.8256,-0.5907,7.9895,0.0,-0.0,-0.0,-0.0467,-1.005,0.9998,5561.62 +95,60,31.21,0.0,100.0,0.02,63.17,0.0,100.0,1.7964,-0.5907,7.5433,0.0,-0.0,-0.0,-0.0292,-1.0046,0.9998,5666.94 +96,59,35.93,0.0,100.0,0.02,64.82,0.0,100.0,1.8159,-0.5908,8.5413,0.0,0.0,0.0,0.0568,-1.0043,0.9998,5731.1 +97,59,39.01,0.0,100.0,0.03,63.82,0.0,100.0,1.9877,-0.5908,9.5392,0.0,0.0,0.0,0.1077,-1.004,0.9998,5806.11 +98,60,40.69,0.0,100.0,0.02,61.43,0.0,100.0,2.1237,-0.5908,10.0,0.0,0.0,0.0,0.1745,-0.995,0.9998,5874.05 +99,60,46.25,0.0,100.0,0.01,60.38,0.0,100.0,2.4024,-0.5908,10.0,0.0,0.0,0.0,0.3029,-0.7957,0.9998,5927.99 +100,60,46.39,0.0,100.0,0.02,58.63,0.0,100.0,2.6924,-0.5908,10.0,0.0,0.0,0.0,0.3233,-1.0002,0.9998,5974.68 +101,60,45.83,0.0,100.0,0.01,61.54,0.0,100.0,2.9577,-0.5908,10.0,0.0,0.0,0.0,0.292,-1.0021,0.9998,6018.66 +102,60,41.86,0.0,100.0,0.01,63.86,0.0,100.0,3.0921,-0.465,10.0,0.0,0.0,0.0,0.166,-1.0028,0.9998,6061.1 +103,60,37.21,0.0,100.0,0.01,67.94,0.0,100.0,3.0959,-0.4652,10.0,0.0,-0.0,-0.0,0.0371,-1.0028,0.9999,6116.68 +104,60,27.65,0.0,100.0,0.01,67.36,0.0,100.0,2.9286,-0.4654,10.0,0.0,-0.0,-0.0,-0.1581,-1.0026,0.9998,6168.8 +105,60,24.43,0.0,100.0,0.01,64.43,0.0,100.0,2.7032,-0.4656,10.0,0.0,-0.0,-0.0,-0.2146,-1.0024,0.9998,6267.42 +106,60,24.32,0.0,100.0,0.02,62.75,0.0,100.0,2.5209,-0.4657,8.9997,0.0,0.0,0.0,-0.1823,-1.0022,1.0,6336.63 +107,60,25.83,0.0,100.0,0.01,59.7,0.0,100.0,2.3969,-0.4659,7.9993,0.0,0.0,0.0,-0.124,-1.002,1.0,6391.38 +108,60,28.5,0.0,100.0,0.05,57.77,0.0,100.0,2.3575,-0.466,8.3086,0.0,0.0,0.0,-0.0394,-1.0007,1.0,6457.8 +109,60,29.22,0.0,100.0,0.05,54.73,0.0,100.0,2.3567,-0.4661,9.3084,0.0,0.0,0.0,-0.0008,-1.001,1.0,6532.81 +110,60,33.06,0.0,100.0,0.05,51.21,0.0,100.0,2.4609,-0.4662,10.0,0.0,0.0,0.0,0.1094,-1.0002,1.0,6573.34 +111,60,33.06,0.0,100.0,0.05,53.56,0.0,100.0,2.5406,-0.321,10.0,0.0,0.0,0.0,0.1034,-1.0008,1.0,6617.25 +112,60,37.6,0.0,100.0,0.04,61.41,0.0,100.0,2.6301,0.0003,10.0,0.0,0.0,0.0,0.1376,-1.0007,1.0,6663.82 +113,60,31.64,0.0,100.0,0.04,63.63,0.0,100.0,2.5799,0.0002,10.0,0.0,0.0,0.0,-0.0336,-1.001,1.0,6721.97 +114,60,25.76,0.0,100.0,0.04,60.51,0.0,100.0,2.4279,-0.0014,10.0,0.0,0.0,0.0,-0.1353,-1.0012,1.0,6797.8 +115,60,21.59,0.0,100.0,0.01,58.15,0.0,100.0,2.2376,-0.0655,8.9978,0.0,0.0,0.0,-0.1903,-1.0022,0.9998,6861.01 +116,60,20.75,0.0,100.0,0.01,54.04,0.0,100.0,2.0568,0.0001,7.9958,0.0,-0.0,-0.0,-0.1808,-1.002,0.9999,6927.41 +117,58,22.7,0.0,100.0,0.01,52.88,0.0,100.0,1.9964,-0.0513,7.5584,0.0,0.0,0.0,-0.1144,-1.0019,0.9999,6986.04 +118,60,32.56,0.0,100.0,0.0,57.83,0.0,100.0,2.0067,-0.0665,8.5582,0.0,0.0,0.0,0.0605,-1.0017,0.9999,7045.68 +119,60,38.19,0.0,100.0,0.0,61.72,0.01,100.0,2.13,0.0006,9.558,0.0,0.0,0.0,0.1233,-1.0016,0.9999,7129.15 +120,60,40.53,0.0,100.0,0.0,62.7,0.07,100.0,2.2678,0.0038,10.0,0.0,0.0,0.0,0.1486,-0.998,0.9999,7172.65 +121,60,35.94,0.0,100.0,0.0,60.46,0.0,100.0,2.2646,-0.3414,10.0,0.0,0.0,0.0,0.0406,-1.0009,0.9999,7217.91 +122,60,34.11,0.0,100.0,0.0,59.44,0.0,100.0,2.2282,-0.4344,10.0,0.0,0.0,0.0,0.0135,-1.0005,0.9999,7263.08 +123,60,28.78,0.0,100.0,0.0,59.71,0.0,100.0,2.1677,-0.4345,9.728,0.0,-0.0,-0.0,-0.0605,-1.0012,0.9999,7314.5 +124,60,35.67,0.0,100.0,0.0,64.67,0.0,100.0,2.2124,-0.4347,9.3897,0.0,-0.0,-0.0,0.0447,-1.0011,1.0,7394.31 +125,60,35.33,0.0,100.0,0.0,63.63,0.0,100.0,2.2423,-0.4348,10.0,0.0,-0.0,-0.0,0.0424,-1.0011,0.9999,7443.82 +126,60,42.53,0.0,100.0,0.0,67.27,0.0,100.0,2.3788,-0.4349,10.0,0.0,0.0,0.0,0.1698,-1.001,0.9999,7532.56 +127,60,46.11,0.0,100.0,0.0,66.87,0.0,100.0,2.5813,-0.435,10.0,0.0,-0.0,-0.0,0.2358,-1.0009,1.0,7590.3 +128,59,35.31,0.0,100.0,0.0,60.08,0.0,100.0,2.48,-0.4351,10.0,0.0,-0.0,-0.0,0.0339,-1.0007,1.0,7653.97 +129,60,37.08,0.0,100.0,0.04,57.52,0.0,100.0,2.7041,-0.4352,10.0,0.0,-0.0,-0.0,0.1201,-1.0009,0.9999,7727.61 +130,60,36.53,0.0,100.0,0.04,52.46,0.0,100.0,2.8042,-0.4353,10.0,0.0,0.0,0.0,0.1446,-1.0008,0.9999,7770.31 +131,60,34.58,0.0,100.0,0.04,54.43,0.0,100.0,2.8865,-0.4354,10.0,0.0,0.0,0.0,0.1162,-1.0008,1.0,7818.38 +132,59,38.25,0.0,100.0,0.03,59.97,0.0,100.0,3.0287,-0.4355,10.0,0.0,0.0,0.0,0.1438,-1.0007,1.0,7862.75 +133,60,38.0,0.0,100.0,0.01,66.33,0.0,100.0,3.0482,-0.4355,10.0,0.0,-0.0,-0.0,0.0845,-1.0006,1.0,7926.16 +134,60,26.72,0.0,100.0,0.01,66.26,0.0,100.0,2.8978,-0.4356,9.0989,0.0,-0.0,-0.0,-0.1504,-1.0011,1.0,7994.95 +135,60,28.67,0.0,100.0,0.01,64.43,0.0,100.0,2.7907,-0.4357,10.0,0.0,0.0,0.0,-0.1054,-1.001,1.0,8057.91 +136,60,24.44,0.0,100.0,0.01,59.04,0.0,100.0,2.6287,-0.4357,8.9998,0.0,-0.0,-0.0,-0.1621,-1.0009,1.0,8113.01 +137,60,27.36,0.0,100.0,0.01,56.79,0.0,100.0,2.5726,-0.4358,9.559,0.0,0.0,0.0,-0.056,-1.0008,1.0,8180.46 +138,60,27.64,0.0,100.0,0.01,53.76,0.0,100.0,2.5332,-0.4358,10.0,0.0,0.0,0.0,-0.0237,-1.0008,1.0,8253.01 +139,60,32.92,0.0,100.0,0.01,51.65,0.0,100.0,2.6017,-0.4359,10.0,0.0,0.0,0.0,0.1025,-1.0001,1.0,8324.69 +140,60,36.39,0.0,100.0,0.01,51.67,0.0,100.0,2.7232,-0.4359,10.0,0.0,0.0,0.0,0.1787,-1.0001,1.0,8368.34 +141,60,41.36,0.0,100.0,0.01,58.78,0.0,100.0,2.8335,-0.4359,10.0,0.0,0.0,0.0,0.2128,-1.0001,1.0,8414.88 +142,60,33.83,0.0,100.0,0.01,59.65,0.0,100.0,2.802,-0.436,10.0,0.0,-0.0,-0.0,0.0352,-1.0005,1.0,8471.73 +143,58,30.43,0.0,100.0,0.01,59.35,0.0,100.0,2.6778,-0.5226,10.0,0.0,0.0,0.0,-0.0265,-1.0006,1.0,8526.78 +144,58,28.42,0.0,100.0,0.0,58.58,0.0,100.0,2.5443,-0.5227,9.0,0.0,0.0,0.0,-0.0469,-1.0005,1.0,8595.41 +145,60,30.89,0.0,100.0,0.01,59.22,0.0,100.0,2.7152,-0.5228,8.2976,0.0,0.0,0.0,0.0007,-1.0005,1.0,8653.19 +146,60,34.83,0.0,100.0,0.01,60.81,0.0,100.0,2.7836,-0.5229,9.2975,0.0,0.0,0.0,0.0684,-1.0004,1.0,8698.04 +147,59,36.72,0.0,100.0,0.01,62.28,0.0,100.0,2.8168,-0.3674,10.0,0.0,0.0,0.0,0.0922,-1.0004,1.0,8793.9 +148,60,39.75,0.0,100.0,0.01,60.21,0.0,100.0,2.9666,-0.3674,10.0,0.0,0.0,0.0,0.1502,-1.0,1.0,8844.66 +149,60,43.64,0.0,100.0,0.01,57.32,0.0,100.0,3.1596,-0.3674,10.0,0.0,0.0,0.0,0.2584,-1.0,1.0,8922.88 +150,60,42.08,0.0,100.0,0.01,57.34,0.0,100.0,3.3053,-0.3675,10.0,0.0,0.0,0.0,0.2451,-1.0001,1.0,8965.48 +151,60,37.83,0.0,100.0,0.01,62.02,0.0,100.0,3.376,-0.3675,10.0,0.0,0.0,0.0,0.1207,-1.0006,1.0,9012.97 +152,60,34.78,0.0,100.0,0.01,65.73,0.0,100.0,3.3518,-0.532,10.0,0.0,0.0,0.0,0.0158,-1.0006,1.0,9066.82 +153,60,28.25,0.0,100.0,0.0,65.72,0.0,100.0,3.1905,-0.5321,10.0,0.0,-0.0,-0.0,-0.1156,-1.0005,1.0,9132.35 +154,60,27.36,0.0,100.0,0.0,64.71,0.0,100.0,3.032,-0.5322,10.0,0.0,0.0,0.0,-0.1244,-1.0005,1.0,9197.5 +155,60,25.25,0.0,100.0,0.01,62.93,0.0,100.0,2.8608,-0.5323,10.0,0.0,-0.0,-0.0,-0.1545,-1.0004,1.0,9250.97 +156,60,29.03,0.0,100.0,0.01,63.56,0.0,100.0,2.7413,-0.5567,10.0,0.0,0.0,0.0,-0.1028,-1.0002,1.0,9306.31 +157,60,25.42,0.0,100.0,0.0,61.81,0.0,100.0,2.5869,-0.5567,9.0454,0.0,-0.0,-0.0,-0.1544,-1.0002,1.0,9393.16 +158,60,26.83,0.0,100.0,0.0,59.22,0.0,100.0,2.4922,-0.5567,10.0,0.0,0.0,0.0,-0.0939,-1.0001,1.0,9458.05 +159,60,29.86,0.0,100.0,0.0,56.67,0.0,100.0,2.4717,-0.5567,10.0,0.0,0.0,0.0,-0.0023,-1.0001,1.0,9518.96 +160,60,33.61,0.0,100.0,0.0,55.56,0.0,100.0,2.4975,-0.5567,10.0,0.0,0.0,0.0,0.0773,-1.0001,1.0,9563.65 +161,60,29.03,0.0,100.0,0.0,55.01,0.0,100.0,2.4363,-0.5567,10.0,0.0,0.0,0.0,-0.0112,-1.0002,1.0,9605.65 +162,60,33.44,0.0,100.0,0.0,63.76,0.0,100.0,2.4475,-0.5327,10.0,0.0,0.0,0.0,0.0279,-1.0003,1.0,9661.38 +163,60,39.83,0.0,100.0,0.0,70.07,0.0,100.0,2.5249,-0.5328,10.0,0.0,0.0,0.0,0.0779,-1.0002,1.0,9736.43 +164,60,43.03,0.0,100.0,0.0,70.68,0.0,100.0,2.6403,-0.5328,10.0,0.0,0.0,0.0,0.1382,-1.0002,1.0,9791.23 +165,60,44.69,0.0,100.0,0.0,71.43,0.0,100.0,2.7737,-0.5328,10.0,0.0,0.0,0.0,0.1668,-1.0002,1.0,9846.65 +166,60,35.53,0.0,100.0,0.0,69.12,0.0,100.0,2.7483,-0.5329,9.045,0.0,-0.0,-0.0,-0.0254,-1.0002,1.0,9910.43 +167,60,37.36,0.0,100.0,0.0,66.4,0.0,100.0,2.7806,-0.5329,10.0,0.0,0.0,0.0,0.0331,-1.0001,1.0,9983.85 +168,60,40.83,0.0,100.0,0.0,65.7,0.0,100.0,2.8991,-0.5329,10.0,0.0,0.0,0.0,0.1384,-1.0001,1.0,10057.92 +169,60,47.5,0.0,100.0,0.0,64.7,0.0,100.0,3.1439,-0.5329,10.0,0.0,0.0,0.0,0.2804,-1.0001,1.0,10109.87 +170,59,46.05,0.0,100.0,0.0,63.37,0.0,100.0,3.319,-0.4771,10.0,0.0,0.0,0.0,0.2418,-1.0003,1.0,10155.48 +171,60,45.56,0.0,100.0,0.0,63.84,0.0,100.0,3.4475,-0.4771,10.0,0.0,0.0,0.0,0.233,-1.0003,1.0,10202.27 +172,60,31.11,0.0,100.0,0.0,61.28,0.0,100.0,3.3306,-0.4771,10.0,0.0,0.0,0.0,-0.0422,-1.0002,1.0,10266.14 +173,60,23.61,0.0,100.0,0.0,58.64,0.0,100.0,3.1426,-0.4771,10.0,0.0,-0.0,-0.0,-0.1557,-1.0002,1.0,10329.73 +174,59,21.75,0.0,100.0,0.0,59.0,0.0,100.0,2.9447,-0.4771,10.0,0.0,0.0,0.0,-0.1783,-1.0002,1.0,10395.16 +175,59,22.03,0.0,100.0,0.0,58.89,0.0,100.0,2.7057,-0.4771,10.0,0.0,0.0,0.0,-0.1735,-1.0001,1.0,10440.12 +176,60,21.11,0.0,100.0,0.01,56.06,0.0,100.0,2.5627,-0.5749,10.0,0.0,0.0,0.0,-0.1802,-1.0001,1.0,10512.68 +177,60,18.33,0.0,100.0,0.01,53.52,0.0,100.0,2.3628,-0.5749,9.9923,0.0,0.0,0.0,-0.1999,-1.0,1.0,10588.36 +178,60,22.36,0.0,100.0,0.01,49.77,0.0,100.0,2.242,-0.5749,10.0,0.0,0.0,0.0,-0.1043,-1.0,1.0,10662.23 +179,60,24.86,0.0,100.0,0.01,47.2,0.0,100.0,2.1979,-0.5624,10.0,0.0,0.0,0.0,-0.0275,-1.0001,1.0,10702.81 +180,60,34.31,0.0,100.0,0.01,55.18,0.0,100.0,2.2691,-0.5624,10.0,0.0,0.0,0.0,0.1141,-1.0,1.0,10749.94 +181,60,40.28,0.0,100.0,0.01,62.33,0.59,100.0,2.3916,-0.0624,10.0,0.0,0.0,0.0,0.1559,-1.0001,1.0,10807.35 +182,59,45.08,0.0,100.0,0.0,67.87,0.47,100.0,2.6127,-0.0121,10.0,0.0,-0.0,-0.0,0.2049,-1.0001,1.0,10869.28 +183,60,46.75,0.0,100.0,0.0,67.21,0.38,100.0,2.7767,-0.0021,10.0,0.0,0.0,0.0,0.2381,-1.0001,1.0,10936.07 +184,59,49.32,0.0,100.0,0.0,69.59,0.3,100.0,3.0397,0.0016,10.0,0.0,0.0,0.0,0.2671,-1.0001,1.0,10989.08 +185,60,49.86,0.0,100.0,0.0,71.3,0.24,100.0,3.2456,0.0026,10.0,0.0,0.0,0.0,0.2737,-1.0001,1.0,11032.55 +186,60,51.22,0.0,100.0,0.0,73.19,0.19,100.0,3.5105,0.0025,10.0,0.0,0.0,0.0,0.2815,-1.0001,1.0,11108.19 +187,60,53.58,0.0,100.0,0.0,73.39,0.15,100.0,3.8052,0.0077,10.0,0.0,0.0,0.0,0.326,-1.0,1.0,11193.05 +188,59,56.78,0.0,100.0,0.0,73.83,0.12,100.0,4.1701,0.0062,10.0,0.0,0.0,0.0,0.3818,-1.0,1.0,11258.5 +189,59,52.68,0.0,100.0,0.0,68.66,0.1,100.0,4.3396,0.005,10.0,0.0,0.0,0.0,0.33,-1.0,1.0,11304.47 +190,60,48.47,0.0,100.0,0.0,66.71,0.08,100.0,4.4677,0.004,10.0,0.0,0.0,0.0,0.2753,-1.0,1.0,11348.29 +191,60,25.69,0.0,100.0,0.0,67.26,0.06,100.0,4.2226,0.0032,10.0,0.0,0.0,0.0,-0.1799,-1.0001,1.0,11412.98 +192,59,24.72,0.0,100.0,0.0,68.66,0.1,100.0,4.0003,0.0052,10.0,0.0,-0.0,-0.0,-0.2193,-1.0,1.0,11469.93 +193,58,18.25,0.0,100.0,0.0,66.26,0.08,100.0,3.6045,0.0042,10.0,0.0,0.0,0.0,-0.3303,-1.0,1.0,11531.53 +194,60,22.08,0.0,100.0,0.0,66.31,0.07,100.0,3.3361,0.0033,10.0,0.0,0.0,0.0,-0.2424,-1.0,1.0,11587.77 +195,60,20.69,0.0,100.0,0.0,65.75,0.05,100.0,3.0451,0.0027,10.0,0.0,0.0,0.0,-0.2743,-1.0,1.0,11652.44 +196,60,14.31,0.0,100.0,0.0,58.4,0.0,100.0,2.6569,-0.466,9.0,0.0,0.0,0.0,-0.3882,-1.0,1.0,11716.22 +197,60,17.5,0.0,100.0,0.0,55.14,0.0,100.0,2.3985,-0.466,8.2581,0.0,0.0,0.0,-0.2584,-1.0,1.0,11798.79 +198,60,23.5,0.0,100.0,0.0,54.44,0.0,100.0,2.2889,-0.466,9.258,0.0,0.0,0.0,-0.1096,-1.0,1.0,11843.1 +199,60,31.0,0.0,100.0,0.0,56.68,0.0,100.0,2.3048,-0.4661,10.0,0.0,0.0,0.0,0.0202,-1.0,1.0,11895.71 +200,60,43.92,0.0,100.0,0.0,65.54,0.0,100.0,2.4911,-0.4661,10.0,0.0,0.0,0.0,0.2103,-1.0,1.0,11941.05 +201,60,45.86,0.0,100.0,0.0,66.97,0.0,100.0,2.6506,-0.4661,10.0,0.0,-0.0,-0.0,0.2094,-1.0,1.0,12004.71 +202,60,45.56,0.0,100.0,0.0,70.42,0.0,100.0,2.8132,-0.4661,10.0,0.0,0.0,0.0,0.1994,-1.0,1.0,12069.81 +203,53,49.84,0.0,100.0,0.0,70.78,0.0,100.0,2.922,-0.4661,10.0,0.0,0.0,0.0,0.2718,-1.0,1.0,12121.26 +204,3,66.67,0.0,100.0,0.0,100.0,100.0,100.0,5.4255,4.6384,6.9999,0.0,0.0,0.0,0.3333,-1.0,1.0,12125.98 +205,60,45.83,0.0,100.0,0.0,70.74,0.0,100.0,3.2051,-0.4661,10.0,0.0,-0.0,-0.0,0.177,-1.0,1.0,12254.76 +206,60,50.28,0.0,100.0,0.0,72.1,0.0,100.0,3.4628,-0.4661,10.0,0.0,0.0,0.0,0.2744,-1.0,1.0,12307.25 +207,13,55.13,0.0,100.0,0.0,76.16,0.14,100.0,3.4482,0.0071,10.0,0.0,0.0,0.0,0.3322,-1.0,1.0,12363.94 +208,60,48.61,0.0,100.0,0.0,69.66,0.0,100.0,3.7241,-0.4661,10.0,0.0,0.0,0.0,0.2169,-1.0,1.0,12457.05 +209,59,40.11,0.0,100.0,0.0,66.57,0.0,100.0,3.8604,-0.4662,10.0,0.0,0.0,0.0,0.0942,-1.0,1.0,12501.28 +210,60,30.69,0.0,100.0,0.0,63.55,0.0,100.0,3.7341,-0.4662,10.0,0.0,0.0,0.0,-0.0766,-1.0,1.0,12553.74 +211,60,31.5,0.0,100.0,0.0,66.6,0.0,100.0,3.6505,-0.4662,10.0,0.0,0.0,0.0,-0.0623,-1.0,1.0,12610.01 +212,60,26.78,0.0,100.0,0.0,67.46,0.0,100.0,3.4869,-0.4662,10.0,0.0,0.0,0.0,-0.1628,-1.0,1.0,12687.47 +213,60,22.33,0.0,100.0,0.0,64.68,0.0,100.0,3.2518,-0.4662,10.0,0.0,0.0,0.0,-0.2344,-1.0,1.0,12731.13 +214,60,23.44,0.0,100.0,0.0,61.89,0.0,100.0,3.0463,-0.4662,10.0,0.0,0.0,0.0,-0.1888,-1.0,1.0,12775.54 +215,60,22.61,0.0,100.0,0.0,58.72,0.0,100.0,2.8643,-0.4662,9.2711,0.0,-0.0,-0.0,-0.182,-1.0,1.0,12862.0 +216,60,29.28,0.0,100.0,0.0,59.65,0.0,100.0,2.8103,-0.4662,10.0,0.0,-0.0,-0.0,-0.0494,-1.0,1.0,12916.96 +217,60,27.22,0.0,100.0,0.0,58.04,0.0,100.0,2.7162,-0.4662,10.0,0.0,0.0,0.0,-0.0774,-1.0,1.0,12960.28 +218,60,33.33,0.0,100.0,0.0,60.38,0.01,100.0,2.7343,0.0006,10.0,0.0,0.0,0.0,0.0348,-1.0,1.0,13051.63 +219,60,35.56,0.0,100.0,0.0,59.08,0.01,100.0,2.7802,0.0005,10.0,0.0,0.0,0.0,0.092,-1.0,1.0,13093.52 +220,60,42.78,0.0,100.0,0.0,64.25,0.19,100.0,2.9011,0.0097,10.0,0.0,0.0,0.0,0.1935,-1.0,1.0,13159.84 +221,60,38.33,0.0,100.0,0.0,64.52,0.15,100.0,2.953,0.0077,10.0,0.0,0.0,0.0,0.0852,-1.0,1.0,13217.36 +222,60,41.11,0.0,100.0,0.0,69.67,0.12,100.0,3.0644,0.0062,10.0,0.0,0.0,0.0,0.1123,-1.0,1.0,13268.87 +223,60,44.61,0.0,100.0,0.0,71.09,0.1,100.0,3.2018,0.005,10.0,0.0,0.0,0.0,0.1732,-1.0,1.0,13316.98 +224,60,41.56,0.0,100.0,0.0,68.86,0.08,100.0,3.2642,0.004,10.0,0.0,-0.0,-0.0,0.1176,-1.0,1.0,13399.73 +225,60,44.61,0.0,100.0,0.0,67.12,0.06,100.0,3.4114,0.0032,10.0,0.0,0.0,0.0,0.2037,-1.0,1.0,13456.68 +226,60,40.44,0.0,100.0,0.0,64.84,0.05,100.0,3.5171,0.0025,10.0,0.0,0.0,0.0,0.1231,-1.0,1.0,13506.24 +227,60,42.94,0.0,100.0,0.0,66.67,0.04,100.0,3.6397,0.002,10.0,0.0,0.0,0.0,0.1567,-1.0,1.0,13556.1 +228,60,37.36,0.0,100.0,0.0,67.1,0.03,100.0,3.6479,0.0016,10.0,0.0,0.0,0.0,0.0442,-1.0,1.0,13647.72 +229,60,40.56,0.0,100.0,0.0,66.15,0.03,100.0,3.7067,0.0013,10.0,0.0,0.0,0.0,0.1312,-1.0,1.0,13693.07 +230,60,38.89,0.0,100.0,0.0,67.19,0.02,100.0,3.6923,0.001,10.0,0.0,0.0,0.0,0.0779,-1.0,1.0,13753.3 +231,60,37.22,0.0,100.0,0.0,69.32,0.02,100.0,3.6549,0.0008,10.0,0.0,0.0,0.0,0.0249,-1.0,1.0,13808.38 +232,60,33.33,0.0,100.0,0.0,67.2,0.01,100.0,3.5742,0.0007,10.0,0.0,0.0,0.0,-0.0473,-1.0,1.0,13863.84 +233,60,35.0,0.0,100.0,0.0,70.48,0.03,100.0,3.5594,0.0013,9.0,0.0,0.0,0.0,-0.0149,-1.0,1.0,13909.65 +234,60,35.0,0.0,100.0,0.0,70.16,0.02,100.0,3.5437,0.001,9.6401,0.0,0.0,0.0,-0.0157,-1.0,1.0,13992.39 +235,60,36.94,0.0,100.0,0.0,67.54,0.02,100.0,3.5696,0.0008,10.0,0.0,0.0,0.0,0.0366,-1.0,1.0,14054.31 +236,60,38.61,0.0,100.0,0.0,67.99,0.01,100.0,3.6268,0.0007,10.0,0.0,0.0,0.0,0.0704,-1.0,1.0,14100.11 +237,60,37.78,0.0,100.0,0.0,69.16,0.01,100.0,3.6195,0.0005,10.0,0.0,0.0,0.0,0.0187,-1.0,1.0,14165.71 +238,60,39.44,0.0,100.0,0.0,66.78,0.01,100.0,3.653,0.0004,10.0,0.0,-0.0,-0.0,0.0889,-1.0,1.0,14243.89 +239,60,34.44,0.0,100.0,0.0,63.96,0.01,100.0,3.6034,0.0003,10.0,0.0,-0.0,-0.0,0.0185,-1.0,1.0,14292.92 +240,60,34.17,0.0,100.0,0.0,64.44,0.01,100.0,3.5252,0.0003,10.0,0.0,-0.0,-0.0,0.0074,-1.0,1.0,14362.22 +241,60,36.11,0.0,100.0,0.0,67.19,0.0,100.0,3.493,0.0002,10.0,0.0,0.0,0.0,0.0344,-1.0,1.0,14415.37 +242,60,33.33,0.0,100.0,0.0,64.96,0.0,100.0,3.4214,0.0002,10.0,0.0,0.0,0.0,-0.0216,-1.0,1.0,14460.97 +243,60,30.83,0.0,100.0,0.0,66.53,0.0,100.0,3.3567,0.0001,9.723,0.0,0.0,0.0,-0.0647,-1.0,1.0,14506.11 +244,60,32.22,0.0,100.0,0.0,66.5,0.0,100.0,3.3026,0.0001,10.0,0.0,0.0,0.0,-0.042,-1.0,1.0,14598.0 +245,60,38.33,0.0,100.0,0.0,68.66,0.0,100.0,3.3214,0.0001,10.0,0.0,0.0,0.0,0.0547,-1.0,1.0,14656.28 +246,60,34.61,0.0,100.0,0.0,66.68,0.0,100.0,3.2708,0.0001,10.0,0.0,0.0,0.0,-0.0173,-1.0,1.0,14699.72 +247,60,29.89,0.0,100.0,0.0,63.08,0.0,100.0,3.172,0.0001,10.0,0.0,-0.0,-0.0,-0.0887,-1.0,1.0,14774.14 +248,60,31.81,0.0,100.0,0.0,59.38,0.0,100.0,3.1391,0.0,10.0,0.0,0.0,0.0,0.0005,-1.0,1.0,14837.61 +249,60,34.31,0.0,100.0,0.0,57.21,0.0,100.0,3.1798,0.0,10.0,0.0,0.0,0.0,0.0792,-1.0,1.0,14897.86 +250,60,38.47,0.0,100.0,0.0,62.21,0.0,100.0,3.27,0.0,10.0,0.0,0.0,0.0,0.1271,-1.0,1.0,14953.82 +251,60,35.69,0.0,100.0,0.0,62.32,0.0,100.0,3.304,0.0,10.0,0.0,0.0,0.0,0.0582,-1.0,1.0,15012.67 +252,60,36.39,0.0,100.0,0.0,60.17,0.0,100.0,3.3409,0.0,10.0,0.0,0.0,0.0,0.095,-1.0,1.0,15055.69 +253,60,34.72,0.0,100.0,0.0,61.87,0.0,100.0,3.3422,0.0002,10.0,0.0,0.0,0.0,0.0452,-1.0,1.0,15137.38 +254,60,38.33,0.0,100.0,0.0,65.47,0.0,100.0,3.381,0.0002,10.0,0.0,0.0,0.0,0.1038,-1.0,1.0,15193.85 +255,60,34.17,0.0,100.0,0.0,63.58,0.0,100.0,3.364,-0.52,10.0,0.0,0.0,0.0,0.0163,-1.0,1.0,15246.44 +256,60,33.61,0.0,100.0,0.0,64.24,0.0,100.0,3.3437,-0.52,10.0,0.0,0.0,0.0,-0.0002,-1.0,1.0,15293.97 +257,60,33.06,0.0,100.0,0.0,62.96,0.0,100.0,3.3088,-0.52,10.0,0.0,0.0,0.0,0.0085,-1.0,1.0,15369.17 +258,60,35.83,0.0,100.0,0.0,61.96,0.0,100.0,3.3062,-0.52,10.0,0.0,0.0,0.0,0.076,-1.0,1.0,15430.39 +259,60,44.44,0.0,100.0,0.0,65.04,0.0,100.0,3.4213,0.0001,10.0,0.0,0.0,0.0,0.2203,-1.0,1.0,15497.86 +260,60,34.17,0.0,100.0,0.0,62.54,0.0,100.0,3.3998,0.0,10.0,0.0,0.0,0.0,0.0118,-1.0,1.0,15548.99 +261,60,35.56,0.0,100.0,0.0,64.8,0.0,100.0,3.4427,0.0,10.0,0.0,0.0,0.0,0.048,-1.0,1.0,15605.74 +262,60,35.56,0.0,100.0,0.0,65.27,0.0,100.0,3.4398,0.0,10.0,0.0,0.0,0.0,0.0418,-1.0,1.0,15650.77 +263,60,35.28,0.0,100.0,0.0,65.44,0.0,100.0,3.4125,0.0,10.0,0.0,0.0,0.0,0.0197,-1.0,1.0,15736.34 +264,60,32.78,0.0,100.0,0.0,65.67,0.0,100.0,3.3445,0.0,10.0,0.0,0.0,0.0,-0.018,-1.0,1.0,15800.58 +265,60,34.17,0.0,100.0,0.0,64.9,0.0,100.0,3.3037,0.0,10.0,0.0,0.0,0.0,0.0053,-1.0,1.0,15846.94 +266,60,30.0,0.0,100.0,0.0,64.37,0.0,100.0,3.1931,0.0,10.0,0.0,0.0,0.0,-0.0752,-1.0,1.0,15908.72 +267,60,32.78,0.0,100.0,0.0,64.41,0.0,100.0,3.1462,0.0,10.0,0.0,0.0,0.0,-0.0136,-1.0,1.0,15981.17 +268,60,31.94,0.0,100.0,0.0,61.91,0.0,100.0,3.0645,0.0,10.0,0.0,0.0,0.0,-0.0224,-1.0,1.0,16034.34 +269,60,31.39,0.0,100.0,0.0,60.9,0.0,100.0,3.0382,0.0,10.0,0.0,0.0,0.0,-0.0096,-1.0,1.0,16098.64 +270,60,29.17,0.0,100.0,0.0,56.77,0.12,100.0,2.9691,0.0062,10.0,0.0,0.0,0.0,-0.0516,-1.0,1.0,16152.48 +271,60,34.17,0.0,100.0,0.0,59.89,0.1,100.0,3.0072,0.005,10.0,0.0,0.0,0.0,0.0662,-1.0,1.0,16196.83 +272,60,39.03,0.0,100.0,0.0,66.47,0.08,100.0,3.0691,0.004,10.0,0.0,0.0,0.0,0.0952,-1.0,1.0,16270.55 +273,60,39.58,0.0,100.0,0.0,67.71,0.06,100.0,3.1442,0.0032,10.0,0.0,0.0,0.0,0.0959,-1.0,1.0,16333.24 +274,60,42.92,0.0,100.0,0.0,69.33,0.09,100.0,3.2699,0.0043,10.0,0.0,0.0,0.0,0.1424,-1.0,1.0,16388.04 +275,60,42.08,0.0,100.0,0.0,69.22,0.07,100.0,3.3727,0.0034,10.0,0.0,0.0,0.0,0.118,-1.0,1.0,16432.36 +276,60,45.69,0.0,100.0,0.0,70.95,0.05,100.0,3.5443,0.0027,10.0,0.0,0.0,0.0,0.1891,-1.0,1.0,16504.81 +277,60,42.92,0.0,100.0,0.0,68.68,0.07,100.0,3.6541,0.0037,10.0,0.0,0.0,0.0,0.1405,-1.0,1.0,16572.15 +278,60,45.56,0.0,100.0,0.0,70.27,0.06,100.0,3.8325,0.0029,10.0,0.0,-0.0,-0.0,0.1951,-1.0,1.0,16638.07 +279,60,46.11,0.0,100.0,0.0,70.08,0.05,100.0,3.9996,0.0024,10.0,0.0,-0.0,-0.0,0.206,-1.0,1.0,16690.85 +280,60,47.78,0.0,100.0,0.0,71.68,0.04,100.0,4.1732,0.0019,10.0,0.0,-0.0,-0.0,0.2246,-1.0,1.0,16744.97 +281,60,48.89,0.0,100.0,0.0,73.98,0.03,100.0,4.2429,0.0015,10.0,0.0,0.0,0.0,0.2144,-1.0,1.0,16791.29 +282,59,37.57,0.0,100.0,0.0,73.9,0.02,100.0,4.202,0.0012,10.0,0.0,0.0,0.0,-0.0139,-1.0,1.0,16875.98 +283,57,31.87,0.0,100.0,0.0,69.91,0.02,100.0,3.9982,0.001,10.0,0.0,0.0,0.0,-0.0785,-1.0,1.0,16929.99 +284,57,32.75,0.0,100.0,0.0,69.23,0.02,100.0,3.8412,0.0008,10.0,0.0,0.0,0.0,-0.0831,-1.0,1.0,16983.63 +285,55,28.48,0.0,100.0,0.0,67.1,0.01,100.0,3.7188,0.0006,10.0,0.0,0.0,0.0,-0.1343,-1.0,1.0,17039.95 +286,58,28.45,0.0,100.0,0.0,66.37,0.01,100.0,3.6888,0.0005,10.0,0.0,0.0,0.0,-0.1205,-1.0,1.0,17117.74 +287,60,27.5,0.0,100.0,0.0,63.39,0.01,100.0,3.4816,0.0004,10.0,0.0,0.0,0.0,-0.1248,-1.0,1.0,17179.76 +288,55,22.42,0.0,100.0,0.0,58.0,0.01,100.0,3.2142,0.0003,10.0,0.0,0.0,0.0,-0.1894,-1.0,1.0,17242.52 +289,59,31.92,0.0,100.0,0.0,59.86,0.01,100.0,3.2656,0.0003,10.0,0.0,0.0,0.0,0.0055,-1.0,1.0,17287.68 +290,60,36.39,0.0,100.0,0.0,61.49,0.0,100.0,3.2521,0.0002,10.0,0.0,0.0,0.0,0.0754,-1.0,1.0,17340.29 +291,59,33.05,0.0,100.0,0.0,63.69,0.0,100.0,3.2751,0.0002,10.0,0.0,0.0,0.0,0.0015,-1.0,1.0,17386.05 +292,59,29.52,0.0,100.0,0.0,61.35,0.0,100.0,3.1069,0.0001,10.0,0.0,0.0,0.0,-0.0463,-1.0,1.0,17482.11 +293,57,30.99,0.0,100.0,0.0,61.42,0.0,100.0,3.1286,0.0001,10.0,0.0,0.0,0.0,-0.0161,-1.0,1.0,17535.58 +294,56,32.89,0.0,100.0,0.0,61.19,0.1,100.0,3.0579,0.0052,10.0,0.0,0.0,0.0,0.0258,-1.0,1.0,17578.59 +295,56,41.22,0.0,100.0,0.0,66.69,0.01,100.0,3.236,0.0005,10.0,0.0,0.0,0.0,0.1336,-1.0,1.0,17646.49 +296,58,39.8,0.0,100.0,0.0,64.86,0.01,100.0,3.3192,0.0004,10.0,0.0,0.0,0.0,0.1143,-1.0,1.0,17719.96 +297,57,40.06,0.0,100.0,0.0,61.16,0.01,100.0,3.2662,0.0003,10.0,0.0,0.0,0.0,0.161,-1.0,1.0,17773.26 +298,57,42.4,0.0,100.0,0.0,61.88,0.0,100.0,3.4362,0.0002,10.0,0.0,0.0,0.0,0.1963,-1.0,1.0,17837.31 +299,59,44.35,0.0,100.0,0.0,65.48,0.0,100.0,3.641,0.0002,10.0,0.0,0.0,0.0,0.2162,-1.0,1.0,17893.22 +300,60,42.22,0.0,100.0,0.0,68.25,0.0,100.0,3.6457,0.0002,10.0,0.0,0.0,0.0,0.1404,-1.0,1.0,17935.07 +301,60,41.11,0.0,100.0,0.0,70.01,0.0,100.0,3.6811,-0.4539,10.0,0.0,0.0,0.0,0.0829,-1.0,1.0,18014.39 +302,60,36.25,0.0,100.0,0.0,68.57,0.0,100.0,3.6685,-0.4539,10.0,0.0,0.0,0.0,0.0134,-1.0,1.0,18081.66 +303,60,35.97,0.0,100.0,0.0,67.34,0.0,100.0,3.6689,-0.4539,10.0,0.0,0.0,0.0,0.0307,-1.0,1.0,18134.01 +304,60,34.86,0.0,100.0,0.0,65.33,0.0,100.0,3.6359,-0.4539,10.0,0.0,0.0,0.0,0.0239,-1.0,1.0,18180.15 +305,58,33.19,0.0,100.0,0.0,63.11,0.0,100.0,3.5,0.0001,10.0,0.0,0.0,0.0,0.0009,-1.0,1.0,18255.93 +306,60,27.22,0.0,100.0,0.0,64.32,0.0,100.0,3.4282,0.0,10.0,0.0,0.0,0.0,-0.1218,-1.0,1.0,18317.73 +307,60,30.56,0.0,100.0,0.0,62.71,0.0,100.0,3.3568,0.0,10.0,0.0,0.0,0.0,-0.0519,-1.0,1.0,18381.99 +308,60,31.67,0.0,100.0,0.0,61.81,0.01,100.0,3.2571,0.0003,10.0,0.0,0.0,0.0,-0.0422,-1.0,1.0,18433.61 +309,60,34.44,0.0,100.0,0.0,64.39,0.01,100.0,3.2217,0.0003,10.0,0.0,0.0,0.0,0.0225,-1.0,1.0,18489.46 +310,57,40.06,0.0,100.0,0.0,66.69,0.0,100.0,3.2489,0.0002,10.0,0.0,0.0,0.0,0.0962,-1.0,1.0,18536.42 +311,57,35.96,0.0,100.0,0.0,68.11,0.0,100.0,3.1284,0.0002,9.0623,0.0,0.0,0.0,-0.0045,-1.0,1.0,18601.32 +312,59,33.79,0.0,100.0,0.0,67.89,0.0,100.0,3.2569,0.0001,9.56,0.0,0.0,0.0,-0.0377,-1.0,1.0,18670.43 +313,60,35.17,0.0,100.0,0.0,65.06,0.0,100.0,3.2217,0.0001,10.0,0.0,0.0,0.0,0.0279,-1.0,1.0,18723.07 +314,60,37.67,0.0,100.0,0.0,63.7,0.0,100.0,3.2954,0.0001,10.0,0.0,0.0,0.0,0.0904,-1.0,1.0,18780.55 +315,60,42.67,0.0,100.0,0.0,67.83,0.0,100.0,3.4325,0.0001,10.0,0.0,0.0,0.0,0.1546,-1.0,1.0,18866.61 +316,60,38.33,0.0,100.0,0.0,64.38,0.0,100.0,3.4941,0.0001,10.0,0.0,0.0,0.0,0.0791,-1.0,1.0,18921.26 +317,60,37.78,0.0,100.0,0.0,61.3,0.0,100.0,3.5551,0.0,10.0,0.0,0.0,0.0,0.1109,-1.0,1.0,18970.49 +318,60,38.61,0.0,100.0,0.0,60.79,0.0,100.0,3.6151,0.0,10.0,0.0,0.0,0.0,0.1381,-1.0,1.0,19041.65 +319,60,36.39,0.0,100.0,0.0,65.87,0.0,100.0,3.5999,0.0,10.0,0.0,0.0,0.0,0.0676,-1.0,1.0,19082.21 +320,60,36.67,0.0,100.0,0.0,67.67,0.0,100.0,3.5348,0.0,10.0,0.0,-0.0,-0.0,0.0289,-1.0,1.0,19138.56 +321,60,33.33,0.0,100.0,0.0,69.23,0.0,100.0,3.4589,0.0,10.0,0.0,-0.0,-0.0,-0.0426,-1.0,1.0,19203.97 +322,60,28.33,0.0,100.0,0.0,69.77,0.0,100.0,3.3061,0.0,10.0,0.0,0.0,0.0,-0.1468,-1.0,1.0,19280.8 +323,60,32.5,0.0,100.0,0.0,69.22,0.0,100.0,3.2105,0.0,10.0,0.0,0.0,0.0,-0.0591,-1.0,1.0,19324.03 +324,60,30.28,0.0,100.0,0.0,67.0,0.0,100.0,3.1006,0.0,10.0,0.0,-0.0,-0.0,-0.0932,-1.0,1.0,19399.55 +325,60,23.06,0.0,100.0,0.0,61.11,0.0,100.0,2.8741,0.0,9.56,0.0,0.0,0.0,-0.2265,-1.0,1.0,19459.15 +326,60,26.11,0.0,100.0,0.0,57.78,0.0,100.0,2.77,0.0,10.0,0.0,0.0,0.0,-0.0948,-1.0,1.0,19527.54 +327,60,35.56,0.0,100.0,0.0,58.84,0.0,100.0,2.8266,0.0,10.0,0.0,0.0,0.0,0.0883,-1.0,1.0,19578.33 +328,60,36.39,0.0,100.0,0.0,59.47,0.0,100.0,2.8789,0.0,10.0,0.0,-0.0,-0.0,0.1023,-1.0,1.0,19634.1 +329,60,36.94,0.0,100.0,0.0,58.1,0.0,100.0,2.9431,0.0,10.0,0.0,0.0,0.0,0.1167,-1.0,1.0,19681.49 +330,60,37.22,0.0,100.0,0.0,64.35,0.0,100.0,3.0112,0.0,10.0,0.0,0.0,0.0,0.0899,-1.0,1.0,19747.34 +331,60,34.58,0.0,100.0,0.0,63.99,0.0,100.0,3.012,0.0,10.0,0.0,0.0,0.0,0.0175,-1.0,1.0,19815.58 +332,59,34.46,0.0,100.0,0.0,63.04,0.0,100.0,3.0568,0.0,9.2,0.0,0.0,0.0,0.0371,-1.0,1.0,19884.09 +333,60,33.67,0.0,100.0,0.0,61.76,0.0,100.0,3.0772,0.0,10.0,0.0,0.0,0.0,0.0319,-1.0,1.0,19937.43 +334,60,32.83,0.0,100.0,0.0,61.03,0.0,100.0,3.0678,0.0,10.0,0.0,0.0,0.0,0.0259,-1.0,1.0,20019.31 +335,60,34.86,0.0,100.0,0.0,58.47,0.0,100.0,3.0731,-0.0046,10.0,0.0,0.0,0.0,0.0799,-1.0,1.0,20096.24 +336,60,34.82,0.0,100.0,0.0,55.88,0.0,100.0,3.0749,-0.0412,10.0,0.0,0.0,0.0,0.1069,-1.0,1.0,20170.84 +337,60,27.32,0.0,100.0,0.0,53.23,0.0,100.0,2.9912,-0.0393,10.0,0.0,0.0,0.0,-0.0171,-1.0,1.0,20240.6 +338,60,19.13,0.0,100.0,0.0,49.89,0.0,100.0,2.807,-0.0323,10.0,0.0,0.0,0.0,-0.1555,-1.0,1.0,20310.37 +339,60,16.25,0.0,100.0,0.0,45.75,0.0,100.0,2.5809,-0.1914,10.0,0.0,0.0,0.0,-0.1761,-1.0,1.0,20370.54 +340,60,5.83,0.0,100.0,0.0,38.35,0.0,100.0,2.2068,-0.3737,10.0,0.0,0.0,0.0,-0.3408,-1.0,1.0,20427.9 +341,60,3.33,0.0,100.0,0.0,35.91,0.0,100.0,1.89,-0.3737,9.0,0.0,0.0,0.0,-0.3168,-1.0,1.0,20490.73 +342,60,1.85,0.0,50.0,0.0,31.2,0.0,100.0,1.5661,-0.3737,8.0,0.0,0.0,0.0,-0.3238,-1.0,0.0861,20549.76 +343,60,1.32,0.0,50.0,0.0,25.98,0.0,100.0,1.276,-0.3737,7.0,0.0,0.0,0.0,-0.2902,-1.0,0.1758,20607.94 +344,60,0.67,0.0,20.0,0.0,20.87,0.0,100.0,1.024,-0.3737,6.0,0.0,0.0,0.0,-0.252,-1.0,0.1094,20669.44 +345,60,0.57,0.0,14.29,0.0,17.41,0.0,100.0,0.8222,-0.3737,5.0,0.0,0.0,0.0,-0.2018,-1.0,0.0,20728.19 +346,60,0.6,0.0,14.29,0.0,14.08,0.0,80.0,0.6551,-0.3737,4.0,0.0,0.0,0.0,-0.1671,-1.0,0.0,20789.18 +347,60,1.1,0.0,18.18,0.0,12.03,0.0,64.0,0.5266,-0.3737,3.2,0.0,0.0,0.0,-0.1285,-0.8,0.159,20849.11 +348,60,1.08,0.0,20.0,0.0,9.98,0.0,51.2,0.4194,-0.3737,2.56,0.0,0.0,0.0,-0.1072,-0.64,0.0326,20907.8 +349,60,1.14,0.0,25.0,0.0,8.36,0.0,40.96,0.3337,-0.3737,2.048,0.0,0.0,0.0,-0.0857,-0.512,0.033,20970.7 +350,59,1.57,0.0,25.0,0.0,7.49,0.0,39.18,0.2693,-0.3737,1.6384,0.0,0.0,0.0,-0.0652,-0.4096,0.1667,21030.09 +351,60,1.48,0.0,25.0,0.0,6.36,0.0,38.68,0.2137,-0.3737,1.3107,0.0,0.0,0.0,-0.0559,-0.3277,0.0319,21089.22 +352,60,1.44,0.0,33.33,0.0,5.42,0.0,51.63,0.1685,-0.3737,1.0486,0.0,0.0,0.0,-0.0452,-0.2621,0.0754,21149.52 +353,58,1.93,0.0,33.33,0.0,5.5,0.0,55.72,0.1403,-0.3737,0.8389,0.0,0.0,0.0,-0.0311,-0.2097,0.1856,21209.0 +354,60,2.19,0.0,50.0,0.0,5.52,0.0,87.47,0.114,-0.3737,0.6711,0.0,0.0,0.0,-0.0245,-0.332,0.2214,21270.12 +355,60,2.65,0.0,50.0,0.0,5.94,0.0,100.0,0.0965,-0.3737,0.5431,0.0,0.0,0.0,-0.0175,-0.1342,0.333,21330.3 +356,60,2.39,0.0,50.0,0.0,5.35,0.0,100.0,0.0744,-0.3737,0.5431,0.0,0.0,0.0,-0.0221,-0.1681,0.0,21389.75 +357,60,1.67,0.0,33.33,0.0,3.52,0.0,46.13,0.0423,-0.4569,0.4643,0.0,0.0,0.0,-0.032,-1.0,0.1594,21449.44 +358,60,1.45,0.0,25.0,0.0,2.98,0.0,38.71,0.0264,-0.4569,0.3856,0.0,0.0,0.0,-0.0159,-0.1182,0.0092,21509.36 +359,60,1.45,0.0,20.0,0.0,2.66,0.0,27.73,0.015,-0.4569,0.3251,0.0,0.0,0.0,-0.0114,-0.1097,0.0405,21571.43 +360,60,1.45,0.0,16.67,0.0,2.4,0.0,22.73,0.0051,-0.4569,0.2301,0.0,0.0,0.0,-0.0098,-0.2773,0.1644,21630.89 +361,60,1.5,0.0,20.0,0.0,2.39,0.0,28.37,-0.0009,-0.4569,0.216,0.0,0.0,0.0,-0.006,-0.0378,0.0378,21689.54 +362,60,1.44,0.0,20.0,0.0,2.21,0.0,29.45,-0.0074,-0.4569,0.189,0.0,0.0,0.0,-0.0065,-0.0557,0.0067,21750.2 +363,60,1.16,0.0,16.67,0.0,1.75,0.0,23.78,-0.0156,-0.4569,0.1193,0.0,0.0,0.0,-0.0082,-0.1768,0.0292,21809.68 +364,60,1.07,0.0,25.0,0.0,1.62,0.0,34.58,-0.0206,-0.4569,0.1818,0.0,0.0,0.0,-0.005,-0.1933,0.1249,21869.46 +365,60,1.08,0.0,25.0,0.0,1.65,0.0,37.1,-0.0235,-0.4569,0.1725,0.0,0.0,0.0,-0.0029,-0.0366,0.0142,21929.88 +366,60,1.12,0.0,25.0,0.0,1.66,0.0,37.16,-0.026,-0.4569,0.1443,0.0,0.0,0.0,-0.0025,-0.0282,0.0131,21991.46 +367,60,1.35,0.0,33.33,0.0,1.96,0.0,50.32,-0.026,-0.4569,0.2299,0.0,0.0,0.0,0.0001,-0.1384,0.1653,22050.23 +368,60,1.21,0.0,25.0,0.0,1.81,0.0,39.63,-0.0296,-0.4569,0.1723,0.0,0.0,0.0,-0.0037,-0.1274,0.0,22109.14 +369,60,1.35,0.0,25.0,0.0,1.93,0.0,36.01,-0.0305,-0.4569,0.2462,0.0,0.0,0.0,-0.0008,-0.0472,0.0739,22170.08 +370,60,0.6,0.0,25.0,0.0,0.91,0.0,38.5,-0.0421,-0.4569,0.2278,0.0,0.0,0.0,-0.0116,-0.3601,0.0,22227.66 +371,60,0.58,0.0,25.0,0.0,0.87,0.0,38.41,-0.0435,-0.4569,0.189,0.0,0.0,0.0,-0.0015,-0.0388,0.0,22289.09 +372,60,0.81,0.0,25.0,0.0,1.12,0.0,37.62,-0.0424,-0.4569,0.151,0.0,0.0,0.0,0.0012,-0.038,0.125,22350.37 +373,60,0.93,0.0,33.33,0.0,1.33,0.0,50.54,-0.0417,-0.4569,0.2335,0.0,0.0,0.0,0.0006,-0.0222,0.0825,22410.4 +374,60,1.04,0.0,50.0,0.0,1.71,0.0,84.89,-0.0401,-0.4569,0.4808,0.0,0.0,0.0,0.0016,-0.128,0.2473,22470.33 +375,60,0.79,0.0,33.33,0.0,1.44,0.0,66.59,-0.0441,-0.4569,0.2482,0.0,0.0,0.0,-0.004,-0.2326,0.003,22529.28 +376,60,0.79,0.0,33.33,0.0,1.3,0.0,58.28,-0.0464,-0.4569,0.1376,0.0,0.0,0.0,-0.0023,-0.1106,0.0,22591.36 +377,60,0.33,0.0,20.0,0.0,0.45,0.0,26.43,-0.0555,-0.4569,0.1351,0.0,0.0,0.0,-0.009,-0.5828,0.051,22650.34 +378,60,0.33,0.0,20.0,0.0,0.47,0.0,27.76,-0.0558,-0.4569,0.1237,0.0,0.0,0.0,-0.0003,-0.0114,0.0,22708.76 +379,60,0.33,0.0,20.0,0.0,0.47,0.0,27.58,-0.0562,-0.4569,0.1016,0.0,0.0,0.0,-0.0005,-0.0221,0.0,22769.27 +380,60,0.42,0.0,25.0,0.0,0.59,0.0,34.79,-0.0556,-0.4569,0.1447,0.0,0.0,0.0,0.0006,-0.0005,0.0431,22829.56 +381,59,0.53,0.0,20.0,0.0,0.71,0.0,28.29,-0.0485,-0.4569,0.1113,0.0,0.0,0.0,0.0005,-0.0783,0.1111,22889.67 +382,60,0.38,0.0,12.5,0.0,0.47,0.0,15.02,-0.0581,-0.4569,0.1259,0.0,0.0,0.0,-0.003,-0.2829,0.1248,22950.16 +383,60,0.58,0.0,16.67,0.0,0.75,0.0,22.52,-0.0564,-0.4569,0.1674,0.0,0.0,0.0,0.0017,-0.0289,0.0907,23008.43 +384,60,0.67,0.0,20.0,0.0,0.89,0.0,28.25,-0.0562,-0.4569,0.1872,0.0,0.0,0.0,0.0003,-0.004,0.0199,23069.33 +385,60,0.8,0.0,20.0,0.0,1.07,0.0,28.87,-0.0557,-0.4569,0.1612,0.0,0.0,0.0,0.0005,-0.0269,0.0665,23131.1 +386,60,1.06,0.0,20.0,0.0,1.37,0.0,28.38,-0.0542,-0.4569,0.1429,0.0,0.0,0.0,0.0015,-0.031,0.1428,23189.71 +387,59,1.09,0.0,16.67,0.0,1.41,0.0,22.86,-0.0543,-0.4569,0.1667,0.0,0.0,0.0,-0.0011,-0.0698,0.0238,23251.18 +388,60,1.01,0.0,14.29,0.0,1.28,0.0,17.91,-0.0574,-0.4569,0.0917,0.0,0.0,0.0,-0.002,-0.075,0.0239,23311.65 +389,60,1.3,0.0,16.67,0.0,1.53,0.0,19.75,-0.0554,-0.4569,0.0741,0.0,0.0,0.0,0.0019,-0.0254,0.0998,23370.8 +390,60,1.31,0.0,16.67,0.0,1.57,0.0,21.04,-0.0557,-0.4569,0.0758,0.0,0.0,0.0,-0.0002,-0.0354,0.026,23430.2 +391,60,1.02,0.0,16.67,0.0,1.2,0.0,20.61,-0.0596,-0.4569,0.0526,0.0,0.0,0.0,-0.004,-0.211,0.0139,23488.27 +392,60,1.09,0.0,20.0,0.0,1.12,0.0,17.52,-0.0598,-0.4569,0.0528,0.0,0.0,0.0,-0.0002,-0.2061,0.2,23549.62 +393,60,0.92,0.0,20.0,0.0,1.0,0.0,19.7,-0.0606,-0.4569,0.0245,0.0,0.0,0.0,-0.0008,-0.1268,0.0792,23609.51 +394,60,1.25,0.0,25.0,0.0,1.45,0.0,28.65,-0.0565,-0.4569,0.125,0.0,0.0,0.0,0.0041,-0.0078,0.125,23672.22 +395,60,1.0,0.0,25.0,0.0,1.23,0.0,31.59,-0.0591,-0.4569,0.1188,0.0,0.0,0.0,-0.0025,-0.1485,0.0351,23729.28 +396,60,1.0,0.0,25.0,0.0,1.24,0.0,32.59,-0.0596,-0.4569,0.1111,0.0,0.0,0.0,-0.0005,-0.146,0.1111,23789.25 +397,60,1.39,0.0,50.0,0.0,1.9,0.0,72.72,-0.0546,-0.4569,0.3215,0.0,0.0,0.0,0.005,-0.0197,0.3371,23850.83 +398,60,1.67,0.0,50.0,0.0,2.61,0.0,95.52,-0.05,-0.4569,0.4579,0.0,0.0,0.0,0.0046,-0.0193,0.1364,23907.85 +399,60,1.63,0.0,50.0,0.0,2.69,0.0,100.0,-0.0509,-0.4569,0.4803,0.0,0.0,0.0,-0.0008,-0.1216,0.1111,23969.4 +400,60,1.87,0.0,50.0,0.0,2.98,0.0,100.0,-0.0495,-0.4569,0.4803,0.0,0.0,0.0,0.0013,-0.0474,0.1429,24029.67 +401,60,1.86,0.0,50.0,0.0,2.98,0.0,100.0,-0.0508,-0.4569,0.4803,0.0,0.0,0.0,-0.0012,-0.0364,0.0047,24088.78 +402,60,1.3,0.0,16.67,0.0,1.53,0.0,20.26,-0.0658,-0.5197,0.0931,0.0,0.0,0.0,-0.015,-1.0,0.1111,24150.09 +403,60,1.32,0.0,20.0,0.0,1.59,0.0,25.89,-0.0658,-0.5197,0.1116,0.0,0.0,0.0,0.0,-0.0497,0.0379,24209.74 +404,60,0.99,0.0,14.29,0.0,1.16,0.0,18.76,-0.0703,-0.5197,0.0766,0.0,0.0,0.0,-0.0046,-0.2589,0.0248,24271.39 +405,60,1.38,0.0,16.67,0.0,1.64,0.0,21.39,-0.0665,-0.5197,0.1111,0.0,0.0,0.0,0.0038,-0.0123,0.1111,24331.68 +406,60,1.23,0.0,16.67,0.0,1.5,0.0,21.29,-0.0687,-0.5197,0.1194,0.0,0.0,0.0,-0.0022,-0.0895,0.0315,24388.48 +407,59,1.47,0.0,20.0,0.0,1.83,0.0,26.44,-0.0637,-0.5197,0.1482,0.0,0.0,0.0,0.0017,-0.0195,0.055,24449.51 +408,60,1.09,0.0,16.67,0.0,1.38,0.0,22.19,-0.0719,-0.5197,0.0991,0.0,0.0,0.0,-0.0049,-0.1109,0.0251,24508.23 +409,60,0.91,0.0,16.67,0.0,1.12,0.0,21.98,-0.0751,-0.5197,0.1036,0.0,0.0,0.0,-0.0032,-0.183,0.0083,24571.03 +410,60,0.89,0.0,20.0,0.0,1.06,0.0,26.95,-0.0762,-0.5197,0.1277,0.0,0.0,0.0,-0.0011,-0.2111,0.1111,24628.56 +411,60,0.8,0.0,20.0,0.0,1.01,0.0,27.63,-0.0774,-0.5197,0.1121,0.0,0.0,0.0,-0.0012,-0.1056,0.0778,24690.27 +412,59,1.01,0.0,20.0,0.0,1.21,0.0,27.35,-0.0772,-0.5197,0.091,0.0,0.0,0.0,0.0014,-0.0248,0.1429,24747.48 +413,60,1.12,0.0,16.67,0.0,1.35,0.0,21.82,-0.0749,-0.5197,0.1111,0.0,0.0,0.0,0.001,-0.0612,0.1111,24808.04 +414,60,1.1,0.0,16.67,0.0,1.32,0.0,20.6,-0.0756,-0.5197,0.0806,0.0,0.0,0.0,-0.0007,-0.0305,0.0364,24870.14 +415,60,0.6,0.0,14.29,0.0,0.71,0.0,16.78,-0.082,-0.5197,0.063,0.0,0.0,0.0,-0.0064,-0.206,0.0,24931.14 +416,60,0.72,0.0,14.29,0.0,0.84,0.0,16.38,-0.081,-0.5197,0.0832,0.0,0.0,0.0,0.001,-0.0217,0.0832,24991.18 +417,60,0.72,0.0,14.29,0.0,0.84,0.0,16.37,-0.0813,-0.5197,0.083,0.0,0.0,0.0,-0.0004,-0.0226,0.0025,25049.88 +418,60,0.83,0.0,20.0,0.0,0.99,0.0,24.48,-0.0803,-0.5197,0.082,0.0,0.0,0.0,0.001,-0.0182,0.0866,25108.51 +419,60,1.04,0.0,16.67,0.0,1.25,0.0,21.64,-0.0786,-0.5197,0.1429,0.0,0.0,0.0,0.0018,-0.0373,0.1429,25169.37 +420,60,0.78,0.0,14.29,0.0,0.95,0.0,19.51,-0.0823,-0.5197,0.1388,0.0,0.0,0.0,-0.0038,-0.2164,0.0047,25199.82 diff --git a/experiments/results/csv/slow_query_adaptive_time_analysis.csv b/experiments/results/csv/slow_query_adaptive_time_analysis.csv new file mode 100644 index 000000000..e19f7bd24 --- /dev/null +++ b/experiments/results/csv/slow_query_adaptive_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,13927,13615,162,1.16,150,1.08,1.0 +30-60s,10524,9805,223,2.12,496,4.71,1.0 +60-90s,9835,8843,207,2.1,785,7.98,1.0 +90-120s,10148,9062,215,2.12,871,8.58,1.0 +120-150s,10203,9086,169,1.66,948,9.29,1.0 +150-180s,10180,9071,174,1.71,935,9.18,1.0 +180-210s,9308,8264,180,1.93,864,9.28,1.0 +210-240s,10460,9207,202,1.93,1051,10.05,1.0 +240-270s,10316,9191,172,1.67,953,9.24,1.0 +270-300s,10099,8962,190,1.88,947,9.38,1.0 +300-330s,10492,9285,195,1.86,1012,9.65,1.0 +330-360s,13916,13138,155,1.11,623,4.48,1.0 +360-390s,14074,13708,137,0.97,229,1.63,1.0 +390-420s,14041,13763,123,0.88,155,1.1,1.0 diff --git a/experiments/results/csv/slow_query_time_analysis.csv b/experiments/results/csv/slow_query_time_analysis.csv new file mode 100644 index 000000000..c4692c5af --- /dev/null +++ b/experiments/results/csv/slow_query_time_analysis.csv @@ -0,0 +1,15 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,5771,5609,122,2.11,40,0.69,1.0 +30-60s,4769,4694,60,1.26,15,0.31,1.0 +60-90s,4403,4285,109,2.48,9,0.2,1.0 +90-120s,4245,3951,131,3.09,163,3.84,1.0 +120-150s,4284,3923,145,3.38,216,5.04,1.0 +150-180s,4683,4298,139,2.97,246,5.25,1.0 +180-210s,4030,3663,141,3.5,226,5.61,1.0 +210-240s,4046,3663,129,3.19,254,6.28,1.0 +240-270s,4592,4199,142,3.09,251,5.47,1.0 +270-300s,4344,3968,124,2.85,252,5.8,1.0 +300-330s,4567,4124,129,2.82,314,6.88,1.0 +330-360s,5219,5044,99,1.9,76,1.46,1.0 +360-390s,5424,5218,156,2.88,50,0.92,1.0 +390-420s,6186,6054,88,1.42,44,0.71,1.0 diff --git a/experiments/results/csv/sudden_error_spike_100_adaptive_pid_controller.csv b/experiments/results/csv/sudden_error_spike_100_adaptive_pid_controller.csv new file mode 100644 index 000000000..7958fe114 --- /dev/null +++ b/experiments/results/csv/sudden_error_spike_100_adaptive_pid_controller.csv @@ -0,0 +1,141 @@ +Window,Thread Count,Error Rate Avg,Error Rate Min,Error Rate Max,Ideal Error Rate,Rejection Rate Avg,Rejection Rate Min,Rejection Rate Max,Integral Avg,Integral Min,Integral Max,Derivative Avg,Derivative Min,Derivative Max,P Value Avg,P Value Min,P Value Max,Total Request Time +1,60,0.87,0.0,11.11,4.61,0.54,0.0,7.33,-0.0377,-0.0461,0.0611,0.0,-0.0,-0.0,-0.0377,-0.0461,0.0611,61.18 +2,60,0.81,0.0,5.56,4.25,0.04,0.0,0.49,-0.0784,-0.0886,-0.0042,0.0,0.0,0.0,-0.0407,-0.0674,0.0094,122.1 +3,60,1.27,0.0,7.41,3.92,0.11,0.0,2.56,-0.1069,-0.1278,0.0105,0.0,0.0,0.0,-0.0285,-0.0392,0.0279,182.36 +4,60,1.22,0.0,7.89,3.61,0.07,0.0,3.28,-0.1344,-0.1639,0.0165,0.0,0.0,0.0,-0.0275,-0.0361,0.0135,242.03 +5,60,1.19,0.0,6.38,3.33,0.02,0.0,1.37,-0.1596,-0.1972,-0.0022,0.0,0.0,0.0,-0.0253,-0.0333,0.0034,301.62 +6,60,1.15,0.0,5.26,3.07,0.0,0.0,0.0,-0.1829,-0.228,-0.0134,0.0,0.0,0.0,-0.0233,-0.0307,-0.0023,361.92 +7,60,1.14,0.0,4.55,2.83,0.0,0.0,0.0,-0.2042,-0.2563,-0.0177,0.0,0.0,0.0,-0.0213,-0.0283,0.0001,421.24 +8,60,1.14,0.0,5.41,2.61,0.0,0.0,0.0,-0.2239,-0.2824,-0.0267,0.0,0.0,0.0,-0.0196,-0.0261,0.0157,481.53 +9,60,1.19,0.0,4.88,2.41,0.0,0.0,0.0,-0.2414,-0.3065,-0.028,0.0,0.0,0.0,-0.0176,-0.0248,0.0163,541.22 +10,60,1.22,0.0,5.49,2.22,0.0,0.0,0.0,-0.2573,-0.3287,-0.0334,0.0,0.0,0.0,-0.0159,-0.024,0.0166,601.72 +11,60,1.21,0.0,5.43,2.05,0.0,0.0,0.13,-0.2721,-0.3491,-0.0486,0.0,0.0,0.0,-0.0147,-0.0322,0.0159,661.33 +12,60,1.24,0.0,4.4,1.89,0.0,0.0,0.0,-0.2853,-0.368,-0.0623,0.0,0.0,0.0,-0.0132,-0.0297,0.0113,721.91 +13,58,1.1,0.0,5.26,1.74,0.0,0.0,0.0,-0.2971,-0.3854,-0.0629,0.0,0.0,0.0,-0.0136,-0.0273,0.0218,782.0 +14,60,1.06,0.0,6.25,2.04,0.01,0.0,0.89,-0.3111,-0.4014,-0.0579,0.0,0.0,0.0,-0.0127,-0.0315,0.0316,841.77 +15,59,1.2,0.0,6.32,1.97,0.02,0.0,1.45,-0.3203,-0.4162,-0.0524,0.0,0.0,0.0,-0.0107,-0.0282,0.0236,900.61 +16,55,1.11,0.0,6.32,1.48,0.03,0.0,1.82,-0.3343,-0.4298,-0.0469,0.0,0.0,0.0,-0.0104,-0.0258,0.0181,961.65 +17,51,1.16,0.0,4.4,1.36,0.0,0.0,0.0,-0.3362,-0.4424,-0.0414,0.0,0.0,0.0,-0.0098,-0.0238,0.0055,1020.42 +18,59,1.0,0.0,3.26,1.89,0.0,0.0,0.0,-0.3515,-0.454,-0.0667,0.0,0.0,0.0,-0.0098,-0.0253,0.008,1081.75 +19,54,0.93,0.0,3.3,3.12,0.0,0.0,0.0,-0.3607,-0.4647,-0.085,0.0,0.0,0.0,-0.0096,-0.0235,0.0083,1141.7 +20,57,0.82,0.0,3.3,2.11,0.0,0.0,0.0,-0.3665,-0.4746,-0.0933,0.0,0.0,0.0,-0.0102,-0.0317,0.0083,1201.39 +21,59,0.78,0.0,3.26,1.91,0.0,0.0,0.0,-0.3755,-0.4836,-0.1008,0.0,0.0,0.0,-0.0099,-0.0208,0.008,1261.33 +22,57,0.96,0.0,3.26,0.91,0.0,0.0,0.0,-0.3809,-0.492,-0.1075,0.0,0.0,0.0,-0.0075,-0.0235,0.0151,1321.73 +23,60,0.85,0.0,3.19,0.84,0.0,0.0,0.0,-0.3919,-0.4997,-0.1234,0.0,0.0,0.0,-0.0076,-0.027,0.0151,1381.68 +24,60,0.94,0.0,3.19,0.77,0.0,0.0,0.0,-0.3979,-0.5069,-0.1484,0.0,0.0,0.0,-0.0061,-0.025,0.0151,1441.6 +25,59,0.88,0.0,3.23,0.71,0.0,0.0,0.0,-0.4035,-0.5134,-0.1714,0.0,0.0,0.0,-0.0061,-0.023,0.0151,1501.19 +26,59,0.85,0.0,3.23,1.32,0.0,0.0,0.0,-0.409,-0.5195,-0.1895,0.0,-0.0,-0.0,-0.0059,-0.0222,0.015,1561.73 +27,60,0.85,0.0,2.22,1.3,0.0,0.0,0.0,-0.4149,-0.5251,-0.1938,0.0,0.0,0.0,-0.0052,-0.0205,0.012,1621.41 +28,57,0.84,0.0,2.2,1.28,0.0,0.0,0.0,-0.4187,-0.5302,-0.1976,0.0,0.0,0.0,-0.0049,-0.0189,0.0133,1681.44 +29,59,0.88,0.0,2.17,1.22,0.0,0.0,0.0,-0.4231,-0.5349,-0.2008,0.0,-0.0,-0.0,-0.004,-0.0174,0.0133,1741.63 +30,58,0.92,0.0,2.2,1.24,0.0,0.0,0.0,-0.4252,-0.5393,-0.204,0.0,0.0,0.0,-0.0033,-0.0161,0.013,1800.97 +31,58,0.9,0.0,2.22,1.21,0.0,0.0,0.0,-0.4323,-0.5434,-0.2169,0.0,-0.0,-0.0,-0.0028,-0.0148,0.013,1861.41 +32,60,0.78,0.0,2.25,1.2,0.0,0.0,0.0,-0.4331,-0.5471,-0.2286,0.0,0.0,0.0,-0.0038,-0.0156,0.0132,1921.09 +33,57,0.84,0.0,3.23,1.19,0.0,0.0,0.0,-0.4329,-0.5505,-0.2393,0.0,-0.0,-0.0,-0.0031,-0.0144,0.0199,1981.74 +34,55,0.71,0.0,3.23,1.03,0.0,0.0,0.0,-0.4391,-0.5537,-0.2593,0.0,-0.0,-0.0,-0.0038,-0.02,0.0199,2041.32 +35,60,0.8,0.0,2.22,0.78,0.0,0.0,0.0,-0.4421,-0.5566,-0.2778,0.0,0.0,0.0,-0.0025,-0.0185,0.0156,2102.04 +36,58,0.75,0.0,3.19,1.03,0.0,0.0,0.0,-0.4487,-0.5593,-0.332,0.0,-0.0,-0.0,-0.0024,-0.0151,0.0178,2161.63 +37,57,0.92,0.0,3.3,1.65,0.0,0.0,0.0,-0.4449,-0.5526,-0.2948,0.0,-0.0,-0.0,-0.0007,-0.017,0.024,2221.42 +38,59,0.99,0.0,4.17,0.51,0.0,0.0,0.0,-0.4431,-0.5565,-0.3105,0.0,0.0,0.0,0.0003,-0.0157,0.0337,2281.88 +39,57,1.07,0.0,4.21,1.09,0.0,0.0,0.0,-0.4428,-0.5601,-0.3078,0.0,-0.0,-0.0,0.0012,-0.0145,0.0341,2341.05 +40,59,1.12,0.0,5.26,0.27,0.0,0.0,0.0,-0.4435,-0.5633,-0.2885,0.0,-0.0,-0.0,0.0021,-0.0133,0.0446,2401.83 +41,60,1.09,0.0,4.26,0.94,0.0,0.0,0.0,-0.4396,-0.5664,-0.269,0.0,0.0,0.0,0.002,-0.0123,0.034,2461.04 +42,60,1.19,0.0,5.26,0.94,0.0,0.0,0.0,-0.4363,-0.5692,-0.2451,0.0,-0.0,-0.0,0.0033,-0.0133,0.0444,2521.16 +43,60,1.2,0.0,5.32,0.94,0.01,0.0,0.49,-0.4328,-0.5717,-0.2002,0.0,0.0,0.0,0.0035,-0.0122,0.0449,2581.49 +44,59,1.19,0.0,5.26,0.94,0.02,0.0,1.24,-0.4308,-0.5741,-0.1606,0.0,0.0,0.0,0.0037,-0.0133,0.0396,2641.75 +45,60,1.16,0.0,5.32,1.55,0.01,0.0,0.74,-0.4259,-0.5763,-0.1379,0.0,0.0,0.0,0.0033,-0.0174,0.0425,2701.77 +46,60,1.23,0.0,6.32,1.51,0.05,0.0,1.51,-0.4216,-0.5783,-0.111,0.0,0.0,0.0,0.0043,-0.016,0.0523,2761.5 +47,60,1.16,0.0,6.38,1.48,0.05,0.0,2.42,-0.4181,-0.5802,-0.0995,0.0,0.0,0.0,0.0035,-0.0148,0.0386,2821.46 +48,60,1.03,0.0,7.37,1.36,0.07,0.0,4.27,-0.4157,-0.5819,-0.0905,0.0,-0.0,-0.0,0.0024,-0.0136,0.04,2881.29 +49,60,1.09,0.0,4.3,1.26,0.02,0.0,0.93,-0.4129,-0.5835,-0.0778,0.0,0.0,0.0,0.0029,-0.0133,0.0348,2941.29 +50,60,1.08,0.0,4.3,1.16,0.02,0.0,1.22,-0.4093,-0.5849,-0.0757,0.0,0.0,0.0,0.0035,-0.0122,0.0348,3001.45 +51,60,1.12,0.0,4.26,1.07,0.03,0.0,1.66,-0.4053,-0.5863,-0.0628,0.0,0.0,0.0,0.004,-0.0113,0.0309,3061.12 +52,60,1.09,0.0,4.3,0.99,0.03,0.0,2.03,-0.4015,-0.577,-0.0602,0.0,0.0,0.0,0.0038,-0.0119,0.0308,3121.63 +53,60,1.16,0.0,4.35,0.91,0.04,0.0,2.33,-0.3969,-0.5677,-0.0476,0.0,0.0,0.0,0.0046,-0.011,0.0304,3181.05 +54,60,1.16,0.0,4.3,0.84,0.04,0.0,2.47,-0.3923,-0.5585,-0.0385,0.0,0.0,0.0,0.0047,-0.0101,0.0296,3241.51 +55,60,1.14,0.0,3.26,0.77,0.03,0.0,1.35,-0.3877,-0.5595,-0.0415,0.0,0.0,0.0,0.0046,-0.0094,0.0299,3301.37 +56,60,1.13,0.0,3.26,0.71,0.02,0.0,0.6,-0.383,-0.5619,-0.0348,0.0,0.0,0.0,0.0047,-0.0118,0.0271,3360.76 +57,60,1.16,0.0,3.33,0.66,0.02,0.0,0.76,-0.3777,-0.5642,-0.0276,0.0,0.0,0.0,0.0053,-0.0108,0.0288,3421.48 +58,60,1.2,0.0,3.37,0.46,0.02,0.0,0.9,-0.372,-0.5663,-0.0218,0.0,-0.0,-0.0,0.0057,-0.0105,0.0284,3481.56 +59,60,1.07,0.0,3.41,0.46,0.02,0.0,0.99,-0.3673,-0.5682,-0.0175,0.0,-0.0,-0.0,0.0047,-0.0127,0.028,3541.36 +60,60,1.11,0.0,3.26,0.52,0.02,0.0,1.12,-0.3621,-0.57,-0.0135,0.0,0.0,0.0,0.0052,-0.0117,0.0276,3603.48 +61,60,5.77,2.13,8.79,0.52,0.87,0.0,5.36,-0.3103,-0.5284,0.0208,0.0,0.0,0.0,0.0517,0.012,0.0808,3656.99 +62,60,26.62,24.07,30.19,0.52,25.15,19.98,31.77,-0.0563,-0.2736,0.2366,0.0,0.0,0.0,0.2541,0.2158,0.2819,3678.06 +63,60,35.3,31.13,39.25,0.52,46.01,36.55,55.8,0.127,-0.0464,0.4016,0.0,-0.0,-0.0,0.1832,0.1406,0.2281,3693.48 +64,60,42.4,39.05,46.73,0.47,66.64,55.41,78.16,0.2777,0.1434,0.4975,0.0,-0.0,-0.0,0.1507,0.0929,0.2022,3703.04 +65,60,48.51,45.45,52.43,0.47,88.11,76.48,99.96,0.4104,0.3049,0.5677,0.0,-0.0,-0.0,0.1327,0.0626,0.2161,3707.74 +66,60,54.11,50.55,56.99,0.47,99.97,98.69,100.0,0.5367,0.4413,0.6696,0.0,-0.0,-0.0,0.1263,0.0818,0.1936,3708.29 +67,60,59.79,56.63,62.92,0.47,100.0,100.0,100.0,0.7209,0.5779,0.8942,0.0,0.0,0.0,0.1843,0.1148,0.254,3708.33 +68,60,66.8,64.38,70.0,0.47,100.0,100.0,100.0,1.0454,0.8494,1.2471,0.0,0.0,0.0,0.3245,0.2642,0.3956,3708.37 +69,60,75.75,73.02,78.87,0.47,100.0,100.0,100.0,1.5489,1.3112,1.7815,0.0,0.0,0.0,0.5035,0.4391,0.5731,3708.41 +70,60,86.91,84.21,90.32,0.52,100.0,100.0,100.0,2.2755,1.9968,2.5276,0.0,0.0,0.0,0.7266,0.6606,0.8021,3708.45 +71,60,100.0,100.0,100.0,0.52,100.0,100.0,100.0,3.264,2.9733,3.5188,0.0,0.0,0.0,0.9884,0.9764,0.998,3708.48 +72,60,100.0,100.0,100.0,0.52,100.0,100.0,100.0,4.2524,3.9497,4.5144,0.0,0.0,0.0,0.9884,0.9764,0.998,3708.51 +73,60,100.0,100.0,100.0,0.52,100.0,100.0,100.0,5.2408,4.9262,5.51,0.0,0.0,0.0,0.9884,0.9764,0.998,3708.55 +74,60,100.0,100.0,100.0,0.52,100.0,100.0,100.0,6.2292,5.9027,6.5056,0.0,0.0,0.0,0.9884,0.9764,0.998,3708.58 +75,60,80.0,0.0,100.0,0.48,99.91,97.39,100.0,6.8178,4.9781,7.5013,0.0,-0.0,-0.0,0.5886,-1.0217,0.998,3708.62 +76,60,1.67,0.0,100.0,0.44,96.58,77.71,100.0,5.8416,3.9845,7.8557,0.0,0.0,0.0,-0.9763,-1.0218,0.9765,3709.41 +77,60,16.67,0.0,100.0,0.44,98.62,62.65,100.0,5.1718,3.1919,6.834,0.0,0.0,0.0,-0.6698,-1.0217,0.9974,3709.88 +78,60,20.0,0.0,100.0,0.44,86.83,76.9,100.0,4.5645,3.9142,6.4143,0.0,-0.0,-0.0,-0.6073,-1.02,0.9971,3712.75 +79,60,88.33,0.0,100.0,0.44,96.56,64.62,100.0,5.3394,3.2835,7.4098,0.0,0.0,0.0,0.7749,-1.0184,0.9985,3714.23 +80,60,100.0,100.0,100.0,0.44,100.0,100.0,100.0,6.3305,4.274,8.4054,0.0,0.0,0.0,0.991,0.98,0.9984,3714.48 +81,60,100.0,100.0,100.0,0.44,100.0,100.0,100.0,7.3213,5.2624,9.4009,0.0,0.0,0.0,0.9909,0.98,0.9984,3714.52 +82,60,100.0,100.0,100.0,0.44,100.0,100.0,100.0,8.2825,6.2508,10.0,0.0,0.0,0.0,0.9909,0.98,0.9984,3714.55 +83,60,100.0,100.0,100.0,0.44,100.0,100.0,100.0,9.1115,7.2392,10.0,0.0,0.0,0.0,0.9909,0.98,0.9984,3714.59 +84,60,100.0,100.0,100.0,0.44,100.0,100.0,100.0,9.818,8.2275,10.0,0.0,0.0,0.0,0.9909,0.98,0.9984,3714.62 +85,60,100.0,100.0,100.0,0.44,100.0,100.0,100.0,9.9318,9.2142,10.0,0.0,0.0,0.0,0.9909,0.98,0.9984,3714.65 +86,60,100.0,100.0,100.0,0.44,100.0,100.0,100.0,10.0,10.0,10.0,0.0,0.0,0.0,0.9909,0.98,0.9984,3714.69 +87,60,83.33,0.0,100.0,0.41,100.0,100.0,100.0,9.8318,8.9815,10.0,0.0,-0.0,-0.0,0.6577,-1.0185,0.9984,3714.72 +88,60,80.0,0.0,100.0,0.38,100.0,100.0,100.0,9.6301,7.9645,10.0,0.0,0.0,0.0,0.5911,-1.017,0.9984,3714.75 +89,60,13.33,0.0,100.0,0.35,100.0,100.0,100.0,8.7567,6.9488,10.0,0.0,0.0,0.0,-0.7416,-1.0171,0.998,3714.79 +90,60,1.67,0.0,100.0,0.32,100.0,100.0,100.0,7.7658,5.9343,10.0,0.0,0.0,0.0,-0.9743,-1.017,0.9955,3714.82 +91,60,0.0,0.0,0.0,0.29,99.76,97.08,100.0,6.7587,4.921,8.9958,0.0,0.0,0.0,-1.007,-1.0157,-1.0013,3714.87 +92,60,0.0,0.0,0.0,0.27,96.42,77.55,100.0,5.7547,3.938,7.992,0.0,0.0,0.0,-1.0041,-1.0144,-0.983,3716.86 +93,60,0.56,0.0,33.33,0.27,92.93,62.04,100.0,4.7945,3.1524,6.9884,0.0,0.0,0.0,-0.9601,-1.0133,-0.1976,3720.54 +94,60,0.89,0.0,33.33,0.27,77.74,49.62,100.0,3.8764,2.5235,5.9852,0.0,-0.0,-0.0,-0.9181,-1.0123,-0.3061,3731.32 +95,60,0.79,0.0,33.33,0.27,62.83,39.68,100.0,3.11,2.0201,4.9821,0.0,0.0,0.0,-0.7664,-1.003,-0.3388,3754.2 +96,60,2.21,0.0,33.33,0.27,53.37,31.72,100.0,2.5158,1.6171,3.986,0.0,0.0,0.0,-0.5943,-0.9962,-0.3134,3785.16 +97,60,2.04,0.0,33.33,0.27,43.27,25.35,100.0,2.0144,1.2654,3.1892,0.0,0.0,0.0,-0.5014,-0.7967,-0.3123,3821.75 +98,60,1.8,0.0,33.33,0.27,34.73,20.25,100.0,1.6086,0.9815,2.5518,0.0,0.0,0.0,-0.4058,-0.6375,-0.2582,3863.63 +99,60,1.72,0.0,33.33,0.27,28.14,16.17,100.0,1.2857,0.773,2.0417,0.0,0.0,0.0,-0.3229,-0.5101,-0.1747,3911.7 +100,60,1.73,0.0,33.33,0.27,22.94,12.91,94.2,1.028,0.6071,1.6336,0.0,0.0,0.0,-0.2577,-0.4081,-0.1368,3966.4 +101,60,1.21,0.0,12.5,0.27,17.67,10.3,37.73,0.8128,0.479,1.3071,0.0,-0.0,-0.0,-0.2152,-0.7045,-0.1282,4025.36 +102,60,1.02,0.0,6.25,0.28,13.94,8.21,21.55,0.6462,0.3785,1.0458,0.0,0.0,0.0,-0.1666,-0.2951,-0.0898,4085.64 +103,60,0.88,0.0,4.92,0.26,11.11,4.46,17.26,0.515,0.238,0.8368,0.0,0.0,0.0,-0.1312,-0.209,-0.0784,4145.76 +104,60,0.92,0.0,4.29,0.24,9.09,3.57,13.79,0.4123,0.1909,0.6695,0.0,0.0,0.0,-0.1027,-0.1672,-0.0471,4205.97 +105,60,0.95,0.0,3.9,0.22,7.46,2.83,11.48,0.33,0.153,0.5357,0.0,0.0,0.0,-0.0823,-0.1338,-0.038,4265.99 +106,60,0.86,0.0,3.7,0.2,6.02,2.24,9.53,0.263,0.1226,0.4286,0.0,0.0,0.0,-0.067,-0.1071,-0.0304,4325.89 +107,60,0.91,0.0,3.53,0.19,5.02,1.77,8.08,0.2108,0.0982,0.343,0.0,0.0,0.0,-0.0522,-0.0857,-0.0231,4385.91 +108,60,0.99,0.0,4.49,0.17,4.27,1.4,8.37,0.1694,0.0787,0.2744,0.0,0.0,0.0,-0.0414,-0.0685,-0.0165,4445.61 +109,60,0.94,0.0,3.37,0.16,3.53,1.1,6.53,0.1351,0.0631,0.2196,0.0,0.0,0.0,-0.0344,-0.0548,-0.0156,4505.92 +110,60,0.92,0.0,3.33,0.16,2.95,0.88,5.89,0.1077,0.0596,0.1757,0.0,0.0,0.0,-0.0274,-0.0439,-0.0006,4565.51 +111,60,0.89,0.0,3.23,0.16,2.49,0.67,5.38,0.0859,0.0477,0.1406,0.0,-0.0,-0.0,-0.0218,-0.0574,-0.0089,4626.0 +112,60,0.93,0.0,3.23,0.16,2.19,0.33,4.98,0.0691,0.0294,0.1125,0.0,0.0,0.0,-0.0168,-0.0306,0.0012,4685.75 +113,60,0.96,0.0,3.26,0.17,1.95,0.24,4.9,0.0556,0.0238,0.0901,0.0,0.0,0.0,-0.0135,-0.0264,0.0068,4745.83 +114,60,0.94,0.0,4.3,0.17,1.71,0.15,5.95,0.0443,0.019,0.078,0.0,0.0,0.0,-0.0113,-0.0335,0.0036,4805.7 +115,60,0.91,0.0,4.3,0.17,1.49,0.09,5.68,0.0351,0.0088,0.0628,0.0,0.0,0.0,-0.0092,-0.0222,0.0053,4866.03 +116,60,0.85,0.0,4.3,0.17,1.29,0.0,5.41,0.0275,0.0053,0.0501,0.0,0.0,0.0,-0.0076,-0.0302,0.0063,4926.0 +117,60,0.89,0.0,4.3,0.17,1.22,0.0,5.19,0.0223,0.0019,0.0414,0.0,0.0,0.0,-0.0052,-0.0185,0.008,4985.86 +118,60,0.91,0.0,3.41,0.17,1.17,0.0,4.06,0.018,-0.0024,0.0415,0.0,-0.0,-0.0,-0.0043,-0.0194,0.0171,5045.19 +119,60,0.98,0.0,3.33,0.16,1.2,0.0,4.25,0.015,-0.0045,0.0488,0.0,0.0,0.0,-0.003,-0.0184,0.016,5105.24 +120,60,1.02,0.0,4.35,0.14,1.19,0.0,4.98,0.0121,-0.0067,0.0398,0.0,0.0,0.0,-0.0029,-0.0164,0.0108,5165.46 +121,60,1.02,0.0,3.37,0.13,1.14,0.0,3.98,0.0094,-0.0091,0.0317,0.0,0.0,0.0,-0.0027,-0.0189,0.0084,5225.55 +122,60,1.05,0.0,4.44,0.12,1.15,0.0,5.08,0.0075,-0.0114,0.0349,0.0,0.0,0.0,-0.0019,-0.0145,0.0094,5285.9 +123,60,1.16,0.0,4.35,0.11,1.24,0.0,4.87,0.0065,-0.0135,0.0273,0.0,0.0,0.0,-0.0009,-0.0253,0.0113,5345.88 +124,60,1.14,0.0,4.4,0.11,1.19,0.0,4.8,0.0046,-0.0159,0.0229,0.0,0.0,0.0,-0.0019,-0.0143,0.012,5405.64 +125,60,1.16,0.0,4.44,0.12,1.19,0.0,4.76,0.0033,-0.0185,0.0215,0.0,-0.0,-0.0,-0.0012,-0.0126,0.0098,5465.55 +126,60,1.23,0.0,4.44,0.12,1.25,0.0,4.68,0.0028,-0.021,0.0223,0.0,0.0,0.0,-0.0005,-0.013,0.0108,5526.11 +127,60,1.14,0.0,4.4,0.08,1.11,0.0,4.55,0.0008,-0.0232,0.0207,0.0,0.0,0.0,-0.002,-0.0139,0.0105,5585.44 +128,60,1.11,0.0,3.26,0.08,1.05,0.0,3.68,-0.0003,-0.0252,0.0203,0.0,0.0,0.0,-0.0011,-0.025,0.0193,5645.8 +129,60,1.12,0.0,4.21,0.08,1.06,0.0,4.62,-0.0007,-0.0271,0.023,0.0,-0.0,-0.0,-0.0004,-0.0118,0.0113,5705.53 +130,60,1.16,0.0,4.21,0.09,1.1,0.0,4.58,-0.0008,-0.0288,0.0206,0.0,0.0,0.0,-0.0001,-0.0143,0.0136,5765.21 +131,60,1.16,0.0,4.17,0.09,1.11,0.0,4.44,-0.0012,-0.0304,0.0196,0.0,0.0,0.0,-0.0004,-0.0107,0.0144,5825.49 +132,60,1.21,0.0,4.26,0.09,1.18,0.0,4.42,-0.0013,-0.0228,0.0149,0.0,-0.0,-0.0,-0.0,-0.0124,0.0142,5885.58 +133,60,1.12,0.0,4.35,0.14,1.09,0.0,4.53,-0.0028,-0.0251,0.0119,0.0,0.0,0.0,-0.0016,-0.0236,0.0154,5945.59 +134,60,1.12,0.0,4.35,0.08,1.07,0.0,4.49,-0.0036,-0.0195,0.0157,0.0,0.0,0.0,-0.0007,-0.0139,0.0117,6005.99 +135,60,1.1,0.0,3.26,0.07,1.03,0.0,3.54,-0.0042,-0.021,0.0133,0.0,0.0,0.0,-0.0007,-0.0137,0.0102,6065.23 +136,60,1.05,0.0,3.37,0.06,0.97,0.0,3.48,-0.005,-0.0224,0.0106,0.0,0.0,0.0,-0.0008,-0.0127,0.0117,6125.92 +137,60,1.04,0.0,3.3,0.06,0.97,0.0,3.35,-0.0053,-0.0238,0.0084,0.0,0.0,0.0,-0.0003,-0.0134,0.0134,6185.19 +138,60,1.03,0.0,4.4,0.05,0.95,0.0,4.68,-0.0057,-0.0253,0.0166,0.0,0.0,0.0,-0.0004,-0.0231,0.01,6245.95 +139,60,0.96,0.0,4.4,0.06,0.89,0.0,4.61,-0.0066,-0.0266,0.0133,0.0,0.0,0.0,-0.0009,-0.0118,0.0126,6305.29 +140,60,0.93,0.0,4.44,0.06,0.86,0.0,4.54,-0.0072,-0.0278,0.0122,0.0,-0.0,-0.0,-0.0006,-0.0134,0.0138,6365.48 diff --git a/experiments/results/csv/sudden_error_spike_100_adaptive_time_analysis.csv b/experiments/results/csv/sudden_error_spike_100_adaptive_time_analysis.csv new file mode 100644 index 000000000..da025ae2b --- /dev/null +++ b/experiments/results/csv/sudden_error_spike_100_adaptive_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,10431,10315,110,1.05,6,0.06,1.0 +20-40s,10984,10874,110,1.0,0,0.0,1.0 +40-60s,10951,10826,122,1.11,3,0.03,1.0 +60-80s,15857,541,3204,20.21,12112,76.38,100.0 +80-100s,14387,1783,29,0.2,12575,87.41,1.0 +100-120s,11755,10813,105,0.89,837,7.12,1.0 +120-140s,11100,10854,117,1.05,129,1.16,1.0 diff --git a/experiments/results/csv/sudden_error_spike_100_time_analysis.csv b/experiments/results/csv/sudden_error_spike_100_time_analysis.csv new file mode 100644 index 000000000..4bc15c03f --- /dev/null +++ b/experiments/results/csv/sudden_error_spike_100_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,8067,7989,78,0.97,0,0.0,1.0 +20-40s,8188,8109,79,0.96,0,0.0,1.0 +40-60s,8363,8289,74,0.88,0,0.0,1.0 +60-80s,15778,400,711,4.51,14667,92.96,100.0 +80-100s,14410,3137,42,0.29,11231,77.94,1.0 +100-120s,10539,8107,68,0.65,2364,22.43,1.0 +120-140s,8336,8247,89,1.07,0,0.0,1.0 diff --git a/experiments/results/csv/sudden_error_spike_20_adaptive_pid_controller.csv b/experiments/results/csv/sudden_error_spike_20_adaptive_pid_controller.csv new file mode 100644 index 000000000..b9f68c3f8 --- /dev/null +++ b/experiments/results/csv/sudden_error_spike_20_adaptive_pid_controller.csv @@ -0,0 +1,141 @@ +Window,Thread Count,Error Rate Avg,Error Rate Min,Error Rate Max,Ideal Error Rate,Rejection Rate Avg,Rejection Rate Min,Rejection Rate Max,Integral Avg,Integral Min,Integral Max,Derivative Avg,Derivative Min,Derivative Max,P Value Avg,P Value Min,P Value Max,Total Request Time +1,60,1.08,0.0,20.0,4.61,0.79,0.0,18.0,-0.0356,-0.0461,0.15,0.0,-0.0,-0.0,-0.0356,-0.0461,0.15,66.29 +2,60,1.09,0.0,10.53,4.25,0.26,0.0,6.47,-0.076,-0.0886,0.0289,0.0,0.0,0.0,-0.0403,-0.1211,0.0592,127.37 +3,60,0.91,0.0,7.14,3.92,0.07,0.0,2.25,-0.1101,-0.1278,-0.0157,0.0,0.0,0.0,-0.0341,-0.0446,-0.0037,187.46 +4,60,0.9,0.0,7.69,3.61,0.05,0.0,2.88,-0.1399,-0.1639,-0.0129,0.0,0.0,0.0,-0.0298,-0.0361,0.0089,247.01 +5,60,0.94,0.0,6.25,3.33,0.02,0.0,1.17,-0.1669,-0.1972,-0.025,0.0,0.0,0.0,-0.027,-0.0333,0.0043,306.39 +6,60,1.05,0.0,5.45,3.07,0.0,0.0,0.0,-0.1905,-0.228,-0.0312,0.0,0.0,0.0,-0.0236,-0.0307,0.0073,367.23 +7,60,0.96,0.0,4.69,2.83,0.0,0.0,0.0,-0.2129,-0.2563,-0.0319,0.0,0.0,0.0,-0.0225,-0.0283,-0.0004,426.76 +8,60,0.93,0.0,4.11,2.61,0.0,0.0,0.0,-0.2339,-0.2824,-0.0376,0.0,0.0,0.0,-0.021,-0.0261,-0.0038,486.27 +9,60,0.94,0.0,5.95,2.41,0.01,0.0,0.6,-0.253,-0.3065,-0.0334,0.0,0.0,0.0,-0.0192,-0.0246,0.0127,546.34 +10,60,0.92,0.0,5.38,2.22,0.0,0.0,0.05,-0.271,-0.3287,-0.0324,0.0,0.0,0.0,-0.018,-0.0239,0.0009,606.57 +11,60,1.01,0.0,4.26,2.05,0.0,0.0,0.0,-0.2867,-0.3491,-0.0369,0.0,0.0,0.0,-0.0157,-0.0322,0.0105,666.64 +12,60,0.97,0.0,4.26,1.89,0.0,0.0,0.0,-0.3014,-0.368,-0.0405,0.0,0.0,0.0,-0.0148,-0.0297,0.0109,726.81 +13,60,1.06,0.0,4.26,1.74,0.0,0.0,0.0,-0.3142,-0.3854,-0.0438,0.0,0.0,0.0,-0.0127,-0.0274,0.0091,787.05 +14,60,1.02,0.0,4.26,1.6,0.0,0.0,0.0,-0.3262,-0.4014,-0.0469,0.0,0.0,0.0,-0.012,-0.0274,0.0098,847.24 +15,60,1.03,0.0,4.26,1.57,0.0,0.0,0.0,-0.3372,-0.4162,-0.0589,0.0,0.0,0.0,-0.011,-0.025,0.0098,906.4 +16,60,1.03,0.0,4.26,1.53,0.0,0.0,0.0,-0.3473,-0.4298,-0.08,0.0,0.0,0.0,-0.0101,-0.0231,0.0094,966.58 +17,60,1.12,0.0,4.26,1.5,0.0,0.0,0.0,-0.3557,-0.4424,-0.0992,0.0,0.0,0.0,-0.0084,-0.0258,0.0101,1025.47 +18,60,1.21,0.0,4.26,1.46,0.0,0.0,0.0,-0.3626,-0.454,-0.1071,0.0,0.0,0.0,-0.0068,-0.023,0.0101,1086.47 +19,60,1.26,0.0,4.26,1.44,0.0,0.0,0.0,-0.3683,-0.4647,-0.1342,0.0,0.0,0.0,-0.0058,-0.027,0.0104,1146.37 +20,60,1.28,0.0,4.26,1.41,0.0,0.0,0.0,-0.3734,-0.4746,-0.1514,0.0,0.0,0.0,-0.005,-0.0249,0.0104,1206.39 +21,60,1.21,0.0,3.26,1.38,0.0,0.0,0.0,-0.3786,-0.4836,-0.1553,0.0,0.0,0.0,-0.0052,-0.023,0.0098,1267.29 +22,60,1.21,0.0,3.23,1.36,0.0,0.0,0.0,-0.3832,-0.492,-0.1589,0.0,0.0,0.0,-0.0047,-0.0222,0.018,1326.44 +23,60,1.13,0.0,3.33,1.5,0.0,0.0,0.0,-0.3881,-0.4997,-0.1626,0.0,-0.0,-0.0,-0.0048,-0.0216,0.02,1386.52 +24,60,1.17,0.0,3.33,1.5,0.0,0.0,0.0,-0.392,-0.5069,-0.1819,0.0,-0.0,-0.0,-0.0039,-0.0226,0.02,1446.87 +25,60,1.08,0.0,4.3,1.22,0.0,0.0,0.0,-0.3963,-0.5134,-0.1818,0.0,-0.0,-0.0,-0.0043,-0.0208,0.0286,1507.21 +26,60,1.02,0.0,4.3,1.13,0.0,0.0,0.0,-0.4005,-0.5195,-0.1811,0.0,0.0,0.0,-0.0042,-0.0211,0.0286,1566.54 +27,60,0.95,0.0,5.43,1.04,0.0,0.0,0.0,-0.4049,-0.5251,-0.1804,0.0,0.0,0.0,-0.0044,-0.0194,0.0398,1626.86 +28,60,0.83,0.0,4.4,0.96,0.0,0.0,0.0,-0.41,-0.5302,-0.1794,0.0,0.0,0.0,-0.0051,-0.0233,0.0294,1686.79 +29,60,0.76,0.0,4.4,0.88,0.0,0.0,0.0,-0.4153,-0.5349,-0.1835,0.0,0.0,0.0,-0.0052,-0.0221,0.0293,1746.3 +30,60,0.79,0.0,4.4,0.81,0.0,0.0,0.0,-0.4196,-0.5393,-0.1542,0.0,0.0,0.0,-0.0044,-0.0207,0.0293,1806.35 +31,60,0.74,0.0,5.38,0.75,0.01,0.0,0.45,-0.424,-0.5434,-0.1255,0.0,0.0,0.0,-0.0043,-0.0211,0.0391,1866.35 +32,60,0.7,0.0,4.3,0.94,0.0,0.0,0.0,-0.4283,-0.5471,-0.1109,0.0,0.0,0.0,-0.0043,-0.0251,0.0239,1926.54 +33,60,0.72,0.0,4.3,0.87,0.01,0.0,0.41,-0.4318,-0.5505,-0.0931,0.0,0.0,0.0,-0.0035,-0.0232,0.0282,1986.58 +34,60,0.73,0.0,4.3,1.76,0.02,0.0,0.9,-0.4349,-0.5537,-0.0753,0.0,-0.0,-0.0,-0.0031,-0.0214,0.0242,2046.87 +35,60,0.78,0.0,3.3,1.76,0.0,0.0,0.08,-0.4372,-0.5566,-0.0708,0.0,0.0,0.0,-0.0023,-0.0197,0.0119,2107.13 +36,60,0.8,0.0,3.26,1.76,0.01,0.0,0.37,-0.4388,-0.5593,-0.0642,0.0,-0.0,-0.0,-0.0017,-0.0182,0.0193,2166.48 +37,60,0.82,0.0,3.26,1.76,0.01,0.0,0.65,-0.4401,-0.5617,-0.0562,0.0,0.0,0.0,-0.0012,-0.0167,0.0189,2226.91 +38,60,0.87,0.0,3.19,1.76,0.0,0.0,0.0,-0.4405,-0.564,-0.0561,0.0,-0.0,-0.0,-0.0005,-0.0154,0.0189,2286.35 +39,59,0.83,0.0,3.23,1.77,0.0,0.0,0.0,-0.4397,-0.5661,-0.0493,0.0,-0.0,-0.0,-0.0006,-0.0143,0.0255,2346.23 +40,59,0.83,0.0,3.19,0.32,0.0,0.0,0.0,-0.4411,-0.5681,-0.0631,0.0,-0.0,-0.0,-0.0002,-0.0138,0.0254,2406.74 +41,57,0.91,0.0,4.26,0.32,0.0,0.0,0.0,-0.4395,-0.5699,-0.0758,0.0,-0.0,-0.0,0.0009,-0.0127,0.036,2466.69 +42,56,0.92,0.0,3.23,0.44,0.0,0.0,0.0,-0.4404,-0.5715,-0.0827,0.0,0.0,0.0,0.0013,-0.0158,0.0261,2526.2 +43,59,0.99,0.0,3.26,1.15,0.0,0.0,0.0,-0.4362,-0.573,-0.0848,0.0,-0.0,-0.0,0.002,-0.0146,0.0261,2587.08 +44,57,0.93,0.0,4.21,0.65,0.01,0.0,0.55,-0.4384,-0.5744,-0.0867,0.0,-0.0,-0.0,0.0017,-0.0134,0.0289,2646.78 +45,52,0.98,0.0,3.26,0.65,0.0,0.0,0.0,-0.4417,-0.5757,-0.1038,0.0,-0.0,-0.0,0.0026,-0.0146,0.026,2706.69 +46,50,0.99,0.0,3.26,0.87,0.0,0.0,0.0,-0.4265,-0.5663,-0.0885,0.0,0.0,0.0,0.0026,-0.0134,0.0259,2766.62 +47,59,0.99,0.0,4.35,0.56,0.0,0.0,0.0,-0.428,-0.5669,-0.0873,0.0,-0.0,-0.0,0.0029,-0.0182,0.0367,2826.51 +48,59,1.0,0.0,4.35,0.34,0.0,0.0,0.0,-0.4244,-0.5687,-0.0786,0.0,-0.0,-0.0,0.0034,-0.0168,0.0366,2886.11 +49,57,1.02,0.0,3.33,1.02,0.0,0.0,0.0,-0.4251,-0.5705,-0.1212,0.0,-0.0,-0.0,0.0037,-0.0155,0.0303,2946.07 +50,59,1.06,0.0,3.23,0.23,0.0,0.0,0.0,-0.4171,-0.5721,-0.0702,0.0,0.0,0.0,0.0043,-0.0143,0.0302,3006.85 +51,59,1.04,0.0,3.3,0.89,0.0,0.0,0.0,-0.4173,-0.5736,-0.062,0.0,-0.0,-0.0,0.0043,-0.0132,0.0302,3066.5 +52,59,0.99,0.0,3.33,0.56,0.02,0.0,0.99,-0.4083,-0.5749,-0.0434,0.0,0.0,0.0,0.0039,-0.0122,0.0298,3126.68 +53,58,0.93,0.0,3.33,0.92,0.0,0.0,0.0,-0.4056,-0.5762,-0.0451,0.0,-0.0,-0.0,0.0033,-0.0112,0.0297,3186.29 +54,55,0.96,0.0,3.37,0.41,0.02,0.0,1.36,-0.4041,-0.5773,-0.0262,0.0,0.0,0.0,0.0039,-0.0103,0.03,3246.6 +55,55,0.94,0.0,3.33,0.7,0.0,0.0,0.16,-0.3972,-0.5784,-0.0318,0.0,0.0,0.0,0.0036,-0.0095,0.0296,3306.15 +56,57,1.01,0.0,3.33,0.78,0.03,0.0,1.51,-0.3916,-0.5794,-0.0153,0.0,-0.0,-0.0,0.0045,-0.0088,0.0296,3366.25 +57,60,0.96,0.0,3.37,0.48,0.03,0.0,1.6,-0.3908,-0.5803,-0.012,0.0,-0.0,-0.0,0.0039,-0.0085,0.0299,3426.8 +58,59,0.85,0.0,3.37,0.26,0.04,0.0,1.6,-0.3864,-0.5811,-0.01,0.0,0.0,0.0,0.0029,-0.0079,0.0294,3486.89 +59,60,0.8,0.0,3.23,0.25,0.03,0.0,1.64,-0.3856,-0.5819,-0.008,0.0,-0.0,-0.0,0.0024,-0.0069,0.0285,3545.97 +60,60,0.82,0.0,3.23,0.25,0.03,0.0,1.71,-0.3827,-0.5826,-0.0061,0.0,-0.0,-0.0,0.0028,-0.0093,0.0308,3606.2 +61,59,1.28,0.0,5.32,0.2,0.03,0.0,1.73,-0.3727,-0.5833,-0.0049,0.0,0.0,0.0,0.0075,-0.0085,0.0487,3666.63 +62,60,3.41,0.0,11.22,0.2,0.34,0.0,6.41,-0.3465,-0.5839,0.0169,0.0,-0.0,-0.0,0.0289,-0.0079,0.1078,3726.29 +63,59,5.49,0.0,15.38,0.21,1.18,0.0,10.09,-0.301,-0.5737,0.0353,0.0,0.0,0.0,0.0476,-0.003,0.1344,3786.97 +64,59,7.72,1.09,15.53,0.45,3.2,0.0,12.81,-0.2407,-0.5428,0.0397,0.0,-0.0,-0.0,0.061,0.0044,0.1232,3846.38 +65,59,9.95,3.23,18.1,0.3,6.57,0.0,17.92,-0.1689,-0.4113,0.0728,0.0,-0.0,-0.0,0.0656,0.0203,0.1076,3906.34 +66,59,11.4,4.3,18.1,0.08,9.31,0.0,20.34,-0.1241,-0.491,0.1044,0.0,0.0,0.0,0.0537,-0.0002,0.103,3966.67 +67,60,13.6,5.21,20.56,1.01,13.07,0.0,24.86,-0.0719,-0.4397,0.1119,0.0,-0.0,-0.0,0.0505,0.0024,0.1151,4026.71 +68,60,15.8,6.59,22.94,1.01,16.86,0.88,27.55,-0.0283,-0.3591,0.1059,0.0,-0.0,-0.0,0.0436,-0.006,0.0992,4086.29 +69,60,17.28,8.08,24.53,1.01,19.77,2.29,31.44,0.0006,-0.2875,0.1141,0.0,-0.0,-0.0,0.029,-0.0162,0.0795,4146.44 +70,60,19.04,8.0,25.93,1.01,22.9,3.46,34.81,0.0267,-0.2299,0.108,0.0,-0.0,-0.0,0.026,-0.0208,0.0787,4206.24 +71,60,20.17,9.0,27.03,1.01,25.17,5.71,37.33,0.0411,-0.1728,0.1164,0.0,-0.0,-0.0,0.0145,-0.0336,0.0778,4265.77 +72,60,19.95,9.8,27.03,0.3,25.23,7.64,37.42,0.0347,-0.1279,0.1171,0.0,-0.0,-0.0,-0.0064,-0.041,0.0449,4326.72 +73,60,19.97,11.54,27.43,1.01,25.07,10.61,38.25,0.0277,-0.0818,0.1302,0.0,0.0,0.0,-0.0071,-0.0542,0.0486,4386.1 +74,60,19.61,10.78,28.32,0.22,24.41,10.35,39.73,0.0175,-0.107,0.1109,0.0,-0.0,-0.0,-0.0102,-0.0569,0.0457,4446.48 +75,60,19.3,9.8,26.36,0.22,23.73,9.27,36.44,0.009,-0.0851,0.1104,0.0,-0.0,-0.0,-0.0085,-0.0614,0.0362,4507.12 +76,60,19.29,9.0,27.27,1.01,23.53,8.35,39.08,0.0058,-0.0692,0.1109,0.0,-0.0,-0.0,-0.0032,-0.054,0.0678,4566.45 +77,60,19.14,10.0,26.79,1.01,23.22,9.78,36.84,0.0022,-0.0925,0.0744,0.0,0.0,0.0,-0.0036,-0.0685,0.047,4626.67 +78,60,18.9,9.09,27.03,1.01,22.8,8.9,36.85,-0.0016,-0.083,0.1008,0.0,0.0,0.0,-0.0038,-0.0569,0.0585,4686.54 +79,60,19.22,10.2,26.13,1.01,23.18,9.32,35.69,0.0018,-0.0703,0.0955,0.0,-0.0,-0.0,0.0035,-0.042,0.0581,4743.48 +80,60,18.95,10.31,24.78,1.01,22.83,9.72,32.8,-0.0014,-0.0943,0.1004,0.0,0.0,0.0,-0.0033,-0.0843,0.0534,4796.07 +81,60,18.77,11.58,28.07,1.01,22.49,11.33,36.83,-0.004,-0.1,0.0882,0.0,0.0,0.0,-0.0026,-0.0768,0.0443,4855.83 +82,60,17.19,9.47,25.89,1.01,20.12,8.08,34.86,-0.0231,-0.1216,0.0709,0.0,-0.0,-0.0,-0.0191,-0.0573,0.0078,4915.64 +83,60,15.37,8.33,23.64,1.01,17.09,6.2,30.46,-0.0445,-0.1369,0.0231,0.0,-0.0,-0.0,-0.0214,-0.0722,0.0283,4975.38 +84,60,13.9,7.37,22.94,0.3,14.66,4.96,28.18,-0.0573,-0.13,0.0094,0.0,0.0,0.0,-0.0128,-0.0495,0.0105,5035.91 +85,60,12.18,5.26,20.0,0.32,12.12,3.06,23.12,-0.0689,-0.1573,0.001,0.0,0.0,0.0,-0.0116,-0.0509,0.0173,5096.34 +86,60,10.46,3.19,17.48,0.33,9.69,0.6,18.91,-0.0777,-0.1485,-0.0086,0.0,0.0,0.0,-0.0088,-0.0767,0.0379,5155.98 +87,60,8.59,2.17,15.0,1.01,7.23,0.0,14.73,-0.0853,-0.1373,-0.0186,0.0,0.0,0.0,-0.0076,-0.0529,0.0298,5216.33 +88,60,6.55,1.1,11.88,0.35,4.68,0.0,12.16,-0.0926,-0.1498,-0.0164,0.0,0.0,0.0,-0.0073,-0.0577,0.0262,5276.24 +89,60,4.35,0.0,8.7,0.35,2.33,0.0,7.23,-0.0993,-0.1669,-0.0374,0.0,-0.0,-0.0,-0.0067,-0.0603,0.0221,5335.99 +90,60,2.54,0.0,7.69,0.35,0.8,0.0,6.14,-0.1021,-0.1754,-0.0413,0.0,0.0,0.0,-0.0028,-0.043,0.0284,5396.06 +91,60,1.1,0.0,4.35,0.35,0.14,0.0,2.93,-0.1044,-0.1832,-0.0515,0.0,-0.0,-0.0,-0.0023,-0.039,0.0263,5455.89 +92,60,1.17,0.0,4.35,0.36,0.24,0.0,3.44,-0.0994,-0.1904,-0.0295,0.0,-0.0,-0.0,0.0051,-0.012,0.0316,5516.05 +93,60,1.1,0.0,4.35,0.36,0.24,0.0,3.57,-0.0959,-0.197,-0.0235,0.0,-0.0,-0.0,0.0034,-0.0102,0.0171,5575.35 +94,60,1.03,0.0,4.35,0.36,0.25,0.0,3.66,-0.0931,-0.2031,-0.0189,0.0,-0.0,-0.0,0.0028,-0.0073,0.0157,5635.94 +95,60,1.07,0.0,4.3,0.37,0.28,0.0,3.73,-0.09,-0.2088,-0.0151,0.0,-0.0,-0.0,0.0031,-0.0112,0.0217,5695.96 +96,60,1.1,0.0,5.26,0.37,0.28,0.0,4.46,-0.0867,-0.214,-0.0121,0.0,-0.0,-0.0,0.0033,-0.0086,0.0184,5755.72 +97,60,0.99,0.0,4.3,0.37,0.22,0.0,3.42,-0.0843,-0.2188,-0.0208,0.0,0.0,0.0,0.0023,-0.0086,0.0233,5815.51 +98,60,1.01,0.0,4.26,0.37,0.25,0.0,3.42,-0.0812,-0.2232,-0.0167,0.0,-0.0,-0.0,0.0031,-0.0073,0.0262,5875.35 +99,60,1.03,0.0,3.26,0.37,0.28,0.0,2.56,-0.0781,-0.2272,-0.0141,0.0,-0.0,-0.0,0.0031,-0.0067,0.0185,5936.14 +100,60,0.99,0.0,3.23,0.34,0.26,0.0,2.7,-0.0755,-0.231,-0.0106,0.0,-0.0,-0.0,0.0026,-0.0079,0.0162,5996.37 +101,60,1.08,0.0,4.26,0.31,0.4,0.0,3.36,-0.0719,-0.2345,-0.0011,0.0,0.0,0.0,0.0036,-0.0089,0.0299,6055.58 +102,60,1.09,0.0,4.3,0.29,0.38,0.0,3.58,-0.0693,-0.2377,-0.0064,0.0,0.0,0.0,0.0026,-0.0097,0.0201,6115.66 +103,60,1.07,0.0,4.21,0.27,0.44,0.0,3.51,-0.0667,-0.2406,-0.0049,0.0,0.0,0.0,0.0026,-0.0104,0.0188,6176.07 +104,60,1.05,0.0,4.21,0.25,0.46,0.0,3.53,-0.0648,-0.2433,-0.0044,0.0,0.0,0.0,0.0019,-0.0096,0.0128,6236.15 +105,60,1.04,0.0,4.21,0.23,0.51,0.0,3.56,-0.0632,-0.2458,0.0009,0.0,0.0,0.0,0.0016,-0.01,0.021,6296.46 +106,60,1.06,0.0,4.3,0.21,0.5,0.0,4.37,-0.0617,-0.2372,0.0051,0.0,0.0,0.0,0.0014,-0.0214,0.0254,6355.94 +107,60,1.06,0.0,4.21,0.19,0.54,0.0,3.58,-0.0602,-0.2285,0.0041,0.0,0.0,0.0,0.0016,-0.0181,0.0274,6416.46 +108,60,1.08,0.0,4.26,0.18,0.53,0.0,4.37,-0.0588,-0.2198,0.0057,0.0,0.0,0.0,0.0014,-0.0095,0.0287,6475.54 +109,60,1.04,0.0,4.26,0.16,0.49,0.0,4.41,-0.0574,-0.2112,0.0048,0.0,0.0,0.0,0.0013,-0.0113,0.025,6535.82 +110,60,1.08,0.0,4.35,0.17,0.56,0.0,4.5,-0.0553,-0.2024,0.0114,0.0,0.0,0.0,0.0021,-0.0094,0.0207,6596.07 +111,60,1.03,0.0,4.35,0.17,0.53,0.0,4.32,-0.0544,-0.1937,0.0101,0.0,-0.0,-0.0,0.0009,-0.0211,0.0166,6655.86 +112,60,0.99,0.0,4.3,0.17,0.52,0.0,4.21,-0.0533,-0.1851,0.0075,0.0,-0.0,-0.0,0.0011,-0.0114,0.0133,6715.45 +113,60,1.03,0.0,4.3,0.17,0.56,0.0,4.17,-0.0517,-0.1765,0.0059,0.0,-0.0,-0.0,0.0016,-0.0111,0.0139,6775.81 +114,60,1.16,0.0,4.26,0.17,0.65,0.0,4.08,-0.0492,-0.1649,0.0042,0.0,-0.0,-0.0,0.0025,-0.0099,0.0196,6836.01 +115,60,1.14,0.0,3.33,0.17,0.62,0.0,3.21,-0.0476,-0.1654,0.0032,0.0,-0.0,-0.0,0.0016,-0.012,0.0193,6896.19 +116,60,0.96,0.0,3.3,0.17,0.45,0.0,2.54,-0.0476,-0.1659,0.0048,0.0,-0.0,-0.0,0.0,-0.0221,0.0181,6955.85 +117,60,0.98,0.0,3.41,0.18,0.48,0.0,3.55,-0.0457,-0.1664,0.0138,0.0,-0.0,-0.0,0.0019,-0.0107,0.0136,7015.48 +118,60,1.04,0.0,4.49,0.18,0.56,0.0,4.88,-0.0434,-0.1657,0.0227,0.0,-0.0,-0.0,0.0023,-0.0107,0.0233,7075.44 +119,60,1.15,0.0,5.49,0.18,0.65,0.0,6.11,-0.0407,-0.1677,0.0291,0.0,0.0,0.0,0.0027,-0.0104,0.0209,7135.06 +120,60,1.11,0.0,5.43,0.17,0.63,0.0,5.98,-0.0392,-0.1696,0.0232,0.0,-0.0,-0.0,0.0015,-0.0221,0.0153,7195.23 +121,60,1.13,0.0,5.49,0.15,0.64,0.0,5.95,-0.0374,-0.1714,0.019,0.0,0.0,0.0,0.0019,-0.0101,0.0219,7255.75 +122,60,1.13,0.0,4.44,0.14,0.67,0.0,4.52,-0.0355,-0.173,0.01,0.0,0.0,0.0,0.0018,-0.015,0.0214,7315.78 +123,60,1.11,0.0,4.35,0.13,0.72,0.0,4.56,-0.0342,-0.1745,0.018,0.0,0.0,0.0,0.0013,-0.0131,0.018,7375.76 +124,60,1.0,0.0,3.33,0.12,0.65,0.0,3.27,-0.0344,-0.1759,0.0042,0.0,0.0,0.0,-0.0001,-0.0138,0.0146,7435.36 +125,60,1.07,0.0,3.37,0.11,0.73,0.0,3.27,-0.033,-0.1771,0.0091,0.0,0.0,0.0,0.0013,-0.0116,0.0223,7495.04 +126,60,1.07,0.0,3.37,0.1,0.77,0.0,3.31,-0.0324,-0.1783,0.0079,0.0,0.0,0.0,0.0006,-0.0113,0.0177,7555.77 +127,60,1.03,0.0,4.21,0.09,0.74,0.0,3.98,-0.0326,-0.1794,0.0071,0.0,0.0,0.0,-0.0002,-0.0114,0.0162,7615.48 +128,60,1.02,0.0,3.33,0.09,0.71,0.0,3.24,-0.0326,-0.1804,0.0098,0.0,0.0,0.0,0.0,-0.0203,0.0121,7675.51 +129,60,1.03,0.0,3.37,0.09,0.7,0.0,3.31,-0.0321,-0.1813,0.0155,0.0,0.0,0.0,0.0005,-0.0236,0.0157,7735.77 +130,60,0.99,0.0,4.44,0.09,0.69,0.0,4.48,-0.0318,-0.1821,0.0167,0.0,-0.0,-0.0,0.0003,-0.0136,0.0167,7795.91 +131,60,1.05,0.0,4.44,0.09,0.76,0.0,4.46,-0.0307,-0.1829,0.0138,0.0,-0.0,-0.0,0.001,-0.0105,0.0255,7855.81 +132,60,1.03,0.0,3.41,0.09,0.72,0.0,3.46,-0.0305,-0.1836,0.0137,0.0,-0.0,-0.0,0.0003,-0.0136,0.0205,7915.37 +133,60,1.03,0.0,3.41,0.09,0.75,0.0,3.44,-0.0298,-0.1843,0.0113,0.0,-0.0,-0.0,0.0007,-0.0103,0.0193,7975.72 +134,60,1.07,0.0,4.26,0.1,0.74,0.0,4.41,-0.0289,-0.1849,0.0086,0.0,-0.0,-0.0,0.0009,-0.0113,0.0153,8035.57 +135,60,1.01,0.0,4.26,0.1,0.69,0.0,3.33,-0.0286,-0.1854,0.0106,0.0,-0.0,-0.0,0.0003,-0.0233,0.0177,8095.84 +136,60,1.03,0.0,5.32,0.1,0.71,0.0,4.78,-0.0275,-0.186,0.0023,0.0,-0.0,-0.0,0.0011,-0.013,0.0181,8155.69 +137,60,1.08,0.0,4.3,0.1,0.73,0.0,3.58,-0.026,-0.1864,0.006,0.0,-0.0,-0.0,0.0015,-0.011,0.0189,8215.86 +138,60,1.07,0.0,4.26,0.1,0.75,0.0,3.52,-0.0249,-0.1869,0.0055,0.0,-0.0,-0.0,0.0011,-0.0119,0.0229,8275.46 +139,60,0.96,0.0,3.23,0.1,0.66,0.0,3.24,-0.025,-0.1873,0.0063,0.0,-0.0,-0.0,-0.0001,-0.011,0.0175,8335.02 +140,60,0.9,0.0,3.26,0.04,0.65,0.0,3.22,-0.0246,-0.1877,0.0052,0.0,0.0,0.0,0.0003,-0.0089,0.0104,8390.02 diff --git a/experiments/results/csv/sudden_error_spike_20_adaptive_time_analysis.csv b/experiments/results/csv/sudden_error_spike_20_adaptive_time_analysis.csv new file mode 100644 index 000000000..cf0f647e0 --- /dev/null +++ b/experiments/results/csv/sudden_error_spike_20_adaptive_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,10535,10412,117,1.11,6,0.06,1.0 +20-40s,10990,10901,89,0.81,0,0.0,1.0 +40-60s,11008,10904,104,0.94,0,0.0,1.0 +60-80s,15170,10159,2391,15.76,2620,17.27,20.0 +80-100s,11991,10810,207,1.73,974,8.12,1.0 +100-120s,11058,10872,123,1.11,63,0.57,1.0 +120-140s,11070,10886,107,0.97,77,0.7,1.0 diff --git a/experiments/results/csv/sudden_error_spike_20_time_analysis.csv b/experiments/results/csv/sudden_error_spike_20_time_analysis.csv new file mode 100644 index 000000000..81e18a7f2 --- /dev/null +++ b/experiments/results/csv/sudden_error_spike_20_time_analysis.csv @@ -0,0 +1,8 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,11089,10996,93,0.84,0,0.0,1.0 +20-40s,11651,11554,97,0.83,0,0.0,1.0 +40-60s,11678,11545,133,1.14,0,0.0,1.0 +60-80s,15792,3077,634,4.01,12081,76.5,20.0 +80-100s,13995,7622,94,0.67,6279,44.87,1.0 +100-120s,11653,11542,111,0.95,0,0.0,1.0 +120-140s,11668,11553,115,0.99,0,0.0,1.0 diff --git a/experiments/results/csv/sudden_error_spikes_adaptive_pid_controller.csv b/experiments/results/csv/sudden_error_spikes_adaptive_pid_controller.csv new file mode 100644 index 000000000..c6f2a3516 --- /dev/null +++ b/experiments/results/csv/sudden_error_spikes_adaptive_pid_controller.csv @@ -0,0 +1,302 @@ +Window,Thread Count,Error Rate Avg,Error Rate Min,Error Rate Max,Ideal Error Rate,Rejection Rate Avg,Rejection Rate Min,Rejection Rate Max,Integral Avg,Integral Min,Integral Max,Derivative Avg,Derivative Min,Derivative Max,P Value Avg,P Value Min,P Value Max,Total Request Time +1,60,0.35,0.0,11.11,4.61,0.22,0.0,7.33,-0.0427,-0.0461,0.0611,0.0,-0.0,-0.0,-0.0427,-0.0461,0.0611,58.82 +2,56,0.49,0.0,5.88,4.25,0.03,0.0,0.6,-0.0829,-0.0886,-0.0042,0.0,0.0,0.0,-0.0405,-0.0674,0.0127,119.27 +3,59,0.74,0.0,6.9,4.25,0.06,0.0,1.95,-0.1135,-0.1278,-0.0168,0.0,0.0,0.0,-0.0332,-0.0425,0.0264,179.57 +4,60,0.83,0.0,5.26,3.92,0.0,0.0,0.0,-0.1432,-0.1639,-0.031,0.0,0.0,0.0,-0.0301,-0.0392,0.0134,238.78 +5,53,0.83,0.0,4.26,3.61,0.0,0.0,0.0,-0.1702,-0.1972,-0.0343,0.0,0.0,0.0,-0.0273,-0.0361,0.0033,298.58 +6,59,0.92,0.0,3.85,4.28,0.0,0.0,0.0,-0.1914,-0.228,-0.0437,0.0,-0.0,-0.0,-0.0246,-0.0333,0.0007,358.7 +7,56,0.81,0.0,3.28,3.07,0.0,0.0,0.0,-0.2164,-0.2563,-0.0783,0.0,0.0,0.0,-0.0236,-0.0307,-0.0035,418.92 +8,59,0.8,0.0,3.08,2.83,0.0,0.0,0.0,-0.2351,-0.2824,-0.0569,0.0,0.0,0.0,-0.0221,-0.0283,-0.0068,478.66 +9,58,0.87,0.0,2.7,2.61,0.0,0.0,0.0,-0.2534,-0.3065,-0.0725,0.0,0.0,0.0,-0.0198,-0.0261,-0.0087,539.14 +10,57,0.94,0.0,3.33,2.41,0.0,0.0,0.0,-0.2715,-0.3287,-0.0899,0.0,0.0,0.0,-0.0176,-0.0241,0.0059,598.65 +11,57,1.01,0.0,3.37,3.42,0.0,0.0,0.0,-0.2864,-0.3491,-0.1082,0.0,-0.0,-0.0,-0.0156,-0.0263,0.0059,659.02 +12,57,1.04,0.0,3.37,2.14,0.0,0.0,0.0,-0.3032,-0.368,-0.1252,0.0,0.0,0.0,-0.0138,-0.0205,0.0065,719.21 +13,56,0.85,0.0,3.3,3.38,0.0,0.0,0.0,-0.3161,-0.3854,-0.1502,0.0,-0.0,-0.0,-0.0147,-0.0323,0.0061,778.12 +14,60,0.9,0.0,3.41,2.52,0.0,0.0,0.0,-0.3259,-0.4014,-0.1835,0.0,0.0,0.0,-0.0133,-0.0333,0.0064,838.92 +15,52,0.91,0.0,3.33,3.03,0.0,0.0,0.0,-0.3334,-0.4162,-0.1943,0.0,0.0,0.0,-0.0125,-0.0307,0.0061,898.48 +16,59,0.88,0.0,3.41,1.48,0.0,0.0,0.0,-0.349,-0.4298,-0.1944,0.0,0.0,0.0,-0.0115,-0.0283,0.0119,958.78 +17,52,0.99,0.0,4.4,1.36,0.0,0.0,0.0,-0.358,-0.4424,-0.2037,0.0,0.0,0.0,-0.0096,-0.0266,0.017,1018.31 +18,60,0.96,0.0,4.49,1.89,0.0,0.0,0.0,-0.3655,-0.454,-0.2126,0.0,0.0,0.0,-0.0091,-0.0248,0.0227,1079.67 +19,57,0.99,0.0,4.4,1.83,0.0,0.0,0.0,-0.3756,-0.4647,-0.2137,0.0,0.0,0.0,-0.0079,-0.0229,0.0217,1138.23 +20,57,1.07,0.0,3.37,1.97,0.0,0.0,0.0,-0.3785,-0.4746,-0.2077,0.0,-0.0,-0.0,-0.0067,-0.0211,0.0172,1198.82 +21,58,1.0,0.0,3.41,2.2,0.0,0.0,0.0,-0.3837,-0.4746,-0.2123,0.0,0.0,0.0,-0.007,-0.0235,0.0175,1258.84 +22,59,0.87,0.0,3.41,1.29,0.0,0.0,0.0,-0.3944,-0.4836,-0.2265,0.0,0.0,0.0,-0.0073,-0.0217,0.0196,1319.07 +23,60,0.93,0.0,3.41,2.06,0.0,0.0,0.0,-0.3993,-0.492,-0.2148,0.0,0.0,0.0,-0.0061,-0.02,0.0193,1379.0 +24,60,1.02,0.0,3.41,1.99,0.0,0.0,0.0,-0.4039,-0.4997,-0.2141,0.0,0.0,0.0,-0.0046,-0.0184,0.0192,1439.12 +25,60,1.09,0.0,4.4,1.92,0.0,0.0,0.0,-0.4073,-0.5069,-0.2137,0.0,0.0,0.0,-0.0034,-0.017,0.0264,1498.98 +26,60,1.05,0.0,4.4,1.12,0.0,0.0,0.0,-0.4105,-0.5134,-0.2241,0.0,0.0,0.0,-0.0033,-0.0221,0.0264,1558.5 +27,59,1.05,0.0,4.35,1.12,0.0,0.0,0.0,-0.4125,-0.5195,-0.2233,0.0,0.0,0.0,-0.0028,-0.0204,0.0259,1618.6 +28,60,1.08,0.0,4.3,1.08,0.0,0.0,0.0,-0.4155,-0.5251,-0.2326,0.0,-0.0,-0.0,-0.0022,-0.0188,0.0254,1678.7 +29,60,0.98,0.0,4.35,1.08,0.0,0.0,0.0,-0.4182,-0.5302,-0.2115,0.0,0.0,0.0,-0.0027,-0.0173,0.0342,1738.19 +30,60,0.91,0.0,4.35,1.08,0.0,0.0,0.0,-0.4211,-0.5349,-0.2072,0.0,-0.0,-0.0,-0.003,-0.0187,0.0341,1798.13 +31,60,0.89,0.0,4.4,1.08,0.0,0.0,0.0,-0.4238,-0.5393,-0.203,0.0,0.0,0.0,-0.0027,-0.0172,0.0346,1858.89 +32,60,0.89,0.0,4.4,1.08,0.0,0.0,0.0,-0.4261,-0.5434,-0.1987,0.0,-0.0,-0.0,-0.0023,-0.0159,0.0345,1918.9 +33,60,0.95,0.0,3.33,1.09,0.0,0.0,0.0,-0.4276,-0.5471,-0.2048,0.0,-0.0,-0.0,-0.0015,-0.0147,0.0238,1978.34 +34,60,0.89,0.0,2.27,1.09,0.0,0.0,0.0,-0.4292,-0.5505,-0.2104,0.0,-0.0,-0.0,-0.0017,-0.016,0.0181,2038.58 +35,60,0.9,0.0,3.33,1.09,0.0,0.0,0.0,-0.4305,-0.5537,-0.2169,0.0,0.0,0.0,-0.0013,-0.0154,0.0184,2099.74 +36,60,0.86,0.0,3.3,1.09,0.0,0.0,0.0,-0.4319,-0.5566,-0.204,0.0,-0.0,-0.0,-0.0014,-0.0142,0.0183,2158.6 +37,60,0.8,0.0,3.33,1.09,0.0,0.0,0.0,-0.4335,-0.5593,-0.1911,0.0,0.0,0.0,-0.0016,-0.0148,0.0209,2218.45 +38,60,0.73,0.0,3.37,1.09,0.0,0.0,0.0,-0.4354,-0.5617,-0.2,0.0,-0.0,-0.0,-0.002,-0.0137,0.0212,2279.14 +39,60,0.78,0.0,3.37,1.0,0.0,0.0,0.0,-0.4366,-0.564,-0.2081,0.0,-0.0,-0.0,-0.0011,-0.0172,0.0261,2338.63 +40,60,0.82,0.0,3.41,0.93,0.0,0.0,0.0,-0.437,-0.5661,-0.2048,0.0,0.0,0.0,-0.0004,-0.0159,0.0268,2398.86 +41,60,0.97,0.0,3.45,0.85,0.0,0.0,0.0,-0.4357,-0.5681,-0.183,0.0,0.0,0.0,0.0013,-0.0146,0.0278,2458.07 +42,60,1.06,0.0,3.33,0.79,0.0,0.0,0.0,-0.4332,-0.5699,-0.1723,0.0,0.0,0.0,0.0024,-0.0135,0.0277,2518.66 +43,60,0.97,0.0,3.37,0.73,0.0,0.0,0.0,-0.4314,-0.5715,-0.1612,0.0,0.0,0.0,0.0018,-0.0124,0.0277,2578.56 +44,60,0.99,0.0,3.33,0.67,0.0,0.0,0.0,-0.4293,-0.573,-0.162,0.0,0.0,0.0,0.0021,-0.0115,0.0276,2639.01 +45,60,0.99,0.0,3.33,0.67,0.0,0.0,0.0,-0.4269,-0.5744,-0.1627,0.0,0.0,0.0,0.0024,-0.0122,0.0276,2698.57 +46,60,1.03,0.0,3.49,0.67,0.0,0.0,0.0,-0.424,-0.5757,-0.1633,0.0,-0.0,-0.0,0.0029,-0.0112,0.0276,2758.92 +47,60,1.04,0.0,3.49,0.67,0.0,0.0,0.0,-0.4207,-0.5769,-0.1748,0.0,-0.0,-0.0,0.0033,-0.0115,0.0292,2818.34 +48,60,1.21,0.0,4.49,0.67,0.0,0.0,0.0,-0.4156,-0.578,-0.1742,0.0,-0.0,-0.0,0.0051,-0.0104,0.0335,2878.64 +49,60,1.22,0.0,4.55,0.67,0.0,0.0,0.0,-0.4103,-0.579,-0.1736,0.0,-0.0,-0.0,0.0053,-0.013,0.034,2938.21 +50,60,1.23,0.0,4.4,0.67,0.0,0.0,0.0,-0.4046,-0.5728,-0.1728,0.0,-0.0,-0.0,0.0056,-0.0119,0.0324,2998.86 +51,60,1.12,0.0,4.65,0.67,0.0,0.0,0.0,-0.3999,-0.5621,-0.1724,0.0,0.0,0.0,0.0047,-0.011,0.0335,3058.15 +52,60,1.02,0.0,4.4,0.68,0.0,0.0,0.0,-0.3961,-0.5591,-0.172,0.0,-0.0,-0.0,0.0038,-0.0102,0.0323,3119.03 +53,60,1.05,0.0,4.44,0.68,0.0,0.0,0.0,-0.3918,-0.5616,-0.1679,0.0,0.0,0.0,0.0043,-0.0129,0.0328,3178.51 +54,60,1.06,0.0,4.49,0.68,0.01,0.0,0.63,-0.3871,-0.5639,-0.1347,0.0,-0.0,-0.0,0.0047,-0.0119,0.0332,3238.44 +55,60,1.09,0.0,3.37,0.68,0.0,0.0,0.0,-0.3821,-0.566,-0.1196,0.0,-0.0,-0.0,0.005,-0.0109,0.0297,3298.54 +56,60,1.13,0.0,3.49,0.68,0.0,0.0,0.0,-0.3764,-0.5679,-0.1094,0.0,-0.0,-0.0,0.0056,-0.0101,0.0293,3358.86 +57,60,1.18,0.0,4.17,0.68,0.0,0.0,0.23,-0.3702,-0.5697,-0.0993,0.0,0.0,0.0,0.0062,-0.0068,0.0333,3418.6 +58,60,1.01,0.0,4.17,0.69,0.0,0.0,0.08,-0.3655,-0.5714,-0.1101,0.0,-0.0,-0.0,0.0047,-0.0136,0.0333,3478.41 +59,60,1.05,0.0,4.12,0.69,0.02,0.0,0.67,-0.3603,-0.5729,-0.0949,0.0,-0.0,-0.0,0.0052,-0.0125,0.0321,3539.09 +60,60,1.07,0.0,4.17,0.69,0.04,0.0,1.26,-0.3549,-0.5743,-0.0901,0.0,0.0,0.0,0.0054,-0.0116,0.0291,3597.56 +61,60,1.43,0.0,6.59,0.7,0.08,0.0,3.02,-0.346,-0.5756,-0.072,0.0,0.0,0.0,0.0089,-0.0107,0.0608,3658.82 +62,60,3.72,0.0,10.31,0.71,0.59,0.0,9.54,-0.3146,-0.5467,-0.0165,0.0,-0.0,-0.0,0.0314,-0.0033,0.0987,3718.37 +63,60,5.57,1.11,10.89,0.71,1.56,0.0,11.02,-0.2695,-0.5168,-0.0014,0.0,-0.0,-0.0,0.0451,0.0031,0.0977,3778.18 +64,60,7.49,2.3,13.54,0.72,3.52,0.0,15.22,-0.2139,-0.4464,0.0338,0.0,0.0,0.0,0.0555,0.0033,0.1193,3838.41 +65,60,9.29,2.25,17.65,0.73,6.3,0.0,19.62,-0.1576,-0.4101,0.0404,0.0,0.0,0.0,0.0563,-0.0018,0.1254,3898.79 +66,60,11.22,5.43,19.81,0.74,9.41,0.0,23.09,-0.1057,-0.3438,0.0619,0.0,-0.0,-0.0,0.0519,0.0094,0.1002,3958.99 +67,60,12.93,6.32,22.02,0.75,12.45,0.0,26.12,-0.0628,-0.2876,0.0755,0.0,-0.0,-0.0,0.0429,-0.0023,0.1045,4018.35 +68,60,14.35,7.37,23.64,0.26,15.08,4.48,29.63,-0.0304,-0.2023,0.0832,0.0,-0.0,-0.0,0.0324,-0.0121,0.0982,4078.39 +69,60,16.09,9.38,23.85,0.26,18.05,8.3,30.82,-0.0006,-0.1384,0.0925,0.0,-0.0,-0.0,0.0298,-0.0032,0.0756,4138.72 +70,60,17.82,9.47,25.23,0.26,21.06,9.4,34.63,0.0246,-0.0901,0.1099,0.0,0.0,0.0,0.0252,-0.0171,0.0616,4198.55 +71,60,19.39,10.42,26.85,0.26,23.86,10.59,37.94,0.0439,-0.0565,0.1183,0.0,-0.0,-0.0,0.0193,-0.0197,0.0758,4257.91 +72,60,19.2,11.58,26.17,0.26,24.05,11.98,35.92,0.0381,-0.0535,0.1051,0.0,-0.0,-0.0,-0.0058,-0.0826,0.0422,4318.53 +73,60,19.61,9.78,29.63,0.26,24.6,9.98,41.92,0.0363,-0.0428,0.1332,0.0,-0.0,-0.0,-0.0018,-0.0718,0.0502,4378.57 +74,60,19.31,9.78,27.36,0.26,24.15,9.46,39.86,0.0265,-0.0574,0.1162,0.0,0.0,0.0,-0.0098,-0.0774,0.042,4438.64 +75,60,19.49,11.46,28.04,0.26,24.2,12.19,39.97,0.0225,-0.0579,0.1028,0.0,-0.0,-0.0,-0.004,-0.0786,0.0448,4498.98 +76,60,19.49,11.34,29.36,0.26,24.14,11.81,41.9,0.0183,-0.0589,0.122,0.0,0.0,0.0,-0.0042,-0.0664,0.0619,4558.57 +77,60,19.94,11.58,29.52,0.26,24.78,12.03,40.24,0.0205,-0.0787,0.1236,0.0,-0.0,-0.0,0.0023,-0.0442,0.0565,4619.24 +78,60,20.27,11.11,27.93,0.26,25.32,10.66,39.85,0.0217,-0.0856,0.1349,0.0,0.0,0.0,0.0011,-0.045,0.0534,4678.43 +79,60,20.19,13.0,27.78,0.26,25.22,13.02,39.15,0.0172,-0.0832,0.0947,0.0,0.0,0.0,-0.0045,-0.0457,0.0328,4738.82 +80,60,20.26,11.58,27.93,0.26,25.23,12.23,39.03,0.0144,-0.0736,0.1279,0.0,-0.0,-0.0,-0.0028,-0.0447,0.0739,4797.99 +81,60,19.77,9.57,29.2,0.26,24.48,9.33,41.3,0.0058,-0.1205,0.1224,0.0,0.0,0.0,-0.0086,-0.0603,0.0389,4858.51 +82,60,18.14,7.61,26.79,0.26,21.9,5.99,38.33,-0.0167,-0.1324,0.1,0.0,-0.0,-0.0,-0.0225,-0.0687,0.0072,4917.42 +83,60,16.24,4.44,25.23,0.26,18.62,1.84,34.54,-0.0413,-0.1268,0.0656,0.0,-0.0,-0.0,-0.0246,-0.0739,0.0121,4977.88 +84,60,14.91,4.44,23.36,0.26,16.22,2.14,30.31,-0.0544,-0.1099,0.0377,0.0,0.0,0.0,-0.0131,-0.0615,0.0236,5039.08 +85,60,12.88,3.33,23.36,0.26,13.16,0.65,29.21,-0.0708,-0.1702,0.0025,0.0,0.0,0.0,-0.0165,-0.0668,0.0215,5097.98 +86,60,10.98,3.33,20.95,0.26,10.37,1.08,25.26,-0.0823,-0.1583,-0.0149,0.0,-0.0,-0.0,-0.0114,-0.0785,0.0372,5157.45 +87,60,8.67,2.35,16.83,0.27,7.21,0.2,18.3,-0.0949,-0.1742,-0.0292,0.0,0.0,0.0,-0.0126,-0.0513,0.0259,5218.66 +88,60,6.74,1.09,13.4,0.28,4.83,0.0,12.89,-0.0997,-0.1591,-0.035,0.0,0.0,0.0,-0.0047,-0.0628,0.0281,5278.45 +89,60,4.8,0.0,10.64,0.29,2.68,0.0,10.56,-0.1028,-0.1572,-0.0542,0.0,0.0,0.0,-0.0031,-0.0489,0.0281,5338.53 +90,60,2.68,0.0,8.79,0.3,0.92,0.0,8.04,-0.1076,-0.1917,-0.0436,0.0,0.0,0.0,-0.0048,-0.0724,0.0255,5398.09 +91,60,0.97,0.0,4.44,0.27,0.09,0.0,2.42,-0.1125,-0.1855,-0.0349,0.0,-0.0,-0.0,-0.0049,-0.0507,0.0197,5458.28 +92,60,0.91,0.0,4.35,0.25,0.06,0.0,2.43,-0.1096,-0.1808,-0.0389,0.0,0.0,0.0,0.0029,-0.0107,0.0178,5518.76 +93,60,0.87,0.0,3.3,0.25,0.07,0.0,1.49,-0.1067,-0.1887,-0.0335,0.0,0.0,0.0,0.0029,-0.0098,0.0202,5577.33 +94,60,0.82,0.0,3.3,0.26,0.09,0.0,1.78,-0.1042,-0.1967,-0.0172,0.0,-0.0,-0.0,0.0025,-0.0091,0.0196,5638.46 +95,60,0.78,0.0,3.33,0.26,0.14,0.0,2.09,-0.1022,-0.204,-0.0243,0.0,0.0,0.0,0.0021,-0.0099,0.025,5698.68 +96,60,0.74,0.0,3.3,0.26,0.15,0.0,2.25,-0.1008,-0.2107,-0.0194,0.0,-0.0,-0.0,0.0014,-0.008,0.0178,5758.64 +97,60,0.74,0.0,4.21,0.26,0.24,0.0,3.54,-0.0994,-0.217,-0.0155,0.0,-0.0,-0.0,0.0014,-0.0104,0.0235,5817.95 +98,60,0.82,0.0,3.53,0.26,0.31,0.0,3.08,-0.098,-0.2227,-0.0081,0.0,0.0,0.0,0.0014,-0.0096,0.0189,5877.56 +99,60,0.84,0.0,3.53,0.27,0.33,0.0,3.19,-0.0968,-0.228,-0.0057,0.0,0.0,0.0,0.0011,-0.0088,0.0293,5938.79 +100,60,0.83,0.0,3.23,0.27,0.34,0.0,2.52,-0.0958,-0.2329,0.0037,0.0,-0.0,-0.0,0.001,-0.0098,0.0171,5998.8 +101,60,0.82,0.0,3.23,0.28,0.29,0.0,2.62,-0.0949,-0.2374,0.0029,0.0,-0.0,-0.0,0.0009,-0.0103,0.0178,6057.46 +102,60,0.84,0.0,3.26,0.28,0.28,0.0,2.74,-0.0932,-0.2309,0.0026,0.0,-0.0,-0.0,0.0017,-0.0085,0.018,6118.16 +103,60,0.86,0.0,3.23,0.29,0.3,0.0,2.76,-0.0912,-0.2244,0.0026,0.0,-0.0,-0.0,0.0021,-0.0064,0.018,6178.46 +104,60,0.9,0.0,3.61,0.29,0.31,0.0,3.51,-0.0889,-0.2181,0.0042,0.0,0.0,0.0,0.0023,-0.0125,0.0165,6238.35 +105,60,0.9,0.0,3.61,0.3,0.31,0.0,3.54,-0.0865,-0.218,0.0038,0.0,-0.0,-0.0,0.0024,-0.0115,0.0153,6298.11 +106,60,1.01,0.0,3.61,0.3,0.39,0.0,3.52,-0.083,-0.2205,0.0062,0.0,-0.0,-0.0,0.0035,-0.0092,0.0218,6357.76 +107,60,0.95,0.0,3.45,0.31,0.39,0.0,2.98,-0.0809,-0.2228,0.0056,0.0,-0.0,-0.0,0.0022,-0.014,0.0176,6419.04 +108,60,0.8,0.0,3.41,0.31,0.31,0.0,2.99,-0.0801,-0.2249,0.0044,0.0,-0.0,-0.0,0.0008,-0.0206,0.0141,6478.11 +109,60,0.87,0.0,4.21,0.31,0.36,0.0,3.64,-0.0777,-0.2269,0.0139,0.0,-0.0,-0.0,0.0024,-0.0217,0.015,6538.7 +110,60,1.0,0.0,3.53,0.46,0.37,0.0,3.19,-0.0744,-0.2287,0.01,0.0,0.0,0.0,0.0033,-0.0133,0.0186,6597.53 +111,60,1.0,0.0,3.53,0.47,0.38,0.0,3.14,-0.0712,-0.2303,0.008,0.0,-0.0,-0.0,0.0032,-0.0051,0.0219,6658.8 +112,60,0.98,0.0,3.49,0.47,0.39,0.0,3.06,-0.0683,-0.2319,0.0059,0.0,0.0,0.0,0.0029,-0.0085,0.0221,6718.82 +113,60,1.03,0.0,3.37,0.47,0.47,0.0,3.2,-0.0649,-0.2333,0.0017,0.0,0.0,0.0,0.0034,-0.0135,0.0308,6778.3 +114,60,1.03,0.0,3.33,0.26,0.5,0.0,3.29,-0.0623,-0.2346,0.0016,0.0,0.0,0.0,0.0026,-0.0107,0.0278,6837.92 +115,60,1.1,0.0,3.26,0.26,0.53,0.0,2.82,-0.0592,-0.2261,0.0089,0.0,-0.0,-0.0,0.0031,-0.0114,0.0189,6898.17 +116,60,1.1,0.0,3.37,0.27,0.54,0.0,3.09,-0.0564,-0.2271,0.0073,0.0,-0.0,-0.0,0.0028,-0.0116,0.0306,6957.78 +117,60,1.14,0.0,4.35,0.27,0.61,0.0,4.67,-0.0532,-0.2281,0.0267,0.0,-0.0,-0.0,0.0032,-0.0108,0.0211,7018.28 +118,60,1.18,0.0,4.4,0.19,0.7,0.0,4.74,-0.0503,-0.2289,0.0228,0.0,0.0,0.0,0.0029,-0.0121,0.0216,7076.59 +119,60,1.17,0.0,4.35,0.4,0.7,0.0,4.58,-0.0483,-0.2297,0.0177,0.0,0.0,0.0,0.0019,-0.0108,0.0213,7137.19 +120,60,1.02,0.0,3.37,0.17,0.54,0.0,3.32,-0.0478,-0.2304,0.0103,0.0,0.0,0.0,0.0005,-0.0139,0.0212,7198.01 +121,60,1.0,0.0,3.45,0.15,0.57,0.0,3.37,-0.0459,-0.2311,0.009,0.0,0.0,0.0,0.0019,-0.0096,0.0209,7258.36 +122,60,1.04,0.0,3.41,0.14,0.61,0.0,3.23,-0.0438,-0.2317,0.0064,0.0,0.0,0.0,0.002,-0.0112,0.0207,7317.75 +123,60,1.04,0.0,3.49,0.14,0.62,0.0,3.31,-0.0421,-0.2323,0.0082,0.0,0.0,0.0,0.0017,-0.0213,0.0207,7378.22 +124,60,0.98,0.0,3.45,0.14,0.57,0.0,3.25,-0.041,-0.2328,0.0068,0.0,-0.0,-0.0,0.0012,-0.0114,0.0204,7437.79 +125,60,0.96,0.0,3.3,0.15,0.51,0.0,3.1,-0.0395,-0.2333,0.0029,0.0,-0.0,-0.0,0.0015,-0.0199,0.0222,7497.88 +126,60,0.95,0.0,3.3,0.15,0.56,0.0,3.35,-0.0375,-0.2337,0.0059,0.0,-0.0,-0.0,0.002,-0.0204,0.0224,7558.1 +127,60,0.97,0.0,3.33,0.15,0.6,0.0,3.46,-0.0358,-0.2342,0.0132,0.0,-0.0,-0.0,0.0017,-0.021,0.0218,7618.28 +128,60,1.02,0.0,3.33,0.15,0.65,0.0,3.39,-0.0339,-0.2345,0.0116,0.0,-0.0,-0.0,0.0019,-0.0116,0.0314,7677.76 +129,60,1.04,0.0,3.45,0.15,0.71,0.0,3.32,-0.0323,-0.2349,0.0083,0.0,0.0,0.0,0.0016,-0.0133,0.0204,7737.7 +130,60,1.13,0.0,3.41,0.15,0.8,0.0,3.34,-0.0302,-0.2352,0.0092,0.0,-0.0,-0.0,0.0021,-0.009,0.0225,7798.35 +131,60,1.13,0.0,4.26,0.16,0.83,0.0,4.15,-0.0289,-0.2355,0.0156,0.0,-0.0,-0.0,0.0012,-0.013,0.0149,7857.91 +132,60,1.12,0.0,4.3,0.16,0.83,0.0,4.29,-0.0281,-0.2358,0.0132,0.0,-0.0,-0.0,0.0008,-0.0121,0.0152,7918.07 +133,60,1.1,0.0,4.44,0.16,0.79,0.0,4.48,-0.0275,-0.236,0.0098,0.0,0.0,0.0,0.0006,-0.0125,0.0154,7978.58 +134,60,1.2,0.0,4.44,0.16,0.87,0.0,4.48,-0.0254,-0.2363,0.0081,0.0,0.0,0.0,0.0021,-0.0103,0.0206,8038.02 +135,60,1.13,0.0,4.4,0.14,0.82,0.0,4.42,-0.0247,-0.2365,0.0088,0.0,0.0,0.0,0.0006,-0.0116,0.0202,8097.86 +136,60,1.09,0.0,4.4,0.17,0.82,0.0,4.41,-0.024,-0.2367,0.0085,0.0,-0.0,-0.0,0.0008,-0.0113,0.0165,8158.44 +137,60,1.05,0.0,4.4,0.17,0.77,0.0,4.4,-0.0236,-0.2257,0.0073,0.0,-0.0,-0.0,0.0004,-0.0112,0.0127,8218.03 +138,60,1.0,0.0,3.3,0.18,0.76,0.0,3.36,-0.0233,-0.2145,0.0173,0.0,-0.0,-0.0,0.0003,-0.0222,0.0226,8278.51 +139,60,0.99,0.0,3.41,0.18,0.76,0.0,3.53,-0.0228,-0.2033,0.017,0.0,-0.0,-0.0,0.0005,-0.0123,0.0151,8337.44 +140,60,0.94,0.0,3.26,0.44,0.75,0.0,3.35,-0.0228,-0.1922,0.0123,0.0,-0.0,-0.0,-0.0,-0.0204,0.014,8398.17 +141,60,5.39,1.1,12.24,0.45,5.66,0.11,14.52,0.022,-0.1491,0.1109,0.0,0.0,0.0,0.0448,0.0107,0.1126,8458.68 +142,60,14.29,7.37,28.18,0.2,17.26,7.82,37.94,0.1149,-0.0689,0.2876,0.0,0.0,0.0,0.093,0.0146,0.1767,8518.54 +143,60,22.15,13.59,36.67,0.2,29.94,16.91,58.74,0.2014,0.0359,0.413,0.0,-0.0,-0.0,0.0865,0.0228,0.1732,8576.34 +144,60,27.54,18.27,42.74,0.2,40.99,24.25,77.79,0.26,0.1022,0.5029,0.0,-0.0,-0.0,0.0585,-0.0181,0.1178,8610.18 +145,60,32.25,24.04,46.15,0.2,51.67,33.81,92.82,0.3056,0.1849,0.5443,0.0,0.0,0.0,0.0457,0.0005,0.0989,8636.0 +146,60,37.0,28.0,50.0,0.2,63.12,42.45,100.0,0.3512,0.2256,0.5788,0.0,0.0,0.0,0.0456,-0.0088,0.1232,8655.91 +147,60,41.62,32.65,54.46,0.2,75.52,51.59,100.0,0.4001,0.2642,0.6665,0.0,-0.0,-0.0,0.0489,0.0051,0.0988,8666.85 +148,60,46.28,35.87,59.78,0.2,87.93,59.94,100.0,0.4583,0.2841,0.8607,0.0,-0.0,-0.0,0.0582,0.0062,0.1942,8675.69 +149,60,51.38,41.38,67.07,0.2,96.9,72.94,100.0,0.5448,0.3498,1.2007,0.0,0.0,0.0,0.0865,0.0376,0.34,8678.79 +150,60,57.34,46.99,75.34,0.2,99.67,89.62,100.0,0.7029,0.4305,1.7062,0.0,0.0,0.0,0.158,0.0296,0.5054,8680.34 +151,60,61.07,49.3,78.57,0.2,100.0,100.0,100.0,0.9218,0.4396,2.2761,0.0,0.0,0.0,0.219,-0.0023,0.57,8680.44 +152,60,61.14,47.37,78.0,0.2,100.0,100.0,100.0,1.1405,0.3844,2.7453,0.0,-0.0,-0.0,0.2186,-0.0553,0.5579,8680.48 +153,60,61.3,36.0,78.57,0.2,99.72,83.96,100.0,1.3624,0.312,3.3153,0.0,0.0,0.0,0.2219,-0.2807,0.57,8680.56 +154,60,63.81,21.43,100.0,0.2,98.88,42.47,100.0,1.6366,0.1557,4.3138,0.0,0.0,0.0,0.2742,-0.4461,0.9986,8680.69 +155,60,66.07,33.33,100.0,0.2,98.99,56.72,100.0,1.9608,0.1992,5.3124,0.0,-0.0,-0.0,0.3242,-0.3382,0.9986,8681.13 +156,60,64.09,0.0,100.0,0.2,97.27,10.51,100.0,2.2431,0.1488,4.8067,0.0,-0.0,-0.0,0.2823,-1.0013,0.9979,8681.67 +157,60,61.82,0.0,100.0,0.2,91.71,0.0,100.0,2.486,-0.0661,5.3098,0.0,0.0,0.0,0.2428,-1.0067,0.9988,8683.74 +158,60,45.91,0.0,100.0,0.2,76.65,0.53,100.0,2.4336,-0.0429,6.3085,0.0,0.0,0.0,-0.0523,-1.0119,0.999,8688.58 +159,60,53.41,0.0,100.0,0.2,84.71,4.78,100.0,2.5743,-0.0838,7.3072,0.0,0.0,0.0,0.1407,-1.0126,0.9995,8697.1 +160,60,64.46,0.0,100.0,0.2,94.49,30.16,100.0,2.9119,0.2384,8.3059,0.0,0.0,0.0,0.3375,-1.0037,0.9993,8701.62 +161,60,64.03,0.0,100.0,0.2,95.62,29.11,100.0,3.2242,0.1231,9.3045,0.0,0.0,0.0,0.3123,-1.0027,0.9992,8704.55 +162,60,63.33,0.0,100.0,0.2,94.44,23.32,100.0,3.522,0.0274,10.0,0.0,0.0,0.0,0.3029,-0.5903,0.9992,8706.93 +163,60,63.08,0.0,100.0,0.2,93.07,22.35,100.0,3.8133,-0.138,10.0,0.0,0.0,0.0,0.3079,-0.5939,0.9992,8710.12 +164,60,62.66,0.0,100.0,0.2,91.59,17.87,100.0,4.1094,-0.2217,10.0,0.0,0.0,0.0,0.3127,-0.5037,0.9992,8713.74 +165,60,62.12,0.0,100.0,0.2,90.36,14.29,100.0,4.4083,-0.2543,10.0,0.0,0.0,0.0,0.3155,-0.6234,0.9992,8717.98 +166,60,59.35,0.0,100.0,0.2,89.39,11.42,100.0,4.6348,-0.2515,10.0,0.0,0.0,0.0,0.2719,-1.0024,0.9992,8722.49 +167,60,54.62,0.0,100.0,0.18,87.3,5.54,100.0,4.7705,-0.2857,10.0,0.0,-0.0,-0.0,0.1883,-1.0036,0.9992,8727.04 +168,60,45.33,0.0,100.0,0.17,81.61,0.0,100.0,4.7325,-0.2494,10.0,0.0,0.0,0.0,0.0239,-1.0066,0.9992,8734.01 +169,60,20.07,0.0,100.0,0.15,71.17,0.0,100.0,4.2692,-0.5738,10.0,0.0,0.0,0.0,-0.4221,-1.011,0.9989,8744.8 +170,60,2.7,0.0,75.0,0.14,62.0,0.0,100.0,3.6038,-0.5746,8.999,0.0,0.0,0.0,-0.6654,-1.0116,0.4924,8760.44 +171,60,0.35,0.0,12.5,0.13,53.15,0.0,100.0,2.9867,-0.5753,7.998,0.0,0.0,0.0,-0.6171,-1.0107,-0.0007,8782.72 +172,60,0.6,0.0,20.0,0.12,46.92,0.0,100.0,2.4625,-0.576,6.9971,0.0,0.0,0.0,-0.5242,-1.0099,-0.0007,8811.43 +173,60,1.36,0.0,20.0,0.11,41.94,0.0,100.0,2.0138,-0.5766,5.9963,0.0,0.0,0.0,-0.4487,-1.0059,-0.0006,8843.11 +174,60,1.23,0.0,16.67,0.1,34.84,0.0,99.84,1.6135,-0.5772,4.9956,0.0,0.0,0.0,-0.4003,-1.0021,-0.0006,8879.58 +175,60,1.39,0.0,13.33,0.09,28.3,0.0,79.86,1.2846,-0.5778,3.9965,0.0,0.0,0.0,-0.3289,-0.9991,-0.0005,8924.51 +176,60,1.32,0.0,11.11,0.09,22.75,0.0,72.83,1.0188,-0.5783,3.1973,0.0,0.0,0.0,-0.2658,-0.7992,-0.0005,8976.6 +177,60,1.35,0.0,8.11,0.08,18.34,0.0,52.34,0.8075,-0.5787,2.5579,0.0,0.0,0.0,-0.2113,-0.6394,0.0217,9034.88 +178,60,1.45,0.0,6.67,0.07,15.09,0.0,48.43,0.641,-0.5792,2.1093,0.0,0.0,0.0,-0.1665,-0.511,0.0179,9095.03 +179,60,1.33,0.0,5.45,0.08,12.13,0.0,37.86,0.5047,-0.5796,1.6694,0.0,0.0,0.0,-0.1363,-0.4399,0.0155,9155.93 +180,60,1.25,0.0,5.0,0.08,9.84,0.0,29.68,0.3967,-0.5799,1.3233,0.0,0.0,0.0,-0.108,-0.3464,0.0132,9215.49 +181,60,1.23,0.0,5.36,0.08,8.06,0.0,23.76,0.311,-0.5802,1.0508,0.0,0.0,0.0,-0.0857,-0.2725,0.012,9274.44 +182,60,1.24,0.0,4.62,0.09,6.64,0.0,19.05,0.2428,-0.5806,0.8378,0.0,0.0,0.0,-0.0681,-0.2152,0.0117,9334.78 +183,60,1.11,0.0,4.11,0.09,5.34,0.0,15.37,0.1872,-0.5808,0.6703,0.0,0.0,0.0,-0.0556,-0.1709,0.0115,9395.18 +184,60,1.12,0.0,3.7,0.09,4.47,0.0,13.73,0.1447,-0.5811,0.5439,0.0,0.0,0.0,-0.0426,-0.1356,0.0111,9455.42 +185,60,0.98,0.0,3.45,0.09,3.6,0.0,12.68,0.1092,-0.5813,0.4444,0.0,0.0,0.0,-0.0354,-0.1077,0.0107,9515.79 +186,60,1.02,0.0,4.35,0.1,3.09,0.0,10.65,0.0828,-0.5816,0.3534,0.0,0.0,0.0,-0.0264,-0.091,0.0106,9575.67 +187,60,0.92,0.0,4.4,0.1,2.55,0.0,9.2,0.0605,-0.5818,0.2825,0.0,-0.0,-0.0,-0.0223,-0.071,0.0204,9634.12 +188,60,0.83,0.0,4.49,0.1,2.07,0.0,6.62,0.0426,-0.5819,0.2197,0.0,0.0,0.0,-0.0179,-0.0686,0.0217,9695.72 +189,60,0.95,0.0,3.37,0.1,1.89,0.0,7.09,0.0306,-0.5821,0.1874,0.0,-0.0,-0.0,-0.012,-0.0407,0.0212,9755.98 +190,60,1.02,0.0,3.37,0.11,1.74,0.0,6.37,0.0212,-0.5823,0.1613,0.0,0.0,0.0,-0.0094,-0.0373,0.0321,9814.6 +191,60,1.06,0.0,3.37,0.11,1.59,0.0,5.76,0.0137,-0.5711,0.1291,0.0,0.0,0.0,-0.0076,-0.0342,0.0328,9874.88 +192,60,1.09,0.0,3.37,0.11,1.51,0.0,5.62,0.0079,-0.5602,0.1139,0.0,-0.0,-0.0,-0.0057,-0.0296,0.0175,9934.98 +193,60,1.09,0.0,3.41,0.12,1.4,0.0,5.19,0.0031,-0.5494,0.0913,0.0,0.0,0.0,-0.0048,-0.0226,0.0215,9995.37 +194,60,1.15,0.0,3.45,0.12,1.38,0.0,4.8,-0.0003,-0.5388,0.0729,0.0,0.0,0.0,-0.0033,-0.0226,0.0204,10055.14 +195,60,1.26,0.0,4.49,0.12,1.42,0.0,5.05,-0.0023,-0.5279,0.0577,0.0,0.0,0.0,-0.002,-0.0189,0.021,10116.06 +196,60,1.17,0.0,4.55,0.13,1.27,0.0,5.06,-0.0056,-0.5172,0.0464,0.0,-0.0,-0.0,-0.0033,-0.0167,0.0212,10175.12 +197,60,1.18,0.0,4.49,0.13,1.24,0.0,4.9,-0.0072,-0.5067,0.0387,0.0,0.0,0.0,-0.0016,-0.0131,0.0209,10234.31 +198,60,1.23,0.0,4.44,0.13,1.26,0.0,5.0,-0.008,-0.4962,0.0339,0.0,0.0,0.0,-0.0008,-0.0153,0.0208,10295.37 +199,60,1.07,0.0,3.41,0.13,1.08,0.0,3.71,-0.0106,-0.4857,0.0259,0.0,-0.0,-0.0,-0.0027,-0.0253,0.0104,10354.93 +200,60,0.98,0.0,4.35,0.13,0.98,0.0,4.97,-0.0124,-0.4753,0.038,0.0,0.0,0.0,-0.0018,-0.0234,0.0179,10415.21 +201,60,1.03,0.0,5.38,0.12,1.04,0.0,6.23,-0.0126,-0.4651,0.0422,0.0,-0.0,-0.0,-0.0002,-0.0132,0.0114,10475.06 +202,60,1.02,0.0,5.38,0.11,1.01,0.0,6.13,-0.0136,-0.4546,0.0343,0.0,0.0,0.0,-0.0009,-0.0132,0.0105,10534.07 +203,60,1.11,0.0,4.55,0.1,1.09,0.0,4.86,-0.0132,-0.4441,0.0224,0.0,0.0,0.0,0.0003,-0.0189,0.0214,10593.68 +204,60,1.09,0.0,4.3,0.1,1.04,0.0,4.8,-0.0139,-0.4336,0.0228,0.0,0.0,0.0,-0.0007,-0.0147,0.0112,10654.74 +205,60,0.99,0.0,4.3,0.09,0.91,0.0,4.82,-0.0152,-0.4233,0.0191,0.0,0.0,0.0,-0.0013,-0.0267,0.0108,10715.43 +206,2,0.62,0.0,1.23,0.08,0.64,0.0,1.28,-0.0049,-0.0131,0.0034,0.0,0.0,0.0,-0.0003,-0.0008,0.0002,10750.55 +207,60,0.99,0.0,4.88,0.01,0.92,0.0,5.46,-0.0152,-0.4113,0.0213,0.0,0.0,0.0,0.0,-0.0228,0.0124,10832.07 +208,60,0.9,0.0,4.88,0.01,0.84,0.0,5.4,-0.0162,-0.3995,0.0172,0.0,0.0,0.0,-0.0009,-0.0155,0.0125,10892.32 +209,59,1.04,0.0,5.0,0.04,0.98,0.0,5.47,-0.0151,-0.3878,0.0215,0.0,0.0,0.0,0.0011,-0.0141,0.0133,10932.07 +210,60,1.01,0.0,4.23,0.03,0.95,0.0,4.58,-0.0153,-0.3747,0.0222,0.0,0.0,0.0,-0.0003,-0.0237,0.0132,11011.44 +211,60,0.93,0.0,4.17,0.03,0.9,0.0,4.38,-0.0163,-0.3751,0.0214,0.0,0.0,0.0,-0.0009,-0.0164,0.0146,11072.51 +212,60,0.86,0.0,4.11,0.03,0.84,0.0,4.5,-0.0173,-0.3756,0.018,0.0,0.0,0.0,-0.001,-0.0157,0.0155,11131.5 +213,60,0.72,0.0,4.17,0.03,0.69,0.0,4.5,-0.0192,-0.376,0.0144,0.0,0.0,0.0,-0.0019,-0.0299,0.0141,11191.83 +214,60,0.77,0.0,4.17,0.02,0.75,0.0,4.6,-0.019,-0.3763,0.0188,0.0,0.0,0.0,0.0001,-0.0171,0.0159,11251.9 +215,60,0.89,0.0,4.29,0.02,0.86,0.0,4.74,-0.0183,-0.3767,0.0233,0.0,0.0,0.0,0.0008,-0.0162,0.0154,11311.82 +216,60,0.97,0.0,4.05,0.02,0.93,0.0,4.38,-0.0178,-0.377,0.0271,0.0,0.0,0.0,0.0005,-0.0064,0.0269,11371.67 +217,60,0.9,0.0,3.85,0.02,0.82,0.0,4.03,-0.0187,-0.3773,0.0207,0.0,0.0,0.0,-0.0009,-0.0143,0.0116,11431.76 +218,60,0.94,0.0,3.8,0.02,0.87,0.0,3.94,-0.0181,-0.3776,0.0158,0.0,0.0,0.0,0.0005,-0.0248,0.014,11491.49 +219,60,0.98,0.0,3.66,0.02,0.9,0.0,3.74,-0.0177,-0.3778,0.012,0.0,0.0,0.0,0.0004,-0.0118,0.0143,11550.89 +220,60,1.0,0.0,3.33,0.01,0.91,0.0,3.73,-0.0174,-0.378,0.0234,0.0,0.0,0.0,0.0003,-0.0046,0.0203,11612.55 +221,60,20.11,7.53,23.85,0.03,23.73,8.74,29.37,0.1757,-0.186,0.2331,0.0,0.0,0.0,0.1931,0.075,0.224,11666.91 +222,60,30.61,24.27,33.98,0.03,44.14,31.13,50.8,0.3165,0.0225,0.3762,0.0,0.0,0.0,0.1408,0.1059,0.2084,11685.94 +223,60,37.78,32.69,40.78,0.03,62.77,49.94,70.29,0.419,0.1639,0.4742,0.0,-0.0,-0.0,0.1025,0.0598,0.1415,11699.37 +224,60,44.3,40.59,48.6,0.03,82.24,70.11,93.13,0.5114,0.2981,0.5969,0.0,-0.0,-0.0,0.0923,0.0504,0.1362,11708.64 +225,60,49.82,46.67,53.61,0.03,98.95,90.75,100.0,0.5958,0.4483,0.6982,0.0,-0.0,-0.0,0.0844,0.0335,0.1501,11712.02 +226,60,55.0,52.33,58.43,0.03,100.0,100.0,100.0,0.6992,0.5913,0.8638,0.0,-0.0,-0.0,0.1034,0.0471,0.1656,11712.2 +227,60,61.51,58.44,65.0,0.03,100.0,100.0,100.0,0.9277,0.7779,1.1608,0.0,0.0,0.0,0.2285,0.1683,0.2971,11712.22 +228,60,69.73,66.18,73.85,0.03,100.0,100.0,100.0,1.3207,1.1255,1.6024,0.0,0.0,0.0,0.393,0.323,0.476,11712.24 +229,60,80.07,76.27,85.71,0.03,100.0,100.0,100.0,1.9205,1.6603,2.2491,0.0,0.0,0.0,0.5998,0.5249,0.7133,11712.27 +230,60,94.48,90.0,97.96,0.03,100.0,100.0,100.0,2.8084,2.4645,3.2073,0.0,0.0,0.0,0.8879,0.7994,0.9582,11712.31 +231,60,100.0,100.0,100.0,0.03,100.0,100.0,100.0,3.8068,3.4639,4.2063,0.0,0.0,0.0,0.9984,0.9938,0.9999,11712.36 +232,60,100.0,100.0,100.0,0.03,100.0,100.0,100.0,4.8052,4.4634,5.2054,0.0,0.0,0.0,0.9984,0.9938,0.9999,11712.41 +233,60,100.0,100.0,100.0,0.03,100.0,100.0,100.0,5.8036,5.4628,6.2044,0.0,0.0,0.0,0.9984,0.9938,0.9999,11712.47 +234,60,90.0,0.0,100.0,0.03,99.76,95.88,100.0,6.602,4.8021,7.2035,0.0,0.0,0.0,0.7984,-1.0027,0.9999,11712.54 +235,60,13.33,0.0,100.0,0.03,98.19,76.69,100.0,5.8691,3.8418,7.9422,0.0,0.0,0.0,-0.7328,-1.0057,0.9996,11712.69 +236,60,10.0,0.0,100.0,0.03,96.79,90.4,100.0,5.0678,4.524,6.9413,0.0,-0.0,-0.0,-0.8014,-1.0053,0.9995,11713.35 +237,60,41.67,0.0,100.0,0.02,89.55,72.72,100.0,4.9148,3.6492,7.8728,0.0,0.0,0.0,-0.1529,-1.0031,0.9999,11714.63 +238,60,86.67,0.0,100.0,0.02,98.6,64.71,100.0,5.6501,3.2395,8.8712,0.0,0.0,0.0,0.7353,-1.0029,0.9999,11717.23 +239,60,93.33,0.0,100.0,0.02,98.39,74.37,100.0,6.519,3.7313,9.8697,0.0,0.0,0.0,0.8688,-0.9879,0.9999,11717.54 +240,60,100.0,100.0,100.0,0.02,100.0,100.0,100.0,7.5032,4.7289,10.0,0.0,-0.0,-0.0,0.9987,0.9951,0.9999,11717.99 +241,60,100.0,100.0,100.0,0.02,100.0,100.0,100.0,8.4844,5.7263,10.0,0.0,0.0,0.0,0.9987,0.9951,0.9999,11718.03 +242,60,100.0,100.0,100.0,0.02,100.0,100.0,100.0,9.1603,6.7236,10.0,0.0,0.0,0.0,0.9987,0.9951,0.9999,11718.09 +243,60,100.0,100.0,100.0,0.02,100.0,100.0,100.0,9.7389,7.7209,10.0,0.0,0.0,0.0,0.9987,0.9951,0.9999,11718.14 +244,60,100.0,100.0,100.0,0.02,100.0,100.0,100.0,9.9067,8.7183,10.0,0.0,0.0,0.0,0.9987,0.9951,0.9999,11718.19 +245,60,98.33,0.0,100.0,0.02,100.0,100.0,100.0,9.9693,8.9986,10.0,0.0,0.0,0.0,0.9654,-1.0014,0.9999,11718.24 +246,60,91.67,0.0,100.0,0.02,100.0,100.0,100.0,9.8999,7.9972,10.0,0.0,0.0,0.0,0.832,-1.0023,0.9999,11718.28 +247,60,58.33,0.0,100.0,0.02,100.0,100.0,100.0,9.4828,6.996,10.0,0.0,0.0,0.0,0.1654,-1.0037,0.9999,11718.31 +248,60,15.0,0.0,100.0,0.02,100.0,100.0,100.0,8.6318,5.9949,10.0,0.0,0.0,0.0,-0.7012,-1.0045,0.9997,11718.35 +249,60,6.67,0.0,100.0,0.02,100.0,99.77,100.0,7.6974,4.9939,10.0,0.0,-0.0,-0.0,-0.8677,-1.0041,0.9997,11718.38 +250,60,0.0,0.0,0.0,0.02,99.65,79.81,100.0,6.6965,3.9952,8.9997,0.0,0.0,0.0,-1.001,-1.0038,-0.9987,11718.43 +251,60,0.0,0.0,0.0,0.02,98.0,63.85,100.0,5.699,3.1963,7.9995,0.0,0.0,0.0,-0.9974,-1.0035,-0.7989,11718.98 +252,60,0.0,0.0,0.0,0.02,89.97,51.08,100.0,4.7182,2.5572,6.9992,0.0,0.0,0.0,-0.9808,-1.0032,-0.6391,11720.89 +253,60,0.0,0.0,0.0,0.01,74.96,40.86,100.0,3.8178,2.0458,5.999,0.0,0.0,0.0,-0.9004,-1.0019,-0.5113,11727.99 +254,60,1.17,0.0,50.0,0.01,62.55,32.69,100.0,3.088,1.6367,4.9988,0.0,0.0,0.0,-0.7298,-1.0018,0.1002,11747.06 +255,60,1.75,0.0,50.0,0.01,51.67,26.15,100.0,2.494,1.3095,4.0878,0.0,0.0,0.0,-0.594,-0.9997,-0.0021,11775.18 +256,60,2.58,0.0,50.0,0.01,43.42,26.15,100.0,2.0209,1.1023,4.0857,0.0,0.0,0.0,-0.4731,-0.7998,-0.0021,11811.95 +257,60,2.22,0.0,50.0,0.02,34.82,20.92,100.0,1.6237,0.8694,4.0837,0.0,0.0,0.0,-0.3972,-0.6398,-0.0021,11853.75 +258,60,2.16,0.0,50.0,0.03,28.31,16.73,100.0,1.3101,0.6859,4.0816,0.0,-0.0,-0.0,-0.3136,-0.5119,-0.0021,11903.53 +259,60,1.93,0.0,50.0,0.04,22.84,13.31,100.0,1.0575,0.5413,4.0796,0.0,0.0,0.0,-0.2526,-0.4095,-0.0021,11955.25 +260,60,1.92,0.0,50.0,0.04,18.79,10.61,100.0,0.8588,0.4286,4.0775,0.0,0.0,0.0,-0.1987,-0.3276,-0.0021,12006.88 +261,60,1.9,0.0,50.0,0.04,15.54,8.58,100.0,0.6999,0.3403,4.0755,0.0,0.0,0.0,-0.159,-0.279,-0.0021,12059.73 +262,60,1.93,0.0,50.0,0.05,13.0,6.86,100.0,0.5734,0.2705,4.0734,0.0,0.0,0.0,-0.1265,-0.2097,-0.0021,12115.65 +263,60,2.02,0.0,50.0,0.05,11.07,5.49,100.0,0.473,0.2145,4.0714,0.0,0.0,0.0,-0.1004,-0.1827,-0.0021,12171.08 +264,60,1.16,0.0,4.41,0.05,8.74,4.39,61.2,0.3747,0.171,3.0695,0.0,0.0,0.0,-0.0983,-1.0019,-0.0435,12227.79 +265,60,1.22,0.0,4.94,0.06,7.29,3.51,48.98,0.3002,0.1358,2.4561,0.0,0.0,0.0,-0.0745,-0.6134,-0.0352,12286.94 +266,60,1.05,0.0,3.8,0.06,5.86,1.84,39.18,0.2382,0.0954,1.9651,0.0,-0.0,-0.0,-0.0619,-0.491,-0.0352,12347.43 +267,60,1.04,0.0,3.75,0.06,4.87,1.47,31.34,0.1903,0.0764,1.5722,0.0,0.0,0.0,-0.048,-0.3928,-0.019,12407.41 +268,60,0.99,0.0,4.55,0.07,4.04,1.17,25.07,0.1517,0.0612,1.2579,0.0,0.0,0.0,-0.0386,-0.3143,-0.0128,12467.57 +269,60,1.04,0.0,3.57,0.07,3.48,0.93,20.05,0.1217,0.049,1.0064,0.0,0.0,0.0,-0.0299,-0.2515,-0.0069,12526.74 +270,60,1.01,0.0,3.41,0.07,2.95,0.74,16.03,0.097,0.0392,0.8052,0.0,0.0,0.0,-0.0248,-0.2012,-0.007,12586.51 +271,60,0.99,0.0,3.45,0.08,2.52,0.59,14.96,0.0773,0.0314,0.662,0.0,-0.0,-0.0,-0.0197,-0.1432,-0.006,12647.89 +272,60,0.98,0.0,3.49,0.08,2.2,0.34,12.03,0.0617,0.0207,0.5273,0.0,0.0,0.0,-0.0156,-0.1347,0.0071,12707.78 +273,60,0.97,0.0,3.26,0.08,1.94,0.27,9.69,0.0493,0.0147,0.42,0.0,0.0,0.0,-0.0124,-0.1073,0.004,12767.47 +274,60,1.0,0.0,3.41,0.09,1.78,0.21,7.87,0.0397,0.0114,0.3348,0.0,0.0,0.0,-0.0096,-0.0852,0.0168,12826.87 +275,60,1.02,0.0,4.4,0.09,1.64,0.0,6.56,0.032,0.0034,0.268,0.0,-0.0,-0.0,-0.0077,-0.0667,0.0199,12887.29 +276,60,1.14,0.0,4.4,0.09,1.66,0.0,6.93,0.0268,0.0007,0.2265,0.0,0.0,0.0,-0.0051,-0.0415,0.0206,12947.31 +277,60,1.14,0.0,4.44,0.09,1.56,0.0,6.03,0.0215,0.0002,0.1812,0.0,0.0,0.0,-0.0053,-0.0453,0.0089,13006.21 +278,60,1.2,0.0,4.55,0.09,1.55,0.0,5.59,0.0177,-0.0067,0.145,0.0,0.0,0.0,-0.0038,-0.0362,0.0099,13066.89 +279,60,1.27,0.0,4.3,0.1,1.56,0.0,5.2,0.0148,-0.0072,0.1161,0.0,0.0,0.0,-0.0029,-0.0289,0.0117,13126.82 +280,60,1.36,0.0,4.4,0.09,1.61,0.0,5.7,0.0127,-0.0078,0.1047,0.0,-0.0,-0.0,-0.0021,-0.0174,0.019,13187.24 +281,60,1.42,0.0,4.44,0.08,1.62,0.0,5.25,0.0106,-0.0043,0.0716,0.0,0.0,0.0,-0.002,-0.0331,0.0199,13246.37 +282,60,1.32,0.0,4.26,0.07,1.48,0.0,4.85,0.0075,-0.015,0.0571,0.0,0.0,0.0,-0.0031,-0.0264,0.0075,13307.45 +283,60,1.2,0.0,4.3,0.07,1.29,0.0,4.81,0.0045,-0.0124,0.0453,0.0,0.0,0.0,-0.003,-0.0158,0.0027,13367.34 +284,60,1.18,0.0,4.35,0.06,1.24,0.0,5.01,0.0031,-0.0185,0.0356,0.0,0.0,0.0,-0.0014,-0.0126,0.0114,13426.87 +285,60,1.14,0.0,4.35,0.06,1.2,0.0,4.99,0.0018,-0.0257,0.0311,0.0,0.0,0.0,-0.0013,-0.0238,0.019,13486.82 +286,60,1.02,0.0,4.35,0.05,1.06,0.0,4.98,-0.0004,-0.0267,0.0259,0.0,0.0,0.0,-0.0022,-0.0224,0.0114,13546.92 +287,59,1.05,0.0,4.3,0.05,1.09,0.0,4.87,-0.001,-0.0276,0.0206,0.0,0.0,0.0,-0.0006,-0.0148,0.0113,13607.29 +288,60,1.01,0.0,4.35,0.01,1.04,0.0,4.83,-0.0019,-0.0284,0.0177,0.0,0.0,0.0,-0.0009,-0.0139,0.0121,13665.75 +289,60,1.02,0.0,3.37,0.01,1.03,0.0,3.59,-0.0026,-0.0293,0.0239,0.0,0.0,0.0,-0.0007,-0.0148,0.0221,13726.56 +290,60,0.91,0.0,3.33,0.02,0.91,0.0,3.5,-0.0042,-0.0305,0.0197,0.0,-0.0,-0.0,-0.0016,-0.0219,0.011,13787.36 +291,60,0.84,0.0,3.19,0.02,0.81,0.0,3.26,-0.0053,-0.0315,0.016,0.0,0.0,0.0,-0.0011,-0.0243,0.0113,13847.88 +292,60,0.85,0.0,3.45,0.02,0.83,0.0,3.61,-0.0053,-0.0325,0.0125,0.0,0.0,0.0,-0.0,-0.0105,0.0114,13906.51 +293,60,0.91,0.0,4.55,0.03,0.89,0.0,4.97,-0.005,-0.0334,0.0214,0.0,0.0,0.0,0.0003,-0.0121,0.0114,13966.47 +294,60,1.02,0.0,4.49,0.03,1.01,0.0,4.89,-0.0041,-0.0343,0.0171,0.0,-0.0,-0.0,0.0009,-0.0119,0.0126,14027.01 +295,60,0.93,0.0,4.44,0.04,0.91,0.0,4.74,-0.0053,-0.0351,0.0132,0.0,0.0,0.0,-0.0012,-0.021,0.0111,14087.17 +296,60,0.96,0.0,4.4,0.05,0.94,0.0,4.61,-0.0052,-0.0358,0.0224,0.0,0.0,0.0,0.0001,-0.0117,0.0215,14146.39 +297,60,0.91,0.0,4.4,0.05,0.89,0.0,4.56,-0.0059,-0.0365,0.0184,0.0,0.0,0.0,-0.0008,-0.0119,0.0126,14207.01 +298,60,1.09,0.0,4.49,0.06,1.1,0.0,4.64,-0.0044,-0.0371,0.0225,0.0,0.0,0.0,0.0016,-0.0128,0.0219,14267.06 +299,60,1.02,0.0,4.35,0.06,1.01,0.0,5.07,-0.0055,-0.0376,0.0304,0.0,-0.0,-0.0,-0.0012,-0.0249,0.0118,14326.52 +300,60,1.04,0.0,4.44,0.06,1.02,0.0,5.13,-0.0056,-0.0334,0.0258,0.0,0.0,0.0,-0.0001,-0.0124,0.0219,14385.34 +301,1,1.14,1.14,1.14,0.06,0.86,0.86,0.86,-0.0114,-0.0114,-0.0114,0.0,-0.0,-0.0,0.0027,0.0027,0.0027,14391.85 diff --git a/experiments/results/csv/sudden_error_spikes_adaptive_time_analysis.csv b/experiments/results/csv/sudden_error_spikes_adaptive_time_analysis.csv new file mode 100644 index 000000000..c779715cb --- /dev/null +++ b/experiments/results/csv/sudden_error_spikes_adaptive_time_analysis.csv @@ -0,0 +1,16 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,10732,10626,103,0.96,3,0.03,1.0 +20-40s,10678,10580,98,0.92,0,0.0,1.0 +40-60s,10727,10602,124,1.16,1,0.01,1.0 +60-80s,15002,9875,2448,16.32,2679,17.86,20.0 +80-100s,11598,10620,96,0.83,882,7.6,1.0 +100-120s,10754,10604,106,0.99,44,0.41,1.0 +120-140s,10840,10622,137,1.26,81,0.75,1.0 +140-160s,15968,1809,2824,17.69,11335,70.99,60.0 +160-180s,14728,4568,53,0.36,10107,68.62,1.0 +180-200s,11044,10616,111,1.01,317,2.87,1.0 +200-220s,9721,9524,115,1.18,82,0.84,1.0 +220-240s,15934,19,2903,18.22,13012,81.66,100.0 +240-260s,14751,2577,29,0.2,12145,82.33,1.0 +260-280s,11876,10461,127,1.07,1288,10.85,1.0 +280-300s,10827,10609,105,0.97,113,1.04,1.0 diff --git a/experiments/results/csv/sudden_error_spikes_time_analysis.csv b/experiments/results/csv/sudden_error_spikes_time_analysis.csv new file mode 100644 index 000000000..d4bb79e47 --- /dev/null +++ b/experiments/results/csv/sudden_error_spikes_time_analysis.csv @@ -0,0 +1,16 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-20s,9986,9892,94,0.94,0,0.0,1.0 +20-40s,10532,10423,109,1.03,0,0.0,1.0 +40-60s,10504,10402,102,0.97,0,0.0,1.0 +60-80s,15680,3041,658,4.2,11981,76.41,20.0 +80-100s,13864,7167,90,0.65,6607,47.66,1.0 +100-120s,10532,10433,99,0.94,0,0.0,1.0 +120-140s,10517,10412,105,1.0,0,0.0,1.0 +140-160s,15798,1091,779,4.93,13928,88.16,60.0 +160-180s,15037,3279,55,0.37,11703,77.83,1.0 +180-200s,12796,9850,93,0.73,2853,22.3,1.0 +200-220s,9472,9381,91,0.96,0,0.0,1.0 +220-240s,15771,538,698,4.43,14535,92.16,100.0 +240-260s,14829,4030,41,0.28,10758,72.55,1.0 +260-280s,11911,10204,109,0.92,1598,13.42,1.0 +280-300s,10572,10450,122,1.15,0,0.0,1.0 diff --git a/experiments/results/csv/sustained_load_adaptive_pid_controller.csv b/experiments/results/csv/sustained_load_adaptive_pid_controller.csv new file mode 100644 index 000000000..f8f5b9fbc --- /dev/null +++ b/experiments/results/csv/sustained_load_adaptive_pid_controller.csv @@ -0,0 +1,541 @@ +Window,Thread Count,Error Rate Avg,Error Rate Min,Error Rate Max,Ideal Error Rate,Rejection Rate Avg,Rejection Rate Min,Rejection Rate Max,Integral Avg,Integral Min,Integral Max,Derivative Avg,Derivative Min,Derivative Max,P Value Avg,P Value Min,P Value Max,Total Request Time +1,60,0.94,0.0,12.5,4.61,0.62,0.0,9.0,-0.0371,-0.0461,0.075,0.0,-0.0,-0.0,-0.0371,-0.0461,0.075,63.3 +2,60,1.12,0.0,6.25,4.25,0.08,0.0,1.33,-0.0757,-0.0886,-0.0014,0.0,0.0,0.0,-0.0386,-0.084,0.0164,123.62 +3,60,0.99,0.0,4.17,3.92,0.0,0.0,0.0,-0.1075,-0.1278,-0.0225,0.0,0.0,0.0,-0.0318,-0.0392,-0.0037,183.92 +4,60,1.06,0.0,5.71,3.61,0.01,0.0,0.52,-0.1354,-0.1639,-0.0153,0.0,0.0,0.0,-0.0279,-0.0361,0.0134,243.79 +5,60,1.03,0.0,4.55,3.33,0.0,0.0,0.0,-0.1615,-0.1972,-0.0237,0.0,0.0,0.0,-0.0261,-0.0333,0.0043,303.46 +6,60,0.98,0.0,3.7,3.07,0.0,0.0,0.0,-0.186,-0.228,-0.0344,0.0,0.0,0.0,-0.0245,-0.0307,-0.0001,363.02 +7,60,0.94,0.0,4.69,2.83,0.0,0.0,0.0,-0.2089,-0.2563,-0.0491,0.0,0.0,0.0,-0.0229,-0.0283,0.0036,423.19 +8,60,1.01,0.0,4.11,2.61,0.0,0.0,0.0,-0.2294,-0.2824,-0.0663,0.0,0.0,0.0,-0.0205,-0.0261,0.001,483.63 +9,60,1.06,0.0,3.61,2.41,0.0,0.0,0.0,-0.2479,-0.3065,-0.0765,0.0,0.0,0.0,-0.0185,-0.0249,-0.0031,544.17 +10,60,0.95,0.0,3.26,2.22,0.0,0.0,0.0,-0.2659,-0.3287,-0.0857,0.0,0.0,0.0,-0.018,-0.029,-0.005,603.54 +11,60,1.0,0.0,3.3,2.05,0.0,0.0,0.0,-0.282,-0.3491,-0.0942,0.0,0.0,0.0,-0.0161,-0.0323,0.0044,663.46 +12,60,0.96,0.0,3.23,1.89,0.0,0.0,0.0,-0.2972,-0.368,-0.112,0.0,0.0,0.0,-0.0152,-0.0298,0.0037,723.66 +13,60,1.0,0.0,3.26,1.74,0.0,0.0,0.0,-0.3108,-0.3854,-0.1287,0.0,0.0,0.0,-0.0136,-0.0275,0.004,783.6 +14,60,0.9,0.0,3.16,1.6,0.0,0.0,0.0,-0.3244,-0.4014,-0.1442,0.0,0.0,0.0,-0.0135,-0.0253,0.004,843.61 +15,60,0.99,0.0,3.26,2.03,0.0,0.0,0.0,-0.336,-0.4162,-0.1684,0.0,0.0,0.0,-0.0116,-0.0242,0.004,903.16 +16,60,0.98,0.0,2.27,1.96,0.0,0.0,0.0,-0.3468,-0.4298,-0.1906,0.0,0.0,0.0,-0.0108,-0.0222,0.0031,963.3 +17,54,0.98,0.0,3.37,1.26,0.0,0.0,0.0,-0.3598,-0.4424,-0.211,0.0,0.0,0.0,-0.0097,-0.0204,0.0098,1022.07 +18,60,0.98,0.0,2.25,1.26,0.0,0.0,0.0,-0.3647,-0.454,-0.214,0.0,0.0,0.0,-0.0092,-0.0199,0.0068,1083.59 +19,60,0.93,0.0,3.26,1.16,0.0,0.0,0.0,-0.3736,-0.4647,-0.2312,0.0,0.0,0.0,-0.0089,-0.0288,0.0169,1143.43 +20,60,0.93,0.0,3.13,1.07,0.0,0.0,0.0,-0.3817,-0.4746,-0.2383,0.0,0.0,0.0,-0.0081,-0.0266,0.0162,1203.09 +21,60,0.95,0.0,3.33,0.99,0.0,0.0,0.0,-0.3889,-0.4836,-0.2347,0.0,0.0,0.0,-0.0072,-0.0245,0.0169,1263.47 +22,60,0.95,0.0,3.33,1.48,0.0,0.0,0.0,-0.3955,-0.492,-0.2413,0.0,-0.0,-0.0,-0.0066,-0.0226,0.0172,1323.83 +23,60,0.99,0.0,3.19,1.37,0.0,0.0,0.0,-0.4011,-0.4997,-0.2475,0.0,0.0,0.0,-0.0056,-0.021,0.0175,1383.88 +24,60,1.08,0.0,4.21,1.26,0.0,0.0,0.0,-0.4052,-0.5069,-0.2531,0.0,0.0,0.0,-0.0041,-0.0194,0.0277,1444.11 +25,60,0.99,0.0,3.19,0.71,0.0,0.0,0.0,-0.4097,-0.5134,-0.2582,0.0,0.0,0.0,-0.0045,-0.0242,0.0174,1503.68 +26,60,0.97,0.0,3.23,0.66,0.0,0.0,0.0,-0.4139,-0.5195,-0.2629,0.0,0.0,0.0,-0.0042,-0.0223,0.0178,1563.23 +27,58,0.97,0.0,3.26,0.61,0.0,0.0,0.0,-0.416,-0.5251,-0.2679,0.0,0.0,0.0,-0.0039,-0.0206,0.0181,1623.88 +28,57,1.0,0.0,3.23,0.91,0.0,0.0,0.0,-0.4184,-0.5302,-0.2724,0.0,-0.0,-0.0,-0.0031,-0.019,0.0177,1683.54 +29,58,0.91,0.0,3.19,0.91,0.0,0.0,0.0,-0.4239,-0.5349,-0.257,0.0,-0.0,-0.0,-0.0034,-0.0175,0.0173,1743.34 +30,60,0.92,0.0,2.3,1.47,0.0,0.0,0.0,-0.4269,-0.5393,-0.2499,0.0,-0.0,-0.0,-0.003,-0.0161,0.0164,1803.5 +31,58,0.91,0.0,2.25,1.44,0.0,0.0,0.0,-0.4303,-0.5434,-0.2428,0.0,0.0,0.0,-0.0028,-0.0149,0.0159,1862.6 +32,58,0.83,0.0,3.33,1.16,0.0,0.0,0.0,-0.4302,-0.5471,-0.2462,0.0,0.0,0.0,-0.0032,-0.0139,0.0266,1922.93 +33,54,0.71,0.0,3.23,1.17,0.0,0.0,0.0,-0.438,-0.5505,-0.2492,0.0,-0.0,-0.0,-0.0038,-0.015,0.0265,1983.15 +34,57,0.75,0.0,3.33,1.19,0.0,0.0,0.0,-0.4424,-0.5537,-0.2622,0.0,-0.0,-0.0,-0.0028,-0.0182,0.0265,2043.22 +35,59,0.77,0.0,3.3,1.87,0.0,0.0,0.0,-0.4396,-0.5566,-0.2741,0.0,0.0,0.0,-0.0027,-0.0168,0.0268,2103.68 +36,56,0.75,0.0,3.3,0.29,0.0,0.0,0.0,-0.4465,-0.5593,-0.2852,0.0,0.0,0.0,-0.0021,-0.0155,0.0271,2163.39 +37,58,0.74,0.0,3.3,1.01,0.0,0.0,0.0,-0.444,-0.5617,-0.294,0.0,0.0,0.0,-0.0022,-0.0151,0.027,2223.5 +38,57,0.77,0.0,3.3,1.63,0.0,0.0,0.0,-0.4473,-0.5617,-0.2828,0.0,0.0,0.0,-0.0015,-0.0139,0.027,2283.54 +39,58,0.76,0.0,3.37,0.72,0.0,0.0,0.0,-0.4502,-0.564,-0.2672,0.0,-0.0,-0.0,-0.001,-0.0128,0.0269,2342.7 +40,54,0.79,0.0,3.33,1.6,0.0,0.0,0.0,-0.4479,-0.5661,-0.251,0.0,0.0,0.0,-0.0005,-0.0145,0.0225,2403.85 +41,57,0.85,0.0,3.26,0.3,0.0,0.0,0.0,-0.4486,-0.5681,-0.2349,0.0,0.0,0.0,0.0003,-0.0143,0.0225,2463.42 +42,58,0.83,0.0,3.3,0.67,0.0,0.0,0.0,-0.4503,-0.5699,-0.2296,0.0,0.0,0.0,0.0004,-0.0141,0.0288,2522.85 +43,57,0.79,0.0,3.33,1.23,0.0,0.0,0.0,-0.4428,-0.5715,-0.2243,0.0,0.0,0.0,-0.0001,-0.013,0.0288,2582.82 +44,59,0.75,0.0,3.23,0.22,0.0,0.0,0.0,-0.4471,-0.5733,-0.2191,0.0,0.0,0.0,-0.0001,-0.012,0.0291,2642.92 +45,58,0.76,0.0,4.35,1.05,0.0,0.0,0.0,-0.4473,-0.5754,-0.2139,0.0,0.0,0.0,0.0003,-0.0113,0.0402,2703.69 +46,57,0.77,0.0,4.35,0.86,0.0,0.0,0.0,-0.4529,-0.5757,-0.2287,0.0,-0.0,-0.0,0.0008,-0.0112,0.0401,2763.34 +47,60,0.81,0.0,4.21,0.61,0.0,0.0,0.0,-0.4457,-0.5769,-0.194,0.0,0.0,0.0,0.0013,-0.013,0.0346,2823.33 +48,59,0.82,0.0,4.17,0.86,0.0,0.0,0.22,-0.4421,-0.578,-0.1599,0.0,-0.0,-0.0,0.0016,-0.012,0.0341,2882.78 +49,60,0.79,0.0,3.16,0.22,0.0,0.0,0.0,-0.4426,-0.579,-0.138,0.0,0.0,0.0,0.0015,-0.0154,0.0219,2943.48 +50,60,0.85,0.0,3.19,0.22,0.0,0.0,0.16,-0.4404,-0.58,-0.1137,0.0,0.0,0.0,0.0023,-0.0142,0.0243,3003.18 +51,60,0.93,0.0,3.26,0.23,0.01,0.0,0.61,-0.4371,-0.5808,-0.091,0.0,-0.0,-0.0,0.0033,-0.0131,0.0291,3063.45 +52,59,0.97,0.0,3.23,0.23,0.02,0.0,0.94,-0.4345,-0.5816,-0.073,0.0,-0.0,-0.0,0.0037,-0.012,0.0261,3123.78 +53,60,1.03,0.0,3.23,0.53,0.0,0.0,0.0,-0.4291,-0.5824,-0.0688,0.0,0.0,0.0,0.0043,-0.0104,0.0261,3183.26 +54,60,1.01,0.0,3.37,0.54,0.0,0.0,0.25,-0.4246,-0.583,-0.0552,0.0,0.0,0.0,0.0045,-0.0095,0.0316,3243.49 +55,60,1.01,0.0,3.33,0.54,0.0,0.0,0.0,-0.4201,-0.5837,-0.0545,0.0,-0.0,-0.0,0.0046,-0.0088,0.0312,3302.88 +56,60,1.04,0.0,3.37,0.54,0.0,0.0,0.0,-0.415,-0.5842,-0.0512,0.0,-0.0,-0.0,0.0051,-0.0123,0.0315,3362.72 +57,60,1.06,0.0,3.49,0.54,0.0,0.0,0.0,-0.4096,-0.5749,-0.0476,0.0,0.0,0.0,0.0054,-0.0113,0.0326,3423.43 +58,60,1.03,0.0,3.41,0.48,0.0,0.0,0.06,-0.4044,-0.5761,-0.0439,0.0,-0.0,-0.0,0.0052,-0.0104,0.0318,3483.08 +59,60,0.99,0.0,3.45,0.44,0.01,0.0,0.41,-0.3995,-0.5736,-0.04,0.0,0.0,0.0,0.005,-0.0106,0.0321,3542.59 +60,60,0.97,0.0,4.35,0.44,0.01,0.0,0.69,-0.3946,-0.5747,-0.0472,0.0,0.0,0.0,0.0049,-0.0098,0.0321,3602.69 +61,60,0.79,0.0,4.35,0.44,0.0,0.0,0.0,-0.3913,-0.5757,-0.0538,0.0,-0.0,-0.0,0.0032,-0.009,0.0316,3662.73 +62,60,0.76,0.0,4.44,0.44,0.0,0.0,0.0,-0.3882,-0.5769,-0.0481,0.0,-0.0,-0.0,0.0032,-0.0083,0.0379,3723.66 +63,60,0.76,0.0,3.37,0.44,0.02,0.0,1.22,-0.3848,-0.578,-0.0299,0.0,0.0,0.0,0.0033,-0.0077,0.0272,3783.24 +64,60,0.81,0.0,3.33,0.44,0.02,0.0,1.36,-0.381,-0.579,-0.0237,0.0,0.0,0.0,0.0039,-0.0071,0.0267,3843.25 +65,60,0.87,0.0,4.35,0.46,0.04,0.0,1.42,-0.3765,-0.5799,-0.0192,0.0,0.0,0.0,0.0045,-0.0065,0.0368,3903.08 +66,60,0.87,0.0,4.4,0.47,0.01,0.0,0.39,-0.372,-0.5808,-0.0262,0.0,0.0,0.0,0.0045,-0.0069,0.0324,3963.64 +67,60,0.89,0.0,4.4,0.47,0.04,0.0,1.6,-0.3669,-0.5805,-0.0102,0.0,0.0,0.0,0.0051,-0.0063,0.0317,4023.53 +68,60,0.94,0.0,4.35,0.47,0.06,0.0,1.7,-0.3616,-0.5811,-0.0077,0.0,-0.0,-0.0,0.0053,-0.0058,0.0308,4082.99 +69,60,0.92,0.0,3.23,0.47,0.03,0.0,1.7,-0.3565,-0.5816,-0.0064,0.0,-0.0,-0.0,0.0051,-0.0049,0.0222,4142.84 +70,60,0.96,0.0,4.35,0.48,0.03,0.0,1.72,-0.3507,-0.5821,-0.0051,0.0,0.0,0.0,0.0058,-0.0045,0.0407,4202.98 +71,60,0.99,0.0,4.3,0.48,0.04,0.0,1.71,-0.3446,-0.5715,-0.0044,0.0,-0.0,-0.0,0.0061,-0.0041,0.0402,4262.75 +72,60,0.93,0.0,3.23,0.21,0.03,0.0,1.7,-0.3389,-0.5608,-0.0038,0.0,-0.0,-0.0,0.0056,-0.0038,0.029,4323.16 +73,60,0.94,0.0,3.26,0.21,0.02,0.0,0.55,-0.3332,-0.5501,-0.0137,0.0,-0.0,-0.0,0.0057,-0.01,0.029,4382.32 +74,60,0.9,0.0,4.3,0.21,0.03,0.0,0.87,-0.3276,-0.5436,-0.0112,0.0,-0.0,-0.0,0.0056,-0.0033,0.04,4443.06 +75,60,0.81,0.0,4.35,0.22,0.08,0.0,1.63,-0.3229,-0.5465,-0.0053,0.0,-0.0,-0.0,0.0047,-0.0069,0.0321,4503.19 +76,60,0.71,0.0,4.35,0.2,0.05,0.0,2.11,-0.3196,-0.5491,-0.007,0.0,-0.0,-0.0,0.0033,-0.01,0.0311,4563.34 +77,60,0.66,0.0,4.4,0.18,0.06,0.0,2.58,-0.3165,-0.5516,-0.0127,0.0,0.0,0.0,0.0031,-0.0113,0.0301,4622.44 +78,60,0.64,0.0,3.3,0.17,0.06,0.0,1.56,-0.3135,-0.5539,-0.01,0.0,0.0,0.0,0.0029,-0.0105,0.0308,4682.85 +79,60,0.62,0.0,4.3,0.16,0.1,0.0,3.04,-0.3106,-0.5559,-0.008,0.0,0.0,0.0,0.0029,-0.0116,0.0311,4743.77 +80,60,0.66,0.0,3.19,0.14,0.05,0.0,1.87,-0.3076,-0.5579,-0.0063,0.0,0.0,0.0,0.003,-0.0112,0.0307,4802.64 +81,60,0.7,0.0,3.23,0.13,0.07,0.0,2.12,-0.3036,-0.5597,-0.0051,0.0,0.0,0.0,0.0039,-0.0098,0.031,4862.85 +82,60,0.75,0.0,3.33,0.12,0.05,0.0,1.09,-0.2992,-0.5613,-0.0039,0.0,0.0,0.0,0.0044,-0.0091,0.032,4922.63 +83,60,0.72,0.0,2.27,0.11,0.02,0.0,0.54,-0.295,-0.5628,-0.0033,0.0,0.0,0.0,0.0042,-0.0084,0.0214,4982.86 +84,60,0.9,0.0,3.26,0.11,0.02,0.0,0.61,-0.2885,-0.5642,-0.0024,0.0,0.0,0.0,0.0065,-0.0077,0.032,5043.65 +85,60,0.99,0.0,4.3,0.12,0.02,0.0,0.64,-0.2812,-0.5655,-0.0075,0.0,0.0,0.0,0.0073,-0.0104,0.0396,5102.76 +86,60,1.08,0.0,4.3,0.12,0.08,0.0,1.57,-0.2728,-0.5667,-0.0051,0.0,-0.0,-0.0,0.0084,-0.0058,0.0395,5163.19 +87,60,1.16,0.0,4.3,0.12,0.11,0.0,1.64,-0.2643,-0.5678,-0.0041,0.0,-0.0,-0.0,0.0085,-0.0029,0.0322,5222.6 +88,60,1.17,0.0,5.43,0.12,0.13,0.0,1.87,-0.2559,-0.5688,-0.0036,0.0,0.0,0.0,0.0084,-0.0106,0.0513,5282.47 +89,60,1.21,0.0,5.49,0.13,0.14,0.0,1.95,-0.2473,-0.5697,-0.0028,0.0,0.0,0.0,0.0086,-0.0097,0.0424,5342.99 +90,60,1.23,0.0,5.43,0.13,0.21,0.0,2.76,-0.2386,-0.5706,0.0079,0.0,-0.0,-0.0,0.0087,-0.009,0.0327,5403.78 +91,60,1.21,0.0,5.43,0.14,0.23,0.0,3.14,-0.2307,-0.5713,0.0073,0.0,-0.0,-0.0,0.0079,-0.0105,0.0322,5463.28 +92,60,1.19,0.0,5.43,0.14,0.25,0.0,3.58,-0.2231,-0.5721,0.0055,0.0,-0.0,-0.0,0.0076,-0.0076,0.0321,5523.03 +93,60,1.2,0.0,5.38,0.15,0.34,0.0,3.86,-0.2157,-0.5727,0.0046,0.0,-0.0,-0.0,0.0075,-0.0082,0.0394,5582.25 +94,60,1.13,0.0,4.4,0.15,0.33,0.0,3.79,-0.2097,-0.5734,0.0033,0.0,-0.0,-0.0,0.006,-0.0065,0.0302,5642.81 +95,60,1.04,0.0,4.4,0.16,0.31,0.0,3.01,-0.2045,-0.5739,0.0087,0.0,0.0,0.0,0.0052,-0.011,0.0298,5702.78 +96,60,0.94,0.0,3.26,0.16,0.3,0.0,2.68,-0.2001,-0.5745,0.0069,0.0,-0.0,-0.0,0.0044,-0.0122,0.0248,5763.06 +97,60,0.96,0.0,3.26,0.16,0.29,0.0,2.82,-0.1954,-0.5749,-0.0029,0.0,-0.0,-0.0,0.0047,-0.012,0.0294,5822.35 +98,60,0.95,0.0,3.33,0.16,0.27,0.0,2.98,-0.1906,-0.5754,-0.0019,0.0,-0.0,-0.0,0.0047,-0.0047,0.0324,5882.31 +99,60,0.97,0.0,3.33,0.15,0.3,0.0,3.04,-0.1854,-0.5758,-0.0013,0.0,0.0,0.0,0.0052,-0.0083,0.0323,5943.56 +100,60,0.84,0.0,3.33,0.14,0.24,0.0,3.0,-0.1818,-0.5762,-0.0023,0.0,0.0,0.0,0.0036,-0.0108,0.0326,6003.05 +101,60,0.88,0.0,4.4,0.13,0.21,0.0,1.78,-0.1771,-0.5765,-0.0019,0.0,0.0,0.0,0.0046,-0.0084,0.0432,6062.74 +102,60,0.92,0.0,4.4,0.12,0.17,0.0,1.79,-0.1719,-0.5769,-0.0015,0.0,0.0,0.0,0.0053,-0.0084,0.041,6122.27 +103,60,0.92,0.0,4.44,0.11,0.17,0.0,1.79,-0.1662,-0.5771,-0.0011,0.0,0.0,0.0,0.0057,-0.01,0.0336,6183.19 +104,60,0.9,0.0,4.3,0.1,0.18,0.0,1.83,-0.1606,-0.5774,-0.0008,0.0,0.0,0.0,0.0055,-0.0072,0.0402,6242.85 +105,60,0.97,0.0,4.35,0.1,0.22,0.0,1.91,-0.1544,-0.5777,0.0024,0.0,0.0,0.0,0.0062,-0.011,0.0406,6303.27 +106,60,1.03,0.0,4.44,0.1,0.32,0.0,2.1,-0.148,-0.5779,0.0073,0.0,-0.0,-0.0,0.0064,-0.0098,0.0415,6362.7 +107,60,0.95,0.0,4.44,0.11,0.3,0.0,2.13,-0.1433,-0.5781,0.005,0.0,-0.0,-0.0,0.0047,-0.0122,0.033,6423.43 +108,60,0.97,0.0,4.35,0.11,0.34,0.0,3.07,-0.1382,-0.5783,0.0042,0.0,-0.0,-0.0,0.0051,-0.0097,0.0253,6483.17 +109,60,0.9,0.0,4.35,0.11,0.3,0.0,3.15,-0.1342,-0.5677,0.0014,0.0,-0.0,-0.0,0.004,-0.0114,0.0215,6542.91 +110,60,1.01,0.0,3.37,0.11,0.39,0.0,3.31,-0.1287,-0.5568,0.0108,0.0,-0.0,-0.0,0.0055,-0.0098,0.0219,6602.54 +111,60,0.93,0.0,3.37,0.11,0.43,0.0,3.31,-0.1248,-0.5501,0.009,0.0,-0.0,-0.0,0.0039,-0.0052,0.0214,6662.56 +112,60,0.88,0.0,3.37,0.11,0.42,0.0,3.29,-0.1217,-0.5501,0.0064,0.0,-0.0,-0.0,0.003,-0.0174,0.0216,6722.99 +113,60,0.9,0.0,3.37,0.12,0.45,0.0,3.29,-0.1184,-0.5502,0.0077,0.0,-0.0,-0.0,0.0033,-0.0113,0.0215,6783.17 +114,60,0.82,0.0,3.37,0.12,0.41,0.0,3.29,-0.1161,-0.5502,0.0046,0.0,-0.0,-0.0,0.0023,-0.0127,0.011,6842.3 +115,60,0.83,0.0,3.37,0.11,0.44,0.0,3.18,-0.1133,-0.5503,0.0037,0.0,-0.0,-0.0,0.0027,-0.011,0.0303,6902.26 +116,60,0.75,0.0,3.41,0.1,0.4,0.0,3.11,-0.1116,-0.5503,0.0067,0.0,0.0,0.0,0.0017,-0.0115,0.0211,6962.54 +117,60,0.76,0.0,3.19,0.09,0.42,0.0,2.75,-0.1092,-0.5504,0.0085,0.0,0.0,0.0,0.0023,-0.0116,0.0206,7022.64 +118,60,0.84,0.0,3.33,0.09,0.47,0.0,3.67,-0.1063,-0.5504,0.0161,0.0,0.0,0.0,0.003,-0.0103,0.021,7082.19 +119,60,0.86,0.0,3.33,0.08,0.5,0.0,3.56,-0.1036,-0.5505,0.0125,0.0,0.0,0.0,0.0027,-0.0095,0.0221,7142.23 +120,60,0.79,0.0,3.3,0.07,0.43,0.0,3.54,-0.1018,-0.5455,0.0103,0.0,0.0,0.0,0.0017,-0.0213,0.0212,7203.27 +121,60,1.61,0.0,5.43,0.07,0.93,0.0,6.15,-0.0912,-0.5239,0.0303,0.0,0.0,0.0,0.0106,-0.013,0.0522,7262.85 +122,60,3.95,0.0,9.28,0.08,3.09,0.0,10.3,-0.0618,-0.5023,0.0477,0.0,0.0,0.0,0.0293,-0.0103,0.0789,7322.66 +123,60,5.93,1.11,13.86,0.09,5.54,0.0,14.43,-0.0326,-0.4599,0.0898,0.0,-0.0,-0.0,0.0292,-0.0181,0.1062,7382.78 +124,60,7.75,2.25,15.38,0.1,7.98,0.0,19.34,-0.007,-0.3769,0.1318,0.0,0.0,0.0,0.0256,-0.0086,0.083,7442.47 +125,60,10.03,3.37,19.63,0.1,11.19,0.0,26.64,0.0209,-0.274,0.1707,0.0,0.0,0.0,0.0279,-0.0283,0.1174,7503.08 +126,60,12.16,5.56,20.37,0.1,14.36,5.85,28.8,0.0438,-0.2034,0.1602,0.0,-0.0,-0.0,0.0229,-0.0105,0.0998,7562.88 +127,60,13.86,7.45,21.82,0.1,16.98,7.49,30.57,0.0584,-0.1497,0.157,0.0,0.0,0.0,0.0145,-0.0252,0.0865,7622.48 +128,60,15.62,7.78,24.32,0.1,19.68,8.61,34.99,0.0711,-0.1072,0.1677,0.0,-0.0,-0.0,0.0128,-0.0175,0.0544,7683.14 +129,60,17.2,8.79,27.03,0.1,22.2,9.77,39.36,0.0803,-0.0734,0.1739,0.0,-0.0,-0.0,0.0091,-0.0257,0.0399,7742.7 +130,60,19.24,9.89,27.03,0.1,25.38,11.15,40.54,0.0934,-0.0318,0.1685,0.0,0.0,0.0,0.0132,-0.0203,0.0765,7802.86 +131,60,20.16,12.5,27.68,0.1,27.12,15.35,40.7,0.0924,-0.0062,0.1866,0.0,-0.0,-0.0,-0.0011,-0.0415,0.0442,7862.6 +132,60,19.98,12.24,27.52,0.1,26.89,13.39,41.58,0.075,-0.0642,0.1945,0.0,-0.0,-0.0,-0.0174,-0.0794,0.0301,7922.36 +133,60,19.91,12.24,30.28,0.1,26.44,12.61,44.92,0.0587,-0.0599,0.1978,0.0,-0.0,-0.0,-0.0163,-0.0775,0.0294,7983.03 +134,60,19.82,12.12,29.09,0.1,25.96,13.72,44.52,0.045,-0.0601,0.1615,0.0,-0.0,-0.0,-0.0137,-0.1074,0.0374,8042.84 +135,60,19.55,11.76,30.63,0.1,25.3,13.08,46.41,0.032,-0.1025,0.1504,0.0,0.0,0.0,-0.013,-0.0753,0.0289,8102.45 +136,60,19.35,11.88,29.46,0.1,24.72,12.9,44.44,0.0219,-0.0896,0.1089,0.0,0.0,0.0,-0.0101,-0.0814,0.0403,8160.68 +137,60,19.53,14.0,28.44,0.1,24.75,14.42,41.55,0.0184,-0.0879,0.0779,0.0,-0.0,-0.0,-0.0034,-0.0698,0.0766,8216.01 +138,60,19.47,12.12,28.57,0.1,24.6,11.87,40.57,0.0141,-0.0946,0.1025,0.0,0.0,0.0,-0.0043,-0.0591,0.0436,8269.38 +139,60,19.58,12.5,27.36,0.1,24.64,13.37,38.67,0.0121,-0.0611,0.0957,0.0,0.0,0.0,-0.002,-0.0448,0.048,8322.67 +140,60,19.09,13.4,26.67,0.1,23.82,14.86,36.69,0.0032,-0.0892,0.1043,0.0,-0.0,-0.0,-0.0089,-0.1062,0.0649,8380.33 +141,60,19.19,12.5,28.18,0.1,23.78,12.37,40.87,0.0024,-0.1024,0.1219,0.0,-0.0,-0.0,-0.0009,-0.0482,0.0523,8432.81 +142,60,19.47,9.89,30.28,0.1,24.19,8.56,45.34,0.0054,-0.1171,0.1388,0.0,0.0,0.0,0.0031,-0.0867,0.0466,8489.81 +143,60,19.64,8.79,30.28,0.1,24.57,7.13,46.4,0.0076,-0.1095,0.1245,0.0,0.0,0.0,0.0022,-0.0392,0.0608,8547.3 +144,60,19.77,6.67,29.7,0.1,24.85,4.68,43.63,0.0088,-0.1117,0.1473,0.0,-0.0,-0.0,0.0011,-0.0646,0.0659,8601.97 +145,60,19.62,9.68,29.63,0.1,24.68,8.7,43.09,0.0058,-0.0859,0.1258,0.0,-0.0,-0.0,-0.0029,-0.0484,0.076,8658.56 +146,60,19.74,9.89,28.85,0.1,24.79,9.65,41.83,0.0058,-0.0812,0.1018,0.0,-0.0,-0.0,-0.0,-0.0621,0.045,8711.0 +147,60,19.77,10.47,29.17,0.1,24.85,10.15,41.49,0.0053,-0.0985,0.097,0.0,0.0,0.0,-0.0005,-0.0489,0.046,8763.19 +148,60,19.59,10.0,30.21,0.1,24.59,10.32,43.41,0.0022,-0.1211,0.1203,0.0,-0.0,-0.0,-0.0031,-0.0425,0.0588,8819.79 +149,60,19.53,11.49,29.81,0.1,24.41,10.62,42.68,0.0004,-0.1054,0.1054,0.0,-0.0,-0.0,-0.0018,-0.0845,0.0451,8877.0 +150,60,19.52,10.47,29.7,0.1,24.38,9.52,42.31,0.0001,-0.12,0.1156,0.0,-0.0,-0.0,-0.0004,-0.0417,0.0534,8934.41 +151,60,19.58,12.5,29.7,0.1,24.46,12.12,44.09,0.0007,-0.1282,0.1112,0.0,0.0,0.0,0.0006,-0.071,0.0515,8991.16 +152,60,19.19,10.34,29.7,0.1,23.84,10.39,43.75,-0.0046,-0.091,0.0862,0.0,-0.0,-0.0,-0.0053,-0.0892,0.0617,9047.78 +153,60,18.98,11.11,30.1,0.1,23.38,11.28,44.3,-0.0076,-0.0961,0.1357,0.0,-0.0,-0.0,-0.003,-0.0561,0.0496,9106.49 +154,60,19.16,10.11,28.71,0.1,23.6,10.25,41.86,-0.0045,-0.1127,0.137,0.0,0.0,0.0,0.0031,-0.0607,0.0664,9157.66 +155,60,19.2,10.0,27.0,0.1,23.74,10.15,37.41,-0.0026,-0.1107,0.0992,0.0,0.0,0.0,0.0019,-0.09,0.0545,9213.95 +156,60,19.12,11.11,30.1,0.1,23.68,11.11,41.58,-0.0027,-0.0865,0.0806,0.0,0.0,0.0,-0.0001,-0.0533,0.0501,9268.66 +157,60,19.11,10.34,27.72,0.1,23.66,10.76,39.06,-0.0023,-0.0763,0.0933,0.0,-0.0,-0.0,0.0004,-0.0463,0.0467,9320.94 +158,60,19.67,11.24,28.71,0.1,24.48,12.06,39.88,0.0049,-0.098,0.102,0.0,0.0,0.0,0.0072,-0.0601,0.0584,9371.69 +159,60,19.72,9.2,28.57,0.1,24.74,9.4,40.57,0.0062,-0.1035,0.1086,0.0,-0.0,-0.0,0.0013,-0.0582,0.0575,9424.09 +160,60,20.11,9.3,28.87,0.1,25.37,9.38,41.43,0.0104,-0.0907,0.0937,0.0,0.0,0.0,0.0043,-0.06,0.0451,9478.28 +161,60,20.18,9.3,28.87,0.1,25.55,9.5,41.39,0.0102,-0.1075,0.1025,0.0,-0.0,-0.0,-0.0002,-0.0543,0.064,9530.5 +162,60,20.22,8.14,31.25,0.1,25.64,8.09,45.14,0.0092,-0.0875,0.1243,0.0,0.0,0.0,-0.001,-0.0644,0.055,9581.85 +163,60,20.44,8.99,29.79,0.1,25.97,9.17,43.61,0.0104,-0.0854,0.1472,0.0,0.0,0.0,0.0012,-0.0502,0.066,9637.2 +164,60,20.59,10.34,28.57,0.38,26.21,10.96,42.11,0.0107,-0.0741,0.1308,0.0,-0.0,-0.0,0.0003,-0.0562,0.0488,9689.09 +165,60,20.16,10.23,28.87,0.38,25.58,10.74,42.09,0.0037,-0.0789,0.0966,0.0,0.0,0.0,-0.0071,-0.0796,0.0492,9741.76 +166,60,20.38,12.36,28.57,0.1,25.71,13.19,39.75,0.0042,-0.0957,0.0815,0.0,-0.0,-0.0,0.0005,-0.0702,0.0737,9795.62 +167,60,20.26,10.84,30.0,0.1,25.58,11.22,43.83,0.0023,-0.096,0.1019,0.0,-0.0,-0.0,-0.0018,-0.0554,0.0513,9852.79 +168,60,19.83,10.47,30.93,0.1,24.86,10.36,44.65,-0.004,-0.1027,0.1161,0.0,-0.0,-0.0,-0.0063,-0.073,0.0762,9910.13 +169,60,19.94,10.59,28.43,0.1,24.84,10.65,41.7,-0.0035,-0.0983,0.1065,0.0,0.0,0.0,0.0005,-0.0522,0.0531,9965.22 +170,60,19.95,11.63,32.69,0.1,24.85,12.25,47.69,-0.0029,-0.0887,0.1228,0.0,0.0,0.0,0.0006,-0.0586,0.066,10019.77 +171,60,19.92,9.89,31.43,0.1,24.85,8.94,48.5,-0.0024,-0.1097,0.1215,0.0,0.0,0.0,0.0005,-0.0563,0.0482,10072.79 +172,60,20.2,10.23,29.9,0.1,25.3,9.96,45.48,0.0018,-0.1106,0.1173,0.0,0.0,0.0,0.0042,-0.0433,0.0653,10126.45 +173,60,20.21,12.22,31.07,0.1,25.44,12.49,46.34,0.0026,-0.0917,0.1239,0.0,-0.0,-0.0,0.0008,-0.0454,0.0551,10178.6 +174,60,19.83,11.11,29.7,0.1,24.93,10.41,43.3,-0.0021,-0.09,0.1253,0.0,0.0,0.0,-0.0047,-0.053,0.0523,10232.32 +175,60,20.0,11.11,30.69,0.1,25.1,11.09,45.95,-0.0003,-0.0791,0.138,0.0,-0.0,-0.0,0.0018,-0.0781,0.0514,10286.49 +176,60,20.14,11.36,31.37,0.1,25.35,11.23,47.84,0.0018,-0.0779,0.1101,0.0,0.0,0.0,0.0021,-0.0454,0.052,10336.91 +177,60,20.29,9.41,32.67,0.1,25.63,8.54,49.78,0.0039,-0.0872,0.121,0.0,0.0,0.0,0.0021,-0.0597,0.0715,10388.19 +178,60,19.99,13.19,30.93,0.1,25.23,13.81,47.82,-0.0001,-0.0813,0.1065,0.0,0.0,0.0,-0.004,-0.0647,0.0713,10441.83 +179,60,20.23,9.2,30.3,0.28,25.45,8.26,44.73,0.0017,-0.1016,0.1053,0.0,-0.0,-0.0,0.0018,-0.0603,0.0675,10491.09 +180,60,20.46,9.41,29.79,0.28,25.81,8.32,41.61,0.0044,-0.144,0.1287,0.0,-0.0,-0.0,0.0027,-0.0814,0.0767,10543.0 +181,60,20.5,9.52,33.33,0.28,25.95,8.79,50.78,0.0049,-0.1264,0.1836,0.0,0.0,0.0,0.0004,-0.0685,0.0582,10594.75 +182,60,20.32,9.41,33.33,0.3,25.71,8.94,53.7,0.0021,-0.1132,0.1773,0.0,-0.0,-0.0,-0.0028,-0.0573,0.0447,10652.39 +183,60,20.24,9.52,30.53,0.3,25.5,9.3,48.98,0.0,-0.1282,0.1085,0.0,-0.0,-0.0,-0.0021,-0.0799,0.0621,10708.79 +184,60,20.62,8.33,32.32,0.3,26.04,7.93,50.04,0.0044,-0.1123,0.1026,0.0,-0.0,-0.0,0.0044,-0.0509,0.0533,10763.98 +185,60,20.67,8.33,33.33,0.3,26.24,7.96,51.86,0.0054,-0.1091,0.1236,0.0,0.0,0.0,0.001,-0.0468,0.0558,10820.18 +186,60,20.49,10.34,32.0,0.3,26.02,10.72,49.77,0.0026,-0.1162,0.1098,0.0,-0.0,-0.0,-0.0028,-0.0847,0.0523,10871.84 +187,60,20.65,10.47,32.29,0.3,26.18,11.25,49.24,0.0036,-0.1111,0.0962,0.0,0.0,0.0,0.0009,-0.0591,0.0567,10927.52 +188,60,20.5,9.3,29.79,0.28,25.99,9.76,44.35,0.0014,-0.1002,0.1027,0.0,-0.0,-0.0,-0.0022,-0.0529,0.0358,10975.44 +189,60,20.11,11.49,31.18,0.28,25.3,12.27,45.03,-0.0046,-0.0727,0.1042,0.0,-0.0,-0.0,-0.006,-0.0804,0.0529,11029.42 +190,60,19.75,13.04,29.59,0.28,24.58,13.62,44.45,-0.0098,-0.1233,0.0842,0.0,0.0,0.0,-0.0052,-0.129,0.0413,11081.32 +191,60,19.86,13.04,30.21,0.28,24.61,13.1,44.12,-0.0079,-0.1823,0.0993,0.0,-0.0,-0.0,0.0019,-0.0806,0.0666,11134.99 +192,60,19.72,12.36,31.0,0.28,24.46,12.78,44.68,-0.0079,-0.1772,0.0814,0.0,-0.0,-0.0,-0.0,-0.0757,0.0465,11188.8 +193,60,19.64,11.76,32.99,0.28,24.32,11.32,49.6,-0.0077,-0.1226,0.0992,0.0,0.0,0.0,0.0002,-0.0607,0.0546,11242.44 +194,60,19.25,9.41,34.02,0.28,23.76,8.73,53.01,-0.0111,-0.1022,0.1102,0.0,-0.0,-0.0,-0.0034,-0.0639,0.0479,11297.94 +195,60,19.43,10.47,31.91,0.28,23.93,9.68,50.09,-0.0078,-0.0774,0.0947,0.0,0.0,0.0,0.0033,-0.0506,0.0553,11351.09 +196,60,19.55,10.23,29.79,0.28,24.13,9.79,44.87,-0.0048,-0.0744,0.0746,0.0,-0.0,-0.0,0.003,-0.081,0.0539,11407.39 +197,60,19.36,12.09,26.88,0.28,23.88,12.87,37.9,-0.0062,-0.0844,0.0991,0.0,-0.0,-0.0,-0.0013,-0.0768,0.0501,11457.96 +198,60,19.71,12.5,28.0,0.28,24.36,12.15,40.39,-0.0012,-0.115,0.1213,0.0,0.0,0.0,0.005,-0.0435,0.0592,11509.16 +199,60,20.02,11.36,28.71,0.28,24.99,10.46,41.19,0.0043,-0.11,0.1037,0.0,0.0,0.0,0.0054,-0.0338,0.0402,11562.29 +200,60,19.9,11.36,29.17,0.3,24.98,10.49,42.11,0.0035,-0.0968,0.1087,0.0,-0.0,-0.0,-0.0008,-0.0661,0.034,11611.65 +201,60,19.94,11.36,28.42,0.3,25.0,10.82,42.04,0.0031,-0.0965,0.1221,0.0,-0.0,-0.0,-0.0004,-0.0673,0.0553,11665.64 +202,60,19.8,10.47,29.9,0.3,24.77,9.25,44.17,0.0007,-0.1147,0.0985,0.0,-0.0,-0.0,-0.0025,-0.0483,0.0649,11716.97 +203,60,19.93,9.2,32.65,0.3,24.95,7.75,49.33,0.0021,-0.1168,0.1203,0.0,0.0,0.0,0.0014,-0.0439,0.0491,11768.21 +204,60,19.96,11.9,29.9,0.3,25.06,11.82,45.93,0.0026,-0.1229,0.091,0.0,-0.0,-0.0,0.0006,-0.0484,0.0751,11824.16 +205,60,20.12,11.24,29.47,0.3,25.35,10.88,43.14,0.0046,-0.1136,0.1582,0.0,-0.0,-0.0,0.002,-0.0515,0.0672,11876.49 +206,26,19.42,10.98,29.21,0.38,24.28,10.95,42.11,-0.0029,-0.0909,0.1609,0.0,-0.0,-0.0,-0.0013,-0.0408,0.0396,11884.04 +207,60,20.1,6.94,30.38,0.12,25.42,5.76,46.27,0.0046,-0.0905,0.1734,0.0,-0.0,-0.0,0.0006,-0.0764,0.0717,11915.49 +208,60,20.08,8.0,31.25,0.17,25.43,7.02,48.81,0.004,-0.0734,0.1657,0.0,0.0,0.0,-0.0007,-0.086,0.0557,11969.37 +209,60,19.98,6.94,32.0,0.17,25.28,6.02,50.44,0.002,-0.0959,0.1517,0.0,-0.0,-0.0,-0.0019,-0.0756,0.0786,12005.51 +210,60,20.0,6.25,34.78,0.17,25.34,5.3,55.48,0.0022,-0.0862,0.1684,0.0,0.0,0.0,0.0001,-0.05,0.054,12024.19 +211,60,19.62,7.58,32.35,0.17,24.76,7.06,52.37,-0.003,-0.103,0.1144,0.0,-0.0,-0.0,-0.0052,-0.0668,0.0865,12078.35 +212,60,19.86,6.56,39.19,0.17,24.99,5.04,63.2,-0.0006,-0.1056,0.1856,0.0,0.0,0.0,0.0024,-0.0735,0.0789,12132.42 +213,60,20.18,11.11,37.14,0.17,25.45,11.29,63.53,0.0034,-0.1198,0.1574,0.0,-0.0,-0.0,0.004,-0.0835,0.0914,12183.93 +214,60,20.53,12.31,37.68,0.17,26.06,12.46,64.1,0.0079,-0.1202,0.136,0.0,0.0,0.0,0.0045,-0.0864,0.0911,12232.77 +215,60,20.46,10.94,30.99,0.24,26.09,11.64,49.29,0.0068,-0.1495,0.1859,0.0,-0.0,-0.0,-0.001,-0.1461,0.0874,12284.19 +216,60,20.49,10.96,31.08,0.17,26.15,11.7,45.74,0.0062,-0.1416,0.1655,0.0,-0.0,-0.0,-0.0006,-0.0663,0.107,12336.66 +217,60,20.36,10.39,31.33,0.17,25.98,10.46,48.74,0.0037,-0.1171,0.1629,0.0,0.0,0.0,-0.0025,-0.0513,0.0354,12386.22 +218,60,20.47,11.54,32.1,0.15,26.09,12.3,50.59,0.004,-0.0915,0.1512,0.0,-0.0,-0.0,0.0003,-0.069,0.0676,12436.11 +219,60,20.31,10.39,31.76,0.15,25.87,10.6,49.3,0.0015,-0.0917,0.134,0.0,0.0,0.0,-0.0025,-0.0624,0.0818,12486.01 +220,60,20.37,10.34,30.43,0.17,25.84,11.22,45.63,0.001,-0.1011,0.1165,0.0,-0.0,-0.0,-0.0005,-0.0673,0.074,12539.29 +221,60,20.66,13.79,31.18,0.17,26.18,15.45,47.25,0.0037,-0.086,0.1151,0.0,0.0,0.0,0.0027,-0.0405,0.0532,12595.05 +222,60,20.71,11.76,30.21,0.17,26.24,13.12,45.74,0.0035,-0.1451,0.0975,0.0,0.0,0.0,-0.0001,-0.0591,0.0503,12648.79 +223,60,20.46,10.71,29.47,0.17,25.85,11.43,43.63,-0.0003,-0.1342,0.084,0.0,0.0,0.0,-0.0038,-0.0741,0.0684,12701.58 +224,60,20.38,11.36,29.35,0.17,25.67,11.71,41.95,-0.0017,-0.144,0.0882,0.0,-0.0,-0.0,-0.0015,-0.0629,0.0548,12757.0 +225,60,19.95,11.24,30.53,0.17,24.99,10.83,44.22,-0.0071,-0.1648,0.0792,0.0,0.0,0.0,-0.0054,-0.0697,0.046,12813.44 +226,60,20.34,10.99,28.13,0.17,25.41,11.5,39.94,-0.0024,-0.1484,0.1113,0.0,0.0,0.0,0.0046,-0.0831,0.0743,12869.61 +227,60,20.64,12.22,29.0,0.17,25.95,11.33,41.46,0.0025,-0.1403,0.165,0.0,-0.0,-0.0,0.0049,-0.0513,0.0731,12923.92 +228,60,20.55,11.11,30.48,0.17,25.99,11.04,46.15,0.0024,-0.1296,0.1766,0.0,-0.0,-0.0,-0.0001,-0.0798,0.0523,12980.77 +229,60,20.29,11.11,29.7,0.17,25.66,9.75,45.93,-0.0008,-0.1307,0.1453,0.0,0.0,0.0,-0.0032,-0.0579,0.028,13034.13 +230,60,20.27,10.53,29.81,0.17,25.53,10.19,43.1,-0.0017,-0.1172,0.0994,0.0,-0.0,-0.0,-0.0009,-0.0759,0.0719,13089.06 +231,60,20.07,7.95,29.29,0.17,25.2,6.26,41.92,-0.0042,-0.1235,0.0865,0.0,-0.0,-0.0,-0.0025,-0.0653,0.0696,13141.21 +232,60,20.0,6.82,30.3,0.17,25.05,4.82,44.48,-0.0047,-0.1135,0.0905,0.0,-0.0,-0.0,-0.0006,-0.0481,0.0472,13192.66 +233,60,20.12,8.79,30.61,0.17,25.21,7.63,45.78,-0.0026,-0.0965,0.0991,0.0,0.0,0.0,0.0021,-0.0541,0.0583,13246.93 +234,60,19.85,9.89,30.93,0.17,24.82,9.6,46.47,-0.0054,-0.0957,0.0958,0.0,0.0,0.0,-0.0028,-0.0715,0.0513,13301.66 +235,60,20.09,12.09,30.85,0.24,25.12,12.8,46.27,-0.002,-0.1,0.1152,0.0,0.0,0.0,0.0034,-0.0596,0.0544,13353.16 +236,60,20.01,12.09,27.55,0.17,25.06,13.39,40.02,-0.0022,-0.1036,0.0953,0.0,0.0,0.0,-0.0001,-0.0666,0.0529,13405.98 +237,60,19.63,11.36,27.37,0.17,24.43,11.26,38.53,-0.007,-0.1252,0.0751,0.0,-0.0,-0.0,-0.0048,-0.0849,0.0478,13458.11 +238,60,19.64,11.24,27.96,0.17,24.27,11.05,38.84,-0.0072,-0.1184,0.0941,0.0,0.0,0.0,-0.0002,-0.0804,0.073,13508.11 +239,60,20.02,11.49,29.9,0.17,24.85,11.83,43.26,-0.0012,-0.1281,0.1311,0.0,-0.0,-0.0,0.006,-0.0525,0.0545,13562.12 +240,60,20.14,12.36,31.58,0.17,25.19,12.52,45.27,0.0018,-0.1279,0.1068,0.0,0.0,0.0,0.003,-0.0638,0.0526,13612.48 +241,60,20.04,13.64,29.03,0.17,25.11,14.29,41.88,0.0009,-0.121,0.1041,0.0,-0.0,-0.0,-0.0009,-0.0621,0.0454,13665.16 +242,60,20.19,13.48,27.66,0.17,25.31,14.88,40.5,0.0024,-0.102,0.1062,0.0,0.0,0.0,0.0015,-0.0679,0.049,13718.98 +243,60,20.06,11.49,30.3,0.17,25.16,11.28,44.4,0.0007,-0.093,0.1494,0.0,-0.0,-0.0,-0.0016,-0.064,0.0432,13775.65 +244,60,20.07,10.34,32.65,0.17,25.17,9.62,50.52,0.0007,-0.0914,0.1756,0.0,0.0,0.0,-0.0001,-0.0541,0.0513,13829.35 +245,60,20.04,10.23,30.93,0.17,25.12,9.62,49.1,0.0002,-0.0936,0.1344,0.0,-0.0,-0.0,-0.0005,-0.0822,0.0852,13883.1 +246,60,20.09,10.23,29.17,0.17,25.16,9.93,44.09,0.0005,-0.0863,0.0943,0.0,0.0,0.0,0.0003,-0.0769,0.0806,13934.97 +247,60,20.36,10.34,27.47,0.17,25.56,10.36,39.92,0.0037,-0.1144,0.0999,0.0,0.0,0.0,0.0032,-0.0896,0.0667,13986.77 +248,60,20.21,10.34,28.71,0.17,25.44,10.61,40.91,0.0021,-0.1098,0.1257,0.0,0.0,0.0,-0.0016,-0.09,0.0535,14040.17 +249,60,20.28,12.64,30.21,0.17,25.56,13.34,44.24,0.0027,-0.1201,0.1186,0.0,0.0,0.0,0.0007,-0.0603,0.0424,14088.5 +250,60,20.34,10.71,29.59,0.24,25.65,10.66,43.36,0.0031,-0.1023,0.127,0.0,-0.0,-0.0,0.0003,-0.0511,0.0743,14140.44 +251,60,20.29,11.76,30.0,0.24,25.57,11.97,45.09,0.0019,-0.087,0.1203,0.0,0.0,0.0,-0.0012,-0.0521,0.0624,14196.41 +252,60,19.89,11.36,28.57,0.24,24.94,11.64,42.74,-0.0036,-0.0604,0.0883,0.0,-0.0,-0.0,-0.0055,-0.0459,0.05,14249.1 +253,60,19.62,10.59,30.0,0.17,24.39,10.82,44.07,-0.0076,-0.0866,0.0893,0.0,0.0,0.0,-0.004,-0.057,0.0593,14302.6 +254,60,19.88,12.36,28.28,0.24,24.64,12.65,41.26,-0.0043,-0.0907,0.0605,0.0,0.0,0.0,0.0033,-0.049,0.0554,14355.28 +255,59,19.9,13.64,28.42,0.24,24.7,15.23,40.52,-0.0028,-0.1109,0.0791,0.0,-0.0,-0.0,0.0014,-0.0906,0.0742,14407.93 +256,60,19.99,13.64,29.79,0.22,24.82,15.26,42.58,-0.0016,-0.0993,0.0966,0.0,-0.0,-0.0,0.0013,-0.0846,0.0549,14461.46 +257,60,19.59,12.22,29.35,0.22,24.29,13.36,42.81,-0.0058,-0.1324,0.0986,0.0,-0.0,-0.0,-0.0041,-0.0647,0.0442,14512.52 +258,60,19.81,8.97,29.03,0.22,24.56,6.4,42.13,-0.0026,-0.1957,0.0835,0.0,0.0,0.0,0.0032,-0.0633,0.053,14567.18 +259,60,19.54,6.49,28.87,0.22,24.28,2.91,40.42,-0.0045,-0.1921,0.0749,0.0,-0.0,-0.0,-0.0019,-0.0437,0.0534,14622.99 +260,60,19.26,5.06,27.27,0.22,23.86,1.64,38.1,-0.0072,-0.1707,0.1119,0.0,-0.0,-0.0,-0.0028,-0.0501,0.0527,14674.69 +261,59,19.34,7.14,26.8,0.22,23.96,4.98,37.55,-0.0058,-0.1263,0.0794,0.0,0.0,0.0,0.0006,-0.0494,0.0613,14727.22 +262,59,19.75,9.64,27.55,0.1,24.58,8.36,38.47,0.0003,-0.0772,0.1038,0.0,0.0,0.0,0.0065,-0.0422,0.072,14779.09 +263,60,19.8,10.71,30.0,0.28,24.76,10.45,42.71,0.0024,-0.0674,0.1073,0.0,-0.0,-0.0,0.0026,-0.0909,0.06,14834.65 +264,60,19.88,11.76,29.59,0.28,24.92,12.29,43.28,0.0033,-0.0744,0.1534,0.0,0.0,0.0,0.0009,-0.0551,0.0829,14887.88 +265,60,19.8,11.63,29.59,0.28,24.79,11.43,45.05,0.0016,-0.0983,0.1494,0.0,-0.0,-0.0,-0.0017,-0.0555,0.0677,14941.77 +266,60,19.41,10.59,29.47,0.28,24.18,9.97,43.33,-0.0037,-0.1075,0.1102,0.0,0.0,0.0,-0.0053,-0.077,0.0517,14995.38 +267,59,19.37,9.3,29.79,0.28,24.03,8.38,43.07,-0.0043,-0.1284,0.1326,0.0,-0.0,-0.0,-0.0013,-0.0531,0.0696,15047.73 +268,59,19.1,7.14,27.96,0.21,23.58,4.87,39.16,-0.0074,-0.1478,0.1115,0.0,-0.0,-0.0,-0.0021,-0.0547,0.0752,15100.71 +269,60,19.14,5.95,29.17,0.21,23.58,3.55,42.35,-0.0062,-0.1278,0.1285,0.0,-0.0,-0.0,0.0009,-0.0461,0.0576,15155.13 +270,58,19.36,3.66,28.57,0.21,23.98,1.12,40.28,-0.0013,-0.1269,0.1084,0.0,0.0,0.0,0.003,-0.0606,0.0662,15211.1 +271,59,19.35,2.44,31.31,0.6,24.01,0.04,46.31,-0.001,-0.1147,0.131,0.0,0.0,0.0,0.0027,-0.0668,0.0521,15264.24 +272,59,19.39,5.88,30.61,0.38,24.17,4.59,46.81,0.0004,-0.0845,0.1228,0.0,0.0,0.0,-0.0,-0.0596,0.057,15317.66 +273,59,19.32,9.09,32.63,0.16,24.03,9.14,48.19,0.0002,-0.1242,0.1127,0.0,-0.0,-0.0,-0.0001,-0.0601,0.0475,15368.29 +274,57,19.59,12.22,32.29,0.07,24.4,13.25,49.24,0.0014,-0.1022,0.1195,0.0,0.0,0.0,0.0021,-0.09,0.0581,15426.03 +275,58,19.7,11.76,31.91,0.24,24.62,11.94,48.56,0.0036,-0.099,0.1335,0.0,-0.0,-0.0,0.0029,-0.0667,0.0613,15479.01 +276,60,19.84,9.64,32.29,0.06,24.97,8.8,48.65,0.0059,-0.1065,0.1517,0.0,-0.0,-0.0,0.0018,-0.0547,0.0553,15529.24 +277,59,20.01,9.52,32.0,0.24,25.33,8.65,49.17,0.0083,-0.0965,0.1399,0.0,0.0,0.0,0.002,-0.0666,0.0406,15583.47 +278,58,20.24,9.76,33.33,0.07,25.76,9.23,51.6,0.0098,-0.0867,0.1344,0.0,0.0,0.0,0.0011,-0.0644,0.0542,15632.13 +279,59,20.21,7.32,30.61,0.16,25.64,6.33,47.12,0.0078,-0.0842,0.109,0.0,0.0,0.0,0.001,-0.0577,0.0638,15677.1 +280,58,20.42,9.64,31.25,0.06,26.03,9.32,46.36,0.0089,-0.0593,0.1323,0.0,-0.0,-0.0,-0.0011,-0.0679,0.0379,15726.71 +281,60,20.15,10.71,31.25,0.06,25.58,11.12,46.16,0.0044,-0.0713,0.1374,0.0,-0.0,-0.0,-0.0044,-0.0638,0.0506,15780.48 +282,60,19.88,11.63,31.91,0.07,25.07,12.29,48.32,-0.0006,-0.1005,0.1381,0.0,0.0,0.0,-0.0051,-0.0583,0.0445,15835.29 +283,60,20.01,9.3,31.18,0.07,25.15,9.38,47.46,0.0002,-0.1106,0.1083,0.0,-0.0,-0.0,0.0008,-0.0483,0.0558,15886.86 +284,58,19.87,10.71,30.43,0.06,24.89,11.03,45.53,-0.0011,-0.1196,0.0823,0.0,-0.0,-0.0,-0.0009,-0.0599,0.0636,15937.63 +285,60,20.21,9.76,28.26,0.34,25.34,9.42,41.2,0.0019,-0.1369,0.1123,0.0,-0.0,-0.0,0.0026,-0.0606,0.0678,15989.34 +286,60,20.08,11.9,31.87,0.34,25.23,10.95,46.6,0.0006,-0.1226,0.1166,0.0,0.0,0.0,-0.0013,-0.0531,0.0657,16041.31 +287,59,20.09,12.35,32.97,0.34,25.22,12.08,50.21,0.0005,-0.14,0.1392,0.0,0.0,0.0,0.0006,-0.0491,0.0481,16095.39 +288,60,20.26,13.1,30.61,0.19,25.5,14.1,46.38,0.0028,-0.114,0.1506,0.0,-0.0,-0.0,0.0016,-0.0688,0.0759,16144.93 +289,60,20.52,12.5,30.3,0.19,25.9,13.03,46.76,0.0056,-0.0799,0.1287,0.0,-0.0,-0.0,0.0029,-0.0652,0.0698,16192.6 +290,60,20.65,12.79,30.85,0.19,26.15,13.76,46.92,0.0068,-0.0955,0.1086,0.0,-0.0,-0.0,0.0011,-0.0432,0.0464,16243.71 +291,60,20.53,11.76,32.26,0.19,25.99,10.7,47.26,0.0043,-0.1363,0.092,0.0,0.0,0.0,-0.0025,-0.0551,0.0681,16298.74 +292,60,20.21,12.79,35.05,0.19,25.46,11.67,53.23,-0.0008,-0.1054,0.1087,0.0,-0.0,-0.0,-0.0051,-0.0792,0.038,16351.86 +293,60,19.99,13.25,32.26,0.19,25.0,14.4,50.14,-0.0045,-0.0923,0.1071,0.0,0.0,0.0,-0.0037,-0.0498,0.0551,16403.39 +294,60,20.15,13.1,31.11,0.19,25.12,13.89,46.64,-0.0028,-0.0825,0.0758,0.0,0.0,0.0,0.0017,-0.0453,0.0792,16455.5 +295,60,20.24,13.95,30.68,0.19,25.28,15.41,44.49,-0.001,-0.1138,0.0745,0.0,0.0,0.0,0.0018,-0.065,0.0551,16505.06 +296,60,20.29,14.94,32.58,0.19,25.35,16.33,47.0,-0.0003,-0.1027,0.0682,0.0,0.0,0.0,0.0007,-0.0589,0.0566,16556.49 +297,60,20.24,13.48,32.95,0.19,25.31,14.05,48.52,-0.0005,-0.1206,0.0909,0.0,-0.0,-0.0,-0.0003,-0.0681,0.0778,16608.68 +298,59,20.25,14.44,31.4,0.19,25.33,15.16,46.21,-0.0004,-0.1387,0.1256,0.0,-0.0,-0.0,0.0008,-0.0694,0.0595,16662.84 +299,60,19.89,12.09,31.25,0.05,24.85,11.23,46.97,-0.0041,-0.1489,0.138,0.0,-0.0,-0.0,-0.0044,-0.0644,0.0615,16713.74 +300,60,20.26,10.84,33.67,0.05,25.35,10.68,52.27,0.0007,-0.0958,0.1592,0.0,0.0,0.0,0.0048,-0.05,0.075,16765.31 +301,60,20.24,7.32,30.21,0.05,25.47,5.74,47.43,0.0015,-0.1094,0.0923,0.0,-0.0,-0.0,0.0008,-0.0763,0.0469,16821.05 +302,60,20.8,12.64,30.53,0.05,26.3,12.51,45.89,0.0082,-0.0921,0.0906,0.0,-0.0,-0.0,0.0067,-0.0387,0.0743,16875.89 +303,60,20.93,12.64,30.93,0.05,26.65,12.94,45.77,0.0097,-0.0905,0.1059,0.0,0.0,0.0,0.0015,-0.0494,0.0632,16931.37 +304,59,21.03,13.79,30.11,0.05,26.8,14.51,42.42,0.0096,-0.0889,0.1019,0.0,-0.0,-0.0,0.0005,-0.0848,0.0469,16984.26 +305,60,20.39,10.71,29.41,0.17,25.87,10.65,42.88,0.0001,-0.0893,0.1159,0.0,-0.0,-0.0,-0.0102,-0.0555,0.0306,17037.64 +306,60,19.94,10.59,31.07,0.17,24.96,10.2,46.56,-0.0076,-0.1182,0.1272,0.0,0.0,0.0,-0.0076,-0.0617,0.0407,17093.61 +307,60,20.12,12.5,28.71,0.17,25.04,12.94,43.27,-0.0056,-0.1266,0.0959,0.0,0.0,0.0,0.0019,-0.0552,0.0619,17150.0 +308,56,20.06,12.5,28.42,0.17,25.01,13.23,38.99,-0.0065,-0.1103,0.0815,0.0,-0.0,-0.0,-0.0016,-0.0535,0.0665,17207.1 +309,59,20.04,13.04,28.71,0.09,24.91,14.15,40.89,-0.005,-0.0961,0.0958,0.0,0.0,0.0,0.003,-0.0525,0.0464,17262.3 +310,60,19.71,11.83,29.81,0.09,24.47,11.87,43.63,-0.0076,-0.1059,0.12,0.0,-0.0,-0.0,-0.0034,-0.0632,0.0452,17316.58 +311,54,20.17,12.22,27.62,0.09,25.02,11.32,37.5,-0.0012,-0.1194,0.1034,0.0,-0.0,-0.0,0.0082,-0.0404,0.0666,17369.46 +312,60,20.52,13.19,32.38,0.13,25.8,13.78,49.31,0.0049,-0.0829,0.1473,0.0,-0.0,-0.0,0.0051,-0.0428,0.0546,17423.58 +313,60,20.6,13.04,30.1,0.28,26.01,13.73,46.83,0.0059,-0.0976,0.102,0.0,-0.0,-0.0,0.001,-0.0731,0.0425,17478.6 +314,60,20.23,11.96,28.16,0.13,25.49,11.69,41.83,0.0005,-0.0999,0.0956,0.0,-0.0,-0.0,-0.0053,-0.0597,0.0343,17534.27 +315,60,20.36,10.87,28.85,0.1,25.6,10.96,42.08,0.0014,-0.0855,0.1011,0.0,-0.0,-0.0,0.0008,-0.0349,0.0459,17589.52 +316,58,20.84,11.7,28.43,0.13,26.35,12.09,41.85,0.0088,-0.086,0.0912,0.0,0.0,0.0,0.0068,-0.0459,0.0761,17641.53 +317,59,21.21,10.75,30.61,0.16,27.09,11.11,44.78,0.0122,-0.102,0.0971,0.0,0.0,0.0,0.0042,-0.0426,0.0529,17695.84 +318,60,21.13,12.77,31.68,0.22,27.08,13.81,47.72,0.0101,-0.0874,0.102,0.0,-0.0,-0.0,-0.002,-0.0718,0.055,17740.61 +319,59,21.37,12.22,31.96,0.22,27.42,11.71,48.91,0.0107,-0.116,0.1064,0.0,0.0,0.0,-0.0001,-0.0503,0.048,17789.35 +320,58,21.13,11.36,31.91,0.12,26.95,10.27,48.23,0.0066,-0.1086,0.1259,0.0,0.0,0.0,-0.0024,-0.0842,0.0643,17839.09 +321,60,20.59,10.23,31.96,0.17,26.18,9.01,48.98,-0.0019,-0.1381,0.0865,0.0,0.0,0.0,-0.0096,-0.0769,0.0369,17886.58 +322,60,20.3,11.24,31.91,0.13,25.51,10.59,48.62,-0.0072,-0.1004,0.0944,0.0,-0.0,-0.0,-0.0053,-0.0571,0.0532,17939.18 +323,59,20.0,11.11,30.68,0.13,24.87,10.91,44.76,-0.0102,-0.1116,0.0539,0.0,-0.0,-0.0,-0.0027,-0.0799,0.054,17984.2 +324,59,20.2,11.24,31.82,0.15,25.15,11.34,47.19,-0.0076,-0.0943,0.074,0.0,-0.0,-0.0,0.0013,-0.0541,0.0459,18036.78 +325,56,19.84,10.47,25.58,0.09,24.48,10.55,35.36,-0.0078,-0.0968,0.0941,0.0,0.0,0.0,0.0024,-0.0562,0.0699,18086.22 +326,56,20.11,13.58,28.92,0.45,25.05,14.12,42.73,-0.0072,-0.1206,0.1023,0.0,-0.0,-0.0,-0.002,-0.076,0.0836,18136.63 +327,60,19.97,12.2,27.66,0.27,24.77,12.63,38.05,-0.0069,-0.1203,0.1119,0.0,-0.0,-0.0,0.0014,-0.0857,0.064,18190.16 +328,60,19.71,12.05,28.26,0.27,24.43,11.7,40.81,-0.0085,-0.0993,0.1164,0.0,-0.0,-0.0,-0.0016,-0.0757,0.0354,18242.04 +329,60,19.49,10.84,28.74,0.15,24.08,10.06,41.28,-0.0101,-0.1133,0.1008,0.0,-0.0,-0.0,-0.0015,-0.0698,0.0611,18293.32 +330,60,19.83,11.76,29.07,0.45,24.54,12.22,41.56,-0.0045,-0.1073,0.0819,0.0,0.0,0.0,0.0055,-0.0478,0.0732,18342.81 +331,60,19.89,9.64,31.25,0.45,24.75,9.46,45.34,-0.002,-0.1298,0.1431,0.0,0.0,0.0,0.0025,-0.0609,0.1018,18396.1 +332,60,19.35,8.33,31.25,0.19,24.01,7.65,44.49,-0.0079,-0.1189,0.1121,0.0,0.0,0.0,-0.0058,-0.0827,0.0493,18448.53 +333,60,19.88,10.59,32.65,0.19,24.68,10.64,48.86,-0.001,-0.0962,0.1136,0.0,0.0,0.0,0.0069,-0.0509,0.0643,18503.86 +334,60,19.58,12.5,34.34,0.19,24.41,12.93,53.17,-0.0031,-0.1157,0.1306,0.0,-0.0,-0.0,-0.0021,-0.0457,0.0459,18555.69 +335,59,19.65,10.59,33.33,0.19,24.47,10.0,52.55,-0.0028,-0.0995,0.1037,0.0,-0.0,-0.0,-0.0007,-0.0701,0.044,18606.14 +336,59,19.85,11.9,29.17,0.08,24.77,12.62,42.87,0.001,-0.0749,0.0834,0.0,0.0,0.0,0.0032,-0.0979,0.0502,18657.75 +337,60,19.54,10.47,29.79,0.03,24.36,10.37,42.89,-0.0027,-0.0914,0.1145,0.0,0.0,0.0,-0.0021,-0.0812,0.0651,18706.57 +338,60,20.1,10.71,31.91,0.03,25.17,10.19,46.98,0.0045,-0.0845,0.1183,0.0,0.0,0.0,0.0072,-0.043,0.0468,18756.61 +339,60,19.84,10.71,30.85,0.03,24.99,10.16,47.26,0.0022,-0.0912,0.1302,0.0,-0.0,-0.0,-0.0023,-0.0695,0.0691,18810.01 +340,60,19.66,9.52,29.79,0.03,24.65,9.1,45.08,-0.0009,-0.0961,0.163,0.0,-0.0,-0.0,-0.0032,-0.0714,0.0514,18861.76 +341,60,19.82,10.47,30.21,0.03,24.78,9.83,45.94,0.0003,-0.1181,0.1721,0.0,0.0,0.0,0.0012,-0.0811,0.0587,18912.84 +342,60,20.52,10.59,30.77,0.03,25.84,10.09,46.09,0.0091,-0.0999,0.1447,0.0,-0.0,-0.0,0.0088,-0.0555,0.0768,18963.12 +343,60,20.33,11.49,30.85,0.03,25.77,11.61,47.42,0.007,-0.1254,0.1317,0.0,-0.0,-0.0,-0.0022,-0.0664,0.0529,19014.2 +344,60,20.36,11.49,30.0,0.03,25.79,12.0,45.88,0.006,-0.1151,0.0976,0.0,0.0,0.0,-0.001,-0.0414,0.0591,19063.24 +345,60,20.14,10.71,34.41,0.03,25.49,10.31,50.69,0.0025,-0.1113,0.1106,0.0,-0.0,-0.0,-0.0035,-0.0689,0.0686,19116.43 +346,60,19.87,9.52,32.97,0.03,25.0,8.5,51.37,-0.002,-0.1135,0.1118,0.0,-0.0,-0.0,-0.0044,-0.0616,0.0676,19169.62 +347,60,19.68,11.49,32.61,0.03,24.56,11.22,50.59,-0.0053,-0.11,0.1265,0.0,0.0,0.0,-0.0033,-0.0674,0.0565,19220.9 +348,60,19.33,12.79,30.85,0.03,23.96,12.71,47.0,-0.0095,-0.1198,0.124,0.0,-0.0,-0.0,-0.0042,-0.0565,0.0659,19273.06 +349,59,19.44,11.9,31.18,0.03,24.05,11.07,47.91,-0.0081,-0.1135,0.1274,0.0,-0.0,-0.0,0.0017,-0.0646,0.0648,19321.87 +350,60,19.54,12.2,30.0,0.26,24.2,12.48,45.71,-0.0045,-0.0825,0.0935,0.0,-0.0,-0.0,0.0033,-0.0406,0.0584,19375.7 +351,60,19.19,11.9,30.53,0.26,23.72,12.36,45.14,-0.0078,-0.0975,0.109,0.0,0.0,0.0,-0.0032,-0.0665,0.0544,19427.96 +352,60,18.92,9.64,29.79,0.26,23.21,8.85,44.78,-0.0108,-0.105,0.0889,0.0,-0.0,-0.0,-0.003,-0.0873,0.0645,19477.43 +353,60,19.01,12.2,27.37,0.26,23.23,12.81,40.1,-0.0088,-0.1188,0.0992,0.0,0.0,0.0,0.002,-0.0537,0.0527,19533.95 +354,60,18.85,10.47,29.9,0.26,23.02,10.88,42.68,-0.009,-0.0944,0.0903,0.0,-0.0,-0.0,-0.0003,-0.0516,0.0587,19585.39 +355,60,19.19,10.23,30.53,0.26,23.53,10.24,44.48,-0.0033,-0.1465,0.1053,0.0,-0.0,-0.0,0.0057,-0.071,0.0756,19637.31 +356,60,19.48,11.24,30.0,0.26,24.13,11.65,43.67,0.0022,-0.1443,0.133,0.0,0.0,0.0,0.0055,-0.0473,0.0572,19688.19 +357,60,19.63,12.36,30.61,0.26,24.49,12.9,46.21,0.0048,-0.1034,0.1206,0.0,0.0,0.0,0.0026,-0.0512,0.0811,19740.93 +358,60,19.59,10.34,30.93,0.26,24.47,9.93,47.21,0.0039,-0.1247,0.1088,0.0,-0.0,-0.0,-0.0009,-0.0863,0.0567,19793.5 +359,60,19.45,9.52,28.87,0.26,24.25,8.64,42.16,0.0014,-0.1442,0.1036,0.0,0.0,0.0,-0.0025,-0.0941,0.0342,19843.81 +360,60,19.33,10.47,27.37,0.26,24.02,10.08,39.38,-0.0008,-0.1237,0.0833,0.0,0.0,0.0,-0.0021,-0.0605,0.0469,19893.25 +361,60,19.7,11.49,27.96,0.26,24.5,11.9,39.43,0.0034,-0.137,0.0811,0.0,0.0,0.0,0.0041,-0.0423,0.0776,19942.97 +362,60,19.74,11.76,29.67,0.26,24.65,12.76,42.47,0.0041,-0.1172,0.1105,0.0,-0.0,-0.0,0.0007,-0.0643,0.0403,19996.73 +363,60,19.56,8.24,30.85,0.26,24.44,7.32,45.24,0.0016,-0.1096,0.1085,0.0,-0.0,-0.0,-0.0024,-0.0787,0.053,20050.16 +364,59,19.56,9.41,31.91,0.26,24.45,8.6,47.74,0.0018,-0.0865,0.0962,0.0,0.0,0.0,-0.0004,-0.0493,0.042,20099.77 +365,58,19.4,9.52,26.37,0.17,24.11,9.13,36.26,-0.0012,-0.073,0.0671,0.0,-0.0,-0.0,-0.0019,-0.1135,0.0577,20150.76 +366,60,19.45,10.71,26.97,0.26,24.11,10.95,36.44,-0.0015,-0.0746,0.0678,0.0,-0.0,-0.0,-0.0009,-0.0613,0.0623,20203.26 +367,60,19.42,11.76,26.67,0.17,24.04,12.68,36.44,-0.0018,-0.0994,0.0713,0.0,-0.0,-0.0,-0.0003,-0.0845,0.0555,20256.6 +368,60,19.64,13.48,27.96,0.17,24.36,14.65,39.45,0.0011,-0.1046,0.0967,0.0,0.0,0.0,0.0029,-0.0558,0.0509,20304.02 +369,59,19.91,12.79,28.09,0.17,24.86,13.51,39.97,0.0043,-0.0788,0.1241,0.0,0.0,0.0,0.0031,-0.0422,0.058,20355.27 +370,60,20.33,13.25,29.79,0.15,25.61,14.18,43.84,0.0107,-0.094,0.1625,0.0,-0.0,-0.0,0.0064,-0.0328,0.0516,20406.85 +371,60,20.27,11.9,27.47,0.15,25.66,12.83,41.72,0.0093,-0.1141,0.1178,0.0,-0.0,-0.0,-0.0013,-0.048,0.0711,20457.07 +372,60,20.52,9.64,28.89,0.15,26.03,9.63,42.42,0.0109,-0.1003,0.104,0.0,0.0,0.0,0.0015,-0.0592,0.0548,20508.64 +373,60,19.92,8.43,31.18,0.15,25.18,7.87,46.71,0.002,-0.0932,0.1224,0.0,-0.0,-0.0,-0.0089,-0.0782,0.0523,20560.86 +374,60,20.12,9.64,29.67,0.15,25.29,9.48,45.15,0.0025,-0.1344,0.089,0.0,0.0,0.0,0.0005,-0.0462,0.0484,20610.15 +375,60,20.13,8.86,30.43,0.16,25.35,8.43,45.58,0.0026,-0.1177,0.0881,0.0,-0.0,-0.0,0.0001,-0.0541,0.0542,20660.01 +376,60,20.0,8.86,29.03,0.17,25.18,8.05,42.97,0.0008,-0.1039,0.092,0.0,0.0,0.0,-0.0018,-0.0543,0.0439,20710.9 +377,60,20.37,7.59,31.18,0.19,25.72,6.63,44.51,0.0051,-0.1198,0.1487,0.0,-0.0,-0.0,0.0043,-0.0635,0.0778,20760.67 +378,60,20.37,10.13,31.58,0.19,25.85,10.01,48.1,0.0054,-0.1539,0.1394,0.0,0.0,0.0,0.0003,-0.0711,0.0703,20809.41 +379,60,20.18,7.5,30.77,0.2,25.61,7.05,46.99,0.0025,-0.1482,0.1069,0.0,-0.0,-0.0,-0.0029,-0.0748,0.0525,20859.73 +380,60,20.19,6.17,31.87,0.21,25.57,5.27,48.42,0.0017,-0.1464,0.1048,0.0,0.0,0.0,-0.0008,-0.0582,0.0639,20909.84 +381,60,19.8,7.32,29.67,0.22,24.97,6.56,43.57,-0.0036,-0.1364,0.1008,0.0,0.0,0.0,-0.0052,-0.1069,0.0462,20959.54 +382,60,19.84,9.41,29.03,0.22,24.91,8.19,41.47,-0.0035,-0.112,0.1188,0.0,0.0,0.0,0.0001,-0.0663,0.0647,21009.22 +383,60,20.44,11.11,31.91,0.22,25.79,10.54,48.0,0.0045,-0.0942,0.1579,0.0,-0.0,-0.0,0.008,-0.0618,0.0809,21056.16 +384,60,20.85,10.71,32.63,0.22,26.6,11.22,51.35,0.0105,-0.1011,0.1734,0.0,-0.0,-0.0,0.006,-0.0558,0.0707,21107.47 +385,60,21.0,11.11,31.58,0.22,26.97,11.48,48.99,0.0118,-0.112,0.1796,0.0,-0.0,-0.0,0.0013,-0.0565,0.0751,21159.0 +386,60,21.18,12.35,31.18,0.22,27.23,13.24,49.15,0.012,-0.1323,0.151,0.0,-0.0,-0.0,0.0002,-0.0633,0.0575,21205.87 +387,60,21.35,8.64,33.33,0.22,27.52,6.19,52.45,0.0124,-0.1737,0.1534,0.0,0.0,0.0,0.0004,-0.0871,0.057,21257.45 +388,60,21.36,10.0,31.87,0.22,27.59,7.82,48.46,0.0109,-0.1451,0.1227,0.0,-0.0,-0.0,-0.0015,-0.0708,0.058,21304.53 +389,60,21.45,12.2,31.46,0.22,27.63,11.38,47.86,0.0095,-0.1126,0.1071,0.0,0.0,0.0,-0.0014,-0.0705,0.069,21351.55 +390,60,21.5,12.2,31.03,0.22,27.67,13.48,45.7,0.0082,-0.1001,0.113,0.0,-0.0,-0.0,-0.0012,-0.0413,0.0678,21398.68 +391,60,21.82,14.46,30.23,0.22,28.13,16.07,44.27,0.0106,-0.112,0.1061,0.0,0.0,0.0,0.0024,-0.0412,0.0756,21446.74 +392,60,21.83,13.41,28.89,0.22,28.2,14.17,42.47,0.0095,-0.0887,0.101,0.0,-0.0,-0.0,-0.0012,-0.0818,0.0678,21492.91 +393,60,21.65,14.29,30.43,0.22,27.91,14.95,44.92,0.0055,-0.0911,0.0979,0.0,0.0,0.0,-0.004,-0.0527,0.0413,21536.1 +394,60,21.61,14.29,31.52,0.22,27.8,15.75,47.31,0.0036,-0.1388,0.1456,0.0,0.0,0.0,-0.0019,-0.0799,0.0628,21580.88 +395,60,21.8,13.75,35.16,0.22,28.07,14.82,53.66,0.0053,-0.125,0.162,0.0,0.0,0.0,0.0017,-0.0999,0.0652,21626.94 +396,60,21.87,12.5,35.16,0.22,28.27,12.13,57.1,0.0061,-0.1292,0.1592,0.0,-0.0,-0.0,0.0008,-0.0679,0.0604,21678.03 +397,60,21.59,13.75,33.33,0.22,27.81,13.87,54.46,0.0012,-0.1084,0.1377,0.0,-0.0,-0.0,-0.0049,-0.0812,0.0463,21726.11 +398,60,21.42,14.1,34.83,0.22,27.4,14.41,55.74,-0.0024,-0.1202,0.1062,0.0,0.0,0.0,-0.0036,-0.0444,0.0624,21774.72 +399,60,21.52,13.58,39.77,0.22,27.48,14.69,65.09,-0.0013,-0.1046,0.1637,0.0,-0.0,-0.0,0.0011,-0.0755,0.0672,21826.62 +400,60,21.31,14.63,38.1,0.22,27.19,16.37,65.57,-0.0035,-0.1087,0.1404,0.0,-0.0,-0.0,-0.0021,-0.074,0.0756,21870.27 +401,60,21.69,11.84,40.96,0.22,27.74,12.53,70.93,0.0016,-0.1058,0.1617,0.0,0.0,0.0,0.0051,-0.0844,0.062,21914.79 +402,60,21.82,11.69,37.97,0.22,28.09,11.94,66.78,0.0043,-0.12,0.1001,0.0,-0.0,-0.0,0.0027,-0.0905,0.0766,21965.91 +403,60,21.74,13.25,40.0,0.22,28.06,13.67,68.54,0.0033,-0.163,0.0982,0.0,-0.0,-0.0,-0.001,-0.061,0.0643,22015.13 +404,60,21.29,11.9,37.97,0.22,27.34,11.81,64.9,-0.0032,-0.1446,0.0999,0.0,0.0,0.0,-0.0066,-0.0846,0.0452,22064.61 +405,60,21.05,11.25,33.33,0.22,26.78,11.36,53.85,-0.0074,-0.1128,0.1272,0.0,-0.0,-0.0,-0.0042,-0.1006,0.0634,22115.56 +406,60,20.91,9.76,32.0,0.22,26.47,9.17,47.7,-0.0087,-0.1008,0.1327,0.0,0.0,0.0,-0.0014,-0.0474,0.0766,22163.43 +407,60,20.9,8.54,32.63,0.22,26.4,7.6,50.82,-0.0078,-0.1108,0.1366,0.0,-0.0,-0.0,0.0009,-0.0561,0.066,22213.23 +408,60,21.36,8.64,33.33,0.22,27.1,7.86,50.82,-0.0007,-0.1686,0.1138,0.0,-0.0,-0.0,0.0071,-0.0578,0.092,22258.98 +409,60,21.41,8.54,31.52,0.22,27.31,7.97,49.03,0.0011,-0.2006,0.0815,0.0,-0.0,-0.0,0.0018,-0.0667,0.0487,22310.66 +410,60,21.26,9.21,32.61,0.22,27.08,7.96,49.98,-0.0009,-0.1851,0.1,0.0,0.0,0.0,-0.0021,-0.0536,0.0559,22360.19 +411,60,20.92,12.66,30.34,0.22,26.51,12.62,45.96,-0.0055,-0.2061,0.1011,0.0,-0.0,-0.0,-0.0046,-0.0693,0.0797,22410.62 +412,60,20.62,11.11,28.57,0.22,25.93,10.79,40.42,-0.0095,-0.1604,0.1129,0.0,0.0,0.0,-0.004,-0.0821,0.0492,22459.66 +413,60,20.65,8.86,28.74,0.22,25.86,7.46,41.32,-0.0085,-0.1257,0.0918,0.0,0.0,0.0,0.001,-0.0461,0.0726,22505.95 +414,60,20.88,10.13,30.85,0.22,26.23,9.13,44.7,-0.0039,-0.1218,0.1052,0.0,-0.0,-0.0,0.0045,-0.063,0.0538,22553.99 +415,60,20.78,10.0,33.33,0.22,26.19,9.41,50.38,-0.0036,-0.1372,0.1386,0.0,0.0,0.0,0.0003,-0.0827,0.0558,22602.21 +416,60,20.69,11.39,31.46,0.22,26.06,11.48,46.24,-0.0042,-0.1389,0.1152,0.0,-0.0,-0.0,-0.0005,-0.0757,0.054,22652.34 +417,60,20.5,11.11,31.03,0.22,25.76,10.24,46.49,-0.006,-0.1153,0.1035,0.0,-0.0,-0.0,-0.0018,-0.0585,0.0673,22699.09 +418,60,20.36,10.84,32.26,0.22,25.52,10.11,48.68,-0.0069,-0.1118,0.1209,0.0,0.0,0.0,-0.001,-0.094,0.0489,22748.66 +419,60,19.93,8.54,30.43,0.22,24.85,7.35,46.75,-0.0114,-0.0992,0.0847,0.0,0.0,0.0,-0.0045,-0.0597,0.0655,22795.67 +420,60,19.76,7.5,29.07,0.22,24.47,6.09,42.43,-0.0126,-0.1096,0.1021,0.0,-0.0,-0.0,-0.0012,-0.0501,0.0729,22849.75 +421,60,18.71,8.43,28.24,0.24,22.88,7.49,39.4,-0.0238,-0.1588,0.1132,0.0,-0.0,-0.0,-0.0112,-0.0902,0.0424,22905.35 +422,60,16.96,7.5,25.61,0.25,20.03,6.41,36.59,-0.0436,-0.1717,0.0772,0.0,0.0,0.0,-0.0197,-0.0699,0.0155,22963.11 +423,60,14.85,7.23,23.91,0.26,16.53,5.83,32.97,-0.0654,-0.1888,0.0341,0.0,0.0,0.0,-0.0219,-0.0858,0.0143,23023.16 +424,60,12.88,7.06,23.91,0.27,13.36,4.18,31.8,-0.081,-0.187,0.0187,0.0,-0.0,-0.0,-0.0156,-0.0641,0.0177,23083.72 +425,60,10.88,3.57,20.88,0.28,10.44,0.03,26.6,-0.0918,-0.1853,-0.0232,0.0,-0.0,-0.0,-0.0108,-0.0642,0.0307,23143.25 +426,60,8.86,2.33,16.67,0.29,7.72,0.0,19.02,-0.0993,-0.1939,-0.0374,0.0,0.0,0.0,-0.0075,-0.0585,0.0215,23203.07 +427,60,6.9,2.27,14.44,0.3,5.25,0.0,14.71,-0.1035,-0.1803,-0.0469,0.0,0.0,0.0,-0.0042,-0.0486,0.0314,23263.55 +428,60,4.98,1.14,13.04,0.31,3.13,0.0,12.47,-0.1053,-0.1929,-0.0387,0.0,-0.0,-0.0,-0.0018,-0.0422,0.0215,23323.6 +429,60,3.26,0.0,10.87,0.31,1.52,0.0,9.63,-0.105,-0.1836,-0.0431,0.0,-0.0,-0.0,0.0003,-0.0583,0.0317,23383.39 +430,60,1.72,0.0,4.49,0.31,0.42,0.0,3.49,-0.1049,-0.1814,-0.0416,0.0,0.0,0.0,0.0001,-0.0512,0.0215,23443.5 +431,60,0.85,0.0,4.44,0.31,0.2,0.0,3.72,-0.1027,-0.1836,-0.0284,0.0,0.0,0.0,0.0022,-0.0204,0.0302,23503.35 +432,60,0.82,0.0,5.43,0.32,0.24,0.0,5.08,-0.0986,-0.1855,-0.0159,0.0,-0.0,-0.0,0.0041,-0.0083,0.0293,23563.09 +433,60,0.84,0.0,5.43,0.32,0.28,0.0,5.22,-0.0947,-0.1762,-0.0121,0.0,-0.0,-0.0,0.004,-0.0049,0.0232,23622.4 +434,60,0.76,0.0,4.35,0.33,0.29,0.0,4.0,-0.0918,-0.178,-0.004,0.0,0.0,0.0,0.0029,-0.0145,0.0139,23683.12 +435,60,0.78,0.0,4.44,0.34,0.32,0.0,4.07,-0.0888,-0.1719,-0.0028,0.0,-0.0,-0.0,0.0031,-0.0037,0.0112,23743.2 +436,60,0.82,0.0,4.44,0.34,0.3,0.0,4.09,-0.0855,-0.1718,-0.0132,0.0,-0.0,-0.0,0.0032,-0.019,0.0209,23803.34 +437,60,0.95,0.0,4.4,0.35,0.34,0.0,4.08,-0.0809,-0.162,-0.0112,0.0,0.0,0.0,0.0047,-0.0058,0.0204,23863.44 +438,60,0.98,0.0,3.33,0.35,0.37,0.0,2.82,-0.0762,-0.1538,-0.0096,0.0,0.0,0.0,0.0046,-0.0089,0.0268,23923.19 +439,60,1.0,0.0,3.33,0.36,0.44,0.0,2.79,-0.0717,-0.1565,-0.0077,0.0,-0.0,-0.0,0.0045,-0.0083,0.0208,23983.18 +440,60,1.07,0.0,4.4,0.36,0.5,0.0,3.94,-0.0671,-0.1589,-0.0062,0.0,-0.0,-0.0,0.0046,-0.0086,0.0306,24043.0 +441,60,1.04,0.0,4.44,0.36,0.48,0.0,4.15,-0.0633,-0.1611,-0.0054,0.0,-0.0,-0.0,0.0038,-0.0203,0.0189,24103.62 +442,60,1.06,0.0,4.44,0.36,0.49,0.0,4.22,-0.0591,-0.1632,-0.0039,0.0,0.0,0.0,0.0042,-0.0182,0.0266,24162.44 +443,60,1.19,0.0,4.4,0.37,0.63,0.0,4.2,-0.0538,-0.1651,0.0105,0.0,-0.0,-0.0,0.0054,-0.004,0.0315,24222.73 +444,60,1.23,0.0,4.4,0.34,0.68,0.0,4.51,-0.0493,-0.1669,0.0094,0.0,-0.0,-0.0,0.0044,-0.0104,0.0214,24283.12 +445,60,1.27,0.0,4.44,0.31,0.76,0.0,4.54,-0.0449,-0.1685,0.0082,0.0,0.0,0.0,0.0044,-0.0113,0.0214,24342.46 +446,60,1.22,0.0,4.44,0.31,0.74,0.0,4.56,-0.0418,-0.17,0.0065,0.0,0.0,0.0,0.0031,-0.0211,0.0212,24402.77 +447,60,1.2,0.0,4.4,0.31,0.75,0.0,4.73,-0.0388,-0.1714,0.0161,0.0,-0.0,-0.0,0.0031,-0.0096,0.0204,24462.93 +448,60,1.18,0.0,4.49,0.31,0.79,0.0,4.85,-0.036,-0.1727,0.0144,0.0,-0.0,-0.0,0.0028,-0.0219,0.0228,24522.7 +449,60,1.24,0.0,4.44,0.32,0.9,0.0,4.72,-0.0331,-0.1738,0.011,0.0,-0.0,-0.0,0.003,-0.0123,0.0182,24583.05 +450,60,1.29,0.0,4.44,0.32,0.92,0.0,4.66,-0.0306,-0.1642,0.0087,0.0,-0.0,-0.0,0.0025,-0.0105,0.0197,24642.65 +451,60,1.26,0.0,4.49,0.21,0.94,0.0,4.68,-0.0287,-0.1545,0.0095,0.0,0.0,0.0,0.0019,-0.0106,0.0155,24703.07 +452,60,1.17,0.0,4.44,0.19,0.92,0.0,4.52,-0.0278,-0.1447,0.0058,0.0,0.0,0.0,0.0009,-0.013,0.0256,24762.94 +453,60,1.05,0.0,4.4,0.32,0.77,0.0,4.66,-0.0279,-0.1252,0.0107,0.0,-0.0,-0.0,-0.0001,-0.035,0.0202,24822.71 +454,60,1.0,0.0,4.4,0.32,0.7,0.0,4.67,-0.027,-0.1255,0.0091,0.0,-0.0,-0.0,0.0009,-0.0114,0.0202,24882.61 +455,60,1.07,0.0,4.4,0.32,0.83,0.0,4.63,-0.0247,-0.1259,0.0094,0.0,0.0,0.0,0.0023,-0.0232,0.0204,24943.03 +456,60,1.11,0.0,5.62,0.3,0.91,0.0,6.12,-0.0232,-0.1262,0.0184,0.0,-0.0,-0.0,0.0015,-0.0099,0.0281,25002.65 +457,60,1.09,0.0,4.26,0.28,0.89,0.0,4.52,-0.0227,-0.1265,0.0158,0.0,0.0,0.0,0.0005,-0.0264,0.0219,25062.7 +458,60,1.02,0.0,4.26,0.25,0.81,0.0,4.53,-0.0227,-0.1267,0.0122,0.0,0.0,0.0,0.0,-0.0124,0.0108,25122.0 +459,60,0.94,0.0,4.35,0.23,0.76,0.0,4.59,-0.0227,-0.127,0.0101,0.0,0.0,0.0,0.0,-0.0112,0.0144,25183.53 +460,60,0.83,0.0,4.3,0.22,0.62,0.0,4.49,-0.0233,-0.1272,0.007,0.0,0.0,0.0,-0.0006,-0.0125,0.0111,25243.07 +461,60,0.86,0.0,3.26,0.2,0.67,0.0,3.25,-0.0222,-0.1274,0.0055,0.0,0.0,0.0,0.0011,-0.0123,0.0212,25302.69 +462,60,0.99,0.0,3.26,0.18,0.76,0.0,3.26,-0.0202,-0.1276,0.0074,0.0,0.0,0.0,0.002,-0.0109,0.0215,25362.38 +463,60,0.94,0.0,3.33,0.17,0.72,0.0,3.4,-0.0196,-0.1278,0.0097,0.0,0.0,0.0,0.0006,-0.0114,0.0153,25422.92 +464,60,0.97,0.0,3.37,0.16,0.81,0.0,3.45,-0.0183,-0.128,0.0186,0.0,0.0,0.0,0.0013,-0.0116,0.0252,25482.53 +465,60,0.92,0.0,4.3,0.14,0.77,0.0,4.78,-0.0183,-0.1281,0.0267,0.0,0.0,0.0,-0.0,-0.0133,0.0103,25542.34 +466,60,0.99,0.0,4.26,0.13,0.82,0.0,4.67,-0.0172,-0.1283,0.0213,0.0,0.0,0.0,0.0011,-0.0122,0.0166,25602.36 +467,60,0.95,0.0,3.33,0.12,0.78,0.0,3.72,-0.017,-0.1284,0.019,0.0,0.0,0.0,0.0003,-0.0151,0.0101,25663.19 +468,60,0.97,0.0,4.49,0.11,0.84,0.0,4.68,-0.0162,-0.1285,0.0152,0.0,0.0,0.0,0.0008,-0.0108,0.016,25722.9 +469,60,1.03,0.0,4.55,0.23,0.91,0.0,4.79,-0.0153,-0.1286,0.0156,0.0,-0.0,-0.0,0.0008,-0.0108,0.0238,25782.14 +470,60,0.99,0.0,3.37,0.23,0.88,0.0,3.69,-0.0156,-0.1287,0.0137,0.0,-0.0,-0.0,-0.0003,-0.0134,0.0139,25843.24 +471,60,1.05,0.0,3.41,0.24,0.91,0.0,3.68,-0.0149,-0.1288,0.0168,0.0,-0.0,-0.0,0.0007,-0.0116,0.0135,25902.73 +472,60,0.92,0.0,4.35,0.24,0.83,0.0,4.69,-0.0158,-0.1289,0.0246,0.0,0.0,0.0,-0.0009,-0.0228,0.0154,25961.82 +473,60,1.04,0.0,4.44,0.08,0.95,0.0,4.76,-0.0147,-0.129,0.0211,0.0,0.0,0.0,0.0011,-0.0121,0.0215,26022.78 +474,60,1.02,0.0,4.44,0.07,0.93,0.0,4.67,-0.0149,-0.129,0.0174,0.0,0.0,0.0,-0.0003,-0.0228,0.0218,26083.02 +475,60,1.07,0.0,4.49,0.07,1.01,0.0,4.66,-0.0144,-0.1291,0.015,0.0,0.0,0.0,0.0005,-0.0133,0.0121,26142.45 +476,60,0.96,0.0,4.44,0.07,0.88,0.0,4.53,-0.0157,-0.1292,0.0123,0.0,-0.0,-0.0,-0.0013,-0.0138,0.0126,26202.41 +477,60,0.98,0.0,4.4,0.07,0.87,0.0,4.41,-0.0156,-0.1292,0.0113,0.0,-0.0,-0.0,0.0001,-0.0128,0.0121,26263.15 +478,60,1.03,0.0,4.35,0.19,0.89,0.0,4.3,-0.015,-0.1293,0.0158,0.0,0.0,0.0,0.0007,-0.0119,0.0107,26322.52 +479,60,1.07,0.0,4.49,0.19,0.96,0.0,5.07,-0.0141,-0.1293,0.0247,0.0,-0.0,-0.0,0.0009,-0.0208,0.0232,26382.87 +480,60,1.09,0.0,5.62,0.19,0.99,0.0,6.45,-0.0137,-0.1294,0.0321,0.0,-0.0,-0.0,0.0004,-0.0132,0.0107,26442.25 +481,60,0.96,0.0,5.62,0.19,0.87,0.0,6.4,-0.0149,-0.1294,0.0263,0.0,-0.0,-0.0,-0.0012,-0.0219,0.013,26501.3 +482,60,0.97,0.0,5.56,0.2,0.91,0.0,6.2,-0.0146,-0.1295,0.0203,0.0,-0.0,-0.0,0.0002,-0.0118,0.0133,26562.74 +483,60,0.88,0.0,5.49,0.09,0.82,0.0,6.02,-0.0157,-0.1295,0.0154,0.0,-0.0,-0.0,-0.0011,-0.025,0.0128,26621.86 +484,60,0.94,0.0,5.56,0.09,0.87,0.0,6.01,-0.0153,-0.1295,0.0165,0.0,-0.0,-0.0,0.0004,-0.0224,0.0147,26681.92 +485,60,0.88,0.0,4.44,0.09,0.81,0.0,4.76,-0.016,-0.1296,0.0137,0.0,-0.0,-0.0,-0.0007,-0.0144,0.0142,26742.25 +486,60,0.92,0.0,4.44,0.2,0.84,0.0,4.76,-0.0158,-0.1296,0.0114,0.0,-0.0,-0.0,0.0003,-0.0229,0.0141,26802.13 +487,60,0.92,0.0,4.49,0.2,0.86,0.0,4.77,-0.0157,-0.1296,0.0097,0.0,0.0,0.0,0.0001,-0.0107,0.0132,26862.31 +488,60,0.92,0.0,4.49,0.19,0.82,0.0,4.72,-0.0159,-0.1296,0.0078,0.0,-0.0,-0.0,-0.0001,-0.0129,0.0135,26922.56 +489,60,0.86,0.0,3.23,0.17,0.77,0.0,3.32,-0.0162,-0.1297,0.0096,0.0,0.0,0.0,-0.0003,-0.0248,0.0116,26982.47 +490,60,0.83,0.0,3.37,0.11,0.75,0.0,3.59,-0.0163,-0.1297,0.0115,0.0,-0.0,-0.0,-0.0001,-0.0117,0.0114,27041.15 +491,60,0.88,0.0,4.17,0.12,0.8,0.0,4.46,-0.0157,-0.1297,0.0139,0.0,0.0,0.0,0.0006,-0.0115,0.0117,27102.14 +492,60,0.88,0.0,3.3,0.12,0.77,0.0,3.45,-0.0156,-0.1187,0.0086,0.0,-0.0,-0.0,0.0001,-0.0129,0.014,27162.34 +493,60,0.9,0.0,3.3,0.12,0.77,0.0,3.53,-0.015,-0.1079,0.0144,0.0,0.0,0.0,0.0006,-0.0117,0.0108,27222.67 +494,60,0.94,0.0,3.23,0.12,0.79,0.0,3.21,-0.0141,-0.0969,0.0107,0.0,-0.0,-0.0,0.0009,-0.0209,0.0121,27282.12 +495,60,0.96,0.0,3.23,0.12,0.82,0.0,3.2,-0.0131,-0.0859,0.0094,0.0,-0.0,-0.0,0.0009,-0.0119,0.0114,27343.12 +496,60,0.94,0.0,2.33,0.12,0.82,0.0,2.44,-0.0126,-0.075,0.0098,0.0,-0.0,-0.0,0.0005,-0.0122,0.0127,27402.78 +497,60,0.98,0.0,2.33,0.11,0.84,0.0,2.37,-0.0117,-0.064,0.0099,0.0,-0.0,-0.0,0.0009,-0.0104,0.0116,27461.73 +498,60,0.98,0.0,3.26,0.1,0.86,0.0,3.43,-0.011,-0.0602,0.012,0.0,0.0,0.0,0.0007,-0.0129,0.0117,27522.55 +499,60,1.09,0.0,3.3,0.1,0.97,0.0,3.59,-0.0094,-0.061,0.0179,0.0,0.0,0.0,0.0017,-0.0124,0.0227,27582.45 +500,60,1.12,0.0,3.23,0.09,1.01,0.0,3.52,-0.0085,-0.0618,0.0144,0.0,0.0,0.0,0.0008,-0.0132,0.0122,27642.35 +501,60,1.2,0.0,3.3,0.08,1.08,0.0,3.5,-0.0074,-0.051,0.0144,0.0,0.0,0.0,0.0012,-0.0117,0.0216,27702.16 +502,60,1.17,0.0,3.45,0.08,1.09,0.0,3.65,-0.0071,-0.0411,0.0122,0.0,0.0,0.0,0.0003,-0.0125,0.0126,27762.45 +503,60,1.23,0.0,4.3,0.2,1.17,0.0,4.77,-0.0064,-0.0328,0.0222,0.0,0.0,0.0,0.0007,-0.0116,0.0215,27821.93 +504,60,1.18,0.0,4.35,0.02,1.12,0.0,4.71,-0.007,-0.0251,0.0172,0.0,0.0,0.0,-0.0006,-0.015,0.0177,27882.13 +505,60,1.14,0.0,4.4,0.03,1.1,0.0,4.76,-0.0074,-0.0253,0.0163,0.0,-0.0,-0.0,-0.0004,-0.0119,0.0115,27942.03 +506,60,1.12,0.0,3.37,0.03,1.07,0.0,3.59,-0.0078,-0.0255,0.0131,0.0,-0.0,-0.0,-0.0004,-0.0144,0.0115,28001.67 +507,60,1.03,0.0,3.41,0.04,0.97,0.0,3.59,-0.0088,-0.0257,0.0108,0.0,-0.0,-0.0,-0.001,-0.0122,0.0118,28062.86 +508,60,1.11,0.0,4.4,0.13,1.05,0.0,4.88,-0.0081,-0.0261,0.02,0.0,0.0,0.0,0.0007,-0.0113,0.0124,28121.7 +509,60,1.05,0.0,4.4,0.12,0.96,0.0,4.86,-0.0087,-0.0266,0.0165,0.0,-0.0,-0.0,-0.0006,-0.0234,0.0216,28181.51 +510,60,1.1,0.0,5.43,0.11,1.05,0.0,6.09,-0.008,-0.0273,0.024,0.0,0.0,0.0,0.0008,-0.0111,0.0157,28242.27 +511,60,1.03,0.0,3.3,0.1,0.97,0.0,3.52,-0.0088,-0.0279,0.0157,0.0,0.0,0.0,-0.0008,-0.0269,0.013,28302.65 +512,60,1.0,0.0,3.3,0.05,0.94,0.0,3.59,-0.0092,-0.0284,0.0143,0.0,0.0,0.0,-0.0004,-0.0114,0.0142,28361.66 +513,60,0.91,0.0,3.3,0.06,0.84,0.0,3.57,-0.0102,-0.0289,0.0118,0.0,-0.0,-0.0,-0.001,-0.0221,0.0123,28421.64 +514,60,0.91,0.0,3.3,0.05,0.85,0.0,3.66,-0.0103,-0.0294,0.018,0.0,0.0,0.0,-0.0,-0.0129,0.0216,28481.75 +515,60,1.02,0.0,3.33,0.05,0.97,0.0,3.68,-0.0091,-0.0298,0.0152,0.0,0.0,0.0,0.0011,-0.0089,0.0139,28541.49 +516,60,1.02,0.0,3.37,0.04,0.96,0.0,3.7,-0.0092,-0.0302,0.0128,0.0,0.0,0.0,-0.0001,-0.0135,0.0115,28601.66 +517,60,1.03,0.0,3.37,0.06,0.96,0.0,3.65,-0.0091,-0.0306,0.0111,0.0,0.0,0.0,0.0001,-0.0137,0.011,28661.54 +518,60,1.01,0.0,4.21,0.06,0.92,0.0,4.58,-0.0093,-0.0309,0.0198,0.0,0.0,0.0,-0.0002,-0.0127,0.0109,28721.93 +519,60,1.03,0.0,6.32,0.05,0.94,0.0,7.19,-0.0088,-0.0312,0.0382,0.0,0.0,0.0,0.0005,-0.0233,0.0185,28782.3 +520,60,1.04,0.0,7.22,0.03,0.98,0.0,8.38,-0.0085,-0.0315,0.0417,0.0,0.0,0.0,0.0004,-0.0111,0.0219,28842.07 +521,60,1.17,0.0,6.19,0.03,1.11,0.0,6.96,-0.0072,-0.0299,0.0229,0.0,0.0,0.0,0.0013,-0.0188,0.0231,28901.81 +522,60,1.26,0.0,6.19,0.03,1.21,0.0,6.75,-0.0062,-0.0301,0.0174,0.0,0.0,0.0,0.001,-0.0083,0.0116,28961.77 +523,60,1.28,0.0,6.12,0.02,1.23,0.0,6.57,-0.0061,-0.0302,0.013,0.0,0.0,0.0,0.0001,-0.0108,0.013,29022.44 +524,60,1.21,0.0,6.19,0.02,1.16,0.0,6.57,-0.0069,-0.0305,0.0109,0.0,0.0,0.0,-0.0008,-0.0232,0.0119,29081.76 +525,60,1.1,0.0,6.32,0.02,1.03,0.0,6.68,-0.0081,-0.0308,0.0119,0.0,0.0,0.0,-0.0012,-0.0127,0.0114,29140.95 +526,60,1.1,0.0,6.32,0.02,1.03,0.0,6.64,-0.008,-0.0311,0.0095,0.0,0.0,0.0,0.0,-0.0124,0.0115,29202.31 +527,60,1.05,0.0,5.32,0.02,0.98,0.0,5.32,-0.0086,-0.0314,0.0137,0.0,0.0,0.0,-0.0005,-0.0123,0.0107,29261.37 +528,60,1.05,0.0,4.4,0.02,0.96,0.0,4.93,-0.0086,-0.0317,0.0213,0.0,0.0,0.0,-0.0,-0.0215,0.0121,29321.51 +529,60,1.03,0.0,4.4,0.02,0.91,0.0,4.9,-0.0086,-0.0438,0.0177,0.0,0.0,0.0,0.0,-0.0178,0.0222,29381.1 +530,60,1.01,0.0,4.4,0.01,0.94,0.0,4.82,-0.0083,-0.0461,0.0238,0.0,0.0,0.0,0.0002,-0.0228,0.0194,29442.12 +531,60,0.97,0.0,4.4,0.01,0.94,0.0,4.75,-0.0087,-0.0483,0.0199,0.0,0.0,0.0,-0.0004,-0.0224,0.0133,29501.54 +532,60,0.97,0.0,4.4,0.01,0.93,0.0,4.69,-0.009,-0.0503,0.0185,0.0,0.0,0.0,-0.0004,-0.0148,0.0124,29561.87 +533,60,0.95,0.0,3.33,0.01,0.89,0.0,3.61,-0.0094,-0.0522,0.0132,0.0,0.0,0.0,-0.0004,-0.014,0.0106,29621.82 +534,60,1.02,0.0,3.33,0.01,0.98,0.0,3.58,-0.0088,-0.0539,0.0141,0.0,0.0,0.0,0.0006,-0.0118,0.0204,29681.72 +535,60,1.11,0.0,4.3,0.01,1.07,0.0,4.49,-0.0081,-0.0555,0.016,0.0,0.0,0.0,0.0007,-0.0114,0.0197,29741.23 +536,60,1.08,0.0,4.3,0.06,1.06,0.0,4.48,-0.0086,-0.0569,0.0177,0.0,0.0,0.0,-0.0005,-0.0111,0.011,29800.93 +537,60,1.17,0.0,4.35,0.01,1.14,0.0,4.48,-0.008,-0.0583,0.0148,0.0,0.0,0.0,0.0006,-0.01,0.0121,29861.5 +538,60,1.14,0.0,4.4,0.05,1.1,0.0,4.84,-0.0086,-0.0595,0.0175,0.0,0.0,0.0,-0.0006,-0.0123,0.0134,29921.94 +539,60,1.16,0.0,4.4,0.05,1.1,0.0,4.83,-0.0086,-0.0606,0.0145,0.0,0.0,0.0,0.0,-0.0129,0.0114,29981.61 +540,60,1.09,0.0,5.43,0.04,1.02,0.0,6.06,-0.0094,-0.0617,0.0224,0.0,0.0,0.0,-0.0008,-0.0236,0.0214,30039.81 diff --git a/experiments/results/csv/sustained_load_adaptive_time_analysis.csv b/experiments/results/csv/sustained_load_adaptive_time_analysis.csv new file mode 100644 index 000000000..50983b7e2 --- /dev/null +++ b/experiments/results/csv/sustained_load_adaptive_time_analysis.csv @@ -0,0 +1,19 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,15733,15578,151,0.96,4,0.03,1.0 +30-60s,16168,16026,142,0.88,0,0.0,1.0 +60-90s,16287,16124,156,0.96,7,0.04,1.0 +90-120s,16300,16111,144,0.88,45,0.28,1.0 +120-150s,22671,14476,3439,15.17,4756,20.98,20.0 +150-180s,22606,13417,3392,15.0,5797,25.64,20.0 +180-210s,20853,12410,3109,14.91,5334,25.58,20.0 +210-240s,21960,12929,3301,15.03,5730,26.09,20.0 +240-270s,22139,13271,3264,14.74,5604,25.31,20.0 +270-300s,21723,12861,3295,15.17,5567,25.63,20.0 +300-330s,22420,13136,3356,14.97,5928,26.44,20.0 +330-360s,21379,12894,3155,14.76,5330,24.93,20.0 +360-390s,21191,12441,3233,15.26,5517,26.03,20.0 +390-420s,21005,11954,3184,15.16,5867,27.93,20.0 +420-450s,17144,15976,249,1.45,919,5.36,1.0 +450-480s,16323,16038,163,1.0,122,0.75,1.0 +480-510s,16341,16009,166,1.02,166,1.02,1.0 +510-540s,16355,16015,171,1.05,169,1.03,1.0 diff --git a/experiments/results/csv/sustained_load_time_analysis.csv b/experiments/results/csv/sustained_load_time_analysis.csv new file mode 100644 index 000000000..e41382743 --- /dev/null +++ b/experiments/results/csv/sustained_load_time_analysis.csv @@ -0,0 +1,19 @@ +Time Range,Total Requests,Success,Errors,Error %,Rejected,Rejected %,Target Error Rate % +0-30s,16943,16767,176,1.04,0,0.0,1.0 +30-60s,17429,17285,144,0.83,0,0.0,1.0 +60-90s,17536,17359,177,1.01,0,0.0,1.0 +90-120s,17495,17314,181,1.03,0,0.0,1.0 +120-150s,23156,4453,995,4.3,17708,76.47,20.0 +150-180s,22635,2746,618,2.73,19271,85.14,20.0 +180-210s,20915,2767,706,3.38,17442,83.39,20.0 +210-240s,22054,3092,717,3.25,18245,82.73,20.0 +240-270s,22205,2415,627,2.82,19163,86.3,20.0 +270-300s,21707,2814,707,3.26,18186,83.78,20.0 +300-330s,22436,3042,752,3.35,18642,83.09,20.0 +330-360s,21449,2991,720,3.36,17738,82.7,20.0 +360-390s,21281,2518,660,3.1,18103,85.07,20.0 +390-420s,21002,2823,697,3.32,17482,83.24,20.0 +420-450s,22132,11709,159,0.72,10264,46.38,1.0 +450-480s,17397,17241,156,0.9,0,0.0,1.0 +480-510s,17429,17242,187,1.07,0,0.0,1.0 +510-540s,17386,17226,160,0.92,0,0.0,1.0 diff --git a/experiments/results/main_graphs/gradual_increase.png b/experiments/results/main_graphs/gradual_increase.png new file mode 100644 index 000000000..a87bcbe91 Binary files /dev/null and b/experiments/results/main_graphs/gradual_increase.png differ diff --git a/experiments/results/main_graphs/gradual_increase_adaptive.png b/experiments/results/main_graphs/gradual_increase_adaptive.png new file mode 100644 index 000000000..5ee219d0d Binary files /dev/null and b/experiments/results/main_graphs/gradual_increase_adaptive.png differ diff --git a/experiments/results/main_graphs/lower_bound_windup.png b/experiments/results/main_graphs/lower_bound_windup.png new file mode 100644 index 000000000..6fc220568 Binary files /dev/null and b/experiments/results/main_graphs/lower_bound_windup.png differ diff --git a/experiments/results/main_graphs/near_target_error_rate.png b/experiments/results/main_graphs/near_target_error_rate.png new file mode 100644 index 000000000..3fe692670 Binary files /dev/null and b/experiments/results/main_graphs/near_target_error_rate.png differ diff --git a/experiments/results/main_graphs/near_target_error_rate_adaptive.png b/experiments/results/main_graphs/near_target_error_rate_adaptive.png new file mode 100644 index 000000000..21dda7acb Binary files /dev/null and b/experiments/results/main_graphs/near_target_error_rate_adaptive.png differ diff --git a/experiments/results/main_graphs/one_of_many_services_latency_degradation.png b/experiments/results/main_graphs/one_of_many_services_latency_degradation.png new file mode 100644 index 000000000..63980e81a Binary files /dev/null and b/experiments/results/main_graphs/one_of_many_services_latency_degradation.png differ diff --git a/experiments/results/main_graphs/one_of_many_services_latency_degradation_adaptive.png b/experiments/results/main_graphs/one_of_many_services_latency_degradation_adaptive.png new file mode 100644 index 000000000..121dbb5b2 Binary files /dev/null and b/experiments/results/main_graphs/one_of_many_services_latency_degradation_adaptive.png differ diff --git a/experiments/results/main_graphs/oscillating_errors.png b/experiments/results/main_graphs/oscillating_errors.png new file mode 100644 index 000000000..1ae913c8f Binary files /dev/null and b/experiments/results/main_graphs/oscillating_errors.png differ diff --git a/experiments/results/main_graphs/oscillating_errors_adaptive.png b/experiments/results/main_graphs/oscillating_errors_adaptive.png new file mode 100644 index 000000000..386954f4a Binary files /dev/null and b/experiments/results/main_graphs/oscillating_errors_adaptive.png differ diff --git a/experiments/results/main_graphs/slow_query.png b/experiments/results/main_graphs/slow_query.png new file mode 100644 index 000000000..fdf5a4733 Binary files /dev/null and b/experiments/results/main_graphs/slow_query.png differ diff --git a/experiments/results/main_graphs/slow_query_adaptive.png b/experiments/results/main_graphs/slow_query_adaptive.png new file mode 100644 index 000000000..24256455e Binary files /dev/null and b/experiments/results/main_graphs/slow_query_adaptive.png differ diff --git a/experiments/results/main_graphs/sudden_error_spike_100.png b/experiments/results/main_graphs/sudden_error_spike_100.png new file mode 100644 index 000000000..43f818ba2 Binary files /dev/null and b/experiments/results/main_graphs/sudden_error_spike_100.png differ diff --git a/experiments/results/main_graphs/sudden_error_spike_100_adaptive.png b/experiments/results/main_graphs/sudden_error_spike_100_adaptive.png new file mode 100644 index 000000000..997950dde Binary files /dev/null and b/experiments/results/main_graphs/sudden_error_spike_100_adaptive.png differ diff --git a/experiments/results/main_graphs/sudden_error_spike_20.png b/experiments/results/main_graphs/sudden_error_spike_20.png new file mode 100644 index 000000000..a565866c6 Binary files /dev/null and b/experiments/results/main_graphs/sudden_error_spike_20.png differ diff --git a/experiments/results/main_graphs/sudden_error_spike_20_adaptive.png b/experiments/results/main_graphs/sudden_error_spike_20_adaptive.png new file mode 100644 index 000000000..bdfe628b2 Binary files /dev/null and b/experiments/results/main_graphs/sudden_error_spike_20_adaptive.png differ diff --git a/experiments/results/main_graphs/sudden_error_spikes.png b/experiments/results/main_graphs/sudden_error_spikes.png new file mode 100644 index 000000000..1251400ad Binary files /dev/null and b/experiments/results/main_graphs/sudden_error_spikes.png differ diff --git a/experiments/results/main_graphs/sudden_error_spikes_adaptive.png b/experiments/results/main_graphs/sudden_error_spikes_adaptive.png new file mode 100644 index 000000000..f3ca70df4 Binary files /dev/null and b/experiments/results/main_graphs/sudden_error_spikes_adaptive.png differ diff --git a/experiments/results/main_graphs/sustained_load.png b/experiments/results/main_graphs/sustained_load.png new file mode 100644 index 000000000..699d71b31 Binary files /dev/null and b/experiments/results/main_graphs/sustained_load.png differ diff --git a/experiments/results/main_graphs/sustained_load_adaptive.png b/experiments/results/main_graphs/sustained_load_adaptive.png new file mode 100644 index 000000000..4daa9a22b Binary files /dev/null and b/experiments/results/main_graphs/sustained_load_adaptive.png differ diff --git a/experiments/run_all_experiments.rb b/experiments/run_all_experiments.rb new file mode 100755 index 000000000..5ec2d379b --- /dev/null +++ b/experiments/run_all_experiments.rb @@ -0,0 +1,91 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +require "thread" + +# Get all experiment files (excluding the windup experiment) +# TODO: Include lower bound windup experiment once we have a way to make it run in a reasonable time. +experiment_files = Dir.glob("experiments/*.rb").reject { |file| file.include?("experiment_lower_bound_windup_adaptive.rb") }.sort + +puts "Found #{experiment_files.length} experiment files to run:" +experiment_files.each { |file| puts " - #{file}" } +puts "\nRunning all experiments in parallel..." +puts "=" * 60 + +# Track results +results = {} +mutex = Mutex.new + +# Create threads for each experiment file +threads = experiment_files.map do |experiment_file| + Thread.new do + start_time = Time.now + + # Capture output and error + output = nil + error = nil + exit_status = nil + + begin + # Run the experiment file and capture output + output = %x(bundle exec ruby #{experiment_file} 2>&1) + exit_status = $?.exitstatus + rescue => e + error = e.message + exit_status = 1 + end + + end_time = Time.now + duration = end_time - start_time + + # Thread-safe result storage + mutex.synchronize do + results[experiment_file] = { + output: output, + error: error, + exit_status: exit_status, + duration: duration, + } + + status = exit_status == 0 ? "โœ… SUCCESS" : "โŒ FAILED" + puts "[#{Time.now.strftime("%H:%M:%S")}] #{status} #{experiment_file} (#{duration.round(2)}s)" + end + end +end + +# Wait for all threads to complete +threads.each(&:join) + +puts "\n" + "=" * 60 +puts "All experiments completed!" +puts "=" * 60 + +# Summary +total_duration = results.values.map { |r| r[:duration] }.sum +successful = results.select { |_, r| r[:exit_status] == 0 } +failed = results.select { |_, r| r[:exit_status] != 0 } + +puts "\nSUMMARY:" +puts " Total files: #{results.length}" +puts " Successful: #{successful.length}" +puts " Failed: #{failed.length}" +puts " Total execution time: #{total_duration.round(2)}s" + +# Show failed experiments with details +if failed.any? + puts "\nFAILED EXPERIMENTS:" + failed.each do |file, result| + puts "\n#{file}:" + puts " Exit status: #{result[:exit_status]}" + puts " Duration: #{result[:duration].round(2)}s" + if result[:error] + puts " Error: #{result[:error]}" + end + if result[:output] && !result[:output].strip.empty? + puts " Output:" + result[:output].split("\n").each { |line| puts " #{line}" } + end + end +end + +exit failed.any? ? 1 : 0 diff --git a/lib/semian.rb b/lib/semian.rb index c135d8ec6..d350fcca1 100644 --- a/lib/semian.rb +++ b/lib/semian.rb @@ -11,6 +11,8 @@ require "semian/platform" require "semian/resource" require "semian/circuit_breaker" +require "semian/adaptive_circuit_breaker" +require "semian/dual_circuit_breaker" require "semian/protected_resource" require "semian/unprotected_resource" require "semian/simple_sliding_window" @@ -197,6 +199,20 @@ def to_s # +exceptions+: An array of exception classes that should be accounted as resource errors. Default []. # (circuit breaker) # + # +adaptive_circuit_breaker+: Enable adaptive circuit breaker using PID controller. Default false. + # When enabled, this replaces the traditional circuit breaker with an adaptive version + # that dynamically adjusts rejection rates based on service health. (adaptive circuit breaker) + # + # +dual_circuit_breaker+: Enable dual circuit breaker mode where both legacy and adaptive + # circuit breakers are initialized. Default false. When enabled, both circuit breakers track + # requests, but only one is used for decision-making based on use_adaptive. + # (dual circuit breaker) + # + # +use_adaptive+: A callable (Proc/lambda) that returns true to use adaptive circuit breaker + # or false to use legacy. Only used when dual_circuit_breaker is enabled. Default: ->() { false }. + # Example: ->() { MyFeatureFlag.enabled?(:adaptive_circuit_breaker) } + # (dual circuit breaker) + # # Returns the registered resource. def register(name, **options) return UnprotectedResource.new(name) if ENV.key?("SEMIAN_DISABLED") @@ -204,7 +220,14 @@ def register(name, **options) # Validate configuration before proceeding ConfigurationValidator.new(name, options).validate! - circuit_breaker = create_circuit_breaker(name, **options) + circuit_breaker = if options[:dual_circuit_breaker] + create_dual_circuit_breaker(name, **options) + elsif options[:adaptive_circuit_breaker] + create_adaptive_circuit_breaker(name, **options) + else + create_circuit_breaker(name, **options) + end + bulkhead = create_bulkhead(name, **options) resources[name] = ProtectedResource.new(name, bulkhead, circuit_breaker) @@ -300,12 +323,44 @@ def consumers private - def create_circuit_breaker(name, **options) + def create_dual_circuit_breaker(name, **options) + return if ENV.key?("SEMIAN_CIRCUIT_BREAKER_DISABLED") + + classic_cb = create_circuit_breaker(name, is_child: true, **options) + adaptive_cb = create_adaptive_circuit_breaker(name, is_child: true, **options) + + DualCircuitBreaker.new( + name: name, + classic_circuit_breaker: classic_cb, + adaptive_circuit_breaker: adaptive_cb, + ) + end + + def create_adaptive_circuit_breaker(name, is_child: false, **options) + return if ENV.key?("SEMIAN_CIRCUIT_BREAKER_DISABLED") || ENV.key?("SEMIAN_ADAPTIVE_CIRCUIT_BREAKER_DISABLED") + + exceptions = options[:exceptions] || [] + cls = is_child ? DualCircuitBreaker::ChildAdaptiveCircuitBreaker : AdaptiveCircuitBreaker + cls.new( + name: name, + exceptions: Array(exceptions) + [::Semian::BaseError], + kp: 1.0, + ki: 0.2, + kd: 0.0, + window_size: 10, + sliding_interval: 1, + initial_error_rate: options[:initial_error_rate] || 0.05, + implementation: implementation(**options), + ) + end + + def create_circuit_breaker(name, is_child: false, **options) return if ENV.key?("SEMIAN_CIRCUIT_BREAKER_DISABLED") return unless options.fetch(:circuit_breaker, true) exceptions = options[:exceptions] || [] - CircuitBreaker.new( + cls = is_child ? DualCircuitBreaker::ChildClassicCircuitBreaker : CircuitBreaker + cls.new( name, success_threshold: options[:success_threshold], error_threshold: options[:error_threshold], diff --git a/lib/semian/adapter.rb b/lib/semian/adapter.rb index dd2b385d5..404f9507d 100644 --- a/lib/semian/adapter.rb +++ b/lib/semian/adapter.rb @@ -45,7 +45,7 @@ def acquire_semian_resource(scope:, adapter:, &block) end rescue ::Semian::OpenCircuitError => error last_error = semian_resource.circuit_breaker.last_error - message = "#{error.message} caused by #{last_error.message}" + message = "#{error.message} caused by #{last_error&.message}" last_error = nil unless last_error.is_a?(Exception) # Net::HTTPServerError is not an exception raise self.class::CircuitOpenError.new(semian_identifier, message), cause: last_error rescue ::Semian::BaseError => error diff --git a/lib/semian/adaptive_circuit_breaker.rb b/lib/semian/adaptive_circuit_breaker.rb new file mode 100644 index 000000000..2d190c821 --- /dev/null +++ b/lib/semian/adaptive_circuit_breaker.rb @@ -0,0 +1,182 @@ +# frozen_string_literal: true + +require_relative "pid_controller" +require_relative "circuit_breaker_behaviour" + +module Semian + # Adaptive Circuit Breaker that uses PID controller for dynamic rejection + class AdaptiveCircuitBreaker + include CircuitBreakerBehaviour + + attr_reader :pid_controller, :update_thread + + def initialize(name:, exceptions:, kp:, ki:, kd:, window_size:, sliding_interval:, initial_error_rate:, implementation:) + initialize_behaviour(name: name) + + @exceptions = exceptions + @sliding_interval = sliding_interval + @stopped = false + + @pid_controller = implementation::PIDController.new( + kp: kp, + ki: ki, + kd: kd, + window_size: window_size, + sliding_interval: sliding_interval, + implementation: implementation, + initial_error_rate: initial_error_rate, + ) + + start_pid_controller_update_thread + end + + def acquire(resource = nil, &block) + unless request_allowed? + mark_rejected + raise OpenCircuitError, "Rejected by adaptive circuit breaker" + end + + result = nil + begin + result = block.call + rescue *@exceptions => error + if !error.respond_to?(:marks_semian_circuits?) || error.marks_semian_circuits? + mark_failed(error) + end + raise error + else + mark_success + end + result + end + + def reset + @last_error = nil + @pid_controller.reset + end + + def stop + @stopped = true + @update_thread&.kill + @update_thread = nil + end + + def destroy + stop + @pid_controller.reset + end + + def metrics + @pid_controller.metrics + end + + def open? + @pid_controller.rejection_rate == 1 + end + + def closed? + @pid_controller.rejection_rate == 0 + end + + # Compatibility with ProtectedResource - Adaptive circuit breaker does not have a half open state + def half_open? + !open? && !closed? + end + + def mark_failed(error) + @last_error = error + @pid_controller.record_request(:error) + end + + def mark_success + @pid_controller.record_request(:success) + end + + def mark_rejected + @pid_controller.record_request(:rejected) + end + + def request_allowed? + !@pid_controller.should_reject? + end + + def in_use? + true + end + + private + + def start_pid_controller_update_thread + @update_thread = Thread.new do + loop do + break if @stopped + + wait_for_window + + old_rejection_rate = @pid_controller.rejection_rate + pre_update_metrics = @pid_controller.metrics + + @pid_controller.update + new_rejection_rate = @pid_controller.rejection_rate + + check_and_notify_state_transition(old_rejection_rate, new_rejection_rate, pre_update_metrics) + notify_metrics_update + end + rescue => e + Semian.logger&.warn("[#{@name}] PID controller update thread error: #{e.message}") + end + end + + def wait_for_window + Kernel.sleep(@sliding_interval) + end + + def check_and_notify_state_transition(old_rate, new_rate, pre_update_metrics) + old_state = old_rate == 0.0 ? :closed : :open + new_state = new_rate == 0.0 ? :closed : :open + + if old_state != new_state + notify_state_transition(new_state) + log_state_transition(old_state, new_state, new_rate, pre_update_metrics) + end + end + + def notify_state_transition(new_state) + Semian.notify(:state_change, self, nil, nil, state: new_state) + end + + def log_state_transition(old_state, new_state, rejection_rate, pre_update_metrics) + requests = pre_update_metrics[:current_window_requests] + + str = "[#{self.class.name}] State transition from #{old_state} to #{new_state}." + str += " success_count=#{requests[:success]}" + str += " error_count=#{requests[:error]}" + str += " rejected_count=#{requests[:rejected]}" + str += " rejection_rate=#{(rejection_rate * 100).round(2)}%" + str += " error_rate=#{(pre_update_metrics[:error_rate] * 100).round(2)}%" + str += " ideal_error_rate=#{(pre_update_metrics[:ideal_error_rate] * 100).round(2)}%" + str += " integral=#{pre_update_metrics[:integral].round(4)}" + str += " name=\"#{@name}\"" + + Semian.logger.info(str) + end + + def notify_metrics_update + metrics = @pid_controller.metrics + + Semian.notify( + :adaptive_update, + self, + nil, + nil, + rejection_rate: metrics[:rejection_rate], + error_rate: metrics[:error_rate], + ideal_error_rate: metrics[:ideal_error_rate], + p_value: metrics[:p_value], + integral: metrics[:integral], + derivative: metrics[:derivative], + previous_p_value: metrics[:previous_p_value], + ) + end + end +end diff --git a/lib/semian/circuit_breaker.rb b/lib/semian/circuit_breaker.rb index b08951459..8e60dc84c 100644 --- a/lib/semian/circuit_breaker.rb +++ b/lib/semian/circuit_breaker.rb @@ -1,17 +1,18 @@ # frozen_string_literal: true +require_relative "circuit_breaker_behaviour" + module Semian class CircuitBreaker # :nodoc: + include CircuitBreakerBehaviour extend Forwardable def_delegators :@state, :closed?, :open?, :half_open? attr_reader( - :name, :half_open_resource_timeout, :error_timeout, :state, - :last_error, :error_threshold_timeout_enabled, ) @@ -19,13 +20,14 @@ def initialize(name, exceptions:, success_threshold:, error_threshold:, error_timeout:, implementation:, half_open_resource_timeout: nil, error_threshold_timeout: nil, error_threshold_timeout_enabled: true, lumping_interval: 0) - @name = name.to_sym + initialize_behaviour(name: name) + + @exceptions = exceptions @success_count_threshold = success_threshold @error_count_threshold = error_threshold @error_threshold_timeout = error_threshold_timeout || error_timeout @error_threshold_timeout_enabled = error_threshold_timeout_enabled.nil? ? true : error_threshold_timeout_enabled @error_timeout = error_timeout - @exceptions = exceptions @half_open_resource_timeout = half_open_resource_timeout @lumping_interval = lumping_interval diff --git a/lib/semian/circuit_breaker_behaviour.rb b/lib/semian/circuit_breaker_behaviour.rb new file mode 100644 index 000000000..2a7120a53 --- /dev/null +++ b/lib/semian/circuit_breaker_behaviour.rb @@ -0,0 +1,64 @@ +# frozen_string_literal: true + +module Semian + module CircuitBreakerBehaviour + attr_reader :name, :last_error + attr_accessor :exceptions + + # Initialize common circuit breaker attributes + def initialize_behaviour(name:) + @name = name.to_sym + @last_error = nil + end + + # Main method to execute a block with circuit breaker protection + def acquire(resource = nil, &block) + raise NotImplementedError, "#{self.class} must implement #acquire" + end + + # Reset the circuit breaker to its initial state + def reset + raise NotImplementedError, "#{self.class} must implement #reset" + end + + # Clean up resources + def destroy + raise NotImplementedError, "#{self.class} must implement #destroy" + end + + # Check if the circuit is open (rejecting requests) + def open? + raise NotImplementedError, "#{self.class} must implement #open?" + end + + # Check if the circuit is closed (allowing requests) + def closed? + raise NotImplementedError, "#{self.class} must implement #closed?" + end + + # Check if the circuit is half-open (testing if service recovered) + def half_open? + raise NotImplementedError, "#{self.class} must implement #half_open?" + end + + # Check if requests are currently allowed + def request_allowed? + raise NotImplementedError, "#{self.class} must implement #request_allowed?" + end + + # Mark a request as failed + def mark_failed(error) + raise NotImplementedError, "#{self.class} must implement #mark_failed" + end + + # Mark a request as successful + def mark_success + raise NotImplementedError, "#{self.class} must implement #mark_success" + end + + # Check if the circuit breaker is actively tracking failures + def in_use? + raise NotImplementedError, "#{self.class} must implement #in_use?" + end + end +end diff --git a/lib/semian/configuration_validator.rb b/lib/semian/configuration_validator.rb index 3d5be716a..dc3f23c8c 100644 --- a/lib/semian/configuration_validator.rb +++ b/lib/semian/configuration_validator.rb @@ -13,6 +13,7 @@ def validate! validate_circuit_breaker_or_bulkhead! validate_bulkhead_configuration! validate_circuit_breaker_configuration! + validate_adaptive_circuit_breaker_configuration! validate_resource_name! end @@ -66,12 +67,21 @@ def validate_bulkhead_configuration! def validate_circuit_breaker_configuration! return if ENV.key?("SEMIAN_CIRCUIT_BREAKER_DISABLED") return unless @configuration.fetch(:circuit_breaker, true) + return if @configuration[:adaptive_circuit_breaker] # Skip traditional validation if using adaptive require_keys!([:success_threshold, :error_threshold, :error_timeout], @configuration) validate_thresholds! validate_timeouts! end + def validate_adaptive_circuit_breaker_configuration! + return unless @configuration[:adaptive_circuit_breaker] + + nil if ENV.key?("SEMIAN_ADAPTIVE_CIRCUIT_BREAKER_DISABLED") + + # No additional validation needed - adaptive circuit breaker uses fixed internal parameters + end + def validate_thresholds! success_threshold = @configuration[:success_threshold] error_threshold = @configuration[:error_threshold] diff --git a/lib/semian/dual_circuit_breaker.rb b/lib/semian/dual_circuit_breaker.rb new file mode 100644 index 000000000..c89024d49 --- /dev/null +++ b/lib/semian/dual_circuit_breaker.rb @@ -0,0 +1,169 @@ +# frozen_string_literal: true + +module Semian + # DualCircuitBreaker wraps both classic and adaptive circuit breakers, + # allowing runtime switching between them via a callable that determines which to use. + class DualCircuitBreaker + include CircuitBreakerBehaviour + + class ChildClassicCircuitBreaker < CircuitBreaker + attr_writer :sibling + + def mark_success + super + @sibling.method(:mark_success).super_method.call + end + + def mark_failed(error) + super + @sibling.method(:mark_failed).super_method.call(error) + end + end + + class ChildAdaptiveCircuitBreaker < AdaptiveCircuitBreaker + attr_writer :sibling + + def mark_success + super + @sibling.method(:mark_success).super_method.call + end + + def mark_failed(error) + super + @sibling.method(:mark_failed).super_method.call(error) + end + end + + attr_reader :classic_circuit_breaker, :adaptive_circuit_breaker, :active_circuit_breaker + + # use_adaptive should be a callable (Proc/lambda) that returns true/false + # to determine which circuit breaker to use. If it returns true, use adaptive. + def initialize(name:, classic_circuit_breaker:, adaptive_circuit_breaker:) + initialize_behaviour(name: name) + + @classic_circuit_breaker = classic_circuit_breaker + @adaptive_circuit_breaker = adaptive_circuit_breaker + + @classic_circuit_breaker.sibling = @adaptive_circuit_breaker + @adaptive_circuit_breaker.sibling = @classic_circuit_breaker + + @active_circuit_breaker = @classic_circuit_breaker + end + + def self.adaptive_circuit_breaker_selector(selector) # rubocop:disable Style/ClassMethodsDefinitions + @@adaptive_circuit_breaker_selector = selector # rubocop:disable Style/ClassVars + end + + def active_breaker_type + @active_circuit_breaker.is_a?(Semian::AdaptiveCircuitBreaker) ? :adaptive : :classic + end + + def acquire(resource = nil, &block) + # NOTE: This assignment is not thread-safe, but this is acceptable for now: + # - Each request gets its own decision based on the selector at that moment + # - The worst case is a brief inconsistency where a thread reads a stale value, + # which just means it uses the previous circuit breaker type for that one request + old_type = active_breaker_type + @active_circuit_breaker = get_active_circuit_breaker(resource) + if old_type != active_breaker_type + Semian.notify(:circuit_breaker_mode_change, self, nil, nil, old_mode: old_type, new_mode: active_breaker_type) + end + + @active_circuit_breaker.acquire(resource, &block) + end + + def open? + @active_circuit_breaker.open? + end + + def closed? + @active_circuit_breaker.closed? + end + + def half_open? + @active_circuit_breaker.half_open? + end + + def request_allowed? + @active_circuit_breaker.request_allowed? + end + + def mark_failed(error) + @active_circuit_breaker&.mark_failed(error) + end + + def mark_success + @active_circuit_breaker&.mark_success + end + + def stop + @adaptive_circuit_breaker&.stop + end + + def reset + @classic_circuit_breaker&.reset + @adaptive_circuit_breaker&.reset + end + + def destroy + @classic_circuit_breaker&.destroy + @adaptive_circuit_breaker&.destroy + end + + def in_use? + @classic_circuit_breaker&.in_use? || @adaptive_circuit_breaker&.in_use? + end + + def last_error + @active_circuit_breaker.last_error + end + + def metrics + { + active: active_breaker_type, + classic: classic_metrics, + adaptive: adaptive_metrics, + } + end + + private + + def classic_metrics + return {} unless @classic_circuit_breaker + + { + state: @classic_circuit_breaker.state&.value, + open: @classic_circuit_breaker.open?, + closed: @classic_circuit_breaker.closed?, + half_open: @classic_circuit_breaker.half_open?, + } + end + + def adaptive_metrics + return {} unless @adaptive_circuit_breaker + + @adaptive_circuit_breaker.metrics.merge( + open: @adaptive_circuit_breaker.open?, + closed: @adaptive_circuit_breaker.closed?, + half_open: @adaptive_circuit_breaker.half_open?, + ) + end + + def get_active_circuit_breaker(resource) + if use_adaptive?(resource) + @adaptive_circuit_breaker + else + @classic_circuit_breaker + end + end + + def use_adaptive?(resource = nil) + return false unless defined?(@@adaptive_circuit_breaker_selector) + + @@adaptive_circuit_breaker_selector.call(resource) + rescue => e + Semian.logger&.warn("[#{@name}] use_adaptive check failed: #{e.message}. Defaulting to classic circuit breaker.") + false + end + end +end diff --git a/lib/semian/pid_controller.rb b/lib/semian/pid_controller.rb new file mode 100644 index 000000000..ee7e26e98 --- /dev/null +++ b/lib/semian/pid_controller.rb @@ -0,0 +1,193 @@ +# frozen_string_literal: true + +require "thread" +require_relative "simple_exponential_smoother" + +module Semian + module Simple + # PID Controller for adaptive circuit breaking + # Based on the error function: + # P = (error_rate - ideal_error_rate) - (1 - (error_rate - ideal_error_rate)) * rejection_rate + # Note: P increases when error_rate increases + # P decreases when rejection_rate increases (providing feedback) + class PIDController + attr_reader :rejection_rate + + def initialize(kp:, ki:, kd:, window_size:, sliding_interval:, implementation:, initial_error_rate:, + smoother_cap_value: SimpleExponentialSmoother::DEFAULT_CAP_VALUE) + @kp = kp + @ki = ki + @kd = kd + + @rejection_rate = 0.0 + @integral = 0.0 + @derivative = 0.0 + @previous_p_value = 0.0 + + @window_size = window_size + @sliding_interval = sliding_interval + @smoother = SimpleExponentialSmoother.new( + cap_value: smoother_cap_value, + initial_value: initial_error_rate, + observations_per_minute: 60 / sliding_interval, + ) + + @errors = implementation::SlidingWindow.new(max_size: 200 * window_size) + @successes = implementation::SlidingWindow.new(max_size: 200 * window_size) + @rejections = implementation::SlidingWindow.new(max_size: 200 * window_size) + + @last_error_rate = 0.0 + @last_p_value = 0.0 + end + + def record_request(outcome) + case outcome + when :error + @errors.push(current_time) + when :success + @successes.push(current_time) + when :rejected + @rejections.push(current_time) + end + end + + def update + # Store the last window's P value so that we can serve it up in the metrics snapshots + @previous_p_value = @last_p_value + + @last_error_rate = calculate_error_rate + + store_error_rate(@last_error_rate) + + dt = @sliding_interval + + @last_p_value = calculate_p_value(@last_error_rate) + + proportional = @kp * @last_p_value + @integral += @last_p_value * dt + integral = @ki * @integral + @derivative = @kd * (@last_p_value - @previous_p_value) / dt + + # Calculate the control signal (change in rejection rate) + control_signal = proportional + integral + @derivative + + # Calculate what the new rejection rate would be + new_rejection_rate = @rejection_rate + control_signal + + # Update rejection rate (clamped between 0 and 1) + @rejection_rate = new_rejection_rate.clamp(0.0, 1.0) + + @integral = @integral.clamp(-10.0, 10.0) + + @rejection_rate + end + + # Should we reject this request based on current rejection rate? + def should_reject? + rand < @rejection_rate + end + + # Reset the controller state + def reset + @rejection_rate = 0.0 + @integral = 0.0 + @previous_p_value = 0.0 + @derivative = 0.0 + @last_p_value = 0.0 + @errors.clear + @successes.clear + @rejections.clear + @last_error_rate = 0.0 + @smoother.reset + end + + # Get current metrics for monitoring/debugging + def metrics + { + rejection_rate: @rejection_rate, + error_rate: @last_error_rate, + ideal_error_rate: calculate_ideal_error_rate, + p_value: @last_p_value, + previous_p_value: @previous_p_value, + integral: @integral, + derivative: @derivative, + smoother_state: @smoother.state, + current_window_requests: { + success: @successes.size, + error: @errors.size, + rejected: @rejections.size, + }, + } + end + + private + + # Calculate the current P value + def calculate_p_value(current_error_rate) + ideal_error_rate = calculate_ideal_error_rate + + # P = (error_rate - ideal_error_rate) - (1 - (error_rate - ideal_error_rate)) * rejection_rate + # P increases when: error_rate > ideal + # P decreases when: rejection_rate > 0 (feedback mechanism) + delta_error = current_error_rate - ideal_error_rate + delta_error - (1 - delta_error) * @rejection_rate + end + + def calculate_error_rate + # Clean up old observations + current_timestamp = current_time + cutoff_time = current_timestamp - @window_size + @errors.reject! { |timestamp| timestamp < cutoff_time } + @successes.reject! { |timestamp| timestamp < cutoff_time } + @rejections.reject! { |timestamp| timestamp < cutoff_time } + + total_requests = @successes.size + @errors.size + return 0.0 if total_requests == 0 + + @errors.size.to_f / total_requests + end + + def store_error_rate(error_rate) + @smoother.add_observation(error_rate) + end + + def calculate_ideal_error_rate + @smoother.forecast + end + + def current_time + Process.clock_gettime(Process::CLOCK_MONOTONIC) + end + end + end + + module ThreadSafe + # Thread-safe version of PIDController + class PIDController < Simple::PIDController + def initialize(**kwargs) + super(**kwargs) + @lock = Mutex.new + end + + def record_request(outcome) + @lock.synchronize { super } + end + + def update + @lock.synchronize { super } + end + + def should_reject? + @lock.synchronize { super } + end + + def reset + @lock.synchronize { super } + end + + # NOTE: metrics, calculate_error_rate are not overridden + # to avoid deadlock. calculate_error_rate is private method + # only called internally from update (synchronized) and metrics (not synchronized). + end + end +end diff --git a/lib/semian/simple_exponential_smoother.rb b/lib/semian/simple_exponential_smoother.rb new file mode 100644 index 000000000..c8646a601 --- /dev/null +++ b/lib/semian/simple_exponential_smoother.rb @@ -0,0 +1,139 @@ +# frozen_string_literal: true + +module Semian + # SimpleExponentialSmoother implements Simple Exponential Smoothing (SES) for forecasting + # a stable baseline error rate in adaptive circuit breakers. + # + # SES focuses on the level component only (no trend or seasonality), using the formula: + # smoothed = alpha * value + (1 - alpha) * previous_smoothed + # + # Key characteristics: + # - Drops extreme values above cap to prevent outliers from distorting the forecast + # - Runs in two periods: low confidence (first 30 minutes) and high confidence (after 30 minutes) + # - During the low confidence period, we converge faster towards observed value than during the high confidence period + # - The choice of alphas follows the following criteria: + # - During low confidence: + # - If we are observing 2x our current estimate, we need to converge towards it in 30 minutes + # - If we are observing 0.5x our current estimate, we need to converge towards it in 5 minutes + # - During high confidence: + # - If we are observing 2x our current estimate, we need to converge towards it in 1 hour + # - If we are observing 0.5x our current estimate, we need to converge towards it in 10 minutes + # The following code snippet can be used to calculate the alphas: + # def find_alpha(name, start_point, multiplier, convergence_duration) + # target = start_point * multiplier + # desired_distance = 0.003 + # alpha_ceil = 0.5 + # alpha_floor = 0.0 + # alpha = 0.25 + # while true + # smoothed_value = start_point + # step_size = convergence_duration / 10 + # converged_too_fast = false + # 10.times do |step| + # step_size.times do + # smoothed_value = alpha * target + (1 - alpha) * smoothed_value + # end + # if step < 9 and (smoothed_value - target).abs < desired_distance + # converged_too_fast = true + # end + # end + # + # if converged_too_fast + # alpha_ceil = alpha + # alpha = (alpha + alpha_floor) / 2 + # next + # end + # + # if (smoothed_value - target).abs > desired_distance + # alpha_floor = alpha + # alpha = (alpha + alpha_ceil) / 2 + # next + # end + # + # break + # end + # + # print "#{name} is #{alpha}\n" + # end + # + # initial_error_rate = 0.05 + # + # find_alpha("low confidence upward convergence alpha", initial_error_rate, 2, 1800) + # find_alpha("low confidence downward convergence alpha", initial_error_rate, 0.5, 300) + # find_alpha("high confidence upward convergence alpha", initial_error_rate, 2, 3600) + # find_alpha("high confidence downward convergence alpha", initial_error_rate, 0.5, 600) + class SimpleExponentialSmoother + DEFAULT_CAP_VALUE = 0.1 + + LOW_CONFIDENCE_ALPHA_UP = 0.0017 + LOW_CONFIDENCE_ALPHA_DOWN = 0.078 + HIGH_CONFIDENCE_ALPHA_UP = 0.0009 + HIGH_CONFIDENCE_ALPHA_DOWN = 0.039 + LOW_CONFIDENCE_THRESHOLD_MINUTES = 30 + + # Validate all alpha constants at class load time + [ + LOW_CONFIDENCE_ALPHA_UP, + LOW_CONFIDENCE_ALPHA_DOWN, + HIGH_CONFIDENCE_ALPHA_UP, + HIGH_CONFIDENCE_ALPHA_DOWN, + ].each do |alpha| + if alpha <= 0 || alpha >= 0.5 + raise ArgumentError, "alpha constant must be in range (0, 0.5), got: #{alpha}" + end + end + + attr_reader :alpha, :cap_value, :initial_value, :smoothed_value, :observations_per_minute + + def initialize(cap_value: DEFAULT_CAP_VALUE, initial_value:, observations_per_minute:) + @alpha = LOW_CONFIDENCE_ALPHA_DOWN # Start with low confidence, converging down + @cap_value = cap_value + @initial_value = initial_value + @observations_per_minute = observations_per_minute + @smoothed_value = initial_value + @observation_count = 0 + end + + def add_observation(value) + raise ArgumentError, "value must be non-negative, got: #{value}" if value < 0 + + return @smoothed_value if value > cap_value + + @observation_count += 1 + + low_confidence = @observation_count < (@observations_per_minute * LOW_CONFIDENCE_THRESHOLD_MINUTES) + converging_up = value > @smoothed_value + + @alpha = if low_confidence + converging_up ? LOW_CONFIDENCE_ALPHA_UP : LOW_CONFIDENCE_ALPHA_DOWN + else + converging_up ? HIGH_CONFIDENCE_ALPHA_UP : HIGH_CONFIDENCE_ALPHA_DOWN + end + + @smoothed_value = (@alpha * value) + ((1.0 - @alpha) * @smoothed_value) + @smoothed_value + end + + def forecast + @smoothed_value + end + + def state + { + smoothed_value: @smoothed_value, + alpha: @alpha, + cap_value: @cap_value, + initial_value: @initial_value, + observations_per_minute: @observations_per_minute, + observation_count: @observation_count, + } + end + + def reset + @smoothed_value = initial_value + @observation_count = 0 + @alpha = LOW_CONFIDENCE_ALPHA_DOWN + self + end + end +end diff --git a/scripts/estimator/README.md b/scripts/estimator/README.md new file mode 100644 index 000000000..984ddb827 --- /dev/null +++ b/scripts/estimator/README.md @@ -0,0 +1,76 @@ +# Pยฒ Quantile Estimator Scripts + +This directory contains scripts for testing and visualizing the Pยฒ (P-squared) quantile estimator implementation. + +## What is the Pยฒ Estimator? + +The Pยฒ algorithm is a sequential quantile estimation algorithm that calculates quantiles (like median, p90, p95) in **O(1) constant memory** and **O(1) time per observation**. This is ideal for streaming data where you can't store all observations. + +Traditional methods require sorting all data, which uses O(n) memory. The Pยฒ estimator only needs 5 markers regardless of data size. + +**Reference Paper:** +> Jain, Raj, and Imrich Chlamtac. "The Pยฒ algorithm for dynamic calculation of quantiles and histograms without storing observations." *Communications of the ACM* 28, no. 10 (1985): 1076-1085. + +## Scripts + +### `p2_accuracy.rb` + +Visualizes how the Pยฒ estimator converges to the true median over time. + +**What it does:** +- Generates 10,000 observations from a Normal(100, 15) distribution +- Tracks both the Pยฒ estimate and exact median every 100 observations +- Creates two visualizations showing convergence and mean squared error (MSE) + +**Prerequisites:** +```bash +gem install gruff rubystats +``` + +**Usage:** +```bash +ruby scripts/estimator/p2_accuracy.rb +``` + +**Output:** +- `p2_convergence.png` - Shows Pยฒ estimate vs exact median vs theoretical over time +- `p2_mse_over_time.png` - Shows mean squared error decreasing as sample size increases + +**Example Output:** +``` +Pยฒ Estimator Convergence Visualization +================================================================================ +Generating 10000 observations from Normal(100, 15) +Tracking median estimate every 100 observations +================================================================================ + +Final Results (10000 observations): + Pยฒ Estimate: 99.9442 + Exact Median: 99.9604 + MSE: 0.000262 + Theoretical: ~100.0 (ฮผ for Normal(100, 15)) + +================================================================================ +Visualizations saved to: scripts/estimator + - p2_convergence.png (Estimates over time) + - p2_mse_over_time.png (MSE over time) +================================================================================ +``` + +## Understanding the Visualizations + +### Convergence Plot +Shows three lines: +- **Pยฒ Estimate** (teal): The running estimate from the Pยฒ algorithm +- **Exact Median** (red): The actual median calculated from all observations so far +- **Theoretical** (light teal): The true population median (ฮผ=100) + +As more observations are added, all three lines should converge together. + +### MSE Plot +Shows how the mean squared error `(Pยฒ estimate - exact median)ยฒ` decreases over time. This demonstrates that the Pยฒ estimator becomes more accurate as it processes more data. + +## Implementation + +The Pยฒ estimator is implemented in `lib/semian/p2_estimator.rb` and is used by Semian's adaptive circuit breaker for real-time error rate estimation. + diff --git a/scripts/estimator/p2_accuracy.rb b/scripts/estimator/p2_accuracy.rb new file mode 100755 index 000000000..1c0443b10 --- /dev/null +++ b/scripts/estimator/p2_accuracy.rb @@ -0,0 +1,202 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +# Visualize P2 quantile estimator convergence to actual median over time + +require "benchmark" + +begin + require "gruff" + require "rubystats" +rescue LoadError => e + puts "Error: Required gem is not installed." + puts "Please install with: gem install gruff rubystats" + puts "Error details: #{e.message}" + exit(1) +end + +require_relative "../../lib/semian/p2_estimator" + +class P2AccuracyBenchmark + TOTAL_OBSERVATIONS = 10_000 + SAMPLE_INTERVAL = 100 # Track estimate every N observations + QUANTILES = [0.5, 0.9].freeze # P50 (Median) and P90 + + def run + puts "Pยฒ Estimator Convergence Visualization" + puts "=" * 80 + puts "Generating #{TOTAL_OBSERVATIONS} observations from Normal(100, 15)" + puts "Tracking quantile estimates (P50, P90) every #{SAMPLE_INTERVAL} observations" + puts "=" * 80 + puts + + # Generate all observations once + normal_distribution = Rubystats::NormalDistribution.new(100, 15) + all_values = Array.new(TOTAL_OBSERVATIONS) { normal_distribution.rng } + + output_dir = File.dirname(__FILE__) + + # Run benchmark for each quantile + QUANTILES.each do |quantile| + run_quantile_benchmark(quantile, all_values, output_dir) + end + + puts "=" * 80 + puts "All visualizations saved to: #{output_dir}" + QUANTILES.each do |q| + quantile_label = "p#{(q * 100).to_i}" + puts " - #{quantile_label}_convergence.png" + puts " - #{quantile_label}_mse_over_time.png" + end + puts "=" * 80 + end + + private + + def run_quantile_benchmark(quantile, all_values, output_dir) + quantile_label = "P#{(quantile * 100).to_i}" + puts "\nProcessing #{quantile_label}..." + puts "-" * 80 + + observation_counts = [] + p2_estimates = [] + exact_quantiles = [] + + estimator = Semian::P2QuantileEstimator.new(quantile) + + all_values.each_with_index do |value, idx| + estimator.add_observation(value) + + next unless (idx + 1) % SAMPLE_INTERVAL == 0 || idx == TOTAL_OBSERVATIONS - 1 + + n = idx + 1 + observation_counts << n + + # Get P2 estimate + p2_estimates << estimator.estimate + + # Calculate exact quantile from observations so far + exact_quantiles << calculate_exact_quantile(all_values[0..idx], quantile) + + if n % 1000 == 0 + print("\rProcessed: #{n}/#{TOTAL_OBSERVATIONS}") + end + end + + puts "\r" + " " * 50 + + # Print final results + final_mse = (p2_estimates.last - exact_quantiles.last)**2 + puts "\nFinal Results for #{quantile_label} (#{TOTAL_OBSERVATIONS} observations):" + puts " Pยฒ Estimate: #{format("%.4f", p2_estimates.last)}" + puts " Exact #{quantile_label}: #{format("%.4f", exact_quantiles.last)}" + puts " MSE: #{format("%.6f", final_mse)}" + puts + + # Create visualization + create_convergence_plot(observation_counts, p2_estimates, exact_quantiles, quantile, output_dir) + create_error_plot(observation_counts, p2_estimates, exact_quantiles, quantile, output_dir) + end + + def calculate_exact_quantile(values, quantile) + sorted = values.sort + n = sorted.length + + # Linear interpolation between closest ranks + index = quantile * (n - 1) + lower = index.floor + upper = index.ceil + + if lower == upper + sorted[lower] + else + # Interpolate between the two values + weight = index - lower + sorted[lower] * (1 - weight) + sorted[upper] * weight + end + end + + def create_convergence_plot(observation_counts, p2_estimates, exact_quantiles, quantile, output_dir) + quantile_label = "P#{(quantile * 100).to_i}" + quantile_filename = "p#{(quantile * 100).to_i}" + + g = Gruff::Line.new(1400) + g.title = "Pยฒ Estimator Convergence: #{quantile_label} Estimate vs Actual" + g.x_axis_label = "Number of Observations" + g.y_axis_label = "#{quantile_label} Estimate" + g.hide_dots = true + g.theme = { + colors: ["#4ecdc4", "#ff6b6b", "#95e1d3"], + marker_color: "#aaa", + font_color: "#333", + background_colors: ["#fff", "#f8f9fa"], + } + + # Add data series + g.data("Pยฒ Estimate", p2_estimates) + g.data("Exact #{quantile_label}", exact_quantiles) + + # Add theoretical line for P50 only (ฮผ = 100 for median) + if quantile == 0.5 + theoretical_line = Array.new(observation_counts.length, 100.0) + g.data("Theoretical (ฮผ=100)", theoretical_line) + end + + all_values = p2_estimates + exact_quantiles + min_val = all_values.min + max_val = all_values.max + margin = (max_val - min_val) * 0.1 # Add 10% margin + g.minimum_value = min_val - margin + g.maximum_value = max_val + margin + + labels = {} + observation_counts.each_with_index do |count, idx| + if count % 1000 == 0 || idx == 0 || idx == observation_counts.length - 1 + labels[idx] = "#{count / 1000}k" + end + end + g.labels = labels + + output_path = File.join(output_dir, "#{quantile_filename}_convergence.png") + g.write(output_path) + puts "\nGenerated: #{quantile_filename}_convergence.png" + end + + def create_error_plot(observation_counts, p2_estimates, exact_quantiles, quantile, output_dir) + quantile_label = "P#{(quantile * 100).to_i}" + quantile_filename = "p#{(quantile * 100).to_i}" + + mse_values = p2_estimates.zip(exact_quantiles).map { |p2, exact| (p2 - exact)**2 } + + g = Gruff::Line.new(1400) + g.title = "Pยฒ Estimator (#{quantile_label}): Mean Squared Error Over Time" + g.x_axis_label = "Number of Observations" + g.y_axis_label = "MSE (Pยฒ - Exact)ยฒ" + g.hide_dots = true + g.theme = { + colors: ["#667eea"], + marker_color: "#aaa", + font_color: "#333", + background_colors: ["#fff", "#f8f9fa"], + } + + g.data("Mean Squared Error", mse_values) + + labels = {} + observation_counts.each_with_index do |count, idx| + if count % 1000 == 0 || idx == 0 || idx == observation_counts.length - 1 + labels[idx] = "#{count / 1000}k" + end + end + g.labels = labels + + output_path = File.join(output_dir, "#{quantile_filename}_mse_over_time.png") + g.write(output_path) + puts "Generated: #{quantile_filename}_mse_over_time.png" + end +end + +if __FILE__ == $PROGRAM_NAME + demo = P2AccuracyBenchmark.new + demo.run +end diff --git a/scripts/estimator/p50_convergence.png b/scripts/estimator/p50_convergence.png new file mode 100644 index 000000000..8d2d1f767 Binary files /dev/null and b/scripts/estimator/p50_convergence.png differ diff --git a/scripts/estimator/p50_mse_over_time.png b/scripts/estimator/p50_mse_over_time.png new file mode 100644 index 000000000..7f03bc8e1 Binary files /dev/null and b/scripts/estimator/p50_mse_over_time.png differ diff --git a/scripts/estimator/p90_convergence.png b/scripts/estimator/p90_convergence.png new file mode 100644 index 000000000..3f36e5dee Binary files /dev/null and b/scripts/estimator/p90_convergence.png differ diff --git a/scripts/estimator/p90_mse_over_time.png b/scripts/estimator/p90_mse_over_time.png new file mode 100644 index 000000000..f62d3369d Binary files /dev/null and b/scripts/estimator/p90_mse_over_time.png differ diff --git a/test/adaptive_circuit_breaker_test.rb b/test/adaptive_circuit_breaker_test.rb new file mode 100644 index 000000000..d1e0c098d --- /dev/null +++ b/test/adaptive_circuit_breaker_test.rb @@ -0,0 +1,258 @@ +# frozen_string_literal: true + +require "test_helper" +require "semian/adaptive_circuit_breaker" + +class TestAdaptiveCircuitBreaker < Minitest::Test + def setup + @breaker = Semian::AdaptiveCircuitBreaker.new( + name: "test_breaker", + exceptions: [RuntimeError], + kp: 1.0, + ki: 0.1, + kd: 0.01, + window_size: 0.05, + initial_error_rate: 0.01, + implementation: Semian::ThreadSafe, + sliding_interval: 1, + ) + end + + def teardown + @breaker.stop + end + + def test_acquire_with_success_returns_value_and_records_request + # Mock the PID controller to allow the request + @breaker.pid_controller.expects(:should_reject?).returns(false) + @breaker.pid_controller.expects(:record_request).with(:success) + + # Execute the block and verify it returns the expected value + result = @breaker.acquire { "successful_result" } + + assert_equal("successful_result", result) + end + + def test_acquire_with_error_raises_and_records_request + # Mock the PID controller to allow the request + @breaker.pid_controller.expects(:should_reject?).returns(false) + @breaker.pid_controller.expects(:record_request).with(:error) + + # Execute the block and verify it raises the error + error = assert_raises(RuntimeError) do + @breaker.acquire { raise "Something went wrong" } + end + + assert_equal("Something went wrong", error.message) + assert_equal("Something went wrong", @breaker.last_error.message) + end + + def test_acquire_with_rejection_raises_and_records_request + # Mock the PID controller to reject the request + @breaker.pid_controller.expects(:should_reject?).returns(true) + @breaker.pid_controller.expects(:record_request).with(:rejected) + + # Verify that OpenCircuitError is raised and the block is never executed + block_executed = false + + error = assert_raises(Semian::OpenCircuitError) do + @breaker.acquire do + block_executed = true + "should not be executed" + end + end + + assert_equal("Rejected by adaptive circuit breaker", error.message) + assert_equal(false, block_executed) + end + + def test_update_thread_calls_pid_controller_update_after_every_wait_interval + # Verify that the update thread is created and alive + assert_instance_of(Thread, @breaker.update_thread) + assert(@breaker.update_thread.alive?) + + # Track how many times wait_for_window is called + wait_count = 0 + ready_to_progress = false + + @breaker.stub(:wait_for_window, -> { + # Wait until we're ready to start + Kernel.sleep(0.01) until ready_to_progress + + wait_count += 1 + # Stop the breaker after 3 waits + @breaker.stop if wait_count >= 3 + }) do + # We call update after sleeping. And since we exit on the third sleep, we only expect 2 updates. + @breaker.pid_controller.expects(:update).times(2) + + # Now allow the thread to start progressing + ready_to_progress = true + + # Wait for the thread to complete + Kernel.sleep(0.01) while @breaker.update_thread.alive? + end + + assert_equal(false, @breaker.update_thread.alive?) + assert_equal(3, wait_count) + end + + def test_notify_state_transition + events = [] + Semian.subscribe(:test_breaker) do |event, resource, _scope, _adapter, payload| + if event == :state_change + events << { name: resource.name, state: payload[:state] } + end + end + + # Control when the update thread progresses + ready_to_progress = false + wait_count = 0 + + @breaker.stub(:wait_for_window, -> { + # Wait until we're ready to start + Kernel.sleep(0.01) until ready_to_progress + + wait_count += 1 + # Stop the breaker after 6 waits + @breaker.stop if wait_count >= 6 + }) do + # Set up expectations before allowing the thread to progress + @breaker.pid_controller.expects(:rejection_rate).returns(0.0, 0.0, 0.0, 0.5, 0.5, 0.5, 0.5, 0.0, 0.0, 0.0).times(10) + @breaker.pid_controller.expects(:update).times(5) + @breaker.pid_controller.expects(:metrics).returns({ + rejection_rate: 0.5, + error_rate: 0.35, + ideal_error_rate: 0.10, + integral: 5.0, + p_value: 0.1, + derivative: 0.01, + current_window_requests: { success: 10, error: 50, rejected: 5 }, + }).at_least_once + + # Now allow the thread to start progressing + ready_to_progress = true + + # Wait for the thread to complete + Kernel.sleep(0.01) while @breaker.update_thread&.alive? + end + + # Should receive exactly 2 notifications (only when state actually changes) + assert_equal(2, events.length) + assert_equal(:test_breaker, events[0][:name]) + assert_equal(:open, events[0][:state]) + assert_equal(:test_breaker, events[1][:name]) + assert_equal(:closed, events[1][:state]) + ensure + Semian.unsubscribe(:test_breaker) + end + + def test_notify_adaptive_update + events = [] + Semian.subscribe(:test_breaker) do |event, resource, _scope, _adapter, payload| + if event == :adaptive_update + events << { + name: resource.name, + rejection_rate: payload[:rejection_rate], + error_rate: payload[:error_rate], + } + end + end + + # Control when the update thread progresses + ready_to_progress = false + wait_count = 0 + + @breaker.stub(:wait_for_window, -> { + # Wait until we're ready to start + Kernel.sleep(0.01) until ready_to_progress + + wait_count += 1 + # Stop the breaker after 3 waits + @breaker.stop if wait_count >= 3 + }) do + # Set up expectations before allowing the thread to progress + @breaker.pid_controller.expects(:update).times(2) + @breaker.pid_controller.expects(:rejection_rate).returns(0.25).at_least_once + @breaker.pid_controller.expects(:metrics).returns({ + rejection_rate: 0.25, + error_rate: 0.15, + ideal_error_rate: 0.10, + integral: 2.5, + p_value: 0.05, + derivative: 0.01, + current_window_requests: { success: 15, error: 3, rejected: 5 }, + }).at_least(2) + + # Now allow the thread to start progressing + ready_to_progress = true + + # Wait for the thread to complete + Kernel.sleep(0.01) while @breaker.update_thread&.alive? + end + + # Should receive 2 adaptive_update notifications (one per update) + assert_equal(2, events.length) + events.each do |event| + assert_equal(:test_breaker, event[:name]) + assert_equal(0.25, event[:rejection_rate]) + assert_equal(0.15, event[:error_rate]) + end + ensure + Semian.unsubscribe(:test_breaker) + end + + def test_state_transition_logging + strio = StringIO.new + original_logger = Semian.logger + Semian.logger = Logger.new(strio) + + # Control when the update thread progresses + ready_to_progress = false + wait_count = 0 + + @breaker.stub(:wait_for_window, -> { + # Wait until we're ready to start + Kernel.sleep(0.01) until ready_to_progress + + wait_count += 1 + # Stop the breaker after 2 waits + @breaker.stop if wait_count >= 2 + }) do + # Set up expectations before allowing the thread to progress + # rejection_rate called twice: before update (0.0), after update (0.5) + @breaker.pid_controller.expects(:rejection_rate).returns(0.0, 0.5).times(2) + @breaker.pid_controller.expects(:update).once + @breaker.pid_controller.expects(:metrics).returns({ + rejection_rate: 0.5, + error_rate: 0.35, + ideal_error_rate: 0.10, + integral: 5.0, + p_value: 0.1, + derivative: 0.01, + current_window_requests: { success: 10, error: 50, rejected: 5 }, + }).at_least_once + + # Now allow the thread to start progressing + ready_to_progress = true + + # Wait for the thread to complete + Kernel.sleep(0.01) while @breaker.update_thread&.alive? + end + + log_output = strio.string + + # Verify log contains expected fields + assert_match(/State transition from closed to open/, log_output) + assert_match(/rejection_rate=50.0%/, log_output) + assert_match(/error_rate=35.0%/, log_output) + assert_match(/ideal_error_rate=10.0%/, log_output) + assert_match(/integral=5.0/, log_output) + assert_match(/success_count=10/, log_output) + assert_match(/error_count=50/, log_output) + assert_match(/rejected_count=5/, log_output) + assert_match(/name="test_breaker"/, log_output) + ensure + Semian.logger = original_logger + end +end diff --git a/test/dual_circuit_breaker_test.rb b/test/dual_circuit_breaker_test.rb new file mode 100644 index 000000000..cf98c6c2a --- /dev/null +++ b/test/dual_circuit_breaker_test.rb @@ -0,0 +1,227 @@ +# frozen_string_literal: true + +require "test_helper" + +class TestDualCircuitBreaker < Minitest::Test + def setup + Semian.reset! + @use_adaptive_flag = true + Semian::DualCircuitBreaker.adaptive_circuit_breaker_selector(->(_resource) { + @use_adaptive_flag + }) + end + + def teardown + Semian.destroy_all_resources + end + + def test_creates_both_circuit_breakers + resource = create_dual_resource + + assert_instance_of(Semian::DualCircuitBreaker, resource.circuit_breaker) + assert_instance_of(Semian::DualCircuitBreaker::ChildClassicCircuitBreaker, resource.circuit_breaker.classic_circuit_breaker) + assert_instance_of(Semian::DualCircuitBreaker::ChildAdaptiveCircuitBreaker, resource.circuit_breaker.adaptive_circuit_breaker) + end + + def test_uses_classic_when_use_adaptive_returns_false + resource = create_dual_resource + @use_adaptive_flag = false + + resource.acquire { "success" } + + assert_instance_of(Semian::DualCircuitBreaker::ChildClassicCircuitBreaker, resource.circuit_breaker.active_circuit_breaker) + end + + def test_uses_adaptive_when_use_adaptive_returns_true + resource = create_dual_resource + @use_adaptive_flag = true + + resource.acquire { "success" } + + assert_instance_of(Semian::DualCircuitBreaker::ChildAdaptiveCircuitBreaker, resource.circuit_breaker.active_circuit_breaker) + end + + def test_can_switch_between_breakers_at_runtime + resource = create_dual_resource + + # Start with classic + @use_adaptive_flag = false + resource.acquire { "success" } + + assert_instance_of(Semian::DualCircuitBreaker::ChildClassicCircuitBreaker, resource.circuit_breaker.active_circuit_breaker) + + # Switch to adaptive + @use_adaptive_flag = true + resource.acquire { "success" } + + assert_instance_of(Semian::DualCircuitBreaker::ChildAdaptiveCircuitBreaker, resource.circuit_breaker.active_circuit_breaker) + + # Switch back to classic + @use_adaptive_flag = false + resource.acquire { "success" } + + assert_instance_of(Semian::DualCircuitBreaker::ChildClassicCircuitBreaker, resource.circuit_breaker.active_circuit_breaker) + end + + def test_both_breakers_record_requests + resource = create_dual_resource + @use_adaptive_flag = false + + classic_cb = resource.circuit_breaker.classic_circuit_breaker + adaptive_cb = resource.circuit_breaker.adaptive_circuit_breaker + + 2.times { resource.acquire { "success" } } + + adaptive_metrics = adaptive_cb.pid_controller.metrics + + assert_equal(2, adaptive_metrics[:current_window_requests][:success]) + + begin + resource.acquire { raise TestError, "test error" } + rescue TestError + nil + end + + assert_equal(1, classic_cb.instance_variable_get(:@errors).size) + assert_equal("test error", adaptive_cb.last_error.message) + adaptive_metrics = adaptive_cb.pid_controller.metrics + + assert_equal(1, adaptive_metrics[:current_window_requests][:error]) + end + + def test_destroy_destroys_both_breakers + resource = create_dual_resource + + resource.circuit_breaker.destroy + + assert(resource.circuit_breaker.adaptive_circuit_breaker.instance_variable_get(:@stopped)) + end + + def test_handles_use_adaptive_check_errors_gracefully + resource = Semian.register( + :test_error_handling, + dual_circuit_breaker: true, + success_threshold: 2, + error_threshold: 3, + error_timeout: 5, + tickets: 5, + timeout: 0.5, + exceptions: [TestError], + ) + + Semian::DualCircuitBreaker.adaptive_circuit_breaker_selector(->(_resource) { raise StandardError, "check failed" }) + + success_count = 0 + resource.acquire { success_count += 1 } + + assert_equal(1, success_count) + assert_instance_of(Semian::DualCircuitBreaker::ChildClassicCircuitBreaker, resource.circuit_breaker.active_circuit_breaker) + end + + def test_with_bulkhead_enabled + resource = Semian.register( + :test_with_bulkhead, + dual_circuit_breaker: true, + success_threshold: 2, + error_threshold: 3, + error_timeout: 5, + tickets: 2, + timeout: 0.5, + exceptions: [TestError], + ) + + assert(resource.bulkhead) + assert_equal(2, resource.tickets) + end + + def test_env_variable_disables_dual_breaker + ENV["SEMIAN_CIRCUIT_BREAKER_DISABLED"] = "1" + + resource = Semian.register( + :test_disabled, + dual_circuit_breaker: true, + success_threshold: 2, + error_threshold: 3, + error_timeout: 5, + tickets: 2, + ) + + assert_nil(resource.circuit_breaker) + ensure + ENV.delete("SEMIAN_CIRCUIT_BREAKER_DISABLED") + end + + def test_both_breakers_track_last_error + resource = create_dual_resource + + begin + resource.acquire { raise TestError, "test error" } + rescue TestError + nil # expected + end + + assert_equal("test error", resource.circuit_breaker.last_error.message) + assert_equal("test error", resource.circuit_breaker.classic_circuit_breaker.last_error.message) + assert_equal("test error", resource.circuit_breaker.adaptive_circuit_breaker.last_error.message) + end + + def test_active_breaker_type + resource = create_dual_resource + + @use_adaptive_flag = false + resource.acquire { "success" } + + assert_instance_of(Semian::DualCircuitBreaker::ChildClassicCircuitBreaker, resource.circuit_breaker.classic_circuit_breaker) + + @use_adaptive_flag = true + resource.acquire { "success" } + + assert_instance_of(Semian::DualCircuitBreaker::ChildAdaptiveCircuitBreaker, resource.circuit_breaker.adaptive_circuit_breaker) + end + + def test_notifies_on_mode_change + resource = create_dual_resource + notifications = [] + + subscription = Semian.subscribe do |event, _, _, _, payload| + notifications << { event: event, payload: payload } if event == :circuit_breaker_mode_change + end + + @use_adaptive_flag = false + resource.acquire { "success" } + + @use_adaptive_flag = true + resource.acquire { "success" } + + assert_equal(1, notifications.size) + assert_equal(:classic, notifications[0][:payload][:old_mode]) + assert_equal(:adaptive, notifications[0][:payload][:new_mode]) + + @use_adaptive_flag = false + resource.acquire { "success" } + + assert_equal(2, notifications.size) + assert_equal(:adaptive, notifications[1][:payload][:old_mode]) + assert_equal(:classic, notifications[1][:payload][:new_mode]) + ensure + Semian.unsubscribe(subscription) + end + + private + + def create_dual_resource + Semian.register( + :test_dual_resource, + dual_circuit_breaker: true, + success_threshold: 2, + error_threshold: 3, + error_timeout: 5, + tickets: 5, + timeout: 0.5, + exceptions: [TestError], + ) + end + + class TestError < StandardError + end +end diff --git a/test/forecast_success_criteria_test.rb b/test/forecast_success_criteria_test.rb new file mode 100644 index 000000000..c087a2c07 --- /dev/null +++ b/test/forecast_success_criteria_test.rb @@ -0,0 +1,191 @@ +# frozen_string_literal: true + +require "test_helper" +require "semian/simple_exponential_smoother" + +class TestForecastSuccessCriteria < Minitest::Test + DELTA_TOLERANCE = 0.003 + + def setup + @observations_per_minute = 60 + end + + private + + def simulate_observations(smoother, error_rate, count) + count.times { smoother.add_observation(error_rate) } + end + + def minutes_to_observations(minutes) + (minutes * @observations_per_minute).to_i + end + + def establish_high_confidence(smoother, baseline_error_rate) + observations = minutes_to_observations(30) + simulate_observations(smoother, baseline_error_rate, observations) + end + + public + + def test_low_confidence_during_incident_above_cap_stays_at_initial_value + smoother = Semian::SimpleExponentialSmoother.new(initial_value: 0.05, observations_per_minute: @observations_per_minute) + initial_value = smoother.forecast + + observations = minutes_to_observations(30) + simulate_observations(smoother, 0.15, observations) + + assert_in_delta( + initial_value, + smoother.forecast, + DELTA_TOLERANCE, + "IER should stay at initial value during low confidence incident above cap", + ) + end + + def test_low_confidence_ier_lower_than_actual_converges_in_30_minutes_for_2x_error_rate + smoother = Semian::SimpleExponentialSmoother.new(initial_value: 0.05, observations_per_minute: @observations_per_minute) + current_ier = smoother.forecast + target_error_rate = current_ier * 2 + + [5, 10, 15, 20, 25].each do |minutes| + observations = minutes_to_observations(5) + simulate_observations(smoother, target_error_rate, observations) + + refute_in_delta( + target_error_rate, + smoother.forecast, + DELTA_TOLERANCE, + "IER should not have converged to target after #{minutes} minutes during low confidence", + ) + end + + observations = minutes_to_observations(5) + simulate_observations(smoother, target_error_rate, observations) + + assert_in_delta( + target_error_rate, + smoother.forecast, + DELTA_TOLERANCE, + "IER should converge to 2x observed rate in 30 minutes during low confidence", + ) + end + + def test_low_confidence_ier_higher_than_actual_converges_in_5_minutes + smoother = Semian::SimpleExponentialSmoother.new(initial_value: 0.05, observations_per_minute: @observations_per_minute) + current_ier = smoother.forecast + target_error_rate = current_ier * 0.5 + + observations = minutes_to_observations(5) + simulate_observations(smoother, target_error_rate, observations) + + assert_in_delta( + target_error_rate, + smoother.forecast, + DELTA_TOLERANCE, + "IER should converge to 0.5x observed rate in 5 minutes during low confidence", + ) + end + + def test_low_confidence_ier_already_perfect_stays_static + smoother = Semian::SimpleExponentialSmoother.new(initial_value: 0.05, observations_per_minute: @observations_per_minute) + perfect_rate = smoother.forecast + + observations = minutes_to_observations(30) + simulate_observations(smoother, perfect_rate, observations) + + assert_in_delta( + perfect_rate, + smoother.forecast, + DELTA_TOLERANCE, + "IER should stay static when already perfect during low confidence", + ) + end + + def test_high_confidence_during_incident_above_cap_stays_stable + smoother = Semian::SimpleExponentialSmoother.new(initial_value: 0.05, observations_per_minute: @observations_per_minute) + baseline_error_rate = 0.05 + + establish_high_confidence(smoother, baseline_error_rate) + pre_incident_value = smoother.forecast + + observations = minutes_to_observations(30) + simulate_observations(smoother, 0.15, observations) + + assert_in_delta( + pre_incident_value, + smoother.forecast, + DELTA_TOLERANCE, + "IER should stay stable during high confidence incident above cap", + ) + end + + def test_high_confidence_ier_lower_than_actual_converges_in_1_hour + smoother = Semian::SimpleExponentialSmoother.new(initial_value: 0.05, observations_per_minute: @observations_per_minute) + baseline_error_rate = 0.05 + + establish_high_confidence(smoother, baseline_error_rate) + + current_ier = smoother.forecast + target_error_rate = current_ier * 2 + + [10, 20, 30, 40, 50].each do |minutes| + observations = minutes_to_observations(10) + simulate_observations(smoother, target_error_rate, observations) + + refute_in_delta( + target_error_rate, + smoother.forecast, + DELTA_TOLERANCE, + "IER should not have converged to target after #{minutes} minutes during high confidence", + ) + end + + observations = minutes_to_observations(10) + simulate_observations(smoother, target_error_rate, observations) + + assert_in_delta( + target_error_rate, + smoother.forecast, + DELTA_TOLERANCE, + "IER should converge to 2x observed rate in 1 hour during high confidence", + ) + end + + def test_high_confidence_ier_higher_than_actual_converges_in_10_minutes + smoother = Semian::SimpleExponentialSmoother.new(initial_value: 0.05, observations_per_minute: @observations_per_minute) + baseline_error_rate = 0.05 + + establish_high_confidence(smoother, baseline_error_rate) + + current_ier = smoother.forecast + target_error_rate = current_ier * 0.5 + + observations = minutes_to_observations(10) + simulate_observations(smoother, target_error_rate, observations) + + assert_in_delta( + target_error_rate, + smoother.forecast, + DELTA_TOLERANCE, + "IER should converge to 0.5x observed rate in 10 minutes during high confidence", + ) + end + + def test_high_confidence_ier_already_perfect_stays_static + smoother = Semian::SimpleExponentialSmoother.new(initial_value: 0.05, observations_per_minute: @observations_per_minute) + baseline_error_rate = 0.012 + + establish_high_confidence(smoother, baseline_error_rate) + established_ier = smoother.forecast + + observations = minutes_to_observations(30) + simulate_observations(smoother, baseline_error_rate, observations) + + assert_in_delta( + established_ier, + smoother.forecast, + DELTA_TOLERANCE, + "IER should stay static when already perfect during high confidence", + ) + end +end diff --git a/test/pid_controller_test.rb b/test/pid_controller_test.rb new file mode 100644 index 000000000..b860e4be6 --- /dev/null +++ b/test/pid_controller_test.rb @@ -0,0 +1,278 @@ +# frozen_string_literal: true + +require "test_helper" +require "semian/pid_controller" + +class TestPIDController < Minitest::Test + include TimeHelper + + def setup + @controller = Semian::ThreadSafe::PIDController.new( + kp: 1.0, + ki: 0.1, + kd: 0.01, + window_size: 10, + initial_error_rate: 0.01, + implementation: Semian::ThreadSafe, + sliding_interval: 1, + ) + end + + def teardown + @controller.reset + Process.unstub(:clock_gettime) + end + + def test_initial_values + assert_equal( + { + rejection_rate: 0.0, + error_rate: 0.0, + ideal_error_rate: 0.01, + p_value: 0.0, + previous_p_value: 0.0, + integral: 0.0, + derivative: 0.0, + current_window_requests: { success: 0, error: 0, rejected: 0 }, + smoother_state: { + smoothed_value: 0.01, + alpha: 0.078, + cap_value: 0.1, + initial_value: 0.01, + observations_per_minute: 60, + observation_count: 0, + }, + }, + @controller.metrics, + ) + end + + def test_record_requests + (0..2).each do |_| + @controller.record_request(:success) + @controller.record_request(:error) + @controller.record_request(:rejected) + end + + assert_equal({ success: 3, error: 3, rejected: 3 }, @controller.metrics[:current_window_requests]) + end + + def test_update_flow + # Each iteration advances time by 1 second. Window is 10 seconds. + elapsed = 0 + + # Phase 1: Start with 1% error rate + elapsed += 1 + time_travel(elapsed) do + 99.times { @controller.record_request(:success) } + @controller.record_request(:error) + @controller.update + end + + # Rejection should be 0 when error rate is less than or equal to ideal + assert_equal(0.0, @controller.metrics[:rejection_rate]) + assert_equal(1, @controller.metrics[:smoother_state][:observation_count]) + + # Phase 2: Introduce error spike + elapsed += 1 + time_travel(elapsed) do + 61.times { @controller.record_request(:success) } + 39.times { @controller.record_request(:error) } + @controller.update + end + + # Rejection should be around 20% (ยฑ 2%) + assert_in_delta(0.20, @controller.metrics[:rejection_rate], 0.02, "Rejection should be ~20%") + rejection_after_spike = @controller.metrics[:rejection_rate] + + # Phase 3: Continue high error rate (20% per window) + 5.times do + elapsed += 1 + time_travel(elapsed) do + 80.times { @controller.record_request(:success) } + 20.times { @controller.record_request(:error) } + @controller.update + end + end + + # After sustained errors, rejection should be at least as high as after the initial spike + assert_operator( + @controller.metrics[:rejection_rate], + :>=, + rejection_after_spike, + "Rejection should remain elevated during sustained errors", + ) + + # Phase 4: Recovery - all successes to bring error rate down + 10.times do + elapsed += 1 + time_travel(elapsed) do + 100.times { @controller.record_request(:success) } + @controller.update + end + end + + # After 10 seconds of all successes (window fully refreshed), + # all error data has expired, so rejection should be ~0 + assert_in_delta(0.0, @controller.metrics[:rejection_rate], 0.01, "Rejection should be ~0 after full recovery") + assert_equal(0.0, @controller.metrics[:error_rate], "Error rate should be 0 after window expires") + end + + def test_should_reject_probability + @controller.instance_variable_set(:@rejection_rate, 0.5) + + # Mock rand to return deterministic values + sequence = [0.3, 0.7, 0.4, 0.6, 0.2, 0.8, 0.5, 0.1, 0.9, 0.45] + index = 0 + @controller.stub(:rand, -> { + val = sequence[index % sequence.length] + index += 1 + val + }) do + rejections = 0 + 10.times do + rejections += 1 if @controller.should_reject? + end + + # With rejection_rate = 0.5, values < 0.5 should be rejected + # From sequence: 0.3, 0.4, 0.2, 0.1, 0.45 = 5 rejections + assert_equal(5, rejections) + end + end + + def test_reset_clears_all_state + @controller.record_request(:error) + @controller.update + + @controller.reset + + assert_equal( + { + rejection_rate: 0.0, + error_rate: 0.0, + ideal_error_rate: 0.01, + p_value: 0.0, + previous_p_value: 0.0, + integral: 0.0, + derivative: 0.0, + current_window_requests: { success: 0, error: 0, rejected: 0 }, + smoother_state: { + smoothed_value: 0.01, + alpha: 0.078, + cap_value: 0.1, + initial_value: 0.01, + observations_per_minute: 60, + observation_count: 0, + }, + }, + @controller.metrics, + ) + end + + def test_integral_anti_windup + # Test that integral is clamped between -10 and 10 + + # Test lower bound: integral should not go below -10 + # Simulate prolonged low error rate (below ideal) which would push integral negative + 100.times do + 100.times { @controller.record_request(:success) } + @controller.update + end + + # Integral should be clamped at -10, not accumulate unbounded negative values + assert_operator(@controller.metrics[:integral], :>=, -10.0, "Integral should not go below -10") + + @controller.reset + + # Test upper bound: integral should not go above 10 + # Simulate prolonged high error rate (100%) which would push integral positive + 50.times do + 100.times { @controller.record_request(:error) } + @controller.update + end + + # Integral should be clamped at 10, not accumulate unbounded positive values + assert_operator(@controller.metrics[:integral], :<=, 10.0, "Integral should not go above 10") + end + + def test_sliding_window_behavior_of_controller + time_travel(0.5) do + @controller.record_request(:success) + @controller.record_request(:success) + @controller.record_request(:error) + end + + time_travel(1.5) do + @controller.record_request(:error) + end + + time_travel(10) do + @controller.update + + # On the first 10 seconds, all requests are included + assert_equal(0.5, @controller.metrics[:error_rate]) + end + + time_travel(11) do + @controller.update + + # On the 11th second, the first second is excluded, and we're left with 1 error, so 100% + assert_equal(1.0, @controller.metrics[:error_rate]) + end + end +end + +class TestThreadSafePIDController < Minitest::Test + include TimeHelper + + def setup + @controller = Semian::ThreadSafe::PIDController.new( + kp: 1.0, + ki: 0.1, + kd: 0.01, + window_size: 10, + initial_error_rate: 0.01, + implementation: Semian::ThreadSafe, + sliding_interval: 1, + ) + end + + def test_thread_safety + threads = [] + errors = [] + + # Create multiple threads that simultaneously update the controller + 10.times do |i| + threads << Thread.new do + 100.times do + if i.even? + @controller.record_request(:error) + else + @controller.record_request(:success) + end + end + rescue => e + errors << e + end + end + + threads.each(&:join) + + # No errors should have occurred + assert_empty(errors) + # Values got updated correctly with no race conditions + assert_equal(500, @controller.metrics[:current_window_requests][:error]) + assert_equal(500, @controller.metrics[:current_window_requests][:success]) + end + + def test_no_deadlocks + # Confirm the code does not try to acquire the same lock twice + @controller.update + @controller.record_request(:error) + @controller.should_reject? + @controller.reset + + # If any of the above has a deadlock, the test will hang, and we'll never reach this line + assert(true) # rubocop:disable Minitest/UselessAssertion + end +end diff --git a/test/semian_adaptive_config_test.rb b/test/semian_adaptive_config_test.rb new file mode 100644 index 000000000..56a9700be --- /dev/null +++ b/test/semian_adaptive_config_test.rb @@ -0,0 +1,120 @@ +# frozen_string_literal: true + +require "test_helper" + +class TestSemianAdaptiveConfig < Minitest::Test + def teardown + Semian.destroy_all_resources + end + + def test_register_with_adaptive_circuit_breaker + resource = Semian.register( + :test_adaptive, + adaptive_circuit_breaker: true, + bulkhead: false, + ) + + assert_instance_of(Semian::ProtectedResource, resource) + assert_instance_of(Semian::AdaptiveCircuitBreaker, resource.circuit_breaker) + end + + def test_adaptive_circuit_breaker_disabled_by_env + ENV["SEMIAN_ADAPTIVE_CIRCUIT_BREAKER_DISABLED"] = "1" + + resource = Semian.register( + :test_adaptive_disabled, + adaptive_circuit_breaker: true, + bulkhead: true, + tickets: 1, + ) + + assert_instance_of(Semian::ProtectedResource, resource) + assert_nil(resource.circuit_breaker) + ensure + ENV.delete("SEMIAN_ADAPTIVE_CIRCUIT_BREAKER_DISABLED") + end + + def test_traditional_circuit_breaker_still_works + resource = Semian.register( + :test_traditional, + circuit_breaker: true, + success_threshold: 2, + error_threshold: 3, + error_timeout: 10, + bulkhead: false, + ) + + assert_instance_of(Semian::ProtectedResource, resource) + assert_instance_of(Semian::CircuitBreaker, resource.circuit_breaker) + end + + def test_adaptive_overrides_traditional_when_enabled + resource = Semian.register( + :test_override, + adaptive_circuit_breaker: true, + circuit_breaker: true, # This should be ignored + success_threshold: 2, # These traditional params should be ignored + error_threshold: 3, + error_timeout: 10, + bulkhead: false, + ) + + assert_instance_of(Semian::AdaptiveCircuitBreaker, resource.circuit_breaker) + end + + def test_adaptive_circuit_breaker_with_bulkhead + resource = Semian.register( + :test_combined, + adaptive_circuit_breaker: true, + bulkhead: true, + tickets: 5, + timeout: 1, + ) + + assert_instance_of(Semian::ProtectedResource, resource) + assert_instance_of(Semian::AdaptiveCircuitBreaker, resource.circuit_breaker) + assert_instance_of(Semian::Resource, resource.bulkhead) + assert_equal(5, resource.tickets) + end + + def test_retrieve_adaptive_resource + Semian.register( + :test_retrieve, + adaptive_circuit_breaker: true, + bulkhead: false, + ) + + resource = Semian[:test_retrieve] + + assert_instance_of(Semian::ProtectedResource, resource) + assert_instance_of(Semian::AdaptiveCircuitBreaker, resource.circuit_breaker) + end + + def test_adaptive_circuit_breaker_default_params + resource = Semian.register( + :test_defaults, + adaptive_circuit_breaker: true, + bulkhead: false, + ) + + controller = resource.circuit_breaker.pid_controller + metrics = controller.metrics + + # Check that defaults were applied + assert_equal(0.0, metrics[:rejection_rate]) + end + + def test_resource_cleanup_with_adaptive + resource = Semian.register( + :test_cleanup, + adaptive_circuit_breaker: true, + bulkhead: false, + ) + + Semian.destroy(:test_cleanup) + + # After destroy, the update thread should be stopped + # (the destroy method should call stop on the adaptive circuit breaker) + assert_nil(resource.circuit_breaker.update_thread) + end +end diff --git a/test/simple_exponential_smoother_test.rb b/test/simple_exponential_smoother_test.rb new file mode 100644 index 000000000..2b80ca45b --- /dev/null +++ b/test/simple_exponential_smoother_test.rb @@ -0,0 +1,130 @@ +# frozen_string_literal: true + +require "test_helper" +require "semian/simple_exponential_smoother" + +class TestSimpleExponentialSmoother < Minitest::Test + private + + def simulate_observations(smoother, error_rate, count) + count.times { smoother.add_observation(error_rate) } + end + + public + + def test_initialization_with_defaults + smoother = Semian::SimpleExponentialSmoother.new(initial_value: 0.05, observations_per_minute: 60) + + # Alpha starts at LOW_CONFIDENCE_ALPHA_DOWN + assert_equal(0.078, smoother.alpha) + assert_equal(0.1, smoother.cap_value) + assert_equal(0.05, smoother.initial_value) + assert_equal(0.05, smoother.forecast) + end + + def test_initialization_with_custom_params + smoother = Semian::SimpleExponentialSmoother.new( + cap_value: 0.5, + initial_value: 0.02, + observations_per_minute: 60, + ) + + # Alpha starts at LOW_CONFIDENCE_ALPHA_DOWN + assert_equal(0.078, smoother.alpha) + assert_equal(0.5, smoother.cap_value) + assert_equal(0.02, smoother.initial_value) + assert_equal(0.02, smoother.forecast) + end + + def test_smoothing_formula + smoother = Semian::SimpleExponentialSmoother.new(initial_value: 0.01, observations_per_minute: 60) + + smoother.add_observation(0.01) + + assert_in_delta(0.01, smoother.forecast, 0.001) + + smoother.add_observation(0.05) + + # Converging up in low confidence: alpha = 0.0017 + # Expected: 0.0017 * 0.05 + 0.9983 * 0.01 = 0.010068 + assert_in_delta(0.010068, smoother.forecast, 0.0001) + end + + def test_add_observation_updates_smoothed_value + smoother = Semian::SimpleExponentialSmoother.new(initial_value: 0.05, observations_per_minute: 60) + + initial_forecast = smoother.forecast + smoother.add_observation(0.08) + + assert_operator(smoother.forecast, :>, initial_forecast) + assert_operator(smoother.forecast, :<, 0.08) + end + + def test_cap_value_drops_high_observations + smoother = Semian::SimpleExponentialSmoother.new(initial_value: 0.01, observations_per_minute: 60) + initial_forecast = smoother.forecast + + 20.times { smoother.add_observation(1.0) } + + assert_equal(initial_forecast, smoother.forecast) + + 20.times { smoother.add_observation(0.05) } + + assert_operator(smoother.forecast, :>, initial_forecast) + end + + def test_adaptive_alpha_based_on_direction + smoother = Semian::SimpleExponentialSmoother.new(initial_value: 0.01, observations_per_minute: 60) + + smoother.add_observation(0.08) + + # Converging up in low confidence: alpha = 0.0017 + assert_equal(0.0017, smoother.alpha) + # Expected: 0.0017 * 0.08 + 0.9983 * 0.01 = 0.010119 + assert_in_delta(0.010119, smoother.forecast, 0.0001) + end + + def test_reset_returns_to_initial_state + smoother = Semian::SimpleExponentialSmoother.new(initial_value: 0.05, observations_per_minute: 60) + initial_forecast = smoother.forecast + + 50.times { smoother.add_observation(0.1) } + + assert_operator(smoother.forecast, :>, initial_forecast) + + result = smoother.reset + + assert_equal(smoother, result) + assert_equal(initial_forecast, smoother.forecast) + end + + def test_alpha_changes_with_confidence_period + smoother = Semian::SimpleExponentialSmoother.new(initial_value: 0.01, observations_per_minute: 60) + + smoother.add_observation(0.08) + low_confidence_alpha = smoother.alpha + + 1800.times { smoother.add_observation(0.01) } + + smoother.add_observation(0.08) + high_confidence_alpha = smoother.alpha + + assert_operator(high_confidence_alpha, :<, low_confidence_alpha) + end + + def test_handles_edge_case_values + smoother = Semian::SimpleExponentialSmoother.new(initial_value: 0.05, observations_per_minute: 60) + + initial_value = smoother.forecast + smoother.add_observation(0.0) + + assert_operator(smoother.forecast, :<, initial_value) + + assert_raises(ArgumentError) { smoother.add_observation(-0.1) } + + smoother.reset + 1000.times { smoother.add_observation(0.05) } + + assert_in_delta(0.05, smoother.forecast, 0.0001) + end +end