Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Mejore un ventilador de enfriamiento del motor utilizando el diseño para técnicas Six Sigma

Este ejemplo muestra cómo mejorar el rendimiento de un ventilador de enfriamiento del motor a través de un enfoque de diseño para Six Sigma utilizando definir, medir, analizar, mejorar y controlar (DMAIC). El ventilador inicial no circula suficiente aire a través del radiador para mantener el motor fresco durante condiciones difíciles. En primer lugar, el ejemplo muestra cómo diseñar un experimento para investigar el efecto de tres factores de rendimiento: distancia del ventilador desde el radiador, separación de la punta de la cuchilla y ángulo de inclinación de la hoja. A continuación, se muestra cómo estimar los valores óptimos para cada factor, lo que resulta en un diseño que produce flujos de aire más allá del objetivo de 875 pies3 por minuto utilizando datos de prueba. Finalmente se muestra cómo utilizar simulaciones para verificar que el nuevo diseño produce flujo de aire de acuerdo con las especificaciones en más de 99,999% de los ventiladores fabricados. En este ejemplo se usa, y.MATLAB®Statistics and Machine Learning Toolbox™Optimization Toolbox™

Definir el problema

Este ejemplo aborda un diseño de ventilador de enfriamiento del motor que no puede tirar suficiente aire a través del radiador para mantener el motor fresco durante condiciones difíciles, como el tráfico de parada y de tránsito o el clima caluroso). Supongamos que usted estima que necesita un flujo de aire de al menos 875 pies3/min para mantener el motor fresco durante condiciones difíciles. Es necesario evaluar el diseño actual y desarrollar un diseño alternativo que pueda lograr el flujo de aire de destino.

Evalúe el rendimiento del ventilador de enfriamiento

Cargue los datos de ejemplo.

load(fullfile(matlabroot,'help/toolbox/stats/examples','OriginalFan.mat'))

Los datos constan de 10.000 mediciones (datos de producción históricos) del rendimiento del ventilador de refrigeración existente.

Trace los datos para analizar el rendimiento del ventilador actual.

plot(originalfan) xlabel('Observation') ylabel('Max Airflow (ft^3/min)') title('Historical Production Data')

Los datos se centran alrededor de 842 pies3/min y la mayoría de los valores caen dentro del rango de aproximadamente 8 pies3/min. La trama no dice mucho sobre la distribución subyacente de datos, sin embargo. Trace el histograma y ajuste una distribución normal a los datos.

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] 

se ajusta a una distribución normal a los datos y estima los parámetros de los datos.fitdist La estimación de la velocidad media del flujo de aire es de 841,652 pies3/min, y el intervalo de confianza de 95% para la velocidad media del flujo de aire es (841,616, 841,689). Esta estimación deja claro que el ventilador actual no está cerca del 875 ft requerido3/min. Hay necesidad de mejorar el diseño del ventilador para lograr el flujo de aire de destino.

Determine los factores que afectan al rendimiento del ventilador

Evalúe los factores que afectan el rendimiento del ventilador de enfriamiento mediante el diseño de experimentos (DOE). La respuesta es la tasa de flujo de aire del ventilador de enfriamiento (ft3/min). Supongamos que los factores que puede modificar y controlar son:

  • Distancia del radiador

  • Ángulo de inclinación

  • Distancia de punta de cuchilla

En general, los sistemas de fluidos tienen un comportamiento no lineal. Por lo tanto, utilice un diseño de superficie de respuesta para estimar cualquier interacción no lineal entre los factores. Genere las corridas experimentales para una en variables codificadas (normalizadas) [-1, 0, + 1].El diseño de Box-Behnken

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 

La primera columna es para la distancia desde el radiador, la segunda columna es para el ángulo de inclinación, y la tercera columna es para el espacio libre de la punta de la cuchilla. Supongamos que desea probar los efectos de las variables en los valores mínimo y máximo siguientes.

Distancia desde el radiador: 1 a 1,5 pulgadas de ángulo de paso:
distancia de la punta de la cuchilla de 15 a 35 grados:
1 a 2 pulgadas

Aleatorice el orden de las ejecuciones, convierta los valores de diseño codificados en unidades del mundo real y realice el experimento en el orden especificado.

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

Supongamos que al final de los experimentos, recopila los siguientes valores de respuesta en la variable.TestResult

TestResult = [837 864 829 856 880 879 872 874 834 833 860 859 874 876 875]';

Mostrar los valores de diseño y la respuesta.

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

Guarde los valores de diseño y la respuesta en un.table

Expmt = table(runorder', CodedValue(:,1), CodedValue(:,2), CodedValue(:,3), ...     TestResult,'VariableNames',{'RunNumber','D','P','C','Airflow'});

significa, significa, y C significa.DDistancePPitchClearance Sobre la base de los resultados experimentales de la prueba, la tasa de flujo de aire es sensible a los valores de factores cambiantes. Además, cuatro corridas experimentales cumplen o superan la tasa de flujo de aire objetivo de 875 pies3/min (ejecuta 2, 4, 12 y 14). Sin embargo, no está claro que, si cualquier, de estas corridas es la óptima. Además, no es obvio cuán robusto es el diseño a la variación en los factores. Cree un modelo basado en los datos experimentales actuales y utilice el modelo para estimar la configuración óptima de los factores.

Mejore el rendimiento del ventilador de enfriamiento

El diseño de Box-Behnken le permite probar los efectos no lineales (cuadráticos). La forma del modelo cuadrático es:

AF = β0+β1*Distance+β2*Pitch+β3*Clearance+β4*Distance*Pitch+β5*Distance*Clearance+β6*Pitch*Clearance+β7*Distance2+β8*Pitch2+β9*Clearance2,

donde está la tasa de flujo de aire yAF Bi es el coeficiente del término.i Calcule los coeficientes de este modelo utilizando la función de.fitlmStatistics and Machine Learning Toolbox

mdl = fitlm(Expmt,'Airflow~D*P*C-D:P:C+D^2+P^2+C^2');

Visualice las magnitudes de los coeficientes (para valores normalizados) en un gráfico de barras.

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')

El gráfico de barras muestra que yPitchPitch2 son factores dominantes. Puede ver la relación entre varias variables de entrada y una variable de salida generando una gráfica de superficie de respuesta. Uso plotSlice para generar trazados de superficie de respuesta para el modelo de forma interactiva.mdl

plotSlice(mdl)

La trama muestra la relación no lineal del flujo de aire con el tono. Mueva las líneas punteadas azules y vea el efecto que tienen los diferentes factores en el flujo de aire. Aunque puede utilizar para determinar la configuración óptima de los factores, también puede utilizar para automatizar la tarea.plotSliceOptimization Toolbox

Encuentre la configuración óptima del factor utilizando la función de optimización restringida.fmincon

Escriba la función objetiva.

f = @(x) -x2fx(x,'quadratic')*mdl.Coefficients.Estimate;

La función objetiva es una superficie de respuesta cuadrática que se ajusta a los datos. Minimizar el flujo de aire negativo usando es lo mismo que maximizar la función objetiva original.fmincon Las restricciones son los límites superior e inferior probados (en valores codificados). Establezca el punto de partida inicial para que sea el centro del diseño de la matriz experimental de pruebas.

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. 

Convierta los resultados en un problema de maximización y unidades del mundo real.

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

El resultado de la optimización sugiere colocar el nuevo ventilador una pulgada del radiador, con un espacio de una pulgada entre las puntas de las cuchillas del ventilador y el sudario.

Debido a que el ángulo de inclinación tiene un efecto tan significativo en el flujo de aire, realice análisis adicionales para verificar que un ángulo de inclinación de 27,3 grados sea óptimo.

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 

Los resultados muestran que un modelo cuadrático explica el efecto de pitch en el flujo de aire bien.

Trace el ángulo de inclinación contra el flujo de aire e imponga el modelo ajustado.

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

Encuentre el valor de pitch que corresponde al flujo de aire máximo.

pitch(find(airflow==max(airflow)))
ans =      27

El análisis adicional confirma que un ángulo de inclinación de 27,3 grados es óptimo.

El diseño mejorado del ventilador de enfriamiento satisface los requisitos de flujo de aire. También tiene un modelo que se aproxima bien al rendimiento del ventilador en función de los factores que puede modificar en el diseño. Asegúrese de que el rendimiento del ventilador sea robusto a la variabilidad en la fabricación y la instalación realizando un análisis de sensibilidad.

Análisis de sensibilidad

Supongamos que, sobre la base de la experiencia histórica, la incertidumbre de fabricación es la siguiente.

FactorValores realesValores codificados
Distancia del radiador1,00 +/-0,05 pulgadas1,00 +/-0,20 pulgadas
Ángulo de inclinación de la cuchilla27,3 +/-0,25 grados0,227 +/-0,028 grados
Distancia de punta de cuchilla1,00 +/-0,125 pulgadas-1,00 +/-0,25 pulgadas

Verifique que estas variaciones en los factores permitirán mantener un diseño robusto alrededor del flujo de aire objetivo. La filosofía de Six Sigma apunta a una tasa de defectos de no más de 3,4 por 1 millón ventiladores. Es decir, los fans deben golpear el 875 pies3/min objetivo 99,999% del tiempo.

Puede verificar el diseño utilizando la simulación Monte Carlo. Genere 10.000 números aleatorios para tres factores con la tolerancia especificada. En primer lugar, establezca el estado de los generadores de números aleatorios para que los resultados sean coherentes en diferentes ejecuciones.

rng('default')

Realice la simulación Monte Carlo. Incluya una variable de ruido que sea proporcional al ruido del modelo ajustado (es decir, el error RMS del modelo).mdl Dado que los coeficientes del modelo están en variables codificadas, debe generar y utilizar la definición codificada.distpitchclearance

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]);

Calcule el flujo de aire para 10.000 combinaciones de factores aleatorios utilizando el modelo.

simfactor = [dist pitch clearance]; X = x2fx(simfactor,'quadratic');

Agregue ruido al modelo (la variación en los datos que el modelo no tuvo en cuenta).

simflow = X*mdl.Coefficients.Estimate+noise;

Evalúe la variación en el flujo de aire pronosticado del modelo utilizando un histograma. Para estimar la media y la desviación estándar, ajuste una distribución normal a los datos.

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')

Los resultados parecen prometedores. El flujo de aire promedio es de 882 pies3/min y parece ser mejor que 875 ft3/min para la mayoría de los datos.

Determine la probabilidad de que el flujo de aire esté a 875 pies3/min o inferior.

format long pfail = cdf(pd,875) pass = (1-pfail)*100
pfail =       1.509289008603141e-07   pass =    99.999984907109919

El diseño parece lograr al menos 875 pies3/min del flujo de aire 99,999% del tiempo.

Utilice los resultados de la simulación para estimar la capacidad del proceso.

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

El valor es 1,75.Cp Un proceso se considera de alta calidad cuando es mayor o igual a 1,6.Cp El es similar al valor, que indica que el proceso está centrado.CpkCp Ahora implemente este diseño. Monitoree para verificar el proceso de diseño y para asegurar que el ventilador de enfriamiento ofrezca un rendimiento de alta calidad.

Control de la fabricación del ventilador de enfriamiento mejorado

Puede monitorizar y evaluar el proceso de fabricación e instalación del nuevo ventilador utilizando gráficos de control. Evalúe los primeros 30 días de producción del nuevo ventilador de enfriamiento. Inicialmente, se produjeron cinco ventiladores de enfriamiento por día. En primer lugar, cargue los datos de ejemplo del nuevo proceso.

load(fullfile(matlabroot,'help/toolbox/stats/examples','spcdata.mat'))

Trace la barra y los gráficos.XS

figure() controlchart(spcflow,'chart',{'xbar','s'}) % Reshape the data into daily sets xlabel('Day')

De acuerdo con los resultados, el proceso de fabricación está en control estadístico, como se indica por la ausencia de violaciones de los límites de control o patrones no aleatorios en los datos a lo largo del tiempo. También puede ejecutar un análisis de capacidad en los datos para evaluar el proceso.

[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 

El valor de 1,755 es muy similar al valor estimado de 1,73.Cp El valor de 1,66 es menor que el valor.CpkCp Sin embargo, sólo un valor menor que 1,33, lo que indica que el proceso cambió significativamente hacia uno de los límites del proceso, es una preocupación.Cpk El proceso está bien dentro de los límites y logra el flujo de aire objetivo (875 pies3/min) más del 99,999% del tiempo.