← All Use Cases
🪨
Central Composite Design

Mineral Flotation Separation

Central composite design to maximize mineral recovery and grade by tuning collector dosage, frother concentration, and pulp pH

Summary

This experiment investigates mineral flotation separation. Central composite design to maximize mineral recovery and grade by tuning collector dosage, frother concentration, and pulp pH.

The design varies 3 factors: collector g t (g/t), ranging from 20 to 80, frother g t (g/t), ranging from 10 to 40, and pulp ph (pH), ranging from 7 to 11. The goal is to optimize 2 responses: recovery pct (%) (maximize) and grade pct (%Cu) (maximize). Fixed conditions held constant across all runs include mineral = chalcopyrite, grind size = 75um.

A Central Composite Design (CCD) was selected to fit a full quadratic response surface model, including curvature and interaction effects. With 3 factors this produces 22 runs including center points and axial (star) points that extend beyond the factorial range.

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 recovery pct, the most influential factors were collector g t (35.0%), pulp ph (34.0%), frother g t (31.0%). The best observed value was 82.0 (at collector g t = 50, frother g t = 52.3861, pulp ph = 9).

For grade pct, the most influential factors were frother g t (57.4%), pulp ph (24.6%), collector g t (18.0%). The best observed value was 34.6 (at collector g t = 50, frother g t = 25, pulp ph = 9).

Recommended Next Steps

Experimental Setup

Factors

FactorLowHighUnit
collector_g_t2080g/t
frother_g_t1040g/t
pulp_ph711pH

Fixed: mineral = chalcopyrite, grind_size = 75um

Responses

ResponseDirectionUnit
recovery_pct↑ maximize%
grade_pct↑ maximize%Cu

Configuration

use_cases/234_mineral_flotation/config.json
{ "metadata": { "name": "Mineral Flotation Separation", "description": "Central composite design to maximize mineral recovery and grade by tuning collector dosage, frother concentration, and pulp pH" }, "factors": [ { "name": "collector_g_t", "levels": [ "20", "80" ], "type": "continuous", "unit": "g/t" }, { "name": "frother_g_t", "levels": [ "10", "40" ], "type": "continuous", "unit": "g/t" }, { "name": "pulp_ph", "levels": [ "7", "11" ], "type": "continuous", "unit": "pH" } ], "fixed_factors": { "mineral": "chalcopyrite", "grind_size": "75um" }, "responses": [ { "name": "recovery_pct", "optimize": "maximize", "unit": "%" }, { "name": "grade_pct", "optimize": "maximize", "unit": "%Cu" } ], "settings": { "operation": "central_composite", "test_script": "use_cases/234_mineral_flotation/sim.sh" } }

Experimental Matrix

The Central Composite Design produces 22 runs. Each row is one experiment with specific factor settings.

Runcollector_g_tfrother_g_tpulp_ph
150259
2801011
320407
45052.38619
550259
6-4.77226259
750255.34852
850259
980407
10104.772259
1150259
1250-2.386139
1350259
14201011
1550259
1680107
17502512.6515
18804011
1950259
2020107
21204011
2250259

Step-by-Step Workflow

1

Preview the design

Terminal
$ doe info --config use_cases/234_mineral_flotation/config.json
2

Generate the runner script

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

Execute the experiments

Terminal
$ bash use_cases/234_mineral_flotation/results/run.sh
4

Analyze results

Terminal
$ doe analyze --config use_cases/234_mineral_flotation/config.json
5

Get optimization recommendations

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

Generate the HTML report

Terminal
$ doe report --config use_cases/234_mineral_flotation/config.json \ --output use_cases/234_mineral_flotation/results/report.html

Features Exercised

FeatureValue
Design typecentral_composite
Factor typescontinuous (all 3)
Arg styledouble-dash
Responses2 (recovery_pct ↑, grade_pct ↑)
Total runs22

Analysis Results

Generated from actual experiment runs using the DOE Helper Tool.

Response: recovery_pct

Top factors: collector_g_t (35.0%), pulp_ph (34.0%), frother_g_t (31.0%).

ANOVA

SourceDFSSMSFp-value
SourceDFSSMSFp-value
collector_g_t4426.0379106.50951.4870.2846
frother_g_t4243.037960.75950.8480.5291
pulp_ph4228.037957.00950.7960.5569
LackofFit2458.8409229.4205
PureError7501.5000
Error9960.340971.6429
Total211857.454588.4502

Pareto Chart

Pareto chart for recovery_pct

Main Effects Plot

Main effects plot for recovery_pct

Normal Probability Plot of Effects

Normal probability plot for recovery_pct

Half-Normal Plot of Effects

Half-normal plot for recovery_pct

Model Diagnostics

Model diagnostics for recovery_pct

Response: grade_pct

Top factors: frother_g_t (57.4%), pulp_ph (24.6%), collector_g_t (18.0%).

ANOVA

SourceDFSSMSFp-value
SourceDFSSMSFp-value
collector_g_t49.80362.45090.2240.9185
frother_g_t467.211116.80281.5330.2725
pulp_ph454.277713.56941.2380.3612
LackofFit2140.995470.4977
PureError776.7200
Error9217.715410.9600
Total21349.007716.6194

Pareto Chart

Pareto chart for grade_pct

Main Effects Plot

Main effects plot for grade_pct

Normal Probability Plot of Effects

Normal probability plot for grade_pct

Half-Normal Plot of Effects

Half-normal plot for grade_pct

Model Diagnostics

Model diagnostics for grade_pct

Response Surface Plots

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

grade pct collector g t vs frother g t

RSM surface: grade pct collector g t vs frother g t

grade pct collector g t vs pulp ph

RSM surface: grade pct collector g t vs pulp ph

grade pct frother g t vs pulp ph

RSM surface: grade pct frother g t vs pulp ph

recovery pct collector g t vs frother g t

RSM surface: recovery pct collector g t vs frother g t

recovery pct collector g t vs pulp ph

RSM surface: recovery pct collector g t vs pulp ph

recovery pct frother g t vs pulp ph

RSM surface: recovery pct frother g t vs pulp ph

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

Per-Response Desirability

ResponseWeightDesirabilityPredictedDir
recovery_pct 1.0
0.6089
67.93 0.6089 67.93 %
grade_pct 1.5
0.5063
25.28 0.5063 25.28 %Cu

Recommended Settings

FactorValue
collector_g_t80 g/t
frother_g_t10 g/t
pulp_ph11 pH

Source: from RSM model prediction

Trade-off Summary

Sacrifice = how much worse than single-objective best.

ResponsePredictedBest ObservedSacrifice
grade_pct25.2834.60+9.32

Top 3 Runs by Desirability

RunDFactor Settings
#100.5392collector_g_t=50, frother_g_t=25, pulp_ph=12.6515
#40.5386collector_g_t=50, frother_g_t=25, pulp_ph=9

Model Quality

ResponseType
grade_pct0.0800linear

Full Multi-Objective Output

doe optimize --multi
============================================================ MULTI-OBJECTIVE OPTIMIZATION Method: Derringer-Suich Desirability Function ============================================================ Overall desirability: D = 0.5451 Response Weight Desirability Predicted Direction --------------------------------------------------------------------- recovery_pct 1.0 0.6089 67.93 % ↑ grade_pct 1.5 0.5063 25.28 %Cu ↑ Recommended settings: collector_g_t = 80 g/t frother_g_t = 10 g/t pulp_ph = 11 pH (from RSM model prediction) Trade-off summary: recovery_pct: 67.93 (best observed: 82.00, sacrifice: +14.07) grade_pct: 25.28 (best observed: 34.60, sacrifice: +9.32) Model quality: recovery_pct: R² = 0.0753 (linear) grade_pct: R² = 0.0800 (linear) Top 3 observed runs by overall desirability: 1. Run #14 (D=0.5437): collector_g_t=50, frother_g_t=-2.38613, pulp_ph=9 2. Run #10 (D=0.5392): collector_g_t=50, frother_g_t=25, pulp_ph=12.6515 3. Run #4 (D=0.5386): collector_g_t=50, frother_g_t=25, pulp_ph=9

Full Analysis Output

doe analyze
=== Main Effects: recovery_pct === Factor Effect Std Error % Contribution -------------------------------------------------------------- collector_g_t 17.5000 2.0051 35.0% pulp_ph 17.0000 2.0051 34.0% frother_g_t 15.5000 2.0051 31.0% === ANOVA Table: recovery_pct === Source DF SS MS F p-value ----------------------------------------------------------------------------- collector_g_t 4 426.0379 106.5095 1.487 0.2846 frother_g_t 4 243.0379 60.7595 0.848 0.5291 pulp_ph 4 228.0379 57.0095 0.796 0.5569 Lack of Fit 2 458.8409 229.4205 3.202 0.1029 Pure Error 7 501.5000 71.6429 Error 9 960.3409 71.6429 Total 21 1857.4545 88.4502 === Summary Statistics: recovery_pct === collector_g_t: Level N Mean Std Min Max ------------------------------------------------------------ -4.77226 1 58.0000 0.0000 58.0000 58.0000 104.772 1 75.0000 0.0000 75.0000 75.0000 20 4 75.5000 4.6547 71.0000 82.0000 50 12 67.8333 8.4405 54.0000 77.0000 80 4 64.2500 13.9374 45.0000 75.0000 frother_g_t: Level N Mean Std Min Max ------------------------------------------------------------ -2.38613 1 58.0000 0.0000 58.0000 58.0000 10 4 73.5000 1.7321 71.0000 75.0000 25 12 68.6667 8.6269 54.0000 77.0000 40 4 66.2500 16.1941 45.0000 82.0000 52.3861 1 65.0000 0.0000 65.0000 65.0000 pulp_ph: Level N Mean Std Min Max ------------------------------------------------------------ 11 4 72.5000 7.8528 63.0000 82.0000 12.6515 1 58.0000 0.0000 58.0000 58.0000 5.34852 1 75.0000 0.0000 75.0000 75.0000 7 4 67.2500 14.8408 45.0000 75.0000 9 12 67.8333 8.4405 54.0000 77.0000 === Main Effects: grade_pct === Factor Effect Std Error % Contribution -------------------------------------------------------------- frother_g_t 11.5000 0.8692 57.4% pulp_ph 4.9250 0.8692 24.6% collector_g_t 3.6000 0.8692 18.0% === ANOVA Table: grade_pct === Source DF SS MS F p-value ----------------------------------------------------------------------------- collector_g_t 4 9.8036 2.4509 0.224 0.9185 frother_g_t 4 67.2111 16.8028 1.533 0.2725 pulp_ph 4 54.2777 13.5694 1.238 0.3612 Lack of Fit 2 140.9954 70.4977 6.432 0.0260 Pure Error 7 76.7200 10.9600 Error 9 217.7154 10.9600 Total 21 349.0077 16.6194 === Summary Statistics: grade_pct === collector_g_t: Level N Mean Std Min Max ------------------------------------------------------------ -4.77226 1 26.2000 0.0000 26.2000 26.2000 104.772 1 22.6000 0.0000 22.6000 22.6000 20 4 23.0250 0.8995 22.3000 24.3000 50 12 23.3333 3.6879 17.9000 29.5000 80 4 23.8500 7.8987 15.7000 34.6000 frother_g_t: Level N Mean Std Min Max ------------------------------------------------------------ -2.38613 1 29.5000 0.0000 29.5000 29.5000 10 4 23.1000 1.1343 21.6000 24.3000 25 12 23.4417 2.8881 17.9000 27.6000 40 4 23.7750 7.8780 15.7000 34.6000 52.3861 1 18.0000 0.0000 18.0000 18.0000 pulp_ph: Level N Mean Std Min Max ------------------------------------------------------------ 11 4 20.9750 3.6981 15.7000 24.3000 12.6515 1 25.5000 0.0000 25.5000 25.5000 5.34852 1 22.2000 0.0000 22.2000 22.2000 7 4 25.9000 5.8144 22.5000 34.6000 9 12 23.4250 3.7207 17.9000 29.5000

Optimization Recommendations

doe optimize
=== Optimization: recovery_pct === Direction: maximize Best observed run: #18 collector_g_t = 50 frother_g_t = 52.3861 pulp_ph = 9 Value: 82.0 RSM Model (linear, R² = 0.2288, Adj R² = 0.1003): Coefficients: intercept +68.4545 collector_g_t +2.8724 frother_g_t +3.4173 pulp_ph -3.0088 RSM Model (quadratic, R² = 0.3913, Adj R² = -0.0652): Coefficients: intercept +67.5203 collector_g_t +2.8724 frother_g_t +3.4173 pulp_ph -3.0088 collector_g_t*frother_g_t +0.1250 collector_g_t*pulp_ph +3.8750 frother_g_t*pulp_ph +0.1250 collector_g_t^2 +2.3171 frother_g_t^2 +0.6671 pulp_ph^2 -1.5829 Curvature analysis: collector_g_t coef=+2.3171 convex (has a minimum) pulp_ph coef=-1.5829 concave (has a maximum) frother_g_t coef=+0.6671 convex (has a minimum) Notable interactions: collector_g_t*pulp_ph coef=+3.8750 (synergistic) Predicted optimum (from linear model, at observed points): collector_g_t = 80 frother_g_t = 40 pulp_ph = 7 Predicted value: 77.7531 Surface optimum (via L-BFGS-B, linear model): collector_g_t = 80 frother_g_t = 40 pulp_ph = 7 Predicted value: 77.7531 Model quality: Weak fit — consider adding center points or using a different design. Factor importance: 1. frother_g_t (effect: 28.0, contribution: 51.4%) 2. pulp_ph (effect: 16.8, contribution: 30.7%) 3. collector_g_t (effect: 9.8, contribution: 17.9%) === Optimization: grade_pct === Direction: maximize Best observed run: #6 collector_g_t = 50 frother_g_t = 25 pulp_ph = 9 Value: 34.6 RSM Model (linear, R² = 0.2679, Adj R² = 0.1458): Coefficients: intercept +23.4682 collector_g_t -1.5944 frother_g_t -0.4348 pulp_ph +1.9086 RSM Model (quadratic, R² = 0.4358, Adj R² = 0.0127): Coefficients: intercept +24.4379 collector_g_t -1.5944 frother_g_t -0.4348 pulp_ph +1.9086 collector_g_t*frother_g_t -0.1875 collector_g_t*pulp_ph -1.6375 frother_g_t*pulp_ph +0.5375 collector_g_t^2 -0.8199 frother_g_t^2 +0.3351 pulp_ph^2 -0.9699 Curvature analysis: pulp_ph coef=-0.9699 concave (has a maximum) collector_g_t coef=-0.8199 concave (has a maximum) frother_g_t coef=+0.3351 convex (has a minimum) Notable interactions: collector_g_t*pulp_ph coef=-1.6375 (antagonistic) frother_g_t*pulp_ph coef=+0.5375 (synergistic) Predicted optimum (from linear model, at observed points): collector_g_t = 20 frother_g_t = 10 pulp_ph = 11 Predicted value: 27.4059 Surface optimum (via L-BFGS-B, linear model): collector_g_t = 20 frother_g_t = 10 pulp_ph = 11 Predicted value: 27.4059 Model quality: Weak fit — consider adding center points or using a different design. Factor importance: 1. pulp_ph (effect: 9.8, contribution: 44.2%) 2. collector_g_t (effect: 7.1, contribution: 31.8%) 3. frother_g_t (effect: 5.3, contribution: 23.9%)
← Previous: Hillside Erosion Control All Use Cases →