Introducció

La optimització en la indústria és una àrea crucial que busca millorar l'eficiència i l'eficàcia dels processos industrials. Això inclou la reducció de costos, l'augment de la productivitat, la millora de la qualitat dels productes i la minimització del temps de producció. En aquest tema, explorarem diverses tècniques i algorismes d'optimització aplicats en contextos industrials reals.

Conceptes Clau

  1. Optimització de Processos: Millorar els processos de producció per reduir costos i temps.
  2. Programació Lineal: Utilitzar models matemàtics per trobar la millor solució possible dins d'un conjunt de restriccions.
  3. Algorismes Genètics: Tècniques inspirades en l'evolució biològica per trobar solucions òptimes.
  4. Optimització de Colònia de Formigues: Algorismes basats en el comportament de les formigues per trobar camins òptims.
  5. Simulació i Modelatge: Utilitzar models per simular processos industrials i provar diferents escenaris.

Aplicacions Comunes

  1. Planificació de la Producció: Determinar la quantitat òptima de productes a fabricar per satisfer la demanda.
  2. Gestió de la Cadena de Subministrament: Optimitzar el flux de materials i informació des dels proveïdors fins als clients.
  3. Manteniment Predictiu: Utilitzar dades per predir i prevenir fallades en maquinària.
  4. Control de Qualitat: Millorar els processos per assegurar que els productes compleixin amb els estàndards de qualitat.

Exemples Pràctics

Exemple 1: Programació Lineal en la Planificació de la Producció

Problema: Una fàbrica de joguines vol determinar quantes unitats de dos tipus de joguines (A i B) ha de produir per maximitzar els beneficis. Cada joguina A genera un benefici de 3 unitats monetàries i cada joguina B genera un benefici de 5 unitats monetàries. La producció de cada joguina requereix temps de màquina i mà d'obra, amb les següents restriccions:

  • Joguina A: 2 hores de màquina, 1 hora de mà d'obra
  • Joguina B: 1 hora de màquina, 2 hores de mà d'obra
  • Disponibilitat total de màquina: 100 hores
  • Disponibilitat total de mà d'obra: 80 hores

Model de Programació Lineal:

Variables:

  • \( x \): Nombre de joguines A a produir
  • \( y \): Nombre de joguines B a produir

Funció objectiu: \[ \text{Maximitzar } Z = 3x + 5y \]

Restriccions: \[ 2x + y \leq 100 \] (hores de màquina) \[ x + 2y \leq 80 \] (hores de mà d'obra) \[ x, y \geq 0 \] (no-negativitat)

Solució:

Utilitzant un solutor de programació lineal (com Simplex), podem trobar els valors òptims de \( x \) i \( y \).

Exemple 2: Algorismes Genètics en la Optimització de Rutes de Distribució

Problema: Una empresa de distribució vol optimitzar les rutes dels seus camions per minimitzar els costos de transport. Cada camió ha de visitar un conjunt de clients i tornar al magatzem central.

Algorisme Genètic:

  1. Inicialització: Crear una població inicial de rutes aleatòries.
  2. Selecció: Seleccionar les rutes més curtes per a la reproducció.
  3. Creuament: Combinar parts de dues rutes per crear noves rutes.
  4. Mutació: Introduir petites modificacions en les rutes per explorar noves solucions.
  5. Avaluació: Calcular la longitud de cada ruta i seleccionar les millors per a la següent generació.
  6. Iteració: Repetir els passos anteriors fins a trobar una solució òptima o arribar a un nombre màxim de generacions.

Exercicis Pràctics

Exercici 1: Model de Programació Lineal

Enunciat: Una empresa de mobles fabrica taules i cadires. Cada taula genera un benefici de 10 unitats monetàries i cada cadira genera un benefici de 7 unitats monetàries. La producció de cada taula requereix 3 hores de màquina i 2 hores de mà d'obra, mentre que cada cadira requereix 2 hores de màquina i 1 hora de mà d'obra. La disponibilitat total de màquina és de 120 hores i la disponibilitat total de mà d'obra és de 80 hores. Formuleu el model de programació lineal per maximitzar els beneficis i resolgueu-lo.

Solució:

Variables:

  • \( x \): Nombre de taules a produir
  • \( y \): Nombre de cadires a produir

Funció objectiu: \[ \text{Maximitzar } Z = 10x + 7y \]

Restriccions: \[ 3x + 2y \leq 120 \] (hores de màquina) \[ 2x + y \leq 80 \] (hores de mà d'obra) \[ x, y \geq 0 \] (no-negativitat)

Utilitzant un solutor de programació lineal, podem trobar els valors òptims de \( x \) i \( y \).

Exercici 2: Algorisme Genètic per a la Optimització de Rutes

Enunciat: Implementa un algorisme genètic per optimitzar les rutes de distribució per a un conjunt de 10 clients. Utilitza una població inicial de 20 rutes, un percentatge de creuament del 70% i un percentatge de mutació del 5%. Simula l'algorisme durant 100 generacions i mostra la millor ruta trobada.

Solució:

import random

# Paràmetres de l'algorisme
num_clients = 10
num_rutes = 20
num_generacions = 100
percentatge_creuament = 0.7
percentatge_mutacio = 0.05

# Generar una població inicial de rutes aleatòries
poblacio = [random.sample(range(num_clients), num_clients) for _ in range(num_rutes)]

def calcular_distancia(ruta):
    # Funció fictícia per calcular la distància d'una ruta
    return sum(abs(ruta[i] - ruta[i+1]) for i in range(len(ruta) - 1))

def seleccio(poblacio):
    # Seleccionar les millors rutes
    poblacio.sort(key=calcular_distancia)
    return poblacio[:num_rutes//2]

def creuament(ruta1, ruta2):
    # Creuar dues rutes per crear una nova ruta
    punt = random.randint(1, num_clients - 2)
    nova_ruta = ruta1[:punt] + [client for client in ruta2 if client not in ruta1[:punt]]
    return nova_ruta

def mutacio(ruta):
    # Mutar una ruta intercanviant dos clients
    if random.random() < percentatge_mutacio:
        i, j = random.sample(range(num_clients), 2)
        ruta[i], ruta[j] = ruta[j], ruta[i]
    return ruta

# Simular l'algorisme genètic
for generacio in range(num_generacions):
    nova_poblacio = []
    poblacio = seleccio(poblacio)
    while len(nova_poblacio) < num_rutes:
        if random.random() < percentatge_creuament:
            ruta1, ruta2 = random.sample(poblacio, 2)
            nova_ruta = creuament(ruta1, ruta2)
        else:
            nova_ruta = random.choice(poblacio)
        nova_ruta = mutacio(nova_ruta)
        nova_poblacio.append(nova_ruta)
    poblacio = nova_poblacio

# Mostrar la millor ruta trobada
millor_ruta = min(poblacio, key=calcular_distancia)
print("Millor ruta trobada:", millor_ruta)

Resum

En aquesta secció, hem explorat diverses tècniques d'optimització aplicades en la indústria, incloent la programació lineal i els algorismes genètics. Hem vist exemples pràctics de com aquestes tècniques poden ser utilitzades per millorar la planificació de la producció i optimitzar les rutes de distribució. Els exercicis pràctics proporcionats permeten als estudiants aplicar els conceptes apresos i desenvolupar les seves habilitats en la resolució de problemes reals.

© Copyright 2024. Tots els drets reservats