def run_experiment_areas_size_diff(self, number_of_iterations, number_of_partitions, s, grid_base_size=5, remove_off=False): smallest_areas_diff = float("inf") grid_to_draw = None for i in range(number_of_iterations): print('ITERATION', i + 1) grid = Grid(show_progress=False) grid.load_image(self.grid_name, remove_off=remove_off) grid.reduce_areas() grid.reduce_by_lam(number_of_partitions, draw_steps=False) grid.create_partitions() grid.fully_restore_with_partitions_improvement(p=0.3) grid.remove_noises() max_area, min_area = grid.get_highest_and_smallest_partition() diff = max_area - min_area if diff < smallest_areas_diff: cut_size = grid._get_cut_size() print('CUT_SIZE:', cut_size) print('DIFF:', diff) smallest_areas_diff = diff grid_to_draw = grid grid_to_draw.draw_initial_grid(p=1, s=s, base_size=grid_base_size) grid_to_draw.draw_partitioned_grid(p=1, s=s, base_size=grid_base_size) grid_to_draw.print_areas_stats()
def run_experiment_areas_size_std(self, number_of_iterations, number_of_partitions, s, grid_base_size=5, remove_off=False): min_std = float("inf") grid_to_draw = None for i in range(number_of_iterations): print('ITERATION', i + 1) grid = Grid(show_progress=False) grid.load_image(self.grid_name, remove_off=remove_off) grid.reduce_areas() grid.reduce_by_lam(number_of_partitions, draw_steps=False) grid.create_partitions() grid.fully_restore_with_partitions_improvement(p=0.3) grid.remove_noises() std = numpy.std(numpy.array(list(grid.partitions_stats.values()))) if std < min_std: cut_size = grid._get_cut_size() print('CUT_SIZE:', cut_size) print('STD:', std) min_std = std grid_to_draw = grid grid_to_draw.draw_initial_grid(p=1, s=s, base_size=grid_base_size) grid_to_draw.draw_partitioned_grid(p=1, s=s, base_size=grid_base_size) grid_to_draw.print_areas_stats()
def partition_for_computations(self, number_of_cores, number_of_nodes, s, p=1, show_progress=False, grid_base_size=5, remove_off=False): grid1 = Grid(show_progress=show_progress) grid1.load_image(self.grid_name, remove_off=remove_off) # grid1.draw_initial_grid(p, s) grid1.reduce_areas() grid1.reduce_by_lam(number_of_cores * number_of_nodes) grid1.create_partitions() grid1.fully_restore_with_partitions_improvement(0.5) grid1.remove_noises() # grid1.draw_partitioned_grid(p, s, base_size=grid_base_size) compact_G = grid1.create_compact_graph() nodes_partitioner = NodesPartitioner(show_progress=show_progress) nodes_partitioner.load_partitioned_graph_object( compact_G=compact_G, number_of_partitions=number_of_nodes * number_of_cores) partitions = nodes_partitioner.get_equal_partitioning_by_lam( number_of_nodes) print(partitions) grid1.load_new_partitions(partitions) grid1.fully_restore() # grid1.print_areas_stats() grid1.draw_partitioned_grid(p, s, base_size=grid_base_size) grid1.print_areas_stats()
def normal_partitioning(self, number_of_partitions, s, p=1, grid_base_size=5, show_progress=False, remove_off=False): grid = Grid(show_progress=show_progress) grid.load_image(self.grid_name, remove_off=remove_off) grid.draw_initial_grid(p, s, optimized=False) start = time.time() grid.reduce_areas() grid.reduce_by_lam(number_of_partitions, draw_steps=False) grid.create_partitions() grid.print_areas_stats() grid._draw_one_step_of_restoration(p, s) grid.fully_restore_with_partitions_improvement(0.2) grid.print_execution_times() print(time.time() - start) grid.remove_noises() grid.print_areas_stats() grid.draw_partitioned_grid(p, s, base_size=grid_base_size)