Files
@ eba8261885e8
Branch filter:
Location: AENC/switchchain/cpp/switchchain_canonical_timeevol.cpp - annotation
eba8261885e8
2.7 KiB
text/x-c++src
Change trimeevol plot for thesis
2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 2ba81931a724 | #include "exports.hpp"
#include "graph.hpp"
#include "graph_powerlaw.hpp"
#include "graph_spectrum.hpp"
#include "histogram.hpp"
#include "switchchain.hpp"
#include <algorithm>
#include <fstream>
#include <iostream>
#include <numeric>
#include <random>
#include <vector>
int main(int argc, char* argv[]) {
// Simulation parameters
const int numVerticesMin = 1000;
const int numVerticesMax = 1000;
const int numVerticesStep = 1000;
float tauValues[] = {2.1f, 2.3f, 2.5f, 2.7f, 2.9f};
auto getMeasurements = [](int n, float tau) {
(void)n;
(void)tau;
return 50000;
};
// Output file
std::ofstream outfile;
if (argc >= 2)
outfile.open(argv[1]);
else
outfile.open("graphdata_canonical_timeevol.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 << "Canonical degree sequence.\n";
outfile << "10 runs per starting point.\n";
outfile << "Measurements: 50000\n";
outfile << "data:\n";
outfile << "1: {n,tau}\n";
outfile << "2: {triangles}\n";
outfile << "*)" << std::endl;
// Mathematica does not accept normal scientific notation
outfile << std::fixed;
outfile << '{' << '\n';
bool outputComma = false;
SwitchChain chain;
Graph g;
for (int numVertices = numVerticesMin; numVertices <= numVerticesMax;
numVertices += numVerticesStep) {
for (float tau : tauValues) {
DegreeSequence ds;
generateCanonicalPowerlawGraph(numVertices, tau, g, ds);
std::cout << "Running (n,tau) = (" << numVertices << ',' << tau
<< "). " << std::flush;
for (int j = 0; j < 10; ++j) {
std::vector<int> triangles;
chain.initialize(g, true);
int measurements = getMeasurements(numVertices, tau);
for (int i = 0; i < measurements; ++i) {
chain.doMove(true);
triangles.push_back(chain.g.getTrackedTriangles());
}
if (outputComma)
outfile << ',' << '\n';
outputComma = true;
outfile << '{' << '{' << numVertices << ',' << tau << '}';
outfile << ',' << triangles;
outfile << '}' << std::flush;
}
std::cout << std::endl;
}
}
outfile << '\n' << '}';
return 0;
}
|