← All Use Cases
🪓
Central Composite Design

Table Saw Cut Quality

Central composite design to maximize cut smoothness and minimize tearout by tuning blade speed, feed rate, and blade tooth count

Summary

This experiment investigates table saw cut quality. Central composite design to maximize cut smoothness and minimize tearout by tuning blade speed, feed rate, and blade tooth count.

The design varies 3 factors: blade rpm (rpm), ranging from 3000 to 5000, feed rate (m/min), ranging from 1 to 5, and tooth count (teeth), ranging from 24 to 80. The goal is to optimize 2 responses: smoothness (pts) (maximize) and tearout score (pts) (minimize). Fixed conditions held constant across all runs include blade diam = 10in, material = maple.

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 smoothness, the most influential factors were feed rate (51.1%), blade rpm (28.7%), tooth count (20.2%). The best observed value was 9.1 (at blade rpm = 3000, feed rate = 5, tooth count = 24).

For tearout score, the most influential factors were blade rpm (40.0%), feed rate (39.7%), tooth count (20.4%). The best observed value was 1.5 (at blade rpm = 3000, feed rate = 5, tooth count = 24).

Recommended Next Steps

Experimental Setup

Factors

FactorLowHighUnit
blade_rpm30005000rpm
feed_rate15m/min
tooth_count2480teeth

Fixed: blade_diam = 10in, material = maple

Responses

ResponseDirectionUnit
smoothness↑ maximizepts
tearout_score↓ minimizepts

Configuration

use_cases/200_table_saw_cut/config.json
{ "metadata": { "name": "Table Saw Cut Quality", "description": "Central composite design to maximize cut smoothness and minimize tearout by tuning blade speed, feed rate, and blade tooth count" }, "factors": [ { "name": "blade_rpm", "levels": [ "3000", "5000" ], "type": "continuous", "unit": "rpm" }, { "name": "feed_rate", "levels": [ "1", "5" ], "type": "continuous", "unit": "m/min" }, { "name": "tooth_count", "levels": [ "24", "80" ], "type": "continuous", "unit": "teeth" } ], "fixed_factors": { "blade_diam": "10in", "material": "maple" }, "responses": [ { "name": "smoothness", "optimize": "maximize", "unit": "pts" }, { "name": "tearout_score", "optimize": "minimize", "unit": "pts" } ], "settings": { "operation": "central_composite", "test_script": "use_cases/200_table_saw_cut/sim.sh" } }

Experimental Matrix

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

Runblade_rpmfeed_ratetooth_count
14000352
25000180
33000524
440006.6514852
54000352
62174.26352
7400030.879228
84000352
95000524
105825.74352
114000352
124000-0.65148452
134000352
143000180
154000352
165000124
1740003103.121
185000580
194000352
203000124
213000580
224000352

Step-by-Step Workflow

1

Preview the design

Terminal
$ doe info --config use_cases/200_table_saw_cut/config.json
2

Generate the runner script

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

Execute the experiments

Terminal
$ bash use_cases/200_table_saw_cut/results/run.sh
4

Analyze results

Terminal
$ doe analyze --config use_cases/200_table_saw_cut/config.json
5

Get optimization recommendations

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

Generate the HTML report

Terminal
$ doe report --config use_cases/200_table_saw_cut/config.json \ --output use_cases/200_table_saw_cut/results/report.html

Features Exercised

FeatureValue
Design typecentral_composite
Factor typescontinuous (all 3)
Arg styledouble-dash
Responses2 (smoothness ↑, tearout_score ↓)
Total runs22

Analysis Results

Generated from actual experiment runs using the DOE Helper Tool.

Response: smoothness

Top factors: feed_rate (51.1%), blade_rpm (28.7%), tooth_count (20.2%).

ANOVA

SourceDFSSMSFp-value
SourceDFSSMSFp-value
blade_rpm416.79094.19771.8920.1961
feed_rate419.64594.91152.2140.1481
tooth_count45.04841.26210.5690.6919
LackofFit21.37690.6885
PureError715.5287
Error916.90572.2184
Total2158.39092.7805

Pareto Chart

Pareto chart for smoothness

Main Effects Plot

Main effects plot for smoothness

Normal Probability Plot of Effects

Normal probability plot for smoothness

Half-Normal Plot of Effects

Half-normal plot for smoothness

Model Diagnostics

Model diagnostics for smoothness

Response: tearout_score

Top factors: blade_rpm (40.0%), feed_rate (39.7%), tooth_count (20.4%).

ANOVA

SourceDFSSMSFp-value
SourceDFSSMSFp-value
blade_rpm411.33902.83480.9570.4756
feed_rate47.10651.77660.6000.6724
tooth_count42.10650.52660.1780.9442
LackofFit22.86111.4306
PureError720.7400
Error923.60112.9629
Total2144.15322.1025

Pareto Chart

Pareto chart for tearout_score

Main Effects Plot

Main effects plot for tearout_score

Normal Probability Plot of Effects

Normal probability plot for tearout_score

Half-Normal Plot of Effects

Half-normal plot for tearout_score

Model Diagnostics

Model diagnostics for tearout_score

Response Surface Plots

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

smoothness blade rpm vs feed rate

RSM surface: smoothness blade rpm vs feed rate

smoothness blade rpm vs tooth count

RSM surface: smoothness blade rpm vs tooth count

smoothness feed rate vs tooth count

RSM surface: smoothness feed rate vs tooth count

tearout score blade rpm vs feed rate

RSM surface: tearout score blade rpm vs feed rate

tearout score blade rpm vs tooth count

RSM surface: tearout score blade rpm vs tooth count

tearout score feed rate vs tooth count

RSM surface: tearout score feed rate vs tooth count

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
smoothness 1.0
0.9545
9.10 0.9545 9.10 pts
tearout_score 1.5
0.9545
1.50 0.9545 1.50 pts

Recommended Settings

FactorValue
blade_rpm4000 rpm
feed_rate3 m/min
tooth_count52 teeth

Source: from observed run #2

Trade-off Summary

Sacrifice = how much worse than single-objective best.

ResponsePredictedBest ObservedSacrifice
tearout_score1.501.50+0.00

Top 3 Runs by Desirability

RunDFactor Settings
#170.7383blade_rpm=5000, feed_rate=1, tooth_count=24
#120.7269blade_rpm=4000, feed_rate=3, tooth_count=52

Model Quality

ResponseType
tearout_score0.0811linear

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 --------------------------------------------------------------------- smoothness 1.0 0.9545 9.10 pts ↑ tearout_score 1.5 0.9545 1.50 pts ↓ Recommended settings: blade_rpm = 4000 rpm feed_rate = 3 m/min tooth_count = 52 teeth (from observed run #2) Trade-off summary: smoothness: 9.10 (best observed: 9.10, sacrifice: +0.00) tearout_score: 1.50 (best observed: 1.50, sacrifice: +0.00) Model quality: smoothness: R² = 0.4304 (quadratic) tearout_score: R² = 0.0811 (linear) Top 3 observed runs by overall desirability: 1. Run #2 (D=0.9545): blade_rpm=4000, feed_rate=3, tooth_count=52 2. Run #17 (D=0.7383): blade_rpm=5000, feed_rate=1, tooth_count=24 3. Run #12 (D=0.7269): blade_rpm=4000, feed_rate=3, tooth_count=52

Full Analysis Output

doe analyze
=== Main Effects: smoothness === Factor Effect Std Error % Contribution -------------------------------------------------------------- feed_rate 4.8000 0.3555 51.1% blade_rpm 2.7000 0.3555 28.7% tooth_count 1.9000 0.3555 20.2% === ANOVA Table: smoothness === Source DF SS MS F p-value ----------------------------------------------------------------------------- blade_rpm 4 16.7909 4.1977 1.892 0.1961 feed_rate 4 19.6459 4.9115 2.214 0.1481 tooth_count 4 5.0484 1.2621 0.569 0.6919 Lack of Fit 2 1.3769 0.6885 0.310 0.7428 Pure Error 7 15.5287 2.2184 Error 9 16.9057 2.2184 Total 21 58.3909 2.7805 === Summary Statistics: smoothness === blade_rpm: Level N Mean Std Min Max ------------------------------------------------------------ 2174.26 1 5.6000 0.0000 5.6000 5.6000 3000 4 4.2000 1.4652 2.9000 6.3000 4000 12 6.2000 1.7451 2.6000 9.1000 5000 4 6.9000 0.7439 6.4000 8.0000 5825.74 1 6.2000 0.0000 6.2000 6.2000 feed_rate: Level N Mean Std Min Max ------------------------------------------------------------ -0.651484 1 2.6000 0.0000 2.6000 2.6000 1 4 4.9250 1.8081 2.9000 6.5000 3 12 6.3500 1.3208 4.1000 9.1000 5 4 6.1750 1.8025 3.7000 8.0000 6.65148 1 7.4000 0.0000 7.4000 7.4000 tooth_count: Level N Mean Std Min Max ------------------------------------------------------------ 0.879228 1 4.8000 0.0000 4.8000 4.8000 103.121 1 6.7000 0.0000 6.7000 6.7000 24 4 5.2000 1.6207 3.7000 6.7000 52 12 6.2250 1.6961 2.6000 9.1000 80 4 5.9000 2.1463 2.9000 8.0000 === Main Effects: tearout_score === Factor Effect Std Error % Contribution -------------------------------------------------------------- blade_rpm 2.2750 0.3091 40.0% feed_rate 2.2583 0.3091 39.7% tooth_count 1.1583 0.3091 20.4% === ANOVA Table: tearout_score === Source DF SS MS F p-value ----------------------------------------------------------------------------- blade_rpm 4 11.3390 2.8348 0.957 0.4756 feed_rate 4 7.1065 1.7766 0.600 0.6724 tooth_count 4 2.1065 0.5266 0.178 0.9442 Lack of Fit 2 2.8611 1.4306 0.483 0.6362 Pure Error 7 20.7400 2.9629 Error 9 23.6011 2.9629 Total 21 44.1532 2.1025 === Summary Statistics: tearout_score === blade_rpm: Level N Mean Std Min Max ------------------------------------------------------------ 2174.26 1 4.2000 0.0000 4.2000 4.2000 3000 4 5.8250 1.3475 4.0000 7.2000 4000 12 4.3833 1.5678 1.5000 7.2000 5000 4 3.5500 0.3317 3.1000 3.8000 5825.74 1 3.8000 0.0000 3.8000 3.8000 feed_rate: Level N Mean Std Min Max ------------------------------------------------------------ -0.651484 1 6.4000 0.0000 6.4000 6.4000 1 4 5.1500 1.6603 3.8000 7.2000 3 12 4.1417 1.4343 1.5000 7.2000 5 4 4.2250 1.4315 3.1000 6.3000 6.65148 1 4.5000 0.0000 4.5000 4.5000 tooth_count: Level N Mean Std Min Max ------------------------------------------------------------ 0.879228 1 5.4000 0.0000 5.4000 5.4000 103.121 1 4.3000 0.0000 4.3000 4.3000 24 4 4.8500 1.4059 3.5000 6.3000 52 12 4.2417 1.5412 1.5000 7.2000 80 4 4.5250 1.8246 3.1000 7.2000

Optimization Recommendations

doe optimize
=== Optimization: smoothness === Direction: maximize Best observed run: #2 blade_rpm = 3000 feed_rate = 5 tooth_count = 24 Value: 9.1 RSM Model (linear, R² = 0.1636, Adj R² = 0.0242): Coefficients: intercept +5.9364 blade_rpm -0.2022 feed_rate +0.7576 tooth_count +0.1909 RSM Model (quadratic, R² = 0.6070, Adj R² = 0.3123): Coefficients: intercept +5.3022 blade_rpm -0.2022 feed_rate +0.7576 tooth_count +0.1909 blade_rpm*feed_rate +0.1500 blade_rpm*tooth_count +0.5000 feed_rate*tooth_count -1.5250 blade_rpm^2 +0.3071 feed_rate^2 +0.3071 tooth_count^2 +0.3371 Curvature analysis: tooth_count coef=+0.3371 convex (has a minimum) blade_rpm coef=+0.3071 convex (has a minimum) feed_rate coef=+0.3071 convex (has a minimum) Notable interactions: feed_rate*tooth_count coef=-1.5250 (antagonistic) blade_rpm*tooth_count coef=+0.5000 (synergistic) Predicted optimum (from quadratic model, at observed points): blade_rpm = 3000 feed_rate = 5 tooth_count = 24 Predicted value: 8.8974 Surface optimum (via L-BFGS-B, quadratic model): blade_rpm = 3000 feed_rate = 5 tooth_count = 24 Predicted value: 8.8974 Model quality: Moderate fit — use predictions directionally, not precisely. Factor importance: 1. feed_rate (effect: 2.8, contribution: 58.0%) 2. tooth_count (effect: 1.0, contribution: 21.2%) 3. blade_rpm (effect: 1.0, contribution: 20.7%) === Optimization: tearout_score === Direction: minimize Best observed run: #2 blade_rpm = 3000 feed_rate = 5 tooth_count = 24 Value: 1.5 RSM Model (linear, R² = 0.1941, Adj R² = 0.0598): Coefficients: intercept +4.4591 blade_rpm +0.3439 feed_rate -0.6818 tooth_count -0.0356 RSM Model (quadratic, R² = 0.6370, Adj R² = 0.3647): Coefficients: intercept +5.0696 blade_rpm +0.3439 feed_rate -0.6818 tooth_count -0.0356 blade_rpm*feed_rate -0.2500 blade_rpm*tooth_count -0.5000 feed_rate*tooth_count +1.2000 blade_rpm^2 -0.4453 feed_rate^2 -0.1753 tooth_count^2 -0.2953 Curvature analysis: blade_rpm coef=-0.4453 concave (has a maximum) tooth_count coef=-0.2953 concave (has a maximum) feed_rate coef=-0.1753 concave (has a maximum) Notable interactions: feed_rate*tooth_count coef=+1.2000 (synergistic) blade_rpm*tooth_count coef=-0.5000 (antagonistic) Predicted optimum (from quadratic model, at observed points): blade_rpm = 5000 feed_rate = 1 tooth_count = 24 Predicted value: 7.1650 Surface optimum (via L-BFGS-B, quadratic model): blade_rpm = 3000 feed_rate = 5 tooth_count = 24 Predicted value: 1.7138 Model quality: Moderate fit — use predictions directionally, not precisely. Factor importance: 1. feed_rate (effect: 2.3, contribution: 43.3%) 2. blade_rpm (effect: 1.9, contribution: 35.3%) 3. tooth_count (effect: 1.1, contribution: 21.4%)
← Previous: Wood Glue Joint Strength Next: Wood Finish Drying Conditions →