package edu.cmu.graphchi.walks;
import edu.cmu.graphchi.walks.distributions.RemoteDrunkardCompanion;
import java.util.*;
/**
* Encapsulates a random walk computation.
*/
public class DrunkardJob {
private String name;
private WalkManager walkManager;
private RemoteDrunkardCompanion companion;
private DrunkardFactory factory;
protected int numVertices;
public DrunkardJob(String name, RemoteDrunkardCompanion companion, int numVertices,
DrunkardFactory factory) {
this.name = name;
this.numVertices = numVertices;
this.companion = companion;
this.factory = factory;
}
/**
* Start walks from vertex firstSourceId to firstSourceId + numSources
* @param firstSourceId
* @param numSources how many walks to start from each source
* @param walksPerSource how many walks to start from each source
*/
public void configureSourceRangeInternalIds(int firstSourceId, int numSources, int walksPerSource) {
if (walkManager != null) {
throw new IllegalStateException("You can configure walks only once!");
}
walkManager = factory.createWalkManager(numVertices, numSources);
for(int i=firstSourceId; i < firstSourceId + numSources; i++) {
walkManager.addWalkBatch(i, walksPerSource);
}
}
/**
* Configure walks starting from list of vertices
* @param walkSources
* @param walksPerSource
*/
public void configureWalkSources(List<Integer> walkSources, int walksPerSource) {
if (walkManager != null) {
throw new IllegalStateException("You can configure walks only once!");
}
walkManager = factory.createWalkManager(numVertices, walkSources.size());
Collections.sort(walkSources);
for(int src : walkSources) {
walkManager.addWalkBatch(src, walksPerSource);
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public RemoteDrunkardCompanion getCompanion() {
return companion;
}
public WalkManager getWalkManager() {
return walkManager;
}
}