← All Use Cases
🚗
Full Factorial Design

EV Range Optimization

Full factorial of driving speed, cabin temperature, regenerative braking level, and tire type to maximize range and minimize energy consumption

Summary

This experiment investigates ev range optimization. Full factorial of driving speed, cabin temperature, regenerative braking level, and tire type to maximize range and minimize energy consumption.

The design varies 4 factors: speed kph (kph), ranging from 60 to 120, cabin temp (C), ranging from 18 to 26, regen level (level), ranging from 1 to 3, and tire type, ranging from standard to low_rolling. The goal is to optimize 2 responses: range km (km) (maximize) and kwh per 100km (kWh/100km) (minimize). Fixed conditions held constant across all runs include battery kwh = 75, vehicle type = suv.

A full factorial design was used to explore all 16 possible combinations of the 4 factors at two levels. This guarantees that every main effect and interaction can be estimated independently, at the cost of a larger experiment (16 runs).

Quadratic response surface models were fitted to capture potential curvature and factor interactions. The RSM contour plots below visualize how pairs of factors jointly affect each response.

Key Findings

For range km, the most influential factors were cabin temp (51.2%), regen level (25.4%), speed kph (12.4%). The best observed value was 614.0 (at speed kph = 120, cabin temp = 18, regen level = 3).

For kwh per 100km, the most influential factors were cabin temp (68.1%), regen level (23.9%), speed kph (4.6%). The best observed value was 12.3 (at speed kph = 120, cabin temp = 18, regen level = 3).

Recommended Next Steps

Experimental Setup

Factors

FactorLowHighUnit
speed_kph60120kph
cabin_temp1826C
regen_level13level
tire_typestandardlow_rolling

Fixed: battery_kwh = 75, vehicle_type = suv

Responses

ResponseDirectionUnit
range_km↑ maximizekm
kwh_per_100km↓ minimizekWh/100km

Configuration

use_cases/119_ev_range_optimization/config.json
{ "metadata": { "name": "EV Range Optimization", "description": "Full factorial of driving speed, cabin temperature, regenerative braking level, and tire type to maximize range and minimize energy consumption" }, "factors": [ { "name": "speed_kph", "levels": [ "60", "120" ], "type": "continuous", "unit": "kph" }, { "name": "cabin_temp", "levels": [ "18", "26" ], "type": "continuous", "unit": "C" }, { "name": "regen_level", "levels": [ "1", "3" ], "type": "continuous", "unit": "level" }, { "name": "tire_type", "levels": [ "standard", "low_rolling" ], "type": "categorical", "unit": "" } ], "fixed_factors": { "battery_kwh": "75", "vehicle_type": "suv" }, "responses": [ { "name": "range_km", "optimize": "maximize", "unit": "km" }, { "name": "kwh_per_100km", "optimize": "minimize", "unit": "kWh/100km" } ], "settings": { "operation": "full_factorial", "test_script": "use_cases/119_ev_range_optimization/sim.sh" } }

Experimental Matrix

The Full Factorial Design produces 16 runs. Each row is one experiment with specific factor settings.

Runspeed_kphcabin_tempregen_leveltire_type
160263low_rolling
2120181low_rolling
360261low_rolling
460263standard
5120263standard
6120183standard
7120261standard
8120181standard
960181low_rolling
1060183standard
11120261low_rolling
12120263low_rolling
1360261standard
14120183low_rolling
1560181standard
1660183low_rolling

Step-by-Step Workflow

1

Preview the design

Terminal
$ doe info --config use_cases/119_ev_range_optimization/config.json
2

Generate the runner script

Terminal
$ doe generate --config use_cases/119_ev_range_optimization/config.json \ --output use_cases/119_ev_range_optimization/results/run.sh --seed 42
3

Execute the experiments

Terminal
$ bash use_cases/119_ev_range_optimization/results/run.sh
4

Analyze results

Terminal
$ doe analyze --config use_cases/119_ev_range_optimization/config.json
5

Get optimization recommendations

Terminal
$ doe optimize --config use_cases/119_ev_range_optimization/config.json
6

Multi-objective optimization

With 2 competing responses, use --multi to find the best compromise via Derringer–Suich desirability.

Terminal
$ doe optimize --config use_cases/119_ev_range_optimization/config.json --multi
7

Generate the HTML report

Terminal
$ doe report --config use_cases/119_ev_range_optimization/config.json \ --output use_cases/119_ev_range_optimization/results/report.html

Features Exercised

FeatureValue
Design typefull_factorial
Factor typescontinuous (3), categorical (1)
Arg styledouble-dash
Responses2 (range_km ↑, kwh_per_100km ↓)
Total runs16

Analysis Results

Generated from actual experiment runs using the DOE Helper Tool.

Response: range_km

Top factors: cabin_temp (51.2%), regen_level (25.4%), speed_kph (12.4%).

ANOVA

SourceDFSSMSFp-value
SourceDFSSMSFp-value
speed_kph11482.25001482.25000.0990.7654
cabin_temp125281.000025281.00001.6930.2499
regen_level16241.00006241.00000.4180.5464
tire_type11156.00001156.00000.0770.7920
speed_kph*cabin_temp1961.0000961.00000.0640.8098
speed_kph*regen_level149.000049.00000.0030.9565
speed_kph*tire_type118769.000018769.00001.2570.3131
cabin_temp*regen_level110506.250010506.25000.7040.4398
cabin_temp*tire_type15256.25005256.25000.3520.5788
regen_level*tire_type12450.25002450.25000.1640.7021
Error574651.750014930.3500
Total15146803.75009786.9167

Pareto Chart

Pareto chart for range_km

Main Effects Plot

Main effects plot for range_km

Normal Probability Plot of Effects

Normal probability plot for range_km

Half-Normal Plot of Effects

Half-normal plot for range_km

Model Diagnostics

Model diagnostics for range_km

Response: kwh_per_100km

Top factors: cabin_temp (68.1%), regen_level (23.9%), speed_kph (4.6%).

ANOVA

SourceDFSSMSFp-value
SourceDFSSMSFp-value
speed_kph10.33060.33060.0090.9279
cabin_temp171.825671.82561.9680.2196
regen_level18.85068.85060.2420.6433
tire_type10.18060.18060.0050.9466
speed_kph*cabin_temp10.00060.00060.0000.9969
speed_kph*regen_level11.62561.62560.0450.8412
speed_kph*tire_type138.130638.13061.0450.3536
cabin_temp*regen_level118.705618.70560.5120.5061
cabin_temp*tire_type116.605616.60560.4550.5299
regen_level*tire_type16.89066.89060.1890.6820
Error5182.498136.4996
Total15345.644423.0430

Pareto Chart

Pareto chart for kwh_per_100km

Main Effects Plot

Main effects plot for kwh_per_100km

Normal Probability Plot of Effects

Normal probability plot for kwh_per_100km

Half-Normal Plot of Effects

Half-normal plot for kwh_per_100km

Model Diagnostics

Model diagnostics for kwh_per_100km

Response Surface Plots

3D surfaces fitted with quadratic RSM. Red dots are observed data points.

kwh per 100km cabin temp vs regen level

RSM surface: kwh per 100km cabin temp vs regen level

kwh per 100km speed kph vs cabin temp

RSM surface: kwh per 100km speed kph vs cabin temp

kwh per 100km speed kph vs regen level

RSM surface: kwh per 100km speed kph vs regen level

range km cabin temp vs regen level

RSM surface: range km cabin temp vs regen level

range km speed kph vs cabin temp

RSM surface: range km speed kph vs cabin temp

range km speed kph vs regen level

RSM surface: range km speed kph vs regen level

Multi-Objective Optimization

When responses compete, Derringer–Suich desirability finds the best compromise. Each response is scaled to a 0–1 desirability, then combined via a weighted geometric mean.

Overall Desirability
D = 0.9545

Per-Response Desirability

ResponseWeightDesirabilityPredictedDir
range_km 1.5
0.9545
614.00 0.9545 614.00 km
kwh_per_100km 1.0
0.9545
12.30 0.9545 12.30 kWh/100km

Recommended Settings

FactorValue
speed_kph60 kph
cabin_temp26 C
regen_level1 level
tire_typelow_rolling

Source: from observed run #16

Trade-off Summary

Sacrifice = how much worse than single-objective best.

ResponsePredictedBest ObservedSacrifice
kwh_per_100km12.3012.30+0.00

Top 3 Runs by Desirability

RunDFactor Settings
#10.7615speed_kph=60, cabin_temp=18, regen_level=1, tire_type=standard
#90.7380speed_kph=120, cabin_temp=18, regen_level=3, tire_type=standard

Model Quality

ResponseType
kwh_per_100km0.1828linear

Full Multi-Objective Output

doe optimize --multi
============================================================ MULTI-OBJECTIVE OPTIMIZATION Method: Derringer-Suich Desirability Function ============================================================ Overall desirability: D = 0.9545 Response Weight Desirability Predicted Direction --------------------------------------------------------------------- range_km 1.5 0.9545 614.00 km ↑ kwh_per_100km 1.0 0.9545 12.30 kWh/100km ↓ Recommended settings: speed_kph = 60 kph cabin_temp = 26 C regen_level = 1 level tire_type = low_rolling (from observed run #16) Trade-off summary: range_km: 614.00 (best observed: 614.00, sacrifice: +0.00) kwh_per_100km: 12.30 (best observed: 12.30, sacrifice: +0.00) Model quality: range_km: R² = 0.1863 (linear) kwh_per_100km: R² = 0.1828 (linear) Top 3 observed runs by overall desirability: 1. Run #16 (D=0.9545): speed_kph=60, cabin_temp=26, regen_level=1, tire_type=low_rolling 2. Run #1 (D=0.7615): speed_kph=60, cabin_temp=18, regen_level=1, tire_type=standard 3. Run #9 (D=0.7380): speed_kph=120, cabin_temp=18, regen_level=3, tire_type=standard

Full Analysis Output

doe analyze
=== Main Effects: range_km === Factor Effect Std Error % Contribution -------------------------------------------------------------- cabin_temp 79.5000 24.7322 51.2% regen_level 39.5000 24.7322 25.4% speed_kph -19.2500 24.7322 12.4% tire_type 17.0000 24.7322 11.0% === ANOVA Table: range_km === Source DF SS MS F p-value ----------------------------------------------------------------------------- speed_kph 1 1482.2500 1482.2500 0.099 0.7654 cabin_temp 1 25281.0000 25281.0000 1.693 0.2499 regen_level 1 6241.0000 6241.0000 0.418 0.5464 tire_type 1 1156.0000 1156.0000 0.077 0.7920 speed_kph*cabin_temp 1 961.0000 961.0000 0.064 0.8098 speed_kph*regen_level 1 49.0000 49.0000 0.003 0.9565 speed_kph*tire_type 1 18769.0000 18769.0000 1.257 0.3131 cabin_temp*regen_level 1 10506.2500 10506.2500 0.704 0.4398 cabin_temp*tire_type 1 5256.2500 5256.2500 0.352 0.5788 regen_level*tire_type 1 2450.2500 2450.2500 0.164 0.7021 Error 5 74651.7500 14930.3500 Total 15 146803.7500 9786.9167 === Interaction Effects: range_km === Factor A Factor B Interaction % Contribution ------------------------------------------------------------------------ speed_kph tire_type -68.5000 34.3% cabin_temp regen_level 51.2500 25.7% cabin_temp tire_type 36.2500 18.1% regen_level tire_type -24.7500 12.4% speed_kph cabin_temp -15.5000 7.8% speed_kph regen_level -3.5000 1.8% === Summary Statistics: range_km === speed_kph: Level N Mean Std Min Max ------------------------------------------------------------ 120 8 409.7500 122.8864 294.0000 614.0000 60 8 390.5000 75.2273 269.0000 498.0000 cabin_temp: Level N Mean Std Min Max ------------------------------------------------------------ 18 8 360.3750 92.6313 269.0000 511.0000 26 8 439.8750 93.7008 304.0000 614.0000 regen_level: Level N Mean Std Min Max ------------------------------------------------------------ 1 8 380.3750 80.9831 269.0000 511.0000 3 8 419.8750 116.2847 294.0000 614.0000 tire_type: Level N Mean Std Min Max ------------------------------------------------------------ low_rolling 8 391.6250 86.7853 297.0000 520.0000 standard 8 408.6250 115.2177 269.0000 614.0000 === Main Effects: kwh_per_100km === Factor Effect Std Error % Contribution -------------------------------------------------------------- cabin_temp -4.2375 1.2001 68.1% regen_level -1.4875 1.2001 23.9% speed_kph 0.2875 1.2001 4.6% tire_type -0.2125 1.2001 3.4% === ANOVA Table: kwh_per_100km === Source DF SS MS F p-value ----------------------------------------------------------------------------- speed_kph 1 0.3306 0.3306 0.009 0.9279 cabin_temp 1 71.8256 71.8256 1.968 0.2196 regen_level 1 8.8506 8.8506 0.242 0.6433 tire_type 1 0.1806 0.1806 0.005 0.9466 speed_kph*cabin_temp 1 0.0006 0.0006 0.000 0.9969 speed_kph*regen_level 1 1.6256 1.6256 0.045 0.8412 speed_kph*tire_type 1 38.1306 38.1306 1.045 0.3536 cabin_temp*regen_level 1 18.7056 18.7056 0.512 0.5061 cabin_temp*tire_type 1 16.6056 16.6056 0.455 0.5299 regen_level*tire_type 1 6.8906 6.8906 0.189 0.6820 Error 5 182.4981 36.4996 Total 15 345.6444 23.0430 === Interaction Effects: kwh_per_100km === Factor A Factor B Interaction % Contribution ------------------------------------------------------------------------ speed_kph tire_type 3.0875 33.4% cabin_temp regen_level -2.1625 23.4% cabin_temp tire_type -2.0375 22.0% regen_level tire_type 1.3125 14.2% speed_kph regen_level -0.6375 6.9% speed_kph cabin_temp 0.0125 0.1% === Summary Statistics: kwh_per_100km === speed_kph: Level N Mean Std Min Max ------------------------------------------------------------ 120 8 19.8750 5.5895 12.3000 26.4000 60 8 20.1625 4.2530 15.4000 28.2000 cabin_temp: Level N Mean Std Min Max ------------------------------------------------------------ 18 8 22.1375 4.8966 14.5000 28.2000 26 8 17.9000 3.8910 12.3000 24.9000 regen_level: Level N Mean Std Min Max ------------------------------------------------------------ 1 8 20.7625 4.5318 14.5000 28.2000 3 8 19.2750 5.2513 12.3000 26.4000 tire_type: Level N Mean Std Min Max ------------------------------------------------------------ low_rolling 8 20.1250 4.2439 14.1000 25.0000 standard 8 19.9125 5.5983 12.3000 28.2000

Optimization Recommendations

doe optimize
=== Optimization: range_km === Direction: maximize Best observed run: #16 speed_kph = 120 cabin_temp = 18 regen_level = 3 tire_type = standard Value: 614.0 RSM Model (linear, R² = 0.2156, Adj R² = -0.0696): Coefficients: intercept +400.1250 speed_kph +39.3750 cabin_temp -14.5000 regen_level -13.7500 tire_type +5.3750 RSM Model (quadratic, R² = 0.4733, Adj R² = -6.9008): Coefficients: intercept +80.0250 speed_kph +39.3750 cabin_temp -14.5000 regen_level -13.7500 tire_type +5.3750 speed_kph*cabin_temp -34.5000 speed_kph*regen_level -3.5000 speed_kph*tire_type -16.3750 cabin_temp*regen_level +0.6250 cabin_temp*tire_type +4.7500 regen_level*tire_type +29.5000 speed_kph^2 +80.0250 cabin_temp^2 +80.0250 regen_level^2 +80.0250 tire_type^2 +80.0250 Curvature analysis: tire_type coef=+80.0250 convex (has a minimum) speed_kph coef=+80.0250 convex (has a minimum) regen_level coef=+80.0250 convex (has a minimum) cabin_temp coef=+80.0250 convex (has a minimum) Notable interactions: speed_kph*cabin_temp coef=-34.5000 (antagonistic) regen_level*tire_type coef=+29.5000 (synergistic) speed_kph*tire_type coef=-16.3750 (antagonistic) cabin_temp*tire_type coef=+4.7500 (synergistic) speed_kph*regen_level coef=-3.5000 (antagonistic) cabin_temp*regen_level coef=+0.6250 (synergistic) Predicted optimum (from linear model, at observed points): speed_kph = 120 cabin_temp = 18 regen_level = 1 tire_type = standard Predicted value: 473.1250 Surface optimum (via L-BFGS-B, linear model): speed_kph = 120 cabin_temp = 18 regen_level = 1 tire_type = low_rolling Predicted value: 473.1250 Model quality: Weak fit — consider adding center points or using a different design. Factor importance: 1. speed_kph (effect: -78.8, contribution: 53.9%) 2. cabin_temp (effect: -29.0, contribution: 19.9%) 3. regen_level (effect: -27.5, contribution: 18.8%) 4. tire_type (effect: 10.8, contribution: 7.4%) === Optimization: kwh_per_100km === Direction: minimize Best observed run: #16 speed_kph = 120 cabin_temp = 18 regen_level = 3 tire_type = standard Value: 12.3 RSM Model (linear, R² = 0.2392, Adj R² = -0.0375): Coefficients: intercept +20.0188 speed_kph -1.9312 cabin_temp +0.6313 regen_level +1.0187 tire_type +0.0187 RSM Model (quadratic, R² = 0.4427, Adj R² = -7.3600): Coefficients: intercept +4.0038 speed_kph -1.9312 cabin_temp +0.6312 regen_level +1.0187 tire_type +0.0187 speed_kph*cabin_temp +1.4812 speed_kph*regen_level +0.2187 speed_kph*tire_type +0.8937 cabin_temp*regen_level -0.4187 cabin_temp*tire_type -0.6688 regen_level*tire_type -0.8562 speed_kph^2 +4.0037 cabin_temp^2 +4.0038 regen_level^2 +4.0038 tire_type^2 +4.0038 Curvature analysis: cabin_temp coef=+4.0038 convex (has a minimum) regen_level coef=+4.0038 convex (has a minimum) tire_type coef=+4.0038 convex (has a minimum) speed_kph coef=+4.0037 convex (has a minimum) Notable interactions: speed_kph*cabin_temp coef=+1.4812 (synergistic) speed_kph*tire_type coef=+0.8937 (synergistic) regen_level*tire_type coef=-0.8562 (antagonistic) cabin_temp*tire_type coef=-0.6688 (antagonistic) cabin_temp*regen_level coef=-0.4187 (antagonistic) Predicted optimum (from linear model, at observed points): speed_kph = 60 cabin_temp = 26 regen_level = 3 tire_type = standard Predicted value: 23.6188 Surface optimum (via L-BFGS-B, linear model): speed_kph = 120 cabin_temp = 18 regen_level = 1 tire_type = standard Predicted value: 16.4188 Model quality: Weak fit — consider adding center points or using a different design. Factor importance: 1. speed_kph (effect: 3.9, contribution: 53.6%) 2. regen_level (effect: 2.0, contribution: 28.3%) 3. cabin_temp (effect: 1.3, contribution: 17.5%) 4. tire_type (effect: 0.0, contribution: 0.5%)
← Previous: Engine Oil Change Interval All Use Cases →