From b334559cd0f76d3cf2b7d500c5c052c59e24da66 Mon Sep 17 00:00:00 2001 From: Aiden Woodruff Date: Thu, 23 Oct 2025 17:39:32 -0400 Subject: experiment starter and skeleton - main.cc (main): add experimental group size variable. - (name_game): construct complete graph with some commited minority. - add comments for other steps. Signed-off-by: Aiden Woodruff --- src/main.cc | 50 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/main.cc b/src/main.cc index 0c1177d..467c1ad 100644 --- a/src/main.cc +++ b/src/main.cc @@ -1,9 +1,55 @@ +#include #include +#include #include +void name_game(int group_size, int cmsize); + int main(int argc, char* argv[]) { - PNGraph g = TNGraph::New(); - g = TNGraph::New(); + int group_size = 100; + for (int cmperc = 18; cmperc < 28; cmperc += 2) { + int cmsize = group_size * cmperc / 100; + std::cout << "CM " << cmsize << " / " << group_size << std::endl; + name_game(group_size, cmsize); + } return 0; } + +// SNAP random chooses node, r is used to select one edge +template +typename TNodeNet::TEdgeI random_edge(const TNodeNet& g, int r) { + auto ni = g.GetRndNI(); + return g.GetEI(ni.GetId(), ni.GetNbrNId(r % ni.GetDeg())); +} + +void name_game(int group_size, int cmsize) { + assert(cmsize > 0 && group_size > 0); + assert(cmsize < group_size); + TNodeNet> graph; + // Generate complete graph. + for (int i = 0; i < group_size; ++i) graph.AddNode(i, {false, {}}); + for (int i = 0; i < group_size; ++i) + for (int j = 0; j < group_size; ++j) + if (i != j) graph.AddEdge(i, j); + // Set committed minority. + std::mt19937 rnd(std::random_device{}()); + std::uniform_int_distribution dist(0, group_size - 1); + for (int i = 0; i < cmsize;) { + int r = dist(rnd); + if (!graph.GetNDat(r).Val1) { + graph.GetNDat(r).Val1 = true; + ++i; + } + } + std::cout << "Nodes: " << graph.GetNodes() + << " Edges: " << graph.GetEdges() << std::endl; + + // Select random edge. + // Speaker chooses best strategy. + // Listener updates memory. + // Listener chooses best strategy. + // Speaker updates memory. + // Track all plays and plays by non-CM. + // Report average plays. +} -- cgit