|
|
|
#! /usr/bin/python3
|
|
|
|
|
|
|
|
from algo import *
|
|
|
|
import warnings
|
|
|
|
import argparse
|
|
|
|
warnings.filterwarnings("ignore")
|
|
|
|
|
|
|
|
# df = pd.DataFrame(columns=["method" "alpha", "cpu_time", "mv", "tol"])
|
|
|
|
|
|
|
|
def run_standard_pagerank(G, alphas):
|
|
|
|
print("\nStarting the standard pagerank algorithm...")
|
|
|
|
|
|
|
|
iter_dict = dict.fromkeys(alphas, 0)
|
|
|
|
list_of_pageranks = []
|
|
|
|
|
|
|
|
start1 = time.time()
|
|
|
|
for alpha in alphas:
|
|
|
|
x, iter, tol = pagerank(G, alpha, tol=1e-8)
|
|
|
|
iter_dict[alpha] = iter
|
|
|
|
print("The number of matrix-vector products for alpha =", alpha, "is:", iter)
|
|
|
|
list_of_pageranks.append(x)
|
|
|
|
end1 = time.time()
|
|
|
|
|
|
|
|
total_iter = sum(iter_dict.values())
|
|
|
|
cpu_time = round(end1 - start1,1)
|
|
|
|
mv = total_iter
|
|
|
|
|
|
|
|
print("\nSTANDARD PAGERANK ALGORITHM RESULTS:\n")
|
|
|
|
print("\tCPU time (s):", cpu_time)
|
|
|
|
print("\tMatrix-vector multiplications:", mv)
|
|
|
|
print("\tAlpha(s):", alphas)
|
|
|
|
print("\tTolerance:", tol)
|
|
|
|
|
|
|
|
for i in range(len(list_of_pageranks)):
|
|
|
|
if not list_of_pageranks[i]:
|
|
|
|
print("The algorithm did not converge for alpha =", alphas[i])
|
|
|
|
|
|
|
|
|
|
|
|
# df.loc[len(df)] = ["Power Method", alphas, cpu_time, mv, tol]
|
|
|
|
# df.to_csv(args.dataset + "_results.tsv", sep="\t", index=False)
|
|
|
|
# print("\nThe results are saved in the file:", args.dataset + "_results.tsv")
|
|
|
|
|
|
|
|
|
|
|
|
def run_shifted_powe(G, alphas):
|
|
|
|
print("\nStarting the shifted power method... (this may take a while)")
|
|
|
|
|
|
|
|
start2 = time.time()
|
|
|
|
x, mv, alphas, tol = shifted_pow_pagerank(G, alphas, tol=1e-8)
|
|
|
|
end2 = time.time()
|
|
|
|
cpu_time = round(end2 - start2,1)
|
|
|
|
|
|
|
|
print("\nSHIFTED PAGERANK ALGORITHM RESULTS:\n")
|
|
|
|
print("\tCPU time (s):", cpu_time)
|
|
|
|
print("\tMatrix-vector multiplications:", mv)
|
|
|
|
print("\tAlphas(s):", alphas)
|
|
|
|
print("\tTolerance:", tol)
|
|
|
|
|
|
|
|
# df.loc[len(df)] = ["Shifted Power Method", alphas, cpu_time, mv, tol]
|
|
|
|
# df.to_csv(args.dataset + "_results.tsv", sep="\t", index=False)
|
|
|
|
# print("\nThe results are saved in the file:", args.dataset + "_results.tsv")
|
|
|
|
|
|
|
|
# main function
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
|
|
|
parser = argparse.ArgumentParser()
|
|
|
|
parser.add_argument("--dataset", type=str, default="Stanford", help="Choose the dataset to work with. The options are: Stanford, NotreDame, BerkStan")
|
|
|
|
parser.add_argument("--algo", type=str, default="both", help="Choose the algorithm to use. The options are: pagerank, shifted_pagerank, both")
|
|
|
|
args = parser.parse_args()
|
|
|
|
|
|
|
|
G = load_data(args.dataset)
|
|
|
|
|
|
|
|
alphas = [0.85, 0.86, 0.87, 0.88, 0.89, 0.90, 0.91, 0.92, 0.93, 0.94, 0.95, 0.96, 0.97, 0.98, 0.99]
|
|
|
|
|
|
|
|
if args.algo == "pagerank":
|
|
|
|
run_standard_pagerank(G, alphas)
|
|
|
|
elif args.algo == "shifted_pagerank":
|
|
|
|
run_shifted_powe(G, alphas)
|
|
|
|
elif args.algo == "both":
|
|
|
|
run_standard_pagerank(G, alphas)
|
|
|
|
run_shifted_powe(G, alphas)
|
|
|
|
|
|
|
|
|
|
|
|
|