public AnalysisResult Analyze(Network network, Dictionary <string, string> parameters) { var errors = ValidateParameters(network, parameters); if (errors.Count > 0) { // TODO: custom exception throw new ArgumentException(string.Join('\n', errors)); } var treshold = int.Parse(parameters["treshold"]); var algorithm = ParseAlgorithm(parameters); var communities = Algorithm.Apply(network, algorithm, treshold); return(new AnalysisResult { ActorToCommunity = AnalysisHelper.ActorToCommunity(network.Actors, communities), AnalyzedNetworkEdgeList = AnalysisHelper.EdgeList(network), CommunityList = AnalysisHelper.CommunityList(network.Actors, communities), Exclusivities = AnalysisHelper.Exclusivities(network, communities), Homogenities = AnalysisHelper.Homogenities(network, communities), Varieties = AnalysisHelper.Varieties(network, communities), Performances = AnalysisHelper.Performances(network, communities), Coverages = AnalysisHelper.Coverages(network, communities), Modularities = AnalysisHelper.Modularities(network, communities) }); }
public void TestRandom() { var random = new Random(); var generator = new RandomMultiLayerGenerator(); for (var i = 8; i < 15; i++) { var p = random.Next(6, 10) / 10.0; var l = random.Next(2, 10); var n = generator.Generate(i, l, p); var a = n.Actors; var abacus = new ABACUS(); var communities = abacus.Apply(n, n => new Louvain().Apply(n), 2); var actors = communities.SelectMany(c => c.Actors).Distinct(); Assert.Empty(a.Except(actors)); communities.ForEach(c => Assert.NotEmpty(c.Actors)); } }
public void TwoLayerTriangles() { var N = NetworkHelper.TwoLayerTriangles(); var A = N.Actors; var abacus = new ABACUS(); var communities = abacus.Apply(N, n => new Louvain().Apply(n), 2); Assert.Collection(communities, com => Assert.Collection(com.Actors, a => Assert.Equal(A[0], a), a => Assert.Equal(A[1], a), a => Assert.Equal(A[2], a) ), com => Assert.Collection(com.Actors, a => Assert.Equal(A[3], a), a => Assert.Equal(A[4], a), a => Assert.Equal(A[5], a) ) ); }