Optimización de Líneas de Producción: Implementación de Algoritmos en MATLAB/Octave

Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 7,69 KB

Gestión y Optimización de Líneas de Producción con MATLAB/Octave

Requisitos del Ejercicio

Se solicita desarrollar un conjunto de funciones para la gestión y el procesamiento de datos de producción, siguiendo las siguientes especificaciones:

  1. Identificar las líneas que, durante la mayor cantidad de días, tuvieron una producción menor a 10 unidades.
  2. Generar un reporte de producción, ordenado por mayor producción mensual descendente. Este reporte debe contener el número de las líneas de producción.

Consideraciones de Implementación

  • La carga de la plantilla de producción debe realizarse mediante una función, y los datos deben ser generados al azar.
  • Todos los cálculos deben ser implementados en funciones.
  • Para su resolución, se deben usar vectores (arreglos unidimensionales) o, si se desea, matrices (arreglos bidimensionales).

Implementación en MATLAB/Octave

Carga de Datos y Ejecución Principal

A continuación, se presenta el código principal que simula la carga de datos de producción para cinco líneas (A, B, C, D, E) durante 30 días, y luego procesa esta información para cumplir con los requisitos establecidos.

Función cargar: Carga de Líneas de Producción

Esta función genera datos de producción aleatorios para 30 días, simulando la actividad de una línea de producción.

% Cargar las líneas de producción durante 30 días
function V=cargar()
  for i=1:30
    V(i)=fix(rand()*(25-5+1)+5);
  end

Ejecución Principal del Programa

Este bloque de código orquesta la carga de datos, el cálculo de días con baja producción, la producción total y el ordenamiento de las líneas.

% Ejercicio tipo parcial
clc
clear all
A=cargar();
B=cargar();
C=cargar();
D=cargar();
E=cargar();
diasa=cantidad(A);
diasb=cantidad(B);
diasc=cantidad(C);
diasd=cantidad(D);
diase=cantidad(E);
V=vector(diasa,diasb,diasc,diasd,diase);
mayordias(V);
prodtotala=produccion(A);
prodtotalb=produccion(B);
prodtotalc=produccion(C);
prodtotald=produccion(D);
prodtotale=produccion(E);
P=vector(prodtotala,prodtotalb,prodtotalc,prodtotald,prodtotale);
[L,K]=descendente(P)
% El vector L representa las líneas de producción
% El vector K representa la producción total (en forma descendente) de cada línea

Funciones Auxiliares

Función cantidad: Contar Días con Baja Producción

Esta función cuenta la cantidad de días en que la producción de una línea fue menor a 10 unidades.

% Cuenta la cantidad de días con producción menor a 10
function dias=cantidad(A)
  dias=0;
  for i=1:length(A)
    if A(i) < 10 % Asumiendo que la condición incompleta era 'menor a 10'
      dias=dias+1;
    end
  end

Función vector: Convertir Valores a Vector

Esta función agrupa los valores individuales de días con baja producción o producción total en un único vector.

% Convierte valores individuales en un vector
function V=vector(diasa,diasb,diasc,diasd,diase)
  V(1)=diasa;
V(2)=diasb;
  V(3)=diasc;
  V(4)=diasd;
  V(5)=diase;

Función mayordias: Identificar Líneas con Más Días de Baja Producción

Esta función determina y muestra qué líneas tuvieron la mayor cantidad de días con producción inferior a 10 unidades.

% Devuelve las líneas con mayor cantidad de días de producción menor a 10
function mayordias(V)
  mayor=V(1);
  for i=1:length(V)
    if V(i)>mayor
      mayor=V(i);
    end
  end
  for j=1:length(V)
    if V(j)==mayor
      fprintf('La línea %d tuvo producción menor a 10 unidades durante la mayor cantidad de días.\n', j);
    end
  end

Función produccion: Calcular Producción Total por Línea

Esta función suma la producción de todos los días para una línea específica, obteniendo su producción total.

% Devuelve la producción total de cada línea
function prodtotal=produccion(V)
  prodtotal=0;
  for i=1:length(V)
    prodtotal=prodtotal+V(i);
  end

Función descendente: Ordenar Líneas por Producción Total

Esta función ordena las líneas de producción de forma descendente según su producción total, manteniendo un registro de los índices originales de las líneas.

% Ordena las líneas de producción y sus totales de forma descendente
function [H,V]=descendente(V)
  H=1:length(V);
  for i=1:length(V)
    for j=1:length(V)-1
      if V(j) < V(j+1) % Asumiendo que la condición incompleta era para orden descendente
        aux=V(j);
        V(j)=V(j+1);
        V(j+1)=aux;
        aux=H(j);
        H(j)=H(j+1);
        H(j+1)=aux;
      end
    end
  end

Funciones Repetidas en el Documento Original

El documento original incluye varias funciones repetidas. A continuación, se presentan tal como fueron proporcionadas, con las correcciones gramaticales y de formato aplicadas, para cumplir con la instrucción de no eliminar contenido.

Función cantidad (Repetición 1)

% Cuenta la cantidad de días con producción menor a 10
function dias=cantidad(A)
  dias=0;
  for i=1:length(A)
    if A(i) < 10 % Asumiendo que la condición incompleta era 'menor a 10'
      dias=dias+1;
    end
  end

Función mayordias (Repetición 1)

% Devuelve las líneas con mayor cantidad de días de producción menor a 10
function mayordias(V)
  mayor=V(1);
  for i=1:length(V)
    if V(i)>mayor
      mayor=V(i);
    end
  end
  for j=1:length(V)
    if V(j)==mayor
      fprintf('La línea %d tuvo producción menor a 10 unidades durante la mayor cantidad de días.\n', j);
    end
  end

Función vector (Repetición 1)

% Convierte valores individuales en un vector
function V=vector(diasa,diasb,diasc,diasd,diase)
  V(1)=diasa;
V(2)=diasb;
  V(3)=diasc;
  V(4)=diasd;
  V(5)=diase;

Función produccion (Repetición 1)

% Devuelve la producción total de cada línea
function prodtotal=produccion(V)
  prodtotal=0;
  for i=1:length(V)
    prodtotal=prodtotal+V(i);
  end

Función descendente (Repetición 1)

% Ordena las líneas de producción y sus totales de forma descendente
function [H,V]=descendente(V)
  H=1:length(V);
  for i=1:length(V)
    for j=1:length(V)-1
      if V(j) < V(j+1) % Asumiendo que la condición incompleta era para orden descendente
        aux=V(j);
        V(j)=V(j+1);
        V(j+1)=aux;
        aux=H(j);
        H(j)=H(j+1);
        H(j+1)=aux;
      end
    end
  end

Función vector (Repetición 2)

% Convierte valores individuales en un vector
function V=vector(diasa,diasb,diasc,diasd,diase)
  V(1)=diasa;
V(2)=diasb;
  V(3)=diasc;
  V(4)=diasd;
  V(5)=diase;

Función produccion (Repetición 2)

% Devuelve la producción total de cada línea
function prodtotal=produccion(V)
  prodtotal=0;
  for i=1:length(V)
    prodtotal=prodtotal+V(i);
  end

Función descendente (Repetición 2)

% Ordena las líneas de producción y sus totales de forma descendente
function [H,V]=descendente(V)
  H=1:length(V);
  for i=1:length(V)
    for j=1:length(V)-1
      if V(j) < V(j+1) % Asumiendo que la condición incompleta era para orden descendente
        aux=V(j);
        V(j)=V(j+1);
        V(j+1)=aux;
        aux=H(j);
        H(j)=H(j+1);
        H(j+1)=aux;
      end
    end
  end

Entradas relacionadas: