Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -2,7 +2,8 @@ import gradio as gr
|
|
| 2 |
import random
|
| 3 |
import matplotlib.pyplot as plt
|
| 4 |
import pandas as pd
|
| 5 |
-
|
|
|
|
| 6 |
|
| 7 |
# -------- Generate Sample Data --------
|
| 8 |
def generate_jobs(num_jobs=5, num_machines=3):
|
|
@@ -62,17 +63,10 @@ def plot_schedule(schedule, title):
|
|
| 62 |
ax.set_yticks(range(max(m for _, m, _, _ in schedule) + 1))
|
| 63 |
ax.set_yticklabels([f"Machine {m+1}" for m in range(max(m for _, m, _, _ in schedule) + 1)])
|
| 64 |
plt.tight_layout()
|
|
|
|
| 65 |
plt.close(fig)
|
| 66 |
return fig
|
| 67 |
|
| 68 |
-
# -------- Convert Schedule to CSV --------
|
| 69 |
-
def schedule_to_csv(schedule):
|
| 70 |
-
df = pd.DataFrame(schedule, columns=["Job", "Machine", "Start Time", "End Time"])
|
| 71 |
-
csv_buffer = StringIO()
|
| 72 |
-
df.to_csv(csv_buffer, index=False)
|
| 73 |
-
csv_buffer.seek(0)
|
| 74 |
-
return csv_buffer.getvalue()
|
| 75 |
-
|
| 76 |
# -------- Main Gradio Function --------
|
| 77 |
def run_scheduler(num_jobs, num_machines, algorithm):
|
| 78 |
jobs = generate_jobs(num_jobs, num_machines)
|
|
@@ -86,9 +80,16 @@ def run_scheduler(num_jobs, num_machines, algorithm):
|
|
| 86 |
else:
|
| 87 |
return None, "Invalid algorithm selected.", None
|
| 88 |
|
|
|
|
| 89 |
fig = plot_schedule(schedule, title)
|
| 90 |
-
|
| 91 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 92 |
|
| 93 |
# -------- Gradio Interface --------
|
| 94 |
demo = gr.Interface(
|
|
@@ -101,10 +102,10 @@ demo = gr.Interface(
|
|
| 101 |
outputs=[
|
| 102 |
gr.Plot(label="Generated Schedule"),
|
| 103 |
gr.Textbox(label="Performance Metric", interactive=False),
|
| 104 |
-
gr.File(label="Download Schedule
|
| 105 |
],
|
| 106 |
title="🧠 Smart Factory Job Scheduling Visualizer",
|
| 107 |
-
description="
|
| 108 |
)
|
| 109 |
|
| 110 |
demo.launch()
|
|
|
|
| 2 |
import random
|
| 3 |
import matplotlib.pyplot as plt
|
| 4 |
import pandas as pd
|
| 5 |
+
import tempfile
|
| 6 |
+
import os
|
| 7 |
|
| 8 |
# -------- Generate Sample Data --------
|
| 9 |
def generate_jobs(num_jobs=5, num_machines=3):
|
|
|
|
| 63 |
ax.set_yticks(range(max(m for _, m, _, _ in schedule) + 1))
|
| 64 |
ax.set_yticklabels([f"Machine {m+1}" for m in range(max(m for _, m, _, _ in schedule) + 1)])
|
| 65 |
plt.tight_layout()
|
| 66 |
+
|
| 67 |
plt.close(fig)
|
| 68 |
return fig
|
| 69 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 70 |
# -------- Main Gradio Function --------
|
| 71 |
def run_scheduler(num_jobs, num_machines, algorithm):
|
| 72 |
jobs = generate_jobs(num_jobs, num_machines)
|
|
|
|
| 80 |
else:
|
| 81 |
return None, "Invalid algorithm selected.", None
|
| 82 |
|
| 83 |
+
# Create Gantt Chart
|
| 84 |
fig = plot_schedule(schedule, title)
|
| 85 |
+
|
| 86 |
+
# Create a temporary CSV file
|
| 87 |
+
df = pd.DataFrame(schedule, columns=["Job", "Machine", "Start Time", "End Time"])
|
| 88 |
+
temp_file = tempfile.NamedTemporaryFile(delete=False, suffix=".csv")
|
| 89 |
+
df.to_csv(temp_file.name, index=False)
|
| 90 |
+
|
| 91 |
+
# Return figure, performance metric, and download link
|
| 92 |
+
return fig, f"🔹 Makespan: {makespan} time units", temp_file.name
|
| 93 |
|
| 94 |
# -------- Gradio Interface --------
|
| 95 |
demo = gr.Interface(
|
|
|
|
| 102 |
outputs=[
|
| 103 |
gr.Plot(label="Generated Schedule"),
|
| 104 |
gr.Textbox(label="Performance Metric", interactive=False),
|
| 105 |
+
gr.File(label="Download Schedule CSV")
|
| 106 |
],
|
| 107 |
title="🧠 Smart Factory Job Scheduling Visualizer",
|
| 108 |
+
description="Generate job schedules, visualize Gantt charts, and export scheduling data for analysis."
|
| 109 |
)
|
| 110 |
|
| 111 |
demo.launch()
|