diff --git a/src/algoritmos/LazyGreedy.java b/src/algoritmos/LazyGreedy.java index 0204b4e37af9ec38413078ad91c1eeb02851f51f..23fbeb85602596aa0e863507ee2744bd1c402c52 100644 --- a/src/algoritmos/LazyGreedy.java +++ b/src/algoritmos/LazyGreedy.java @@ -5,8 +5,6 @@ import grafos.Actor; import grafos.DirectedSocialNetwork; import interfaces.SeedChooser; -import java.io.FileWriter; -import java.io.IOException; import java.util.HashSet; import java.util.PriorityQueue; @@ -15,15 +13,14 @@ public class LazyGreedy implements SeedChooser<Actor> { private int cont; private double[] spreadData; private double[] callData; - public LazyGreedy(DirectedSocialNetwork g) { this.grafo = g; } /** - * Cria uma fila de prioridade por ganho marginal de todos os vértices do grafo - * e cada vértice é inicializado com ganho de NaN e inválido + * Cria uma fila de prioridade por ganho marginal de todos os vértices do + * grafo e cada vértice é inicializado com ganho de NaN e inválido * * @return uma fila de prioridade com o ganho marginal de todos os vértices */ @@ -42,13 +39,13 @@ public class LazyGreedy implements SeedChooser<Actor> { public HashSet<Actor> escolher(int k) { HashSet<Actor> semente = new HashSet<>(); cont = 0; - spreadData = new double[k+1]; - callData = new double[k+1]; + spreadData = new double[k + 1]; + callData = new double[k + 1]; // create priority queue of all nodes, with marginal gain delta +inf PriorityQueue<MarginalGain> fila = priorityQueueOfGains(); - double MaxSpread = 0; + double MaxSpread = 0; while (semente.size() < k) { // set all gains invalid @@ -61,9 +58,8 @@ public class LazyGreedy implements SeedChooser<Actor> { if (max.isValid() == true) { semente.add(max.getVertice()); MaxSpread = MaxSpread + max.getGain(); - System.out.println(semente.size()+"\t"+MaxSpread); +// System.out.println(semente.size() + "\t" + MaxSpread); spreadData[semente.size()] = MaxSpread; -// callData[semente.size()] = cont; break; } else { double sigma = cascata(max.getVertice(), semente); @@ -75,55 +71,21 @@ public class LazyGreedy implements SeedChooser<Actor> { } } } - System.out.println("chamadas: " + cont); + System.out.println("Chamadas: " + cont); + System.out.println("Chamadas depois da 1a iteracao: " + (cont - grafo.vertexSet().size())); return semente; } - - public int callToSigma(){ + + public int callToSigma() { return this.cont; } - public double[] getSpreadData(){ + + public double[] getSpreadData() { return this.spreadData; } - - public double[] getCallData(){ - return this.callData; - } - - public HashSet<Actor> toFile(int k, FileWriter writer) throws IOException { - HashSet<Actor> semente = new HashSet<>(); - cont = 0; - - // create priority queue of all nodes, with marginal gain delta +inf - PriorityQueue<MarginalGain> fila = priorityQueueOfGains(); - double MaxSpread = 0; - - while (semente.size() < k) { - // set all gains invalid - for (MarginalGain mg : fila) { - mg.setValid(false); - } - - while (true) { - MarginalGain max = fila.poll(); - if (max.isValid() == true) { - semente.add(max.getVertice()); - MaxSpread = MaxSpread + max.getGain(); - writer.write(semente.size()+"\t"+MaxSpread); - break; - } else { - double sigma = cascata(max.getVertice(), semente); - double delta = sigma - MaxSpread; - max.setGain(delta); - max.setValid(true); - fila.add(max); - cont++; - } - } - } -// System.out.println("chamadas: " + cont); - return semente; + public double[] getCallData() { + return this.callData; } private double cascata(Actor v, HashSet<Actor> semente) { @@ -140,14 +102,13 @@ public class LazyGreedy implements SeedChooser<Actor> { startTime = System.nanoTime(); HashSet<Actor> seed2 = new LazyGreedy(g).escolher(15); - System.out.println("LazyGreedy = " - + g.espectedSpread(seed2, true) + ", tempo: " - + (System.nanoTime() - startTime) / 1000); + System.out.println( + "LazyGreedy = " + g.espectedSpread(seed2, true) + ", tempo: " + (System.nanoTime() - startTime) / 1000); startTime = System.nanoTime(); HashSet<Actor> seed1 = new GreedyIC(g).escolher(10); - System.out.println("GeneralGreedy = " + g.espectedSpread(seed1, true) - + ", tempo: " + (System.nanoTime() - startTime) / 1000); + System.out.println("GeneralGreedy = " + g.espectedSpread(seed1, true) + ", tempo: " + + (System.nanoTime() - startTime) / 1000); } } diff --git a/src/algoritmos/PrevalentSeed.java b/src/algoritmos/PrevalentSeed.java index f368691966085802a0053f1ceacae874640ac8ae..a2472f028082fad7dbf7f3513640777948f55547 100644 --- a/src/algoritmos/PrevalentSeed.java +++ b/src/algoritmos/PrevalentSeed.java @@ -2,7 +2,6 @@ package algoritmos; import java.util.HashSet; import java.util.PriorityQueue; -import java.util.Random; import java.util.Set; import util.ComparaPorGrau; @@ -10,10 +9,10 @@ import util.ComparaPorGrau; import com.google.common.collect.MinMaxPriorityQueue; import algoritmos.MarginalGain; -import geradores.SocialNetworkGenerate; import grafos.Actor; import grafos.DirectedSocialNetwork; import interfaces.SeedChooser; +import readgraph.GraphReader; /*De acordo com os experimentos, utilizando o CELF como subrotina * dentro do conjunto dominante obtem-se um resultado semelhante @@ -26,7 +25,6 @@ public class PrevalentSeed implements SeedChooser<Actor> { private int cont; // número de chamadas a sigma private double[] spreadData; // histograma da propagação esperada private double[] callData; - public PrevalentSeed(DirectedSocialNetwork g) { this.grafo = g; @@ -35,10 +33,9 @@ public class PrevalentSeed implements SeedChooser<Actor> { public HashSet<Actor> preSelecao(DirectedSocialNetwork grafo) { int n = grafo.vertexSet().size(); - // DS <-- {} HashSet<Actor> candidatos = new HashSet<>(); - // compare os vertices pelo grau + // comparador de vertices pelo grau ComparaPorGrau comp = new ComparaPorGrau(grafo); MinMaxPriorityQueue<Actor> heapMinMax = null; @@ -94,11 +91,11 @@ public class PrevalentSeed implements SeedChooser<Actor> { public HashSet<Actor> escolher(int k) { HashSet<Actor> semente = new HashSet<Actor>(); HashSet<Actor> candidatos = new HashSet<Actor>(); - spreadData = new double[k+1]; - callData = new double[k+1]; + spreadData = new double[k + 1]; + callData = new double[k + 1]; candidatos = preSelecaoOriginal(grafo); -// System.out.println("|C| = "+candidatos.size()); + System.out.println("|C| = " + candidatos.size()); if (candidatos.size() < k) { System.out.println("Erro: o cojunto de candidatos é menor que K"); @@ -123,8 +120,7 @@ public class PrevalentSeed implements SeedChooser<Actor> { if (max.isValid() == true) { semente.add(max.getVertice()); maxSpread = maxSpread + max.getGain(); - System.out.println(semente.size()+"\t"+maxSpread); -// callData[semente.size()] = cont; +// System.out.println(semente.size() + "\t" + maxSpread); spreadData[semente.size()] = maxSpread; break; } else { @@ -137,70 +133,27 @@ public class PrevalentSeed implements SeedChooser<Actor> { } } } - System.out.println("chamadas: "+cont); + System.out.println("Chamadas: " + cont); + System.out.println("Chamadas depois da 1a iteracao: " + (cont - candidatos.size())); return semente; } - - public int callToSigma(){ + + public int callToSigma() { return this.cont; } - public double[] getSpreadData(){ + + public double[] getSpreadData() { return this.spreadData; } - - public double[] getCallData(){ - return this.callData; - } - - public HashSet<Actor> toFile(int k) { - HashSet<Actor> semente = new HashSet<Actor>(); - HashSet<Actor> candidatos = new HashSet<Actor>(); - cont = 0; - - candidatos = preSelecaoOriginal(grafo); -// System.out.println("|C| = "+candidatos.size()); - - if (candidatos.size() < k) { - System.out.println("Erro: o cojunto de candidatos é menor que K"); - return null; - } - - // create priority queue of all nodes, with marginal gain delta +inf - PriorityQueue<MarginalGain> fila = priorityQueueOfGains(candidatos); - - double maxSpread = 0; - - while (semente.size() < k) { - // set all gains invalid - for (MarginalGain mg : fila) { - mg.setValid(false); - } - while (true) { - MarginalGain max = fila.poll(); - if (max.isValid() == true) { - semente.add(max.getVertice()); - maxSpread = maxSpread + max.getGain(); - System.out.println(semente.size()+"\t"+maxSpread); - break; - } else { - double sigma = cascata(max.getVertice(), semente); - double delta = sigma - maxSpread; - max.setGain(delta); - max.setValid(true); - fila.add(max); - cont++; // Conta o numero de chamadas à sigma - } - } - } - System.out.println("chamadas: "+cont); - return semente; + public double[] getCallData() { + return this.callData; } public HashSet<Actor> escolher2(int k) { HashSet<Actor> semente = new HashSet<Actor>(); HashSet<Actor> minSet = new HashSet<Actor>(); - cont=0; + cont = 0; MinDominatingSet ds = new MinDominatingSet(); minSet = ds.fastGreedy2(grafo); @@ -227,7 +180,7 @@ public class PrevalentSeed implements SeedChooser<Actor> { if (max.isValid() == true) { semente.add(max.getVertice()); MaxSpread = MaxSpread + max.getGain(); - System.out.println("|S| = "+semente.size()+", |A| = "+MaxSpread); + System.out.println("|S| = " + semente.size() + ", |A| = " + MaxSpread); break; } else { double sigma = cascata(max.getVertice(), semente); @@ -239,7 +192,7 @@ public class PrevalentSeed implements SeedChooser<Actor> { } } } - System.out.println("chamadas: "+cont); + System.out.println("chamadas: " + cont); return semente; } @@ -313,35 +266,60 @@ public class PrevalentSeed implements SeedChooser<Actor> { } public static void main(String[] args) { - DirectedSocialNetwork g = new SocialNetworkGenerate().gerarGrafo(2000, 2.5); - System.out.println("|V(G)| = " + g.vertexSet().size()); - long startTime = 0; - startTime = System.nanoTime(); - HashSet<Actor> seed = new PrevalentSeed(g).escolher2(15); - System.out.println("Tempo: " + (System.nanoTime() - startTime) / 1000); - - HashSet<Actor> ativos = g.indepCascadeDiffusion(seed); - - // System.out.println("|S| = " + seed.size()); - System.out.println("|A| = " + ativos.size()); - g.deactivate(ativos); - // g.activate(seed); - // g.visualize(); - - startTime = System.nanoTime(); - HashSet<Actor> seed2 = new PrevalentSeed(g).escolher(15); - System.out.println("Tempo: " + (System.nanoTime() - startTime) / 1000); - - HashSet<Actor> ativos2 = g.indepCascadeDiffusion(seed2); - // System.out.println("\n|S| = " + seed2.size()); - System.out.println("|A| = " + ativos2.size()); - g.deactivate(ativos2); - - // HashSet<Actor> seed3 = new DominatingSeed(g).escolherRandom(15); - // - // HashSet<Actor> ativos3 = g.indepCascadeDiffusion(seed3); - //// System.out.println("\n|S| = " + seed3.size()); - // System.out.println("|A| = "+ativos3.size()); + /* + * DirectedSocialNetwork g = new + * SocialNetworkGenerate().gerarGrafo(2000, 2.5); + * System.out.println("|V(G)| = " + g.vertexSet().size()); long + * startTime = 0; startTime = System.nanoTime(); HashSet<Actor> seed = + * new PrevalentSeed(g).escolher2(15); System.out.println("Tempo: " + + * (System.nanoTime() - startTime) / 1000); + * + * HashSet<Actor> ativos = g.indepCascadeDiffusion(seed); + * + * // System.out.println("|S| = " + seed.size()); + * System.out.println("|A| = " + ativos.size()); g.deactivate(ativos); + * // g.activate(seed); // g.visualize(); + * + * startTime = System.nanoTime(); HashSet<Actor> seed2 = new + * PrevalentSeed(g).escolher(15); System.out.println("Tempo: " + + * (System.nanoTime() - startTime) / 1000); + * + * HashSet<Actor> ativos2 = g.indepCascadeDiffusion(seed2); // + * System.out.println("\n|S| = " + seed2.size()); + * System.out.println("|A| = " + ativos2.size()); g.deactivate(ativos2); + * + * // HashSet<Actor> seed3 = new DominatingSeed(g).escolherRandom(15); + * // // HashSet<Actor> ativos3 = g.indepCascadeDiffusion(seed3); //// + * System.out.println("\n|S| = " + seed3.size()); // + * System.out.println("|A| = "+ativos3.size()); + */ + + DirectedSocialNetwork g; + PrevalentSeed ps = new PrevalentSeed(null); + + System.out.println("enron.txt"); + g = new GraphReader().enron(); + System.out.println("|C| = " + ps.preSelecaoOriginal(g).size() + "\n"); + + System.out.println("epinions.txt"); + g = new GraphReader().readEpinions(); + System.out.println("|C| = " + ps.preSelecaoOriginal(g).size() + "\n"); + + System.out.println("dblp.txt"); + g = new GraphReader().readDblp(); + System.out.println("|C| = " + ps.preSelecaoOriginal(g).size() + "\n"); + + System.out.println("phy.txt"); + g = new GraphReader().readPhy(); + System.out.println("|C| = " + ps.preSelecaoOriginal(g).size() + "\n"); + + System.out.println("hep.txt"); + g = new GraphReader().readHep(); + System.out.println("|C| = " + ps.preSelecaoOriginal(g).size() + "\n"); + + System.out.println("amazon.txt"); + g = new GraphReader().amazon(); + System.out.println("|C| = " + ps.preSelecaoOriginal(g).size() + "\n"); } diff --git a/src/grafos/DirectedSocialNetwork.java b/src/grafos/DirectedSocialNetwork.java index 166a1a12dccc65ae339701de5d1b8af802b6cf59..b63e227ec2a59ecb95cd81cacf4983b18a402bcc 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 =100; + int repeticoes =500; if (!ic) { HashSet<Actor> ativados = linearThresholdDiffusion(seed); diff --git a/src/plot/MeuPlot.java b/src/plot/MeuPlot.java index 15eb0b02b7d4c58519036c295a0bde0a6d5182c1..6f8ec543d680d751eafc52dd0a8d15afbae86dc5 100644 --- a/src/plot/MeuPlot.java +++ b/src/plot/MeuPlot.java @@ -10,38 +10,38 @@ public class MeuPlot extends JGnuplot { // String output = null; // String beforeStyle="linewidth=4"; -// public void plotPropagacao(double[] x, double[] y1, double[] y2, double[] y3, double[] y4, String outDir){ -// double[] x2 = suavisalinhas(x); -// double[] z1 = suavisalinhas(y1); -// double[] z2 = suavisalinhas(y2); -// double[] z3 = suavisalinhas(y3); -// double[] z4 = suavisalinhas(y4); -// -// JGnuplot plot = new JGnuplot(); -// Plot plotPropagacao = new Plot("Propagação Esperada") { -// { -// xlabel = "'|S|'"; -// ylabel = "'sigma(S)'"; -// extra = "set key top left"; -// } -// }; -// -// DataTableSet dts = plotPropagacao.addNewDataTableSet("Propagação Esperada"); -// dts.addNewDataTable("PrevalentSeed", x2, z1); -// dts.addNewDataTable("CELF", x2, z2); -// dts.addNewDataTable("HighDegree", x2, z3); -// dts.addNewDataTable("RandomSeed", x2, z4); -// -// plotPropagacao.add(dts); -// String saida = outDir+"propagacao_esperada.plt"; -// plot.compile(plotPropagacao, plot.plot2d, saida); -// -//// this.terminal = "epslatex color colortext dashed"; -//// this.output = outDir+"propagacao.tex'"; -// this.terminal = "eps color dashed"; -// this.output = outDir+"propagacao.eps"; -// this.execute(plotPropagacao, this.plot2d); -// } + public void plotPropagacao(double[] x, double[] y1, double[] y2, double[] y3, double[] y4, String outDir){ + double[] x2 = suavisalinhas(x); + double[] z1 = suavisalinhas(y1); + double[] z2 = suavisalinhas(y2); + double[] z3 = suavisalinhas(y3); + double[] z4 = suavisalinhas(y4); + + JGnuplot plot = new JGnuplot(); + Plot plotPropagacao = new Plot("Propagação Esperada") { + { + xlabel = "'|S|'"; + ylabel = "'sigma(S)'"; + extra = "set key top left"; + } + }; + + DataTableSet dts = plotPropagacao.addNewDataTableSet("Propagação Esperada"); + dts.addNewDataTable("PrevalentSeed", x2, z1); + dts.addNewDataTable("CELF", x2, z2); + dts.addNewDataTable("HighDegree", x2, z3); + dts.addNewDataTable("RandomSeed", x2, z4); + + plotPropagacao.add(dts); + String saida = outDir+"propagacao_esperada.plt"; + plot.compile(plotPropagacao, plot.plot2d, saida); + +// this.terminal = "epslatex color colortext dashed"; +// this.output = outDir+"propagacao.tex'"; + this.terminal = "eps color dashed"; + this.output = outDir+"propagacao.eps"; + this.execute(plotPropagacao, this.plot2d); + } public void plotPropagacao(double[] x, double[] y1, double[] y2, String outDir){ double[] x2 = suavisalinhas(x); diff --git a/src/readgraph/GraphReader.java b/src/readgraph/GraphReader.java index d853657a429e59281d5de68aeb56bc2f013c186d..8b4c3e80e227825a912d4d5cbeddeba391fa86d9 100644 --- a/src/readgraph/GraphReader.java +++ b/src/readgraph/GraphReader.java @@ -87,9 +87,9 @@ public class GraphReader { // uniform IC model // return (double)10/100; -// return 0.001; +// return 0.025; // return Math.random()/4; - return 0.0025; + return 0.001; } public DirectedSocialNetwork readEpinions() { diff --git a/src/simulacao/Experimentacao.java b/src/simulacao/Experimentacao.java index 8d3e0a32cb0f87f010ec1d3361fbd08f5d26fddf..4bbbbdeb41af451884bce43af05176be461e6b97 100644 --- a/src/simulacao/Experimentacao.java +++ b/src/simulacao/Experimentacao.java @@ -1,11 +1,5 @@ package simulacao; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; - -import org.jgrapht.graph.DefaultWeightedEdge; - import algoritmos.HightDegree; import algoritmos.LazyGreedy; import algoritmos.PrevalentSeed; @@ -18,19 +12,23 @@ import readgraph.GraphReader; public class Experimentacao { public static void main(String[] args) { - int k = 50; -// sinteticGraphSimulate(k); + int k = 30; + sinteticGraphSimulate(k); //Simulações a serem feita com probabilidade 0.01 -// System.out.println("Simulaçoes realizadas para p = 0.025"); + //System.out.println("Simulaçoes realizadas para p = 0.025"); // System.out.println("Grafos: HEP, PHY e DBLP"); + //System.out.println("Grafos: AMAZON"); // simularHep(k); -// simularPhy(k); -// simularDblp(k); -// Simulações a serem feita com probabilidade 0.0025 - System.out.println("Simulaçoes realizadas para p = 0.0025"); - System.out.println("Grafos: ENRON e EPINIONS"); - simularEnron(k); - simularEpinions(k); + //simularPhy(k); + //simularAmazon(k); + + //Simulações a serem feita com probabilidade 0.0025 + //System.out.println("Simulaçoes realizadas para p = 0.0025"); + //System.out.println("Grafos: ENRON e EPINIONS"); + //System.out.println("Grafos: Epinions"); + //simularEnron(k); + //simularEpinions(k); + //simularDblp(k); } private static void simularHep(int k) { @@ -55,7 +53,6 @@ public class Experimentacao { monteCarloSimulation(g, out, k); } - private static void simularDblp(int k) { System.out.println("dblp.txt"); DirectedSocialNetwork g; @@ -158,7 +155,7 @@ public class Experimentacao { private static void sinteticGraphSimulate(int k) { int n = 2; - while (n <= 64) { + while (n <= 16) { String out = "plots/rand/" + n + "/"; sinteticGraph(n, out, k); System.out.println("\t----------"); @@ -168,7 +165,7 @@ public class Experimentacao { /** * Faz um conjunto de simulações para grafos aleatórios de tamanho n e gera - * grafos com os resultados da simulação + * graficos com os resultados da simulação * * @param n * multiplo de 1000 para o tamanho dos grafos gerados @@ -184,53 +181,56 @@ public class Experimentacao { double[] spreadRS = new double[k + 1]; double[] mediaCelf = new double[k + 1], mediaPS = new double[k + 1], mediaHD = new double[k + 1], mediaRS = new double[k + 1]; + double timePS = 0, timeCelf = 0, timeHD = 0, timeRS = 0, time; double[] x; - int numSimulacoes = 10; + int numSimulacoes = 4; for (int i = 0; i < numSimulacoes; i++) { - DirectedSocialNetwork g = new SocialNetworkGenerate().gerarGrafo(n * 1000, 2.5); + DirectedSocialNetwork g = new SocialNetworkGenerate().gerarGrafo(n * 1000, 2); System.out.println("\nGrafo n. " + (i + 1)); mostrarTamanho(g); LazyGreedy celf = new LazyGreedy(g); System.out.println("#Celf"); + time = System.currentTimeMillis() * -1; celf.escolher(k); + time += System.currentTimeMillis(); spreadCelf = somaVetores(spreadCelf, celf.getSpreadData()); - // spreadCelf = celf.getSpreadData(); - // sigmaCalls2 = celf.getCallData(); - // for (int i = 0; i < spreadData2.length; i++) { - // System.out.println(i + "\t" + spreadData2[i]); - // } + timeCelf = timeCelf + (time / 1000.0f); PrevalentSeed ps = new PrevalentSeed(g); System.out.println("#PrevalentSeed"); + time = System.currentTimeMillis() * -1; ps.escolher(k); + time += System.currentTimeMillis(); spreadPS = somaVetores(spreadPS, ps.getSpreadData()); - // sigmaCalls = ps.getCallData(); - // for (int i = 0; i < spreadData1.length; i++) { - // System.out.println(i + "\t" + spreadData1[i]); - // } + timePS = timePS + (time / 1000.0f); // Testa a heuristica de grau HightDegree hd = new HightDegree(g); System.out.println("#HightDegree"); + time = System.currentTimeMillis() * -1; hd.escolher(k); + time += System.currentTimeMillis(); spreadHD = somaVetores(spreadHD, hd.getSpreadData()); - // for (int i = 0; i < spreadData3.length; i++) { - // System.out.println(i + "\t" + spreadData3[i]); - // } - + timeHD = timeHD + (time / 1000.0f); + // Testa a heurística semente aleatória RandomSeed rs = new RandomSeed(g); System.out.println("#RandomSeed"); + time = System.currentTimeMillis() * -1; rs.escolher(k); + time += System.currentTimeMillis(); spreadRS = somaVetores(spreadRS, rs.getSpreadData()); - // for (int i = 0; i < spreadData4.length; i++) { - // System.out.println(i + "\t" + spreadData4[i]); - // } + timeRS = timeRS + (time / 1000.0f); } + + System.out.println("Tempo Celf: "+timeCelf/numSimulacoes); + System.out.println("Tempo PrevalentSeed: "+timePS/numSimulacoes); + System.out.println("Tempo HighDegree: "+timeHD/numSimulacoes); + System.out.println("Tempo RandomSeed: "+timeRS/numSimulacoes); - // TODO tirar a média das 20 simulações e plotar a media + // tirar a média das 20 simulações e plotar a media for (int i = 0; i < spreadPS.length; i++) { mediaPS[i] = spreadPS[i] / numSimulacoes; mediaCelf[i] = spreadCelf[i] / numSimulacoes; @@ -240,7 +240,8 @@ public class Experimentacao { x = eixox(k + 1); // preenche o vetor do eixo x MeuPlot meuplot = new MeuPlot(); -// meuplot.plotPropagacao(x, mediaPS, mediaCelf, mediaHD, mediaRS, out); + meuplot.plotPropagacao(x, mediaPS, mediaCelf, mediaHD, mediaRS, out); +// meuplot.plotPropagacao(x, mediaPS, mediaCelf, out); // meuplot.plotChamadas(sigmaCalls, sigmaCalls2, "'"); }