diff --git a/cpp/switchchain_exponent_new.cpp b/cpp/switchchain_exponent_new.cpp deleted file mode 100644 index 3366283f49ba09c0512e994f03e0422951159d27..0000000000000000000000000000000000000000 --- a/cpp/switchchain_exponent_new.cpp +++ /dev/null @@ -1,112 +0,0 @@ -#include "exports.hpp" -#include "graph.hpp" -#include "graph_powerlaw.hpp" -#include "graph_spectrum.hpp" -#include "switchchain.hpp" -#include -#include -#include -#include -#include -#include - -int main(int argc, char* argv[]) { - // Simulation parameters - const int numVerticesMin = 20000; - const int numVerticesMax = 50000; - const int numVerticesStep = 10000; - - //float tauValues[] = {2.1f, 2.2f, 2.3f, 2.4f, 2.5f, 2.6f, 2.7f, 2.8f, 2.9f}; - float tauValues[] = {2.1f, 2.3f, 2.5f, 2.7f, 2.9f}; - - const int totalDegreeSamples = 1000; - - auto getMixingTime = [](int n, float tau) { - return int(50.0f * (50.0f - 30.0f * (tau - 2.0f)) * n); - }; - constexpr int measurements = 10; - constexpr int measureSkip = 1000; // Take a sample every ... steps - - // Output file - std::ofstream outfile; - if (argc >= 2) - outfile.open(argv[1]); - else - outfile.open("graphdata_exponent_new.m"); - if (!outfile.is_open()) { - std::cout << "ERROR: Could not open output file.\n"; - return 1; - } - - // Output Mathematica-style comment to indicate file contents - outfile << "(*\n"; - outfile << "n from " << numVerticesMin << " to " << numVerticesMax - << " step " << numVerticesStep << std::endl; - outfile << "tauValues: " << tauValues << std::endl; - outfile << "degreeSamples: " << totalDegreeSamples << std::endl; - outfile << "mixingTime: 50 * (50 - 30 (tau - 2)) n\n"; - outfile << "data:\n"; - outfile << "1: {n,tau}\n"; - outfile << "2: avgTriangles\n"; - outfile << "*)" << std::endl; - - // Mathematica does not accept normal scientific notation - outfile << std::fixed; - outfile << '{'; - bool outputComma = false; - - std::mt19937 rng(std::random_device{}()); - Graph g; - for (int numVertices = numVerticesMin; numVertices <= numVerticesMax; - numVertices += numVerticesStep) { - for (float tau : tauValues) { - // For a single n,tau take samples over several instances of - // the degree distribution. - for (int degreeSample = 0; degreeSample < totalDegreeSamples; - ++degreeSample) { - DegreeSequence ds; - generatePowerlawGraph(numVertices, tau, g, ds, rng); - - SwitchChain chain; - if (!chain.initialize(g)) { - std::cerr << "Could not initialize Markov chain.\n"; - return 1; - } - - std::cout << "Running (n,tau) = (" << numVertices << ',' - << tau << "). " << std::flush; - - // Mix - int mixingTime = getMixingTime(numVertices, tau); - for (int i = 0; i < mixingTime; ++i) { - chain.doMove(); - } - - std::cout << "Mixing done. " << std::flush; - - long long trianglesTotal = 0; - for (int i = 0; i < measurements; ++i) { - for (int j = 0; j < measureSkip; ++j) - chain.doMove(); - trianglesTotal += chain.g.countTriangles(); - } - float avgTriangles = - float(trianglesTotal) / float(measurements); - - std::cout << "Measuring done." << std::flush; - - if (outputComma) - outfile << ',' << '\n'; - outputComma = true; - - outfile << '{' << '{' << numVertices << ',' << tau << '}'; - outfile << ',' << avgTriangles; - outfile << '}' << std::flush; - - std::cout << "Output done." << std::endl; - } - } - } - outfile << '}'; - return 0; -}