diff --git a/cpp/switchchain_canonical_mixingtime.cpp b/cpp/switchchain_canonical_mixingtime.cpp index cfd5fe08e37e6db0bba97084220234f33facc37b..77d47dd39c6ae922e1b1a0b9f80c7e50052101a0 100644 --- a/cpp/switchchain_canonical_mixingtime.cpp +++ b/cpp/switchchain_canonical_mixingtime.cpp @@ -2,6 +2,7 @@ #include "graph.hpp" #include "graph_powerlaw.hpp" #include "graph_spectrum.hpp" +#include "histogram.hpp" #include "switchchain.hpp" #include #include @@ -12,19 +13,21 @@ int main(int argc, char* argv[]) { // Simulation parameters - const int numVerticesMin = 200; - const int numVerticesMax = 1000; - const int numVerticesStep = 200; + const int numVerticesMin = 2000; + const int numVerticesMax = 5000; + const int numVerticesStep = 1000; float tauValues[] = {2.1f, 2.3f, 2.5f, 2.7f, 2.9f}; + const int sampleRuns = 100000; + auto getMixingTime = [](int n, float tau) { return int(50.0f * (50.0f - 5.0f * (tau - 2.0f)) * n); }; auto getMeasurements = [](int n, float tau) { (void)n; (void)tau; - return 10000; + return 100000; }; auto getMeasureSkip = [](int n, float tau) { (void)tau; @@ -48,17 +51,16 @@ int main(int argc, char* argv[]) { << " step " << numVerticesStep << std::endl; outfile << "tauValues: " << tauValues << std::endl; outfile << "Canonical degree sequence.\n"; - outfile << "max time: 20 n\n"; - outfile << "samples per time: 1000\n"; - outfile << "time skip: n\n"; + outfile << "sample runs: " << sampleRuns << std::endl; + outfile << "time stamps: {0.1 n, 0.2 n, ... , 20.0 n}\n"; outfile << "For uniform samples:\n"; outfile << "mixingTime: 50 * (50 - 5 (tau - 2)) n\n"; - outfile << "measurements: 10000\n"; + outfile << "measurements: 100000\n"; outfile << "measureSkip: 30 n\n"; outfile << "data:\n"; outfile << "1: {n,tau}\n"; - outfile << "2: { {timestamp 1, {samples}}, {timestamp 2, {samples}} }\n"; - outfile << "3: {uniform samples}}\n"; + outfile << "2: { {timestamp 1, {histogram}}, {timestamp 2, {histogram}} }\n"; + outfile << "3: {uniform histogram}\n"; outfile << "*)" << std::endl; // Mathematica does not accept normal scientific notation @@ -100,19 +102,18 @@ int main(int argc, char* argv[]) { } outfile << '}'; #else - std::vector>> samples; - for (int maxTime = numVertices; maxTime <= 20 * numVertices; - maxTime += numVertices) { - samples.push_back(make_pair(maxTime, std::vector())); + std::vector> samples; + for (int i = 1; i <= 200; i++) { + samples.push_back({(i * numVertices / 10), Histogram()}); } - for (int sample = 0; sample < 5000; ++sample) { + for (int sample = 0; sample < 100000; ++sample) { chain.initialize(g, true); int curTime = 0; for (auto &piv : samples) { for (; curTime < piv.first; ++curTime) chain.doMove(true); - piv.second.push_back(chain.g.getTrackedTriangles()); + piv.second.add(chain.g.getTrackedTriangles()); } } outfile << ',' << samples; @@ -128,11 +129,11 @@ int main(int argc, char* argv[]) { chain.g.getTrackedTriangles() = chain.g.countTriangles(); int measurements = getMeasurements(numVertices, tau); int measureSkip = getMeasureSkip(numVertices, tau); - std::vector usamples; + Histogram usamples; for (int i = 0; i < measurements; ++i) { for (int j = 0; j < measureSkip; ++j) chain.doMove(true); - usamples.push_back(chain.g.getTrackedTriangles()); + usamples.add(chain.g.getTrackedTriangles()); } outfile << ',' << usamples; outfile << '}' << std::flush;