in src/qbsolv_community.py [0:0]
def run_community_detection(self, save=False):
"""
Call QUBO classical/hybrid solver for community detection and save results
:param save: boolean, True or False to set whether to save results locally or not
:return: dict, two dictionaries: the first one 'results_graph' contains graph-level results about graph, qbsolv seetings, modularity values,
and execution time; the second one 'track' contains node-level results about graph edge connections and community assignment.
"""
results_graph = collections.defaultdict(list)
timenow = str(datetime.datetime.now())[:19].replace(' ', '_')
date_today = str(datetime.date.today())
track = {'graphs': [], 'responses': [], 'communities': []}
output_parent = f'./output/{date_today}'
result_file = f"result_{self.graph_name}_{timenow}_sl{self.solver_limit}_rp{self.num_repeats}_shot{self.num_reads}_seed{self.seed}.csv"
if save and (not os.path.exists(output_parent)):
print(f'Creating parent folder(s): {output_parent}')
print('Will create required sub-directories quietly')
os.makedirs(output_parent)
# run QBSolv for community detection
comm_results, response, time_spent = self._solve_single_graph()
print(f"Modularity from QBSolv with {comm_results['num_comm']} communities is {round(comm_results['modularity'], 4)}")
# Save graph information
results_graph['graph_name'].append(self.graph_name)
results_graph['total_nodes'].append(self.graph.number_of_nodes())
results_graph['num_edge'].append(self.graph.number_of_edges())
results_graph['num_comm'].append(self.num_comm)
# Save results from qbsolv
results_graph['modu_qbsolv'].append(comm_results['modularity'])
results_graph['num_comm_qbsolv'].append(comm_results['num_comm'])
results_graph['wall_time_s'].append(time_spent)
results_graph['solver_limit'].append(self.solver_limit)
results_graph['num_repeats'].append(self.num_repeats)
results_graph['num_reads'].append(self.num_reads)
results_graph['seed'].append(self.seed)
results_graph['alpha'].append(self.alpha)
results_graph['mode'].append(self.mode)
results_graph['s3_folder'].append(self.s3_folder)
graph_file = f"graph_{self.graph_name}_QBS_sl{self.solver_limit}_rp{self.num_repeats}_shot{self.num_reads}_seed{self.seed}.gpickle"
response_file = f"response_{self.graph_name}_QBS_sl{self.solver_limit}_rp{self.num_repeats}_shot{self.num_reads}_seed{self.seed}.p"
comm_file = f"modu_{self.graph_name}_QBS_sl{self.solver_limit}_rp{self.num_repeats}_shot{self.num_reads}_seed{self.seed}.p"
track['graphs'].append((graph_file, deepcopy(self.graph)))
track['responses'].append((response_file, deepcopy(response)))
track['communities'].append((comm_file, deepcopy(comm_results)))
if save:
self._save_results(track, results_graph, output_parent, result_file)
return results_graph, track