def scaling_query2(tree, w, L): eps = 10 c = 5 iter = 0 query = query_init_naive(L, Params.x_min, Params.y_min, Params.x_max, Params.y_max) last_est, last_last_est = sys.maxint, sys.maxint while True: est = tree.rangeCount(query) if math.fabs(est - w) <= c: break else: if est == 0: scale = random.random() + 0.5 else: scale = math.sqrt(math.fabs((w + 0.0) / est)) query = resize(query, scale, Params.x_min, Params.y_min, Params.x_max, Params.y_max) iter += 1 if iter >= 10 or math.fabs(est - last_est) < eps or math.fabs( est - last_last_est) < eps: break last_last_est = last_est last_est = est return query
def scaling_query(tree, L, U): iter = 0 query = query_init_naive(L, Params.x_min, Params.y_min, Params.x_max, Params.y_max) while True: est = tree.rangeCount(query) u, dist = utility_naive(query, est, Params.MTD) if u >= U: break else: scale = 1.1 query = resize(query, scale, Params.x_min, Params.y_min, Params.x_max, Params.y_max) iter += 1 if iter >= 50: break return query
def scaling_query2(tree, w, L): eps = 10 c = 5 iter = 0 query = query_init_naive(L, Params.x_min, Params.y_min, Params.x_max, Params.y_max) last_est, last_last_est = sys.maxint, sys.maxint while True: est = tree.rangeCount(query) if math.fabs(est - w) <= c: break else: if est == 0: scale = random.random() + 0.5 else: scale = math.sqrt(math.fabs(( w + 0.0) / est)) query = resize(query, scale, Params.x_min, Params.y_min, Params.x_max, Params.y_max) iter += 1 if iter >= 10 or math.fabs(est - last_est) < eps or math.fabs(est - last_last_est) < eps: break last_last_est = last_est last_est = est return query