mirror of
https://github.com/Jaxan/hybrid-ads.git
synced 2025-04-27 06:57:44 +02:00
Adds script I use to parse/accumulate data for a learning plot
This commit is contained in:
parent
23ec2c94c5
commit
7ea3593588
1 changed files with 81 additions and 0 deletions
81
src/scatter_plot.cpp
Normal file
81
src/scatter_plot.cpp
Normal file
|
@ -0,0 +1,81 @@
|
|||
#include <docopt.h>
|
||||
|
||||
#include <cstdint>
|
||||
#include <cmath>
|
||||
#include <fstream>
|
||||
#include <future>
|
||||
#include <iostream>
|
||||
#include <stdexcept>
|
||||
#include <vector>
|
||||
|
||||
using namespace std;
|
||||
|
||||
static const char USAGE[] =
|
||||
R"(Generate a statistical learning graph from multiple runs
|
||||
|
||||
Usage:
|
||||
learning_graph <file> ...
|
||||
|
||||
Options:
|
||||
-h, --help Show this screen
|
||||
--version Show version
|
||||
)";
|
||||
|
||||
struct datapoint {
|
||||
uint64_t states;
|
||||
uint64_t learning_queries;
|
||||
uint64_t learning_inputs;
|
||||
uint64_t testing_queries;
|
||||
uint64_t testing_inputs;
|
||||
};
|
||||
|
||||
using dataset = vector<datapoint>;
|
||||
|
||||
static void accumulate_dataset(dataset & ds) {
|
||||
for (size_t i = 0; i < ds.size() - 1; ++i) {
|
||||
ds[i + 1].learning_queries += ds[i].learning_queries;
|
||||
ds[i + 1].learning_inputs += ds[i].learning_inputs;
|
||||
ds[i + 1].testing_queries += ds[i].testing_queries;
|
||||
ds[i + 1].testing_inputs += ds[i].testing_inputs;
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char * argv[]) {
|
||||
const auto args = docopt::docopt(USAGE, {argv + 1, argv + argc}, true, __DATE__ __TIME__);
|
||||
|
||||
vector<future<dataset>> dataset_futures;
|
||||
for (auto const & filename : args.at("<file>").asStringList()) {
|
||||
dataset_futures.emplace_back(async([filename] {
|
||||
fstream file(filename);
|
||||
if (!file) throw runtime_error("Could not open file " + filename);
|
||||
|
||||
dataset s;
|
||||
datapoint p;
|
||||
while (file >> p.states >> p.learning_queries >> p.learning_inputs >> p.testing_queries
|
||||
>> p.testing_inputs) {
|
||||
s.push_back(p);
|
||||
}
|
||||
|
||||
accumulate_dataset(s);
|
||||
|
||||
return s;
|
||||
}));
|
||||
}
|
||||
|
||||
vector<dataset> datasets;
|
||||
clog << "datasets";
|
||||
for (auto & f : dataset_futures) {
|
||||
datasets.emplace_back(f.get());
|
||||
clog << ' ' << datasets.back().size();
|
||||
if (datasets.back().size() == 0) throw runtime_error("empty dataset");
|
||||
}
|
||||
clog << endl;
|
||||
|
||||
for (auto const & set : datasets) {
|
||||
for (auto const & p : set) {
|
||||
const auto v
|
||||
= p.learning_queries + p.learning_inputs + p.testing_queries + p.testing_inputs;
|
||||
cout << p.states << '\t' << v << endl;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue