Этот пример показывает, как улучшать производительность вентилятора механизма через Проект для Шести использований подхода Сигмы, Задают, Мера, Анализируют, Улучшаются, и Управление (DMAIC). Начальный вентилятор не распространяет достаточно воздуха через теплоотвод, чтобы сохранить механизм холодным во время трудных условий. Сначала пример показывает, как разработать эксперимент, чтобы исследовать эффект трех показателей производительности: расстояние вентилятора от теплоотвода, разрешения конца лопасти и угла шага лопаток. Это затем показывает, как оценить оптимальные значения для каждого фактора, приводящего к проекту, который производит потоки воздуха вне цели 875 ft3 в минуту с помощью тестовых данных. Наконец это показывает, как использовать симуляции, чтобы проверить, что новый проект производит поток воздуха согласно спецификациям больше чем в 99,999% произведенных вентиляторов. Этот пример использует MATLAB®, Statistics and Machine Learning Toolbox™ и Optimization Toolbox™.
Этот пример обращается к проекту вентилятора механизма, который не может вытянуть достаточно воздуха через теплоотвод, чтобы сохранить механизм холодным во время трудных условий, таких как трафик останавливать-и-идти или жаркая погода). Предположим, что вы оцениваете, что вам нужен поток воздуха по крайней мере 875 ft3/min, чтобы сохранить механизм холодным во время трудных условий. Необходимо оценить текущий проект и разработать альтернативный дизайн, который может достигнуть целевого потока воздуха.
Загрузите выборочные данные.
load(fullfile(matlabroot,'help/toolbox/stats/examples','OriginalFan.mat'))
Данные состоят из 10 000 измерений (исторические производственные данные) существующей производительности вентилятора.
Отобразите данные на графике, чтобы анализировать производительность текущего поклонника.
plot(originalfan) xlabel('Observation') ylabel('Max Airflow (ft^3/min)') title('Historical Production Data')
Данные сосредоточены, приблизительно 842 ft3/min и большинство значений находятся в пределах области значений приблизительно 8 ft3/min. График не говорит очень о базовом распределении данных, как бы то ни было. Постройте гистограмму и соответствуйте нормальному распределению к данным.
figure() histfit(originalfan) % Plot histogram with normal distribution fit format shortg xlabel('Airflow (ft^3/min)') ylabel('Frequency (counts)') title('Airflow Histogram')
pd = fitdist(originalfan,'normal') % Fit normal distribution to data
pd = NormalDistribution Normal distribution mu = 841.652 [841.616, 841.689] sigma = 1.8768 [1.85114, 1.90318]
fitdist
соответствует нормальному распределению к данным и оценивает параметры от данных. Оценка для средней скорости потока воздуха является 841.652 ft3/min, и 95%-й доверительный интервал для средней скорости потока воздуха (841.616, 841.689). Эта оценка проясняет, что текущий вентилятор не близко к необходимым 875 ft3/min. Существует потребность улучшить проект вентилятора, чтобы достигнуть целевого потока воздуха.
Оцените факторы, которые влияют на производительность вентилятора с помощью проекта экспериментов (DOE). Ответ является уровнем потока воздуха вентилятора (ft3/min). Предположим, что факторы, которые можно изменить и управление:
Расстояние от теплоотвода
Передайте угол
Разрешение конца лопасти
В целом жидкие системы имеют нелинейное поведение. Поэтому используйте проект поверхности ответа, чтобы оценить любые нелинейные взаимодействия среди факторов. Сгенерируйте экспериментальные выполнения для проекта Поля-Behnken в закодированных (нормированных) переменных [-1, 0, +1].
CodedValue = bbdesign(3)
CodedValue = -1 -1 0 -1 1 0 1 -1 0 1 1 0 -1 0 -1 -1 0 1 1 0 -1 1 0 1 0 -1 -1 0 -1 1 0 1 -1 0 1 1 0 0 0 0 0 0 0 0 0
Первый столбец для расстояния от теплоотвода, второй столбец для угла подачи, и третий столбец для разрешения конца лопасти. Предположим, что вы хотите протестировать эффекты переменных в следующих минимальных и максимальных значениях.
Расстояние от теплоотвода: 1 к 1,5 дюймам
Угол подачи: 15 - 35 градусов
Разрешение конца лопасти: 1 - 2 дюйма
Рандомизируйте порядок выполнений, преобразуйте закодированные расчетные значения в реальные модули и выполните эксперимент в заданном порядке.
runorder = randperm(15); % Random permutation of the runs bounds = [1 1.5;15 35;1 2]; % Min and max values for each factor RealValue = zeros(size(CodedValue)); for i = 1:size(CodedValue,2) % Convert coded values to real-world units zmax = max(CodedValue(:,i)); zmin = min(CodedValue(:,i)); RealValue(:,i) = interp1([zmin zmax],bounds(i,:),CodedValue(:,i)); end
Предположим, что в конце экспериментов, вы собираете следующие значения ответа в переменной TestResult
.
TestResult = [837 864 829 856 880 879 872 874 834 833 860 859 874 876 875]';
Отобразите расчетные значения и ответ.
disp({'Run Number','Distance','Pitch','Clearance','Airflow'}) disp(sortrows([runorder' RealValue TestResult]))
'Run Number' 'Distance' 'Pitch' 'Clearance' 'Airflow' 1 1.5 35 1.5 856 2 1.25 25 1.5 876 3 1.5 25 1 872 4 1.25 25 1.5 875 5 1 35 1.5 864 6 1.25 25 1.5 874 7 1.25 15 2 833 8 1.5 15 1.5 829 9 1.25 15 1 834 10 1 15 1.5 837 11 1.5 25 2 874 12 1 25 1 880 13 1.25 35 1 860 14 1 25 2 879 15 1.25 35 2 859
Сохраните расчетные значения и ответ в table
.
Expmt = table(runorder', CodedValue(:,1), CodedValue(:,2), CodedValue(:,3), ... TestResult,'VariableNames',{'RunNumber','D','P','C','Airflow'});
D
обозначает Distance
, P
обозначает Pitch
, и C обозначает Clearance
. На основе экспериментальных результатов испытаний уровень потока воздуха чувствителен к изменяющимся значениям факторов. Кроме того, четыре экспериментальных выполнения выполняют или превышают целевой уровень потока воздуха 875 ft3/min (запускается 2, 4,12, и 14). Однако это не ясно, который, если таковые имеются, этих выполнений оптимальный. Кроме того, не очевидно, насколько устойчивый проект к изменению в факторах. Создайте основанное на модели на текущих экспериментальных данных и используйте модель, чтобы оценить оптимальные факторные настройки.
Проект Поля-Behnken позволяет вам протестировать на нелинейные (квадратичные) эффекты. Форма квадратичной модели:
где AF является уровнем потока воздуха, и Bi является коэффициентом для термина i. Оцените коэффициенты этой модели с помощью функции fitlm
из Statistics and Machine Learning Toolbox.
mdl = fitlm(Expmt,'Airflow~D*P*C-D:P:C+D^2+P^2+C^2');
Отобразите значения коэффициентов (для нормированных значений) в столбчатой диаграмме.
figure() h = bar(mdl.Coefficients.Estimate(2:10)); set(h,'facecolor',[0.8 0.8 0.9]) legend('Coefficient') set(gcf,'units','normalized','position',[0.05 0.4 0.35 0.4]) set(gca,'xticklabel',mdl.CoefficientNames(2:10)) ylabel('Airflow (ft^3/min)') xlabel('Normalized Coefficient') title('Quadratic Model Coefficients')
Столбчатая диаграмма показывает, что Pitch и Pitch 2 являются доминирующими факторами. Можно посмотреть на отношение между несколькими входными переменными и одной выходной переменной путем генерации объемной поверхностной диаграммы ответа. Используйте plotSlice
, чтобы сгенерировать объемные поверхностные диаграммы ответа для модели mdl
в интерактивном режиме.
plotSlice(mdl)
График показывает нелинейное отношение потока воздуха с подачей. Переместите синие пунктирные линии вокруг и смотрите эффект, который различные факторы имеют на поток воздуха. Несмотря на то, что можно использовать plotSlice
, чтобы определить оптимальные факторные настройки, можно также использовать Optimization Toolbox, чтобы автоматизировать задачу.
Найдите оптимальные факторные настройки с помощью ограниченной функции оптимизации fmincon
.
Запишите целевую функцию.
f = @(x) -x2fx(x,'quadratic')*mdl.Coefficients.Estimate;
Целевая функция является квадратичной подгонкой поверхности ответа к данным. Минимизация отрицательного потока воздуха с помощью fmincon
совпадает с максимизацией исходной целевой функции. Ограничения являются верхним и протестированными нижними пределами (в закодированных значениях). Установите начальную отправную точку быть центром проекта экспериментальной тестовой матрицы.
lb = [-1 -1 -1]; % Lower bound ub = [1 1 1]; % Upper bound x0 = [0 0 0]; % Starting point [optfactors,fval] = fmincon(f,x0,[],[],[],[],lb,ub,[]); % Invoke the solver
Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the default value of the function tolerance, and constraints are satisfied to within the default value of the constraint tolerance.
Преобразуйте результаты в проблему максимизации и реальные модули.
maxval = -fval; maxloc = (optfactors + 1)'; bounds = [1 1.5;15 35;1 2]; maxloc=bounds(:,1)+maxloc .* ((bounds(:,2) - bounds(:,1))/2); disp('Optimal Values:') disp({'Distance','Pitch','Clearance','Airflow'}) disp([maxloc' maxval])
Optimal Values: 'Distance' 'Pitch' 'Clearance' 'Airflow' 1 27.275 1 882.26
Результат оптимизации предлагает разместить новый вентилятор в одном дюйме от теплоотвода с однодюймовым разрешением между советами лопастей вентилятора и оболочки.
Поскольку угол подачи имеет такой значительный эффект на поток воздуха, выполните дополнительный анализ, чтобы проверить, что 27,3 углов подачи степени оптимальны.
load(fullfile(matlabroot,'help/toolbox/stats/examples','AirflowData.mat')) tbl = table(pitch,airflow); mdl2 = fitlm(tbl,'airflow~pitch^2'); mdl2.Rsquared.Ordinary
ans = 0.99632
Результаты показывают, что квадратичная модель объясняет эффект подачи на потоке воздуха хорошо.
Постройте угол подачи против потока воздуха и наложите подобранную модель.
figure() plot(pitch,airflow,'.r') hold on ylim([840 885]) line(pitch,mdl2.Fitted,'color','b') title('Fitted Model and Data') xlabel('Pitch angle (degrees)') ylabel('Airflow (ft^3/min)') legend('Test data','Quadratic model','Location','se') hold off
Найдите значение подачи, которое соответствует максимальному потоку воздуха.
pitch(find(airflow==max(airflow)))
ans = 27
Дополнительный анализ подтверждает, что 27,3 углов подачи степени оптимальны.
Улучшенный проект вентилятора удовлетворяет требования потока воздуха. У вас также есть модель, которая аппроксимирует производительность вентилятора хорошо на основе факторов, которые можно изменить в проекте. Гарантируйте, что производительность вентилятора устойчива к изменчивости в производстве и установке путем выполнения анализа чувствительности.
Предположим, что на основе исторического опыта производственная неуверенность следующие.
Фактор | Действительные значения | Закодированные значения |
---|---|---|
Расстояние от теплоотвода | 1.00 +/-0,05 дюйма | 1.00 +/-0,20 дюйма |
Угол шага лопаток | 27.3 + степени/-0.25 | 0.227 + степени/-0.028 |
Разрешение конца лопасти | 1.00 +/-0,125 дюймов | - 1.00 +/-0,25 дюйма |
Проверьте, что эти изменения в факторах включат, чтобы поддержать устойчивый проект вокруг целевого потока воздуха. Философия Шести целей Сигмы скорость дефектообразования не больше, чем 3.4 на 1 000 000 вентиляторов. Таким образом, вентиляторы должны поразить 875 целей ft3/min 99,999% времени.
Можно проверить проект с помощью симуляции Монте-Карло. Сгенерируйте 10 000 случайных чисел для трех факторов с заданным допуском. Во-первых, установите состояние генераторов случайных чисел, таким образом, результаты сопоставимы через различные выполнения.
rng('default')
Выполните симуляцию Монте-Карло. Включайте шумовую переменную, которая пропорциональна шуму в подобранной модели, mdl
(то есть, ошибка RMS модели). Поскольку коэффициенты модели находятся в закодированных переменных, необходимо сгенерировать dist
, pitch
и clearance
с помощью закодированного определения.
dist = random('normal',optfactors(1),0.20,[10000 1]); pitch = random('normal',optfactors(2),0.028,[10000 1]); clearance = random('normal',optfactors(3),0.25,[10000 1]); noise = random('normal',0,mdl2.RMSE,[10000 1]);
Вычислите поток воздуха для 10 000 случайных факторных комбинаций с помощью модели.
simfactor = [dist pitch clearance];
X = x2fx(simfactor,'quadratic');
Добавьте шум в модель (изменение в данных, которые модель не составляла).
simflow = X*mdl.Coefficients.Estimate+noise;
Оцените изменение в предсказанном потоке воздуха модели с помощью гистограммы. Чтобы оценить среднее и стандартное отклонение, соответствуйте нормальному распределению к данным.
pd = fitdist(simflow,'normal'); histfit(simflow) hold on text(pd.mu+2,300,['Mean: ' num2str(round(pd.mu))]) text(pd.mu+2,280,['Standard deviation: ' num2str(round(pd.sigma))]) hold off xlabel('Airflow (ft^3/min)') ylabel('Frequency') title('Monte Carlo Simulation Results')
Результаты выглядят многообещающими. Средний поток воздуха является 882 ft3/min и, кажется, лучше, чем 875 ft3/min для большинства данных.
Определите вероятность, что поток воздуха в 875 ft3/min или ниже.
format long
pfail = cdf(pd,875)
pass = (1-pfail)*100
pfail = 1.509289008603141e-07 pass = 99.999984907109919
Проект, кажется, достигает по крайней мере 875 ft3/min потока воздуха 99,999% времени.
Используйте результаты симуляции, чтобы оценить возможность процесса.
S = capability(simflow,[875.0 890]) pass = (1-S.Pl)*100
S = mu: 8.822982645666709e+02 sigma: 1.424806876923940 P: 0.999999816749816 Pl: 1.509289008603141e-07 Pu: 3.232128339675335e-08 Cp: 1.754623760237126 Cpl: 1.707427788957002 Cpu: 1.801819731517250 Cpk: 1.707427788957002 pass = 99.9999849071099
Значение Cp
1.75. Процесс рассматривается высококачественным, когда Cp
больше, чем или равен 1,6. Cpk
подобен значению Cp
, которое указывает, что процесс сосредоточен. Теперь реализуйте этот проект. Контролируйте его, чтобы проверить процесс проектирования и гарантировать, что вентилятор поставляет высококачественную производительность.
Можно контролировать и оценить производственный процесс и процесс установки нового вентилятора, использующего диаграммы управления. Оцените первые 30 дней производства нового вентилятора. Первоначально, пять вентиляторов в день были произведены. Во-первых, загрузите выборочные данные от нового процесса.
load(fullfile(matlabroot,'help/toolbox/stats/examples','spcdata.mat'))
Постройте X - графики S и панель.
figure() controlchart(spcflow,'chart',{'xbar','s'}) % Reshape the data into daily sets xlabel('Day')
Согласно результатам, производственный процесс находится в статистическом управлении, как обозначено отсутствием нарушений пределов управления или неслучайных шаблонов в данных в зависимости от времени. Можно также запустить анализ возможности данных, чтобы оценить процесс.
[row,col] = size(spcflow); S2 = capability(reshape(spcflow,row*col,1),[875.0 890]) pass = (1-S.Pl)*100
S2 = mu: 8.821061141685465e+02 sigma: 1.423887508874697 P: 0.999999684316149 Pl: 3.008932155898586e-07 Pu: 1.479063578225176e-08 Cp: 1.755756676295137 Cpl: 1.663547652525458 Cpu: 1.847965700064817 Cpk: 1.663547652525458 pass = 99.9999699106784
Значение Cp
1,755 очень похоже на ориентировочную стоимость 1,73. Значение Cpk
1,66 меньше, чем значение Cp
. Однако только значение Cpk
меньше чем 1,33, который указывает, что процесс, переключенный значительно к одному из пределов процесса, являются беспокойством. Процесс хорошо в пределах, и он достигает целевого потока воздуха (875 ft3/min) больше чем 99,999% времени.