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
- Run confirmation experiments at the predicted optimal settings to validate the model.
- Consider whether any fixed factors should be varied in a future study.
Experimental Setup
Factors
| Factor | Low | High | Unit |
rest_days | 21 | 60 | days |
stock_density_au_ha | 50 | 200 | AU/ha |
graze_days | 1 | 5 | days |
Fixed: cattle = beef, paddock_count = 10
Responses
| Response | Direction | Unit |
pasture_recovery_pct | ↑ maximize | % |
adg_kg | ↑ maximize | kg/day |
Configuration
{
"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.
| Run | rest_days | stock_density_au_ha | graze_days |
| 1 | 40.5 | 50 | 1 |
| 2 | 40.5 | 125 | 3 |
| 3 | 60 | 125 | 5 |
| 4 | 60 | 125 | 1 |
| 5 | 40.5 | 125 | 3 |
| 6 | 40.5 | 125 | 3 |
| 7 | 21 | 125 | 5 |
| 8 | 60 | 50 | 3 |
| 9 | 40.5 | 50 | 5 |
| 10 | 60 | 200 | 3 |
| 11 | 21 | 125 | 1 |
| 12 | 40.5 | 200 | 5 |
| 13 | 21 | 50 | 3 |
| 14 | 21 | 200 | 3 |
| 15 | 40.5 | 200 | 1 |
Step-by-Step Workflow
1
Preview the design
$ doe info --config use_cases/294_cattle_grazing/config.json
2
Generate the runner script
$ 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
$ bash use_cases/294_cattle_grazing/results/run.sh
4
Analyze results
$ doe analyze --config use_cases/294_cattle_grazing/config.json
5
Get optimization recommendations
$ 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.
$ doe optimize --config use_cases/294_cattle_grazing/config.json --multi
7
Generate the HTML report
$ doe report --config use_cases/294_cattle_grazing/config.json \
--output use_cases/294_cattle_grazing/results/report.html
Features Exercised
| Feature | Value |
| Design type | box_behnken |
| Factor types | continuous (all 3) |
| Arg style | double-dash |
| Responses | 2 (pasture_recovery_pct ↑, adg_kg ↑) |
| Total runs | 15 |
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
| Source | DF | SS | MS | F | p-value |
| 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 |
| Pure | Error | 2 | 312.6667 | | |
| Error | 8 | 596.1905 | 156.3333 | | |
| Total | 14 | 927.3333 | 66.2381 | | |
Pareto Chart
Main Effects Plot
Normal Probability Plot of Effects
Half-Normal Plot of Effects
Model Diagnostics
Response: adg_kg
Top factors: rest_days (56.3%), graze_days (23.6%), stock_density_au_ha (20.1%).
ANOVA
| Source | DF | SS | MS | F | p-value |
| 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 |
| Pure | Error | 2 | 0.0661 | | |
| Error | 8 | 0.0981 | 0.0330 | | |
| Total | 14 | 0.2142 | 0.0153 | | |
Pareto Chart
Main Effects Plot
Normal Probability Plot of Effects
Half-Normal Plot of Effects
Model Diagnostics
Response Surface Plots
3D surfaces fitted with quadratic RSM. Red dots are observed data points.
adg kg rest days vs graze days
adg kg rest days vs stock density au ha
adg kg stock density au ha vs graze days
pasture recovery pct rest days vs graze days
pasture recovery pct rest days vs stock density au ha
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
| Response | Weight | Desirability | Predicted | Dir |
pasture_recovery_pct |
1.5 |
|
81.00 0.7665 81.00 % |
↑ |
adg_kg |
1.0 |
|
0.94 0.9091 0.94 kg/day |
↑ |
Recommended Settings
| Factor | Value |
rest_days | 40.5 days |
stock_density_au_ha | 50 AU/ha |
graze_days | 1 days |
Source: from observed run #4
Trade-off Summary
Sacrifice = how much worse than single-objective best.
| Response | Predicted | Best Observed | Sacrifice |
adg_kg | 0.94 | 0.96 | +0.02 |
Top 3 Runs by Desirability
| Run | D | Factor Settings |
| #10 | 0.7954 | rest_days=40.5, stock_density_au_ha=125, graze_days=3 |
| #8 | 0.7879 | rest_days=40.5, stock_density_au_ha=125, graze_days=3 |
Model Quality
| Response | R² | Type |
adg_kg | 0.0447 | linear |
Full Multi-Objective Output
============================================================
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
=== 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
=== 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%)