Una planta de autopartes produce un componente que...
创建于:2025年10月18日
使用 GPT-5 Thinking 回答 Chat01
创建于:2025年10月18日
使用 GPT-5 Thinking 回答 Chat01
Una planta de autopartes produce un componente que requiere de dos operaciones en secuencia: prensado y perforado. Debido a que las especificaciones de producción de-penden de las necesidades del cliente, los tiempos por cada lote son diferentes. En la actualidad hay cinco trabajos en espera por procesos (en turnos), se presentan en la siguiente tabla:
Trabajo
1
2
3
4
5
Prensado (turnos)
4
4
10
6
2
Perforado (turnos)
5
1
4
10
3
Aplique el algoritmo de Johnson, para encontrar la secuencia que minimiza el tiempo total de procesamiento, para los cinco trabajos
se debe responder correctamente todas las preguntas con los siguientes aspectos:
• El procedimiento desarrollado se debe justificar secuencialmente y detalladamente.
• El resultado final debe estar correcto y simplificado.
• Debe trabajar de manera ordenada y secuencialmente apoyado en el diagrama de Gantt y algoritmo de Johnson.
pythonjobs = {1:(4,5),2:(4,1),3:(10,4),4:(6,10),5:(2,3)} def makespan(seq): m1=0;m2=0; timeline=[] for j in seq: p1,p2 = jobs[j] s1 = m1; c1 = s1 + p1; m1 = c1 s2 = max(c1,m2); c2 = s2 + p2; m2 = c2 timeline.append((j,s1,c1,s2,c2)) return m2, timeline seq = [5,1,4,3,2] makespan(seq) (27, [(5, 0, 2, 2, 5), (1, 2, 6, 6, 11), (4, 6, 12, 12, 22), (3, 12, 22, 22, 26), (2, 22, 26, 26, 27)])
python# Johnson's rule schedule and Gantt chart for the given problem import matplotlib.pyplot as plt import pandas as pd from caas_jupyter_tools import display_dataframe_to_user jobs = { 1: (4, 5), 2: (4, 1), 3: (10, 4), 4: (6, 10), 5: (2, 3), } # Sequence from Johnson's algorithm derived in the analysis: [5, 1, 4, 3, 2] sequence = [5, 1, 4, 3, 2] # Compute timeline m1_time = 0 m2_time = 0 rows = [] for j in sequence: p1, p2 = jobs[j] s1 = m1_time c1 = s1 + p1 m1_time = c1 s2 = max(c1, m2_time) c2 = s2 + p2 m2_time = c2 rows.append({ "Trabajo": j, "Prensado_inicio": s1, "Prensado_fin": c1, "Perforado_inicio": s2, "Perforado_fin": c2, }) df = pd.DataFrame(rows) # Show the schedule table to the user display_dataframe_to_user("Cronograma (Johnson): tiempos de inicio/fin por trabajo", df) # Build a single-plot Gantt chart using matplotlib (no seaborn, no explicit colors) fig, ax = plt.subplots(figsize=(10, 3.5)) # y positions for the two machines y_prensado = 20 y_perforado = 10 height = 6 # Add bars for each job on each machine for _, r in df.iterrows(): # Prensado ax.broken_barh([(r["Prensado_inicio"], r["Prensado_fin"] - r["Prensado_inicio"])], (y_prensado, height)) ax.text(r["Prensado_inicio"] + (r["Prensado_fin"] - r["Prensado_inicio"]) / 2, y_prensado + height/2, f'J{int(r["Trabajo"])}', ha='center', va='center', fontsize=9) # Perforado ax.broken_barh([(r["Perforado_inicio"], r["Perforado_fin"] - r["Perforado_inicio"])], (y_perforado, height)) ax.text(r["Perforado_inicio"] + (r["Perforado_fin"] - r["Perforado_inicio"]) / 2, y_perforado + height/2, f'J{int(r["Trabajo"])}', ha='center', va='center', fontsize=9) # Aesthetics ax.set_ylim(5, 30) ax.set_xlim(0, int(df["Perforado_fin"].max()) + 1) ax.set_xlabel("Tiempo (turnos)") ax.set_yticks([y_perforado + height/2, y_prensado + height/2]) ax.set_yticklabels(["Perforado (M2)", "Prensado (M1)"]) ax.set_title("Diagrama de Gantt — Secuencia Johnson") ax.grid(True) # Save and also display output_path = "/mnt/data/gantt_johnson.png" plt.tight_layout() plt.savefig(output_path, dpi=150) plt.show() output_path '/mnt/data/gantt_johnson.png'
¡Vamos paso a paso con Johnson y un Gantt para dejarlo impecable!
| Trabajo | Prensado (M1) | Perforado (M2) |
|---|---|---|
| 1 | 4 | 5 |
| 2 | 4 | 1 |
| 3 | 10 | 4 |
| 4 | 6 | 10 |
| 5 | 2 | 3 |
Paso 1. Mínimo global = 1 (trabajo 2 en M2).
→ Está en M2 ⇒ va al final.
Secuencia parcial: _ _ _ _ 2. Trabajos restantes: {1,3,4,5}.
Paso 2. Mínimo global = 2 (trabajo 5 en M1).
→ Está en M1 ⇒ va al inicio.
Secuencia parcial: 5 _ _ _ 2. Restantes: {1,3,4}.
Paso 3. Mínimo global = 4, aparece dos veces:
5 1 _ _ 2. Restantes: {3,4}.Paso 4. Con {3,4}, el mínimo es 4 (J3 en M2).
→ Está en M2 ⇒ va al final (antes del J2 ya fijado).
Secuencia parcial: 5 1 _ 3 2. Resta: {4}.
Paso 5. Colocar el que queda (J4) en el hueco.
Secuencia final (Johnson):
He calculado los tiempos de inicio/fin en cada máquina para la secuencia óptima y te dejo el Gantt (Prensado arriba, Perforado abajo).
También te dejo la tabla de tiempos para revisar cómodamente.
Si no ves la tabla, está adjunta como “Cronograma (Johnson): tiempos de inicio/fin por trabajo”.
Tiempos (en turnos):
Makespan (tiempo total de procesamiento):
(Como curiosidad: existe otra secuencia óptima que también da 27; Johnson garantiza mínimo y la que obtuvimos es válida y óptima).