From 0c9b1d06f87138be14a693fedcd2a491d84cf6b7 Mon Sep 17 00:00:00 2001 From: "rsmelo@inf.ufpr.br" <rsmelo@inf.ufpr.br> Date: Tue, 7 Jun 2016 16:23:21 -0300 Subject: [PATCH] antes do artigo --- src/algoritmos/PrevalentSeed.java | 32 ++++++++++++++++++++++++++- src/grafos/DirectedSocialNetwork.java | 2 +- src/readgraph/GraphReader.java | 3 ++- src/simulacao/Simulacao.java | 18 +++++++-------- 4 files changed, 43 insertions(+), 12 deletions(-) diff --git a/src/algoritmos/PrevalentSeed.java b/src/algoritmos/PrevalentSeed.java index e333ef9..f882993 100644 --- a/src/algoritmos/PrevalentSeed.java +++ b/src/algoritmos/PrevalentSeed.java @@ -57,13 +57,43 @@ public class PrevalentSeed implements SeedChooser<Actor> { } return candidatos; } + + public HashSet<Actor> preSelecaoOriginal(DirectedSocialNetwork grafo) { + int n = grafo.vertexSet().size(); + + // DS <-- {} + HashSet<Actor> candidatos = new HashSet<>(); + + // compare os vertices pelo grau + ComparaPorGrau comp = new ComparaPorGrau(grafo); + + MinMaxPriorityQueue<Actor> heapMinMax = null; + heapMinMax = MinMaxPriorityQueue.orderedBy(comp).maximumSize(n) + .create(); + for (Actor v : grafo.vertexSet()) { + heapMinMax.add(v); + } + + Set<Actor> cobertos = new HashSet<>(); + while (!heapMinMax.isEmpty()) { + + Actor v = heapMinMax.removeLast(); + Set<Actor> vizinhos = grafo.outNeighborsOf(v); + + if (cobertos.addAll(vizinhos)) { + candidatos.add(v); + } + cobertos.add(v); + } + return candidatos; + } @Override public HashSet<Actor> escolher(int k) { HashSet<Actor> semente = new HashSet<Actor>(); HashSet<Actor> candidatos = new HashSet<Actor>(); - candidatos = preSelecao(grafo); + candidatos = preSelecaoOriginal(grafo); if (candidatos.size() < k) { System.out.println("Erro: o cojunto de candidatos é menor que K"); diff --git a/src/grafos/DirectedSocialNetwork.java b/src/grafos/DirectedSocialNetwork.java index fb86913..cc80895 100644 --- a/src/grafos/DirectedSocialNetwork.java +++ b/src/grafos/DirectedSocialNetwork.java @@ -186,7 +186,7 @@ public class DirectedSocialNetwork extends public double espectedSpread(HashSet<Actor> seed, boolean ic) { double media = 0; int soma = 0; - int repeticoes = 5000; + int repeticoes = 500; if (!ic) { HashSet<Actor> ativados = linearThresholdDiffusion(seed); diff --git a/src/readgraph/GraphReader.java b/src/readgraph/GraphReader.java index 94f5531..418afb2 100644 --- a/src/readgraph/GraphReader.java +++ b/src/readgraph/GraphReader.java @@ -89,7 +89,8 @@ public class GraphReader { // uniform IC model // return (double)10/100; // return 0.025; - return Math.random()/4; +// return Math.random()/4; + return 0.001; } public DirectedSocialNetwork readEpinions() { diff --git a/src/simulacao/Simulacao.java b/src/simulacao/Simulacao.java index f21f4db..88d2c73 100644 --- a/src/simulacao/Simulacao.java +++ b/src/simulacao/Simulacao.java @@ -5,7 +5,7 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashSet; -import javax.media.j3d.PhysicalBody; +//import javax.media.j3d.PhysicalBody; import org.jgrapht.graph.DefaultWeightedEdge; @@ -13,7 +13,7 @@ import plot.MeuPlot; import readgraph.GraphReader; import algoritmos.ArticulationSeed; import algoritmos.BestNeighbors; -import algoritmos.DominatingSeed; +import algoritmos.PrevalentSeed; import algoritmos.HightDegree; import algoritmos.LazyGreedy; import algoritmos.OriginalGreedy; @@ -38,7 +38,7 @@ public class Simulacao { System.out.println("\nTestando para k = " + k); excutionTime = System.currentTimeMillis() * -1; - HashSet<Actor> seed1 = new DominatingSeed(g).escolher(k); + HashSet<Actor> seed1 = new PrevalentSeed(g).escolher(k); excutionTime += System.currentTimeMillis(); tempo1[i] = (excutionTime / 1000.0f); sigma1[i] = g.espectedSpread(seed1, true); @@ -105,7 +105,7 @@ public class Simulacao { System.out.println("\nTestando para k = " + k); excutionTime = System.currentTimeMillis() * -1; - HashSet<Actor> seed1 = new DominatingSeed(g).escolher(k); + HashSet<Actor> seed1 = new PrevalentSeed(g).escolher(k); excutionTime += System.currentTimeMillis(); tempo1[i] = (excutionTime / 1000.0f); sigma1[i] = g.espectedSpread(seed1, true); @@ -125,7 +125,7 @@ public class Simulacao { stempo2[i] += tempo2[i];*/ excutionTime = System.currentTimeMillis() * -1; - HashSet<Actor> seed2 = new DominatingSeed(g).escolher2(k); + HashSet<Actor> seed2 = new PrevalentSeed(g).escolher2(k); excutionTime += System.currentTimeMillis(); tempo2[i] = (excutionTime / 1000.0f); sigma2[i] = g.espectedSpread(seed2, true); @@ -241,10 +241,10 @@ public class Simulacao { DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); Date data = new Date(); System.out.println("Data de início: " + dateFormat.format(data)); - simularArtificial(); - simularPhy(); -// simularEpinions(); - simularHep(); +// simularArtificial(); +// simularPhy(); + simularEpinions(); +// simularHep(); // simularDblp(); } -- GitLab