stats = tools.Statistics(lambda ind: ind.fitness.values) stats.register("avg", numpy.mean) stats.register("std", numpy.std) stats.register("min", numpy.min) stats.register("max", numpy.max) algorithms.eaSimple(pop, toolbox, 0.7, 0.3, 150, stats=stats, halloffame=hof) return pop, stats, hof if __name__ == "__main__": pop, stats, hof = main() print('track names in hof individual set size', SET_SIZE) for h in hof: for i in h: print(trackNames[i]) bestSetURIs = [trackURIs[i] for i in h] eval = Evaluation() print(" hof set scores ", eval.exactSetMatches(ugpTrackURIs, bestSetURIs)) print(' === ') pdb.set_trace()
def WeightedSum(ideal, trackFeatures, weights): ''' keyOrder = ['danceability', 'energy', 'key', 'loudness', 'mode', 'speechiness', 'acousticness', \ 'instrumentalness', 'liveness', 'valence', 'tempo', 'time_signature', 'popularity', 'release_date'] ''' trackDiffs = [] wSum = sum(weights) for track in tqdm(trackFeatures): trackDiffSum = 0 for cIdx, cIdeal in enumerate(ideal): trackDiffSum += (weights[cIdx] / wSum) * abs(cIdeal - track[cIdx]) trackDiffs.append(trackDiffSum / len(cons)) return trackDiffs trackDiffs = UnweightedSum(ideal, trackFeatures) print('sorting') trackDiffs, trackURIs, trackNames, trackFeatures = zip( *sorted(zip(trackDiffs, trackURIs, trackNames, trackFeatures))) #for i in range(20): #print(trackDiffs[i], trackNames[i]) eval = Evaluation() print(" set scores ", eval.exactSetMatches(testTrackURIs, trackURIs[:SET_SIZE])) pdb.set_trace()