blob: 057156c4b74eb11709bf7ecf0b622d5b520c7599 [file] [log] [blame]
#-------------------------------------------------------------
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
#-------------------------------------------------------------
#library("batch")
# Usage: R --vanilla --args graphfile G tol 1e-8 maxiter 100 < HITS.R
#parseCommandArgs()
# JUnit test class: dml.test.integration.applications.HITSTest.java
# command line invocation assuming $HITS_HOME is set to the home of the R script
# Rscript $HITS_HOME/HITSTest.R $HITS_HOME/in/ 2 0.000001 $HITS_HOME/expected/
args <- commandArgs(TRUE)
library("Matrix")
maxiter = as.integer(args[2]);
tol = as.double(args[3]);
G = readMM(paste(args[1], "G.mtx", sep=""));
authorities = round(G);
hubs = authorities
#N = nrow(G)
#D = ncol(G)
# HITS = power iterations to compute leading left/right singular vectors
#authorities = matrix(1.0/N,N,1)
#hubs = matrix(1.0/N,N,1)
converge = FALSE
iter = 0
while(!converge) {
hubs_old = hubs
hubs = G %*% authorities
authorities_old = authorities
authorities = t(G) %*% hubs
hubs = hubs/max(hubs)
authorities = authorities/max(authorities)
delta_hubs = sum((hubs - hubs_old)^2)
delta_authorities = sum((authorities - authorities_old)^2)
converge = ((abs(delta_hubs) < tol) & (abs(delta_authorities) < tol) | (iter>maxiter))
iter = iter + 1
print(paste("Iterations :", iter, " delta_hubs :", delta_hubs, " delta_authorities :", delta_authorities))
}
writeMM(as(hubs,"CsparseMatrix"),paste(args[4], "hubs", sep=""));
writeMM(as(authorities,"CsparseMatrix"),paste(args[4], "authorities",sep=""));