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
- Optimització de Processos: Millorar els processos de producció per reduir costos i temps.
- Programació Lineal: Utilitzar models matemàtics per trobar la millor solució possible dins d'un conjunt de restriccions.
- Algorismes Genètics: Tècniques inspirades en l'evolució biològica per trobar solucions òptimes.
- Optimització de Colònia de Formigues: Algorismes basats en el comportament de les formigues per trobar camins òptims.
- Simulació i Modelatge: Utilitzar models per simular processos industrials i provar diferents escenaris.
Aplicacions Comunes
- Planificació de la Producció: Determinar la quantitat òptima de productes a fabricar per satisfer la demanda.
- Gestió de la Cadena de Subministrament: Optimitzar el flux de materials i informació des dels proveïdors fins als clients.
- Manteniment Predictiu: Utilitzar dades per predir i prevenir fallades en maquinària.
- 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:
- Inicialització: Crear una població inicial de rutes aleatòries.
- Selecció: Seleccionar les rutes més curtes per a la reproducció.
- Creuament: Combinar parts de dues rutes per crear noves rutes.
- Mutació: Introduir petites modificacions en les rutes per explorar noves solucions.
- Avaluació: Calcular la longitud de cada ruta i seleccionar les millors per a la següent generació.
- 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.
Algoritmes Avançats
Mòdul 1: Introducció als Algoritmes Avançats
Mòdul 2: Algoritmes d'Optimització
- Programació Lineal
- Algoritmes d'Optimització Combinatòria
- Algoritmes Genètics
- Optimització de Colònia de Formigues
Mòdul 3: Algoritmes en Grafs
- Representació de Grafs
- Cerca en Grafs: BFS i DFS
- Algoritmes de Camins Mínims
- Algoritmes de Flux Màxim
- Algoritmes d'Aparellament en Grafs
Mòdul 4: Algoritmes de Cerca i Ordenació
Mòdul 5: Algoritmes d'Aprenentatge Automàtic
- Introducció a l'Aprenentatge Automàtic
- Algoritmes de Classificació
- Algoritmes de Regressió
- Xarxes Neuronals i Deep Learning
- Algoritmes de Clustering
Mòdul 6: Casos d'Estudi i Aplicacions
- Optimització en la Indústria
- Aplicacions de Grafs en Xarxes Socials
- Cerca i Ordenació en Grans Volums de Dades
- Aplicacions d'Aprenentatge Automàtic en la Vida Real
