Skip to the content.

Description of the Algorithm

Psuedocode of the Algorithm

Python implementation for swapping nodes during partition

mark = []
partition = []
cut_s = []
while(len(mark) != pairs-1):
    r_best, ij, part = [], [], []
    r_old = cut_size(n1, n2)
    for i in range(len(n1)):
        for j in range(len(n2)):
            if ([n1[i],n2[j]] not in mark and ([n2[j],n1[i]] not in mark)):
                n11, n22 = n1.copy(), n2.copy()
                n11[i] = n2[j]
                n22[j] = n1[i]
                del_R = r_old - cut_size(n11, n22)
                r_best.append(del_R)
                part.append([n11, n22])
                ij.append([n11[i],n22[j]])
    a = np.argmax(r_best)
    c_part = part[a]
    partition.append(c_part)
    mark.append(ij[a])
    cut_s.append(cut_size(c_part[0], c_part[1]))
    n1, n2 = c_part[0], c_part[1]
return(cut_s[np.argmin(cut_s)], partition[np.argmin(cut_s)])