def plot_graph_using_guessed_statespace(self, pylab, # @UnusedVariable plan2color=None, plan2label=None, cmap=None, origin=None, show_plan=None): ss = guess_state_space(self.id_dds, self.dds) def plan2xy(plan): commands = self.dds.indices_to_commands(plan) state = ss.state_from_commands(commands, start=origin) xy = ss.xy_from_state(state) return 5 * xy if show_plan is not None: points = [] for i in range(len(show_plan)): partial = show_plan[:i] points.append(plan2xy(partial)) points = np.array(points).T pylab.plot(points[0], points[1], 'r-') if plan2color is None: plan2color = lambda plan: [0, 0, 0] # @UnusedVariable if plan2label is None: plan2label = lambda plan: '' # @UnusedVariable nodes = list(self.G.nodes()) pos = dict((n, plan2xy(n)) for n in nodes) all_positions = map(tuple, pos.values()) node_color = map(plan2color, nodes) labels = dict((n, plan2label(n)) for n in self.G) if False: if len(all_positions) != len(set(all_positions)): print('Warning, overlapping nodes') y = collections.Counter(all_positions) for p, num in y.items(): if num > 1: print('- %d for %s' % (num, p)) for node, node_pos in pos.items(): if tuple(node_pos) == p: print(' - %s ' % str(node)) nx.draw_networkx(self.G, with_labels=True, pos=pos, labels=labels, node_color=node_color, cmap=cmap)
def plan_report(self, report, result, tc): """ We pass the testcase structure, so we can use the ground truth (if available) to make a nicer visualization. """ from matplotlib.cm import get_cmap f = report.figure(cols=3) plan2length = lambda x: len(x) cmap_start = get_cmap('bones') cmap_goal = get_cmap('jet') def distance_to(tree, y, node): image = tree.plan2image(node) return self.metric_goal.distance(image, y) from functools import partial start_dist_y0 = partial(distance_to, self.start_tree, self.y0) goal_dist_y0 = partial(distance_to, self.goal_tree, self.y0) start_dist_y1 = partial(distance_to, self.start_tree, self.y1) goal_dist_y1 = partial(distance_to, self.goal_tree, self.y1) if result.success: # Plot the distance as a function of step steps = plan_steps(result.plan) # (), (0,) (0, 1), etc. distance_to_y0 = map(start_dist_y0, steps) distance_to_y1 = map(start_dist_y1, steps) with f.plot('distances_along_path') as pylab: lenghts = map(len, steps) pylab.plot(lenghts, distance_to_y0, 'r-', label='to $y_0$') pylab.plot(lenghts, distance_to_y1, 'b-', label='to $y_1$') pylab.xlabel('subplan length') pylab.legend() with f.plot('start_tree') as pylab: self.start_tree.plot_graph_using_guessed_statespace( pylab, plan2color=plan2length, cmap=cmap_start, show_plan=tc.true_plan) pylab.title('plan length') turn_all_axes_off(pylab) pylab.colorbar() with f.plot('goal_tree') as pylab: self.goal_tree.plot_graph_using_guessed_statespace( pylab, plan2color=plan2length, cmap=cmap_goal) pylab.title('plan length') turn_all_axes_off(pylab) pylab.colorbar() true_plan = tc.true_plan ss = guess_state_space(self.id_dds, self._dds) u0 = self.get_dds().indices_to_commands(true_plan) origin = ss.state_from_commands(u0) with f.plot('joint') as pylab: self.start_tree.plot_graph_using_guessed_statespace( pylab, plan2color=plan2length, cmap=cmap_start) self.goal_tree.plot_graph_using_guessed_statespace( pylab, plan2color=plan2length, cmap=cmap_goal, origin=origin) turn_all_axes_off(pylab) pylab.colorbar() with f.plot('start_tree_y0') as pylab: self.start_tree.plot_graph_using_guessed_statespace( pylab, plan2color=start_dist_y0, cmap=cmap_start) pylab.title('distance to $y_0$') turn_all_axes_off(pylab) pylab.colorbar() with f.plot('goal_tree_y0') as pylab: self.goal_tree.plot_graph_using_guessed_statespace( pylab, plan2color=goal_dist_y0, cmap=cmap_goal, origin=origin) pylab.title('distance to y_0') turn_all_axes_off(pylab) pylab.colorbar() with f.plot('joint_y0') as pylab: self.start_tree.plot_graph_using_guessed_statespace( pylab, plan2color=start_dist_y0, cmap=cmap_start) self.goal_tree.plot_graph_using_guessed_statespace( pylab, plan2color=goal_dist_y0, cmap=cmap_goal, origin=origin) turn_all_axes_off(pylab) pylab.colorbar() with f.plot('start_tree_y1') as pylab: self.start_tree.plot_graph_using_guessed_statespace( pylab, plan2color=start_dist_y1, cmap=cmap_start) pylab.title('distance to $y_1$') turn_all_axes_off(pylab) pylab.colorbar() with f.plot('goal_tree_y1') as pylab: self.goal_tree.plot_graph_using_guessed_statespace( pylab, plan2color=goal_dist_y1, cmap=cmap_goal) pylab.title('distance to y_1') turn_all_axes_off(pylab) pylab.colorbar() with f.plot('joint_y1') as pylab: self.start_tree.plot_graph_using_guessed_statespace( pylab, plan2color=start_dist_y1, cmap=cmap_start) self.goal_tree.plot_graph_using_guessed_statespace( pylab, plan2color=goal_dist_y1, cmap=cmap_goal, origin=origin) turn_all_axes_off(pylab) pylab.colorbar()
def draw_graph(self, r): def label_plan_length(n): return len(n) open_nodes = set(self.open_nodes) def label_child_open(n): # number of children in the open list children = self.G[n] return len(set(children) & open_nodes) ss = guess_state_space(self.id_dds, self.dds) def point_func(plan): commands = self.dds.indices_to_commands(plan) state = ss.state_from_commands(commands) xy = ss.xy_from_state(state) return 5 * xy f = r.figure(cols=2) nolabel = lambda _: '' with f.data_file('planlength', MIME_PNG) as filename: draw_node_graph(filename=filename, G=self.G, pos_func=point_func, # label_func=label_plan_length, label_func=nolabel, color_func=label_plan_length) with f.data_file('nchildopen', MIME_PNG) as filename: draw_node_graph(filename=filename, G=self.G, pos_func=point_func, # label_func=label_child_open, label_func=nolabel, color_func=label_child_open) with f.data_file('info', MIME_PNG) as filename: draw_node_graph(filename=filename, G=self.G, pos_func=point_func, # label_func=lambda x: '%.2f' % self.visibility(x), label_func=nolabel, color_func=self.visibility) with f.plot('visible') as pylab: v = map(self.visibility, self.G) pylab.hist(v, 100) with r.subsection('embedding') as s: self.draw_embeddings(s) all_plans = list(self.G.nodes()) random.shuffle(all_plans) random_plans = all_plans[:3] for pi, ref_plan in enumerate(random_plans): color_func = lambda p2: self.plan_distance(ref_plan, p2) # diffeoaction_distance_L2_infow) name = 'random%d' % pi with f.data_file(name, MIME_PNG) as filename: draw_node_graph(filename=filename, G=self.G, pos_func=point_func, # label_func=lambda x: '%.2f' % self.visibility(x), label_func=nolabel, color_func=color_func)
def draw_graph(self, r): def label_plan_length(n): return len(n) open_nodes = set(self.open_nodes) def label_child_open(n): # number of children in the open list children = self.G[n] return len(set(children) & open_nodes) ss = guess_state_space(self.id_dds, self.dds) def point_func(plan): commands = self.dds.indices_to_commands(plan) state = ss.state_from_commands(commands) xy = ss.xy_from_state(state) return 5 * xy f = r.figure(cols=2) nolabel = lambda _: '' with f.data_file('planlength', MIME_PNG) as filename: draw_node_graph( filename=filename, G=self.G, pos_func=point_func, # label_func=label_plan_length, label_func=nolabel, color_func=label_plan_length) with f.data_file('nchildopen', MIME_PNG) as filename: draw_node_graph( filename=filename, G=self.G, pos_func=point_func, # label_func=label_child_open, label_func=nolabel, color_func=label_child_open) with f.data_file('info', MIME_PNG) as filename: draw_node_graph( filename=filename, G=self.G, pos_func=point_func, # label_func=lambda x: '%.2f' % self.visibility(x), label_func=nolabel, color_func=self.visibility) with f.plot('visible') as pylab: v = map(self.visibility, self.G) pylab.hist(v, 100) with r.subsection('embedding') as s: self.draw_embeddings(s) all_plans = list(self.G.nodes()) random.shuffle(all_plans) random_plans = all_plans[:3] for pi, ref_plan in enumerate(random_plans): color_func = lambda p2: self.plan_distance( ref_plan, p2, diffeoaction_distance_L2_infow) name = 'random%d' % pi with f.data_file(name, MIME_PNG) as filename: draw_node_graph( filename=filename, G=self.G, pos_func=point_func, # label_func=lambda x: '%.2f' % self.visibility(x), label_func=nolabel, color_func=color_func)