def sim_greedy(M, min_f, max_f, debug): samples = np.random.randint(2, size=M*(M-1)/2) C = rd.random_compatibities(samples, M) F = [] A = np.zeros((M), dtype=int) debugf(debug,'\nCompatibity matrix = \n%s\n', C) retry = 0 f=min_f while sum(a==0 for a in A) <> 0: while (f in F): f = np.random.randint(min_f, max_f) F.append(f) gd.solve(A, C, F) retry += 1 debugf(debug, '\nRetry count: %s\n', retry) debugf(debug, 'Frequencies = %s\n', F) debugf(debug, 'Assignment matrix = %s\n', A) if (debug): vf.verify_compatibility(A, C) #gp.color_graph(C, A, F) #gp.heatmap(A, F) #plt.show() return A, C, F, 1-(len(F)/(len(A)*1.0))
M = 20 # total stations # samples = np.random.randint(2, size=M*(M-1)/2) samples = [1,0,1,1,0,1,0,1,1,1,0,0,0,1,0,0,1,0,0,1,0,1,1,1,0,0,0,1,0,0,0,0,1,0,0,1,1,1,0,0,0,0,1,1,0,1,1,0,1,1,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,0,1,1,0,0,1,0,0,0,0,0,1,1,1,1,0,0,0,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,0,1,1,0,1,1,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,0,1,1,0,1,1] print samples C = rd.random_compatibities(samples, M) print C #print C.transpose() #print C-C.transpose() F = range(1,21) #F = [np.random.randint(100, 1000)] A = np.zeros((M), dtype=int) printf('Assignment matrix =\n%s\n', A) # print 'Compataility Matrix =\n%s\n' % C # print '### Result ####\n' # result = gd.solve(A, C, F) while sum(a==0 for a in A) <> 0: #F.append(np.random.randint(100, 1000)) result = gd.solve(A, C, F) printf('\nFrequencies = %s\n', F) printf('Assigned frequencies = %s\n', A) print '\n### Summary ###\n' printf('# reused ratio = %s / %s\n', len(A) - len(F), len(A)) printf('Efficiency = %1.3f\n', len(F)/(len(A)*1.0)) vf.verify_compatibility(A, C) # gp.color_graph(C, A, [15, 16, 17, 18, 19, 20]) # gp.heatmap(A, F)
retry = 0 f=0 cost=0 F=[] extended_frequencies = np.concatenate((neighbors_frequencies, filter(lambda f: f not in thai_frequencies and f not in neighbors_frequencies, navaids_frequencies))) while sum(a==0 for a in A) <> 0 or cost > 0: print('\nRetried no.: %s\n') % retry A = [int(r.frequency) for r in radios] F.append(candidates_frequencies[retry]) #np.append(F,navaids_frequencies[retry]) cost = gd.solve(A, C, F) retry += 1 #F = np.append(F,neighbors_frequencies) print('Frequencies = %s\n') % F print('Cost=%s\n') % cost print('Assignment matrix = %s\n') % A veri = vf.verify_compatibility(A, C) indexes = zip(*np.where(veri < 0)) for i in indexes: print '%s,%s,%s,%s,%s,%sX' % (radios[i[0]].id, radios[i[0]].ident, radios[i[1]].id, radios[i[1]].ident, calc.geo_distance(radios[i[0]].latitude, radios[i[0]].longitude, radios[i[1]].latitude, radios[i[1]].longitude), radios[i[1]].frequency) left_frequencies = filter(lambda f: f not in A, navaids_frequencies) print left_frequencies