diff --git a/src/algoritmos/DominatingSeed.java b/src/algoritmos/DominatingSeed.java index f7f7157f9501427954cdccc7b27dbbe32ba4685b..bf2bfb8611b3a9a015770a41ff2a0d83471ef046 100644 --- a/src/algoritmos/DominatingSeed.java +++ b/src/algoritmos/DominatingSeed.java @@ -184,7 +184,7 @@ public class DominatingSeed implements SeedChooser<Actor> { public static void main(String[] args) { DirectedSocialNetwork g = new SocialNetworkGenerate() - .gerarGrafo(600, 2.5); + .gerarGrafo(800, 2.5); HashSet<Actor> seed = new DominatingSeed(g).escolherGreedy(15); HashSet<Actor> ativos = g.indepCascadeDiffusion(seed); diff --git a/src/grafos/DirectedSocialNetwork.java b/src/grafos/DirectedSocialNetwork.java index 137d08cb8a0d6f01b559a11c6cd7d658763f6db2..ffcdeaa8729abf39bc0a2a6645958768108d9201 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 = 1000; + int repeticoes = 100; if (!ic) { HashSet<Actor> ativados = linearThresholdDiffusion(seed); diff --git a/src/plot/MeuPlot.java b/src/plot/MeuPlot.java index d1f55bf71a2aefd83e929a3103143324be2c35c5..2b01b902a5a3e5bfd94635ee71c3faf136f3d847 100644 --- a/src/plot/MeuPlot.java +++ b/src/plot/MeuPlot.java @@ -9,24 +9,25 @@ public class MeuPlot extends JGnuplot { String output = null; //String beforeStyle="linewidth=4"; - public void plotarPropagacaoEsperada(double[] tamSemente, double[] y1, double[] y2, double[] y3, double[] y4, double[] y5){ + public void plotPropagacao(double[] tamSemente, double[] y1, double[] y2, double[] y3, double[] y4, String outDir){ JGnuplot plot = new JGnuplot(); Plot plotPropagacao = new Plot("Propagação Esperada") { - String xlabel = "'Tam. Semente'", ylabel = "'Propagacao Esperada'"; + String xlabel = "'|S|'", ylabel = "'sigma(S)'"; + String extra = "set key top left"; }; - DataTableSet dts = plotPropagacao.addNewDataTableSet("Propagacao"); - dts.addNewDataTable("HighDegree", tamSemente, y1); - dts.addNewDataTable("BestNeighbors", tamSemente, y2); - dts.addNewDataTable("RandomSeed", tamSemente, y3); - dts.addNewDataTable("DominatingSeed", tamSemente, y4); - dts.addNewDataTable("CELF", tamSemente, y5); + DataTableSet dts = plotPropagacao.addNewDataTableSet("Propagação Esperada"); + dts.addNewDataTable("DominatingSeed", tamSemente, y1); + dts.addNewDataTable("CELF", tamSemente, y2); + dts.addNewDataTable("HighDegree", tamSemente, y3); + dts.addNewDataTable("RandomSeed", tamSemente, y4); plotPropagacao.add(dts); plot.compile(plotPropagacao, plot.plot2d, "propagacao_esperada.plt"); - this.terminal = "pngcairo enhanced dashed"; - this.output = "'plots/IC/propagacao_esperada.png'"; +// this.terminal = "epslatex color colortext dashed"; + this.terminal = "eps color dashed"; + this.output = outDir+"propagacao.eps'"; this.execute(plotPropagacao, this.plot2d); } @@ -51,23 +52,24 @@ public class MeuPlot extends JGnuplot { this.execute(plotPropagacao, this.plot2d); } - public void plotarTempoExecucao(double[] tamSemente, double[] y1, double[] y2, double[] y3, double[] y4, double[] y5){ + public void plotTempoExecucao(double[] tamSemente, double[] y1, double[] y2, double[] y3, double[] y4, String outDir){ JGnuplot plot = new JGnuplot(); Plot plotTempo = new Plot("Tempo de execução") { - String xlabel = "'Tam. Semente'", ylabel = "'Tempo de execução'"; + String xlabel = "'|S|'", ylabel = "'Tempo de execução'"; + String extra = "set key top left"; }; - DataTableSet dts2 = plotTempo.addNewDataTableSet("TempoExecucao"); - dts2.addNewDataTable("HighDegree", tamSemente, y1); - dts2.addNewDataTable("BestNeighbors", tamSemente, y2); - dts2.addNewDataTable("RandomSeed", tamSemente, y3); - dts2.addNewDataTable("DominatingSeed", tamSemente, y4); - dts2.addNewDataTable("CELF", tamSemente, y5); + DataTableSet dts2 = plotTempo.addNewDataTableSet("Tempo de execução"); + dts2.addNewDataTable("DominatingSeed", tamSemente, y1); + dts2.addNewDataTable("CELF", tamSemente, y2); + dts2.addNewDataTable("HighDegree", tamSemente, y3); + dts2.addNewDataTable("RandomSeed", tamSemente, y4); plotTempo.add(dts2); plot.compile(plotTempo, plot.plot2d, "tempo_execucao.plt"); - this.terminal = "pngcairo enhanced dashed"; - this.output = "'plots/IC/tempo_execucao.png'"; +// this.terminal = "epslatex color colortext dashed"; + this.terminal = "eps color dashed"; + this.output = outDir+"tempo.eps'"; this.execute(plotTempo, this.plot2d); } diff --git a/src/simulacao/Simulacao.java b/src/simulacao/Simulacao.java index 7d0e32feaf9e3bbd2a49fe7573e97fedc813f3a0..3e1e2575835d4b259fce5261b6cf7f00d9d6aed7 100644 --- a/src/simulacao/Simulacao.java +++ b/src/simulacao/Simulacao.java @@ -16,131 +16,112 @@ import grafos.Actor; import grafos.DirectedSocialNetwork; public class Simulacao { - - public void simularCascataIndependente(DirectedSocialNetwork g) { - double[] tamSemente = {10, 20, 30, 40, 50}; + public void simularIC(DirectedSocialNetwork g, String outDir) { + double[] tamSemente = { 10, 20, 30, 40, 50 }; double[] sigma1 = new double[5], tempo1 = new double[5]; - double[] sigma2 = new double[5], tempo2 = new double[5]; + double[] sigma2 = new double[5], tempo2 = new double[5]; double[] sigma3 = new double[5], tempo3 = new double[5]; double[] sigma4 = new double[5], tempo4 = new double[5]; - double[] sigma5 = new double[5], tempo5 = new double[5]; int k; - - long startTime = 0; + + long excutionTime = 0; for (int i = 0; i < tamSemente.length; i++) { k = (int) tamSemente[i]; - System.out.println("\nTestando para k = "+k); - - startTime = System.nanoTime(); - HashSet<Actor> seed1 = new HightDegree(g).escolher(k); - tempo1[i] = (System.nanoTime() - startTime)/1000; -// System.out.println("hDegreeTempo[i] = "+hDegreeTempo[i]); + System.out.println("\nTestando para k = " + k); + + excutionTime = System.currentTimeMillis() * -1; + HashSet<Actor> seed1 = new DominatingSeed(g).escolher(k); + excutionTime += System.currentTimeMillis(); + tempo1[i] = (excutionTime / 1000.0f); sigma1[i] = g.espectedSpread(seed1, true); - System.out.println("sigma HighDegree = "+sigma1[i]); - - startTime = System.nanoTime(); - HashSet<Actor> seed2 = new BestNeighbors(g).escolher(k); - tempo2[i] = (System.nanoTime() - startTime)/1000; -// System.out.println("bNeigTempo[i] = "+bNeigTempo[i]); + System.out.println("DominatingSeed: sigma = " + sigma1[i] + + ", tempo = " + tempo1[i] + " segundos"); + + excutionTime = System.currentTimeMillis() * -1; + HashSet<Actor> seed2 = new LazyGreedy(g).escolher(k); + excutionTime += System.currentTimeMillis(); + tempo2[i] = (excutionTime / 1000.0f); sigma2[i] = g.espectedSpread(seed2, true); - System.out.println("sigma BestNeighbors = "+sigma2[i]); - - startTime = System.nanoTime(); - HashSet<Actor> seed3 = new RandomSeed(g).escolher(k); - tempo3[i] = (System.nanoTime() - startTime)/1000; -// System.out.println("rSeedTempo[i] = "+rSeedTempo[i]); + System.out.println("LazyGreedy: sigma = " + sigma2[i] + + ", tempo = " + tempo2[i] + " segundos"); + + excutionTime = System.currentTimeMillis() * -1; + HashSet<Actor> seed3 = new DominatingSeed(g).escolherGreedy(k); + excutionTime += System.currentTimeMillis(); + tempo3[i] = (excutionTime / 1000.0f); sigma3[i] = g.espectedSpread(seed3, true); - System.out.println("sigma RandomSeed = "+sigma3[i]); - -// startTime = System.nanoTime(); -// HashSet<Actor> dSeed = new DominatingSeed(g).escolher(k); // Provisóriamente==================== -// dSeedTempo[i] = (System.nanoTime() - startTime)/1000; -//// System.out.println("dSeedTempo[i] = "+dSeedTempo[i]); -// dSeedMedia[i] = g.espectedSpread(dSeed, true); -// System.out.println("sigma DominatingSeed = "+dSeedMedia[i]); - - /*startTime = System.nanoTime(); - HashSet<Actor> oSeed = new OriginalGreedy(g).escolher(k); - dSeedTempo[i] = (System.nanoTime() - startTime)/1000; -// System.out.println("dSeedTempo[i] = "+dSeedTempo[i]); - dSeedMedia[i] = g.overageDiffusion(oSeed, true);*/ - - startTime = System.nanoTime(); - HashSet<Actor> seed4 = new DominatingSeed(g).escolher(k); - tempo4[i] = (System.nanoTime() - startTime)/1000; -// System.out.println("dSeedTempo[i] = "+dSeedTempo[i]); + System.out.println("HighDegree: sigma = " + sigma3[i] + + ", tempo = " + tempo3[i] + " segundos"); + + excutionTime = System.currentTimeMillis() * -1; + HashSet<Actor> seed4 = new RandomSeed(g).escolher(k); + excutionTime += System.currentTimeMillis(); + tempo4[i] = (excutionTime / 1000.0f); sigma4[i] = g.espectedSpread(seed4, true); - System.out.println("sigma DominatingSeed = "+sigma4[i]); - - startTime = System.nanoTime(); - HashSet<Actor> celf = new LazyGreedy(g).escolher(k); - tempo5[i] = (System.nanoTime() - startTime)/1000; -// System.out.println("dSeedTempo[i] = "+dSeedTempo[i]); - sigma5[i] = g.espectedSpread(celf, true); - System.out.println("sigma LazyGreedy = "+sigma5[i]); - - + System.out.println("RandomSeed: sigma = " + sigma4[i] + + ", tempo = " + tempo4[i] + " segundos"); + } - + MeuPlot meuplot = new MeuPlot(); - meuplot.plotarPropagacaoEsperada(tamSemente, sigma1, sigma2, sigma3, sigma4, sigma5); - meuplot.plotarTempoExecucao(tamSemente, tempo1, tempo2, tempo3, tempo4, tempo5); + meuplot.plotPropagacao(tamSemente, sigma1, sigma2, sigma3, sigma4, + outDir); + meuplot.plotTempoExecucao(tamSemente, tempo1, tempo2, tempo3, tempo4, + outDir); } - public void simularLimitanteLinear(DirectedSocialNetwork g) { - double[] tamSemente = { 10, 20, 30, 40, 50 }; - double[] rSeedMedia = new double[5], rSeedTempo = new double[5]; - double[] hDegreeMedia = new double[5], hDegreeTempo = new double[5]; - double[] bNeigMedia = new double[5], bNeigTempo = new double[5]; - double[] dSeedMedia = new double[5], dSeedTempo = new double[5]; - int k; + public static void main(String[] args) { +// simularArtificial(); +// simularHep(); + simularPhy(); + // simularEpinions(); + } + + private static void simularArtificial() { + DirectedSocialNetwork g; + g = new SocialNetworkGenerate().gerarGrafo(300, 2.8); + System.out.println("|V(G)| = " + g.vertexSet().size()); + System.out.println("|E(G)| = " + g.edgeSet().size()); + + String outDir = "'plots/tex/"; + + new Simulacao().simularIC(g, outDir); - long startTime = 0; - for (int i = 0; i < tamSemente.length; i++) { - k = (int) tamSemente[i]; - System.out.println("\nTestando pra k = "+k); - - startTime = System.nanoTime(); - HashSet<Actor> hDegree = new HightDegree(g).escolher(k); - hDegreeTempo[i] = (System.nanoTime() - startTime)/1000; - hDegreeMedia[i] = g.espectedSpread(hDegree, false); - - startTime = System.nanoTime(); - HashSet<Actor> bNeig = new BestNeighbors(g).escolher(k); - bNeigTempo[i] = (System.nanoTime() - startTime)/1000; - bNeigMedia[i] = g.espectedSpread(bNeig, false); - - startTime = System.nanoTime(); - HashSet<Actor> rSeed = new RandomSeed(g).escolher(k); - rSeedTempo[i] = (System.nanoTime() - startTime)/1000; - rSeedMedia[i] = g.espectedSpread(rSeed, false); - - startTime = System.nanoTime(); - HashSet<Actor> dSeed = new DominatingSeed(g).escolher(k); - dSeedTempo[i] = (System.nanoTime() - startTime)/1000; - dSeedMedia[i] = g.espectedSpread(dSeed, false); - - } + } + + private static void simularPhy() { + DirectedSocialNetwork g; + g = new GraphReader().readPhy(); + System.out.println("|V(G)| = " + g.vertexSet().size()); + System.out.println("|E(G)| = " + g.edgeSet().size()); - MeuPlot meuplot = new MeuPlot(); - meuplot.plotarPropagacaoEsperadaLT(tamSemente, hDegreeMedia, bNeigMedia, rSeedMedia, dSeedMedia); - meuplot.plotarTempoExecucaoLT(tamSemente, hDegreeTempo, bNeigTempo, rSeedTempo, dSeedTempo); + String outDir = "'plots/phy/"; + + new Simulacao().simularIC(g, outDir); } - public static void main(String[] args) { + private static void simularEpinions() { DirectedSocialNetwork g; - g = new SocialNetworkGenerate().gerarGrafo(2500, 2.8); -// g = new GraphReader().readHep(); -// g = new GraphReader().readPhy(); -// g = new GraphReader().readEpinions(); + g = new GraphReader().readEpinions(); + System.out.println("|V(G)| = " + g.vertexSet().size()); System.out.println("|E(G)| = " + g.edgeSet().size()); - Simulacao simula = new Simulacao(); -// simula.simularLimitanteLinear(g); - simula.simularCascataIndependente(g); + String outDir = "'plots/epinions/"; + + new Simulacao().simularIC(g, outDir); + } + + private static void simularHep() { + DirectedSocialNetwork g; + g = new GraphReader().readHep(); + System.out.println("|V(G)| = " + g.vertexSet().size()); + System.out.println("|E(G)| = " + g.edgeSet().size()); + String outDir = "'plots/hep/"; + + new Simulacao().simularIC(g, outDir); } }