package i5.las2peer.services.ocd.metrics;
import static org.junit.Assert.assertEquals;
import i5.las2peer.services.ocd.algorithms.OcdAlgorithm;
import i5.las2peer.services.ocd.algorithms.RandomWalkLabelPropagationAlgorithm;
import i5.las2peer.services.ocd.algorithms.utils.OcdAlgorithmException;
import i5.las2peer.services.ocd.graphs.Cover;
import i5.las2peer.services.ocd.graphs.CustomGraph;
import i5.las2peer.services.ocd.testsUtils.OcdTestCoverFactory;
import i5.las2peer.services.ocd.testsUtils.OcdTestGraphFactory;
import org.junit.Ignore;
import org.junit.Test;
import org.la4j.matrix.Matrix;
import org.la4j.matrix.sparse.CCSMatrix;
public class OmegaIndexTest {
/*
* Tests SLPA result on sawmill.
*/
@Ignore
@Test
public void testOnSawmillRawLpa() throws Exception {
CustomGraph graph = OcdTestGraphFactory.getSawmillGraph();
OcdAlgorithm algo = new RandomWalkLabelPropagationAlgorithm();
Cover cover = algo.detectOverlappingCommunities(graph);
cover.filterMembershipsbyThreshold(0.15);
KnowledgeDrivenMeasure metric = new OmegaIndex();
Cover groundTruth = OcdTestCoverFactory.getSawmillGroundTruth();
OcdMetricExecutor executor = new OcdMetricExecutor();
executor.executeKnowledgeDrivenMeasure(cover, groundTruth, metric);
System.out.println("Sawmill SLPA");
System.out.println(cover);
}
/*
* Tests ground truth as output cover on sawmill.
*/
@Test
public void testOnSawmillGroundTruth() throws Exception {
KnowledgeDrivenMeasure metric = new OmegaIndex();
Cover cover = OcdTestCoverFactory.getSawmillGroundTruth();
double value = metric.measure(cover, cover);
System.out.println("Sawmill Ground Truth");
System.out.println(value);
assertEquals(1.0, value, 0.001);
}
/*
* Tests for two covers with a known result.
*/
@Test
public void testWithKnownResult() throws OcdAlgorithmException, OcdMetricException, InterruptedException {
CustomGraph graph = new CustomGraph();
for(int i=0; i<11; i++) {
graph.createNode();
}
Matrix memberships1 = new CCSMatrix(11, 2);
memberships1.set(0, 0, 1);
memberships1.set(1, 0, 0.8);
memberships1.set(2, 0, 0.3);
memberships1.set(3, 0, 1);
memberships1.set(4, 0, 1);
memberships1.set(6, 0, 0.05);
memberships1.set(7, 0, 1);
memberships1.set(9, 0, 0.5);
memberships1.set(1, 1, 0.2);
memberships1.set(2, 1, 0.7);
memberships1.set(5, 1, 1);
memberships1.set(6, 1, 0.95);
memberships1.set(8, 1, 1);
memberships1.set(9, 1, 0.5);
memberships1.set(10, 1, 1);
Cover cover = new Cover(graph, memberships1);
Matrix memberships2 = new CCSMatrix(11, 2);
memberships2.set(0, 0, 1);
memberships2.set(1, 0, 1);
memberships2.set(3, 0, 1);
memberships2.set(4, 0, 0.6);
memberships2.set(7, 0, 1);
memberships2.set(9, 0, 0.45);
memberships2.set(2, 1, 1);
memberships2.set(4, 1, 1);
memberships2.set(5, 1, 1);
memberships2.set(6, 1, 1);
memberships2.set(8, 1, 1);
memberships2.set(9, 1, 1);
memberships2.set(10, 1, 1);
Cover groundTruth = new Cover(graph, memberships2);
KnowledgeDrivenMeasure metric = new OmegaIndex();
double value = metric.measure(cover, groundTruth);
assertEquals(0.313, value, 0.01);
System.out.println("Known Result");
System.out.println(value);
}
}