From d0c0619f268459e3fc91ebf34574c73869d4a5a9 Mon Sep 17 00:00:00 2001 From: Erik Strand <erik.strand@cba.mit.edu> Date: Wed, 15 Apr 2020 23:03:14 -0400 Subject: [PATCH] Generalize plotting infrastructure Now each optimizer has 2d and 10d plot targets. But only CGD's work so far. --- apps/plots.py | 6 ++++-- cmake/make_plot_target.cmake | 18 ++++++++++-------- .../conjugate_gradient_descent/CMakeLists.txt | 3 ++- .../optimizers/gradient_descent/CMakeLists.txt | 3 ++- .../optimizers/nelder_mead/CMakeLists.txt | 3 ++- 5 files changed, 20 insertions(+), 13 deletions(-) diff --git a/apps/plots.py b/apps/plots.py index 777ffd2..277cd65 100644 --- a/apps/plots.py +++ b/apps/plots.py @@ -48,11 +48,13 @@ def add_points(fig, ax, points): ax.plot(x, y, 'k.') return fig, ax -# points is a list of numpy arrays of dim n x 2 +# polygons is a list of numpy arrays, for which each row gives a vertex def add_polygons(fig, ax, polygons): for polygon in polygons: - p = mpl.patches.Polygon(polygon, True, fill=False, color="black", zorder=2) + # only plot first two dims + p = mpl.patches.Polygon(polygon[:,0:2], True, fill=False, color="black", zorder=2) ax.add_patch(p) + # theoretically patch collections could be more efficient #p = PatchCollection(patches, alpha=0.4) #ax.add_collection(p) return fig, ax diff --git a/cmake/make_plot_target.cmake b/cmake/make_plot_target.cmake index 3c58735..5c0ea60 100644 --- a/cmake/make_plot_target.cmake +++ b/cmake/make_plot_target.cmake @@ -1,22 +1,24 @@ # TODO Enable arguments to be passed to the C++ executable -function(make_plot_target TARGET) +function(make_plot_target TARGET ID) + message(${ID}) + cmake_parse_arguments(PLOT "" "" "ARGS" ${ARGN}) if (VISUALIZE) add_custom_command( - OUTPUT ${TARGET}_log.json ${TARGET}_vis.json - COMMAND ${TARGET} ${TARGET}_log.json ${TARGET}_vis.json + OUTPUT ${TARGET}_log_${ID}.json ${TARGET}_vis_${ID}.json + COMMAND ${TARGET} ${TARGET}_log_${ID}.json ${TARGET}_vis_${ID}.json ${PLOT_ARGS} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} DEPENDS ${TARGET} ) add_custom_command( - OUTPUT ${TARGET}_plot.pdf - COMMAND python3 ${CMAKE_SOURCE_DIR}/apps/plots.py ${TARGET}_vis.json ${TARGET}_plot.pdf + OUTPUT ${TARGET}_plot_${ID}.pdf + COMMAND python3 ${CMAKE_SOURCE_DIR}/apps/plots.py ${TARGET}_vis_${ID}.json ${TARGET}_plot_${ID}.pdf WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - DEPENDS ${CMAKE_SOURCE_DIR}/apps/plots.py ${TARGET}_vis.json + DEPENDS ${CMAKE_SOURCE_DIR}/apps/plots.py ${TARGET}_vis_${ID}.json ) - add_custom_target(${TARGET}_plot - DEPENDS ${TARGET}_plot.pdf + add_custom_target(${TARGET}_plot_${ID} + DEPENDS ${TARGET}_plot_${ID}.pdf ) endif() endfunction() diff --git a/optimization/optimizers/conjugate_gradient_descent/CMakeLists.txt b/optimization/optimizers/conjugate_gradient_descent/CMakeLists.txt index 85359f4..273708d 100644 --- a/optimization/optimizers/conjugate_gradient_descent/CMakeLists.txt +++ b/optimization/optimizers/conjugate_gradient_descent/CMakeLists.txt @@ -3,5 +3,6 @@ if (VISUALIZE) main.cpp ) target_link_libraries(conjugate_gradient_descent optimization_lib clara) - make_plot_target(conjugate_gradient_descent) + make_plot_target(conjugate_gradient_descent 2d ARGS -d 2) + make_plot_target(conjugate_gradient_descent 10d ARGS -d 10) endif() diff --git a/optimization/optimizers/gradient_descent/CMakeLists.txt b/optimization/optimizers/gradient_descent/CMakeLists.txt index cf64b2f..e66c143 100644 --- a/optimization/optimizers/gradient_descent/CMakeLists.txt +++ b/optimization/optimizers/gradient_descent/CMakeLists.txt @@ -3,5 +3,6 @@ if (VISUALIZE) main.cpp ) target_link_libraries(gradient_descent optimization_lib clara) - make_plot_target(gradient_descent) + make_plot_target(gradient_descent 2d ARGS -d 2) + make_plot_target(gradient_descent 10d ARGS -d 10) endif() diff --git a/optimization/optimizers/nelder_mead/CMakeLists.txt b/optimization/optimizers/nelder_mead/CMakeLists.txt index feb0408..e057569 100644 --- a/optimization/optimizers/nelder_mead/CMakeLists.txt +++ b/optimization/optimizers/nelder_mead/CMakeLists.txt @@ -3,5 +3,6 @@ if (VISUALIZE) main.cpp ) target_link_libraries(nelder_mead optimization_lib clara) - make_plot_target(nelder_mead) + make_plot_target(nelder_mead 2d ARGS -d 2) + make_plot_target(nelder_mead 10d ARGS -d 10) endif() -- GitLab