from itertools import permutations import pandas as pd Y = {0: 10, 1: 20, 2: 15, 3: 40, 4: 8} Z = {0: 20, 1: 30, 2: 10, 3: 25, 4: 18} products = Y.keys() np = len(products) pm = [] # list of permutations tm = [] # list of makespan time for order in permutations(products): # append permutation to the pm list pm.append(order) # lookup time for each step ty = [0]*(np+1); tz = [0]*(np+1) for i in range(np): ty[i] = Y[order[i]] tz[i+1] = Z[order[i]] # calculate makespan time t = 0 for i in range(np+1): t += max(ty[i],tz[i]) tm.append(t) # convert to Pandas DataFrame for sorting r = pd.DataFrame(pm,columns=['T0','T1','T2','T3','T4']) r['makespan'] = tm r.sort_values('makespan',inplace=True) print(r.head(10))