← All Use Cases
🐄
Box-Behnken Design

Rotational Grazing Pattern

Box-Behnken design to maximize pasture recovery and animal weight gain by tuning paddock rest days, stocking density, and grazing duration

Summary

This experiment investigates rotational grazing pattern. Box-Behnken design to maximize pasture recovery and animal weight gain by tuning paddock rest days, stocking density, and grazing duration.

The design varies 3 factors: rest days (days), ranging from 21 to 60, stock density au ha (AU/ha), ranging from 50 to 200, and graze days (days), ranging from 1 to 5. The goal is to optimize 2 responses: pasture recovery pct (%) (maximize) and adg kg (kg/day) (maximize). Fixed conditions held constant across all runs include cattle = beef, paddock count = 10.

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 pasture recovery pct, the most influential factors were rest days (41.4%), stock density au ha (32.7%), graze days (25.9%). The best observed value was 87.0 (at rest days = 40.5, stock density au ha = 125, graze days = 3).

For adg kg, the most influential factors were rest days (56.3%), graze days (23.6%), stock density au ha (20.1%). The best observed value was 0.96 (at rest days = 21, stock density au ha = 200, graze days = 3).

Recommended Next Steps

Experimental Setup

Factors

FactorLowHighUnit
rest_days2160days
stock_density_au_ha50200AU/ha
graze_days15days

Fixed: cattle = beef, paddock_count = 10

Responses

ResponseDirectionUnit
pasture_recovery_pct↑ maximize%
adg_kg↑ maximizekg/day

Configuration

use_cases/294_cattle_grazing/config.json
{ "metadata": { "name": "Rotational Grazing Pattern", "description": "Box-Behnken design to maximize pasture recovery and animal weight gain by tuning paddock rest days, stocking density, and grazing duration" }, "factors": [ { "name": "rest_days", "levels": [ "21", "60" ], "type": "continuous", "unit": "days" }, { "name": "stock_density_au_ha", "levels": [ "50", "200" ], "type": "continuous", "unit": "AU/ha" }, { "name": "graze_days", "levels": [ "1", "5" ], "type": "continuous", "unit": "days" } ], "fixed_factors": { "cattle": "beef", "paddock_count": "10" }, "responses": [ { "name": "pasture_recovery_pct", "optimize": "maximize", "unit": "%" }, { "name": "adg_kg", "optimize": "maximize", "unit": "kg/day" } ], "settings": { "operation": "box_behnken", "test_script": "use_cases/294_cattle_grazing/sim.sh" } }

Experimental Matrix

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

Runrest_daysstock_density_au_hagraze_days
140.5501
240.51253
3601255
4601251
540.51253
640.51253
7211255
860503
940.5505
10602003
11211251
1240.52005
1321503
14212003
1540.52001

Step-by-Step Workflow

1

Preview the design

Terminal
$ doe info --config use_cases/294_cattle_grazing/config.json
2

Generate the runner script

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

Execute the experiments

Terminal
$ bash use_cases/294_cattle_grazing/results/run.sh
4

Analyze results

Terminal
$ doe analyze --config use_cases/294_cattle_grazing/config.json
5

Get optimization recommendations

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

Generate the HTML report

Terminal
$ doe report --config use_cases/294_cattle_grazing/config.json \ --output use_cases/294_cattle_grazing/results/report.html

Features Exercised

FeatureValue
Design typebox_behnken
Factor typescontinuous (all 3)
Arg styledouble-dash
Responses2 (pasture_recovery_pct ↑, adg_kg ↑)
Total runs15

Analysis Results

Generated from actual experiment runs using the DOE Helper Tool.

Response: pasture_recovery_pct

Top factors: rest_days (41.4%), stock_density_au_ha (32.7%), graze_days (25.9%).

ANOVA

SourceDFSSMSFp-value
SourceDFSSMSFp-value
rest_days2170.976285.48810.5470.5990
stock_density_au_ha2102.583351.29170.3280.7295
graze_days257.583328.79170.1840.8352
LackofFit6283.523847.2540
PureError2312.6667
Error8596.1905156.3333
Total14927.333366.2381

Pareto Chart

Pareto chart for pasture_recovery_pct

Main Effects Plot

Main effects plot for pasture_recovery_pct

Normal Probability Plot of Effects

Normal probability plot for pasture_recovery_pct

Half-Normal Plot of Effects

Half-normal plot for pasture_recovery_pct

Model Diagnostics

Model diagnostics for pasture_recovery_pct

Response: adg_kg

Top factors: rest_days (56.3%), graze_days (23.6%), stock_density_au_ha (20.1%).

ANOVA

SourceDFSSMSFp-value
SourceDFSSMSFp-value
rest_days20.08760.04381.3260.3181
stock_density_au_ha20.01030.00510.1560.8584
graze_days20.01820.00910.2750.7663
LackofFit60.03200.0053
PureError20.0661
Error80.09810.0330
Total140.21420.0153

Pareto Chart

Pareto chart for adg_kg

Main Effects Plot

Main effects plot for adg_kg

Normal Probability Plot of Effects

Normal probability plot for adg_kg

Half-Normal Plot of Effects

Half-normal plot for adg_kg

Model Diagnostics

Model diagnostics for adg_kg

Response Surface Plots

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

adg kg rest days vs graze days

RSM surface: adg kg rest days vs graze days

adg kg rest days vs stock density au ha

RSM surface: adg kg rest days vs stock density au ha

adg kg stock density au ha vs graze days

RSM surface: adg kg stock density au ha vs graze days

pasture recovery pct rest days vs graze days

RSM surface: pasture recovery pct rest days vs graze days

pasture recovery pct rest days vs stock density au ha

RSM surface: pasture recovery pct rest days vs stock density au ha

pasture recovery pct stock density au ha vs graze days

RSM surface: pasture recovery pct stock density au ha vs graze days

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

Per-Response Desirability

ResponseWeightDesirabilityPredictedDir
pasture_recovery_pct 1.5
0.7665
81.00 0.7665 81.00 %
adg_kg 1.0
0.9091
0.94 0.9091 0.94 kg/day

Recommended Settings

FactorValue
rest_days40.5 days
stock_density_au_ha50 AU/ha
graze_days1 days

Source: from observed run #4

Trade-off Summary

Sacrifice = how much worse than single-objective best.

ResponsePredictedBest ObservedSacrifice
adg_kg0.940.96+0.02

Top 3 Runs by Desirability

RunDFactor Settings
#100.7954rest_days=40.5, stock_density_au_ha=125, graze_days=3
#80.7879rest_days=40.5, stock_density_au_ha=125, graze_days=3

Model Quality

ResponseType
adg_kg0.0447linear

Full Multi-Objective Output

doe optimize --multi
============================================================ MULTI-OBJECTIVE OPTIMIZATION Method: Derringer-Suich Desirability Function ============================================================ Overall desirability: D = 0.8206 Response Weight Desirability Predicted Direction --------------------------------------------------------------------- pasture_recovery_pct 1.5 0.7665 81.00 % ↑ adg_kg 1.0 0.9091 0.94 kg/day ↑ Recommended settings: rest_days = 40.5 days stock_density_au_ha = 50 AU/ha graze_days = 1 days (from observed run #4) Trade-off summary: pasture_recovery_pct: 81.00 (best observed: 87.00, sacrifice: +6.00) adg_kg: 0.94 (best observed: 0.96, sacrifice: +0.02) Model quality: pasture_recovery_pct: R² = 0.5855 (quadratic) adg_kg: R² = 0.0447 (linear) Top 3 observed runs by overall desirability: 1. Run #4 (D=0.8206): rest_days=40.5, stock_density_au_ha=50, graze_days=1 2. Run #10 (D=0.7954): rest_days=40.5, stock_density_au_ha=125, graze_days=3 3. Run #8 (D=0.7879): rest_days=40.5, stock_density_au_ha=125, graze_days=3

Full Analysis Output

doe analyze
=== Main Effects: pasture_recovery_pct === Factor Effect Std Error % Contribution -------------------------------------------------------------- rest_days 7.6071 2.1014 41.4% stock_density_au_ha 6.0000 2.1014 32.7% graze_days 4.7500 2.1014 25.9% === ANOVA Table: pasture_recovery_pct === Source DF SS MS F p-value ----------------------------------------------------------------------------- rest_days 2 170.9762 85.4881 0.547 0.5990 stock_density_au_ha 2 102.5833 51.2917 0.328 0.7295 graze_days 2 57.5833 28.7917 0.184 0.8352 Lack of Fit 6 283.5238 47.2540 0.302 0.8924 Pure Error 2 312.6667 156.3333 Error 8 596.1905 156.3333 Total 14 927.3333 66.2381 === Summary Statistics: pasture_recovery_pct === rest_days: Level N Mean Std Min Max ------------------------------------------------------------ 21 4 78.7500 5.5603 72.0000 85.0000 40.5 7 71.1429 8.5133 58.0000 81.0000 60 4 76.7500 8.7321 66.0000 87.0000 stock_density_au_ha: Level N Mean Std Min Max ------------------------------------------------------------ 125 7 73.0000 10.1489 58.0000 85.0000 200 4 73.2500 6.1305 66.0000 81.0000 50 4 79.0000 5.5976 74.0000 87.0000 graze_days: Level N Mean Std Min Max ------------------------------------------------------------ 1 4 74.5000 2.6458 72.0000 78.0000 3 7 73.0000 11.2398 58.0000 87.0000 5 4 77.7500 5.5000 73.0000 85.0000 === Main Effects: adg_kg === Factor Effect Std Error % Contribution -------------------------------------------------------------- rest_days 0.1825 0.0319 56.3% graze_days 0.0764 0.0319 23.6% stock_density_au_ha 0.0650 0.0319 20.1% === ANOVA Table: adg_kg === Source DF SS MS F p-value ----------------------------------------------------------------------------- rest_days 2 0.0876 0.0438 1.326 0.3181 stock_density_au_ha 2 0.0103 0.0051 0.156 0.8584 graze_days 2 0.0182 0.0091 0.275 0.7663 Lack of Fit 6 0.0320 0.0053 0.162 0.9652 Pure Error 2 0.0661 0.0330 Error 8 0.0981 0.0330 Total 14 0.2142 0.0153 === Summary Statistics: adg_kg === rest_days: Level N Mean Std Min Max ------------------------------------------------------------ 21 4 0.8725 0.0922 0.7700 0.9600 40.5 7 0.6900 0.1264 0.5600 0.9100 60 4 0.7875 0.0419 0.7300 0.8300 stock_density_au_ha: Level N Mean Std Min Max ------------------------------------------------------------ 125 7 0.7529 0.1181 0.5600 0.9100 200 4 0.8075 0.0960 0.7100 0.9400 50 4 0.7425 0.1756 0.5600 0.9600 graze_days: Level N Mean Std Min Max ------------------------------------------------------------ 1 4 0.7400 0.0775 0.6500 0.8300 3 7 0.8014 0.1514 0.5600 0.9600 5 4 0.7250 0.1162 0.5600 0.8200

Optimization Recommendations

doe optimize
=== Optimization: pasture_recovery_pct === Direction: maximize Best observed run: #8 rest_days = 40.5 stock_density_au_ha = 125 graze_days = 3 Value: 87.0 RSM Model (linear, R² = 0.1434, Adj R² = -0.0902): Coefficients: intercept +74.6667 rest_days +2.7500 stock_density_au_ha +3.0000 graze_days -0.2500 RSM Model (quadratic, R² = 0.5854, Adj R² = -0.1610): Coefficients: intercept +79.0000 rest_days +2.7500 stock_density_au_ha +3.0000 graze_days -0.2500 rest_days*stock_density_au_ha +2.2500 rest_days*graze_days +5.7500 stock_density_au_ha*graze_days -3.7500 rest_days^2 -7.3750 stock_density_au_ha^2 -0.3750 graze_days^2 -0.3750 Curvature analysis: rest_days coef=-7.3750 concave (has a maximum) graze_days coef=-0.3750 concave (has a maximum) stock_density_au_ha coef=-0.3750 concave (has a maximum) Notable interactions: rest_days*graze_days coef=+5.7500 (synergistic) stock_density_au_ha*graze_days coef=-3.7500 (antagonistic) rest_days*stock_density_au_ha coef=+2.2500 (synergistic) Predicted optimum (from linear model, at observed points): rest_days = 60 stock_density_au_ha = 200 graze_days = 3 Predicted value: 80.4167 Surface optimum (via L-BFGS-B, linear model): rest_days = 60 stock_density_au_ha = 200 graze_days = 1 Predicted value: 80.6667 Model quality: Weak fit — consider adding center points or using a different design. Factor importance: 1. rest_days (effect: 10.1, contribution: 60.8%) 2. stock_density_au_ha (effect: 6.0, contribution: 36.2%) 3. graze_days (effect: 0.5, contribution: 3.0%) === Optimization: adg_kg === Direction: maximize Best observed run: #15 rest_days = 21 stock_density_au_ha = 200 graze_days = 3 Value: 0.96 RSM Model (linear, R² = 0.0225, Adj R² = -0.2441): Coefficients: intercept +0.7647 rest_days -0.0088 stock_density_au_ha +0.0200 graze_days -0.0112 RSM Model (quadratic, R² = 0.3065, Adj R² = -0.9417): Coefficients: intercept +0.7400 rest_days -0.0088 stock_density_au_ha +0.0200 graze_days -0.0112 rest_days*stock_density_au_ha +0.0450 rest_days*graze_days +0.0925 stock_density_au_ha*graze_days -0.0400 rest_days^2 +0.0512 stock_density_au_ha^2 +0.0138 graze_days^2 -0.0188 Curvature analysis: rest_days coef=+0.0512 negligible curvature graze_days coef=-0.0188 negligible curvature stock_density_au_ha coef=+0.0138 negligible curvature Predicted optimum (from linear model, at observed points): rest_days = 40.5 stock_density_au_ha = 200 graze_days = 1 Predicted value: 0.7959 Surface optimum (via L-BFGS-B, linear model): rest_days = 21 stock_density_au_ha = 200 graze_days = 1 Predicted value: 0.8047 Model quality: Weak fit — consider adding center points or using a different design. Factor importance: 1. rest_days (effect: 0.1, contribution: 44.7%) 2. stock_density_au_ha (effect: 0.0, contribution: 29.6%) 3. graze_days (effect: 0.0, contribution: 25.7%)
← Previous: Poultry House Ventilation Next: Pig Farrowing Pen Design →