Untitled
unknown
plain_text
a year ago
1.7 kB
11
Indexable
import pandas as pd def johnsons_rule(df_jobs): # Convert processing times to numeric values df_jobs['Machine 1'] = pd.to_numeric(df_jobs['Machine 1']) df_jobs['Machine 2'] = pd.to_numeric(df_jobs['Machine 2']) # Initialize lists to store jobs for each machine machine_1_jobs = [] machine_2_jobs = [] # Separate jobs based on the processing time on each machine for job, row in df_jobs.iterrows(): if row['Machine 1'] < row['Machine 2']: machine_1_jobs.append((job, row['Machine 1'], row['Machine 2'])) else: machine_2_jobs.append((job, row['Machine 1'], row['Machine 2'])) # Sort jobs based on processing time on Machine 1 in ascending order machine_1_jobs.sort(key=lambda x: x[1]) # Sort jobs based on processing time on Machine 2 in descending order machine_2_jobs.sort(key=lambda x: x[2], reverse=True) # Combine jobs from both machines based on their sorted order sequence = [] while machine_1_jobs and machine_2_jobs: if machine_1_jobs[0][1] < machine_2_jobs[0][2]: sequence.append(machine_1_jobs[0][0]) machine_1_jobs.pop(0) else: sequence.append(machine_2_jobs[0][0]) machine_2_jobs.pop(0) # Add remaining jobs sequence.extend([job[0] for job in machine_1_jobs]) sequence.extend([job[0] for job in machine_2_jobs]) return sequence # Example DataFrame jobs_df = pd.DataFrame({'Machine 1': [3, 4, 2], 'Machine 2': [2, 5, 4]}, index=['Job1', 'Job2', 'Job3']) # Call the function and print the output print(johnsons_rule(jobs_df))
Editor is loading...
Leave a Comment