← All Use Cases
🌊
Box-Behnken Design

Tidal Turbine Placement

Box-Behnken design to maximize power output and minimize marine life impact by tuning turbine depth, rotor diameter, and cut-in speed

Summary

This experiment investigates tidal turbine placement. Box-Behnken design to maximize power output and minimize marine life impact by tuning turbine depth, rotor diameter, and cut-in speed.

The design varies 3 factors: depth m (m), ranging from 5 to 25, rotor m (m), ranging from 5 to 20, and cutin ms (m/s), ranging from 0.5 to 2.0. The goal is to optimize 2 responses: annual mwh (MWh) (maximize) and impact score (pts) (minimize). Fixed conditions held constant across all runs include site = tidal_channel, tidal range = 4m.

A Box-Behnken design was chosen because it efficiently fits quadratic models with 3 continuous factors while avoiding extreme corner combinations — requiring only 15 runs instead of the 8 needed for a full factorial at two levels.

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 annual mwh, the most influential factors were cutin ms (40.3%), rotor m (39.0%), depth m (20.7%). The best observed value was 765.0 (at depth m = 15, rotor m = 12.5, cutin ms = 1.25).

For impact score, the most influential factors were cutin ms (44.6%), rotor m (33.6%), depth m (21.8%). The best observed value was 2.1 (at depth m = 15, rotor m = 12.5, cutin ms = 1.25).

Recommended Next Steps

Experimental Setup

Factors

FactorLowHighUnit
depth_m525m
rotor_m520m
cutin_ms0.52.0m/s

Fixed: site = tidal_channel, tidal_range = 4m

Responses

ResponseDirectionUnit
annual_mwh↑ maximizeMWh
impact_score↓ minimizepts

Configuration

use_cases/253_tidal_energy/config.json
{ "metadata": { "name": "Tidal Turbine Placement", "description": "Box-Behnken design to maximize power output and minimize marine life impact by tuning turbine depth, rotor diameter, and cut-in speed" }, "factors": [ { "name": "depth_m", "levels": [ "5", "25" ], "type": "continuous", "unit": "m" }, { "name": "rotor_m", "levels": [ "5", "20" ], "type": "continuous", "unit": "m" }, { "name": "cutin_ms", "levels": [ "0.5", "2.0" ], "type": "continuous", "unit": "m/s" } ], "fixed_factors": { "site": "tidal_channel", "tidal_range": "4m" }, "responses": [ { "name": "annual_mwh", "optimize": "maximize", "unit": "MWh" }, { "name": "impact_score", "optimize": "minimize", "unit": "pts" } ], "settings": { "operation": "box_behnken", "test_script": "use_cases/253_tidal_energy/sim.sh" } }

Experimental Matrix

The Box-Behnken Design produces 15 runs. Each row is one experiment with specific factor settings.

Rundepth_mrotor_mcutin_ms
11550.5
21512.51.25
32512.52
42512.50.5
51512.51.25
61512.51.25
7512.52
82551.25
91552
1025201.25
11512.50.5
1215202
13551.25
145201.25
1515200.5

Step-by-Step Workflow

1

Preview the design

Terminal
$ doe info --config use_cases/253_tidal_energy/config.json
2

Generate the runner script

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

Execute the experiments

Terminal
$ bash use_cases/253_tidal_energy/results/run.sh
4

Analyze results

Terminal
$ doe analyze --config use_cases/253_tidal_energy/config.json
5

Get optimization recommendations

Terminal
$ doe optimize --config use_cases/253_tidal_energy/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/253_tidal_energy/config.json --multi
7

Generate the HTML report

Terminal
$ doe report --config use_cases/253_tidal_energy/config.json \ --output use_cases/253_tidal_energy/results/report.html

Features Exercised

FeatureValue
Design typebox_behnken
Factor typescontinuous (all 3)
Arg styledouble-dash
Responses2 (annual_mwh ↑, impact_score ↓)
Total runs15

Analysis Results

Generated from actual experiment runs using the DOE Helper Tool.

Response: annual_mwh

Top factors: cutin_ms (40.3%), rotor_m (39.0%), depth_m (20.7%).

ANOVA

SourceDFSSMSFp-value
SourceDFSSMSFp-value
depth_m214298.23337149.11670.1620.8530
rotor_m249526.983324763.49170.5620.5912
cutin_ms263145.983331572.99170.7160.5175
LackofFit6207763.866734627.3111
PureError288172.6667
Error8295936.533344086.3333
Total14422907.733330207.6952

Pareto Chart

Pareto chart for annual_mwh

Main Effects Plot

Main effects plot for annual_mwh

Normal Probability Plot of Effects

Normal probability plot for annual_mwh

Half-Normal Plot of Effects

Half-normal plot for annual_mwh

Model Diagnostics

Model diagnostics for annual_mwh

Response: impact_score

Top factors: cutin_ms (44.6%), rotor_m (33.6%), depth_m (21.8%).

ANOVA

SourceDFSSMSFp-value
SourceDFSSMSFp-value
depth_m21.30130.65060.5560.5941
rotor_m22.91271.45631.2450.3383
cutin_ms25.46802.73402.3370.1588
LackofFit69.31531.5526
PureError22.3400
Error811.65531.1700
Total1421.33731.5241

Pareto Chart

Pareto chart for impact_score

Main Effects Plot

Main effects plot for impact_score

Normal Probability Plot of Effects

Normal probability plot for impact_score

Half-Normal Plot of Effects

Half-normal plot for impact_score

Model Diagnostics

Model diagnostics for impact_score

Response Surface Plots

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

annual mwh depth m vs cutin ms

RSM surface: annual mwh depth m vs cutin ms

annual mwh depth m vs rotor m

RSM surface: annual mwh depth m vs rotor m

annual mwh rotor m vs cutin ms

RSM surface: annual mwh rotor m vs cutin ms

impact score depth m vs cutin ms

RSM surface: impact score depth m vs cutin ms

impact score depth m vs rotor m

RSM surface: impact score depth m vs rotor m

impact score rotor m vs cutin ms

RSM surface: impact score rotor m vs cutin ms

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.5858

Per-Response Desirability

ResponseWeightDesirabilityPredictedDir
annual_mwh 1.0
0.5721
513.00 0.5721 513.00 MWh
impact_score 1.5
0.5951
3.80 0.5951 3.80 pts

Recommended Settings

FactorValue
depth_m15 m
rotor_m12.5 m
cutin_ms1.25 m/s

Source: from observed run #3

Trade-off Summary

Sacrifice = how much worse than single-objective best.

ResponsePredictedBest ObservedSacrifice
impact_score3.802.10+1.70

Top 3 Runs by Desirability

RunDFactor Settings
#20.5751depth_m=15, rotor_m=5, cutin_ms=2
#50.5539depth_m=5, rotor_m=12.5, cutin_ms=0.5

Model Quality

ResponseType
impact_score0.0268linear

Full Multi-Objective Output

doe optimize --multi
============================================================ MULTI-OBJECTIVE OPTIMIZATION Method: Derringer-Suich Desirability Function ============================================================ Overall desirability: D = 0.5858 Response Weight Desirability Predicted Direction --------------------------------------------------------------------- annual_mwh 1.0 0.5721 513.00 MWh ↑ impact_score 1.5 0.5951 3.80 pts ↓ Recommended settings: depth_m = 15 m rotor_m = 12.5 m cutin_ms = 1.25 m/s (from observed run #3) Trade-off summary: annual_mwh: 513.00 (best observed: 765.00, sacrifice: +252.00) impact_score: 3.80 (best observed: 2.10, sacrifice: +1.70) Model quality: annual_mwh: R² = 0.0551 (linear) impact_score: R² = 0.0268 (linear) Top 3 observed runs by overall desirability: 1. Run #3 (D=0.5858): depth_m=15, rotor_m=12.5, cutin_ms=1.25 2. Run #2 (D=0.5751): depth_m=15, rotor_m=5, cutin_ms=2 3. Run #5 (D=0.5539): depth_m=5, rotor_m=12.5, cutin_ms=0.5

Full Analysis Output

doe analyze
=== Main Effects: annual_mwh === Factor Effect Std Error % Contribution -------------------------------------------------------------- cutin_ms 157.5000 44.8759 40.3% rotor_m 152.2500 44.8759 39.0% depth_m 81.0000 44.8759 20.7% === ANOVA Table: annual_mwh === Source DF SS MS F p-value ----------------------------------------------------------------------------- depth_m 2 14298.2333 7149.1167 0.162 0.8530 rotor_m 2 49526.9833 24763.4917 0.562 0.5912 cutin_ms 2 63145.9833 31572.9917 0.716 0.5175 Lack of Fit 6 207763.8667 34627.3111 0.785 0.6540 Pure Error 2 88172.6667 44086.3333 Error 8 295936.5333 44086.3333 Total 14 422907.7333 30207.6952 === Summary Statistics: annual_mwh === depth_m: Level N Mean Std Min Max ------------------------------------------------------------ 15 7 457.0000 175.1552 223.0000 701.0000 25 4 434.2500 262.9998 166.0000 765.0000 5 4 515.2500 75.3365 434.0000 616.0000 rotor_m: Level N Mean Std Min Max ------------------------------------------------------------ 12.5 7 482.0000 151.8684 293.0000 701.0000 20 4 376.7500 216.7816 166.0000 616.0000 5 4 529.0000 177.0254 336.0000 765.0000 cutin_ms: Level N Mean Std Min Max ------------------------------------------------------------ 0.5 4 465.7500 86.6425 336.0000 513.0000 1.25 7 524.0000 217.6924 166.0000 765.0000 2 4 366.5000 132.7918 223.0000 516.0000 === Main Effects: impact_score === Factor Effect Std Error % Contribution -------------------------------------------------------------- cutin_ms 1.4036 0.3188 44.6% rotor_m 1.0571 0.3188 33.6% depth_m 0.6857 0.3188 21.8% === ANOVA Table: impact_score === Source DF SS MS F p-value ----------------------------------------------------------------------------- depth_m 2 1.3013 0.6506 0.556 0.5941 rotor_m 2 2.9127 1.4563 1.245 0.3383 cutin_ms 2 5.4680 2.7340 2.337 0.1588 Lack of Fit 6 9.3153 1.5526 1.327 0.4895 Pure Error 2 2.3400 1.1700 Error 8 11.6553 1.1700 Total 14 21.3373 1.5241 === Summary Statistics: impact_score === depth_m: Level N Mean Std Min Max ------------------------------------------------------------ 15 7 4.0143 1.3558 2.1000 6.3000 25 4 4.0750 1.6317 2.6000 6.4000 5 4 4.7000 0.5831 4.2000 5.3000 rotor_m: Level N Mean Std Min Max ------------------------------------------------------------ 12.5 7 4.5571 0.9431 3.5000 6.3000 20 4 3.5000 1.4445 2.1000 5.3000 5 4 4.3250 1.5086 2.8000 6.4000 cutin_ms: Level N Mean Std Min Max ------------------------------------------------------------ 0.5 4 3.9250 0.9430 2.8000 5.1000 1.25 7 4.8286 1.3301 2.6000 6.4000 2 4 3.4250 0.9287 2.1000 4.2000

Optimization Recommendations

doe optimize
=== Optimization: annual_mwh === Direction: maximize Best observed run: #10 depth_m = 15 rotor_m = 12.5 cutin_ms = 1.25 Value: 765.0 RSM Model (linear, R² = 0.0873, Adj R² = -0.1616): Coefficients: intercept +466.4667 depth_m +52.5000 rotor_m -30.0000 cutin_ms -31.0000 RSM Model (quadratic, R² = 0.1663, Adj R² = -1.3342): Coefficients: intercept +430.3333 depth_m +52.5000 rotor_m -30.0000 cutin_ms -31.0000 depth_m*rotor_m -14.0000 depth_m*cutin_ms +40.5000 rotor_m*cutin_ms -57.0000 depth_m^2 +49.0833 rotor_m^2 +31.5833 cutin_ms^2 -12.9167 Curvature analysis: depth_m coef=+49.0833 convex (has a minimum) rotor_m coef=+31.5833 convex (has a minimum) cutin_ms coef=-12.9167 concave (has a maximum) Notable interactions: rotor_m*cutin_ms coef=-57.0000 (antagonistic) depth_m*cutin_ms coef=+40.5000 (synergistic) depth_m*rotor_m coef=-14.0000 (antagonistic) Predicted optimum (from linear model, at observed points): depth_m = 25 rotor_m = 12.5 cutin_ms = 0.5 Predicted value: 549.9667 Surface optimum (via L-BFGS-B, linear model): depth_m = 25 rotor_m = 5 cutin_ms = 0.5 Predicted value: 579.9667 Model quality: Weak fit — consider adding center points or using a different design. Factor importance: 1. depth_m (effect: 105.0, contribution: 46.3%) 2. cutin_ms (effect: 62.0, contribution: 27.3%) 3. rotor_m (effect: 60.0, contribution: 26.4%) === Optimization: impact_score === Direction: minimize Best observed run: #9 depth_m = 15 rotor_m = 12.5 cutin_ms = 1.25 Value: 2.1 RSM Model (linear, R² = 0.0901, Adj R² = -0.1581): Coefficients: intercept +4.2133 depth_m +0.4875 rotor_m -0.0125 cutin_ms -0.0500 RSM Model (quadratic, R² = 0.2708, Adj R² = -1.0418): Coefficients: intercept +4.2333 depth_m +0.4875 rotor_m -0.0125 cutin_ms -0.0500 depth_m*rotor_m +0.0750 depth_m*cutin_ms +0.6000 rotor_m*cutin_ms -0.1500 depth_m^2 +0.3458 rotor_m^2 +0.2458 cutin_ms^2 -0.6292 Curvature analysis: cutin_ms coef=-0.6292 concave (has a maximum) depth_m coef=+0.3458 convex (has a minimum) rotor_m coef=+0.2458 convex (has a minimum) Notable interactions: depth_m*cutin_ms coef=+0.6000 (synergistic) Predicted optimum (from linear model, at observed points): depth_m = 25 rotor_m = 12.5 cutin_ms = 0.5 Predicted value: 4.7508 Surface optimum (via L-BFGS-B, linear model): depth_m = 5 rotor_m = 20 cutin_ms = 2 Predicted value: 3.6633 Model quality: Weak fit — consider adding center points or using a different design. Factor importance: 1. depth_m (effect: 1.0, contribution: 49.4%) 2. cutin_ms (effect: 0.7, contribution: 36.5%) 3. rotor_m (effect: 0.3, contribution: 14.1%)
← Previous: Seawater Desalination Efficiency Next: Fish Farm Stocking Density →