Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Conversation

@gkirgizov
Copy link
Collaborator

@gkirgizov gkirgizov commented Jun 6, 2023

Add 2 new kinds of plot for estimating diversity of populations based on OptHistory.
Done as additional functionality during work on #89

Usage example:

                history.show.diversity_population(save_path='diversity-dynamic.gif')  # for saving gif
                history.show.diversity_line()  # for diversity line

2 examples: below for multi-objective optimization with 4 metrics at once:

  • static plot howing diversity during optimization;
  • GIF plot showing metric distribution per each metric in population

Diversity plot

Diveristy GIF

@gkirgizov gkirgizov added enhancement New feature or request visualizations Related to visualizations of graph, histories etc labels Jun 6, 2023
@aim-pep8-bot
Copy link
Collaborator

aim-pep8-bot commented Jun 6, 2023

Hello @gkirgizov! Thanks for updating this PR. We checked the lines you've touched for PEP 8 issues, and found:

There are currently no PEP 8 issues detected in this Pull Request. Cheers! 🍻

Comment last updated at 2023-06-08 07:15:29 UTC

@gkirgizov gkirgizov marked this pull request as ready for review June 6, 2023 08:44
@codecov-commenter
Copy link

codecov-commenter commented Jun 6, 2023

Codecov Report

Merging #113 (73839a4) into main (d0f5313) will decrease coverage by 0.30%.
The diff coverage is 26.76%.

@@            Coverage Diff             @@
##             main     #113      +/-   ##
==========================================
- Coverage   74.84%   74.55%   -0.30%     
==========================================
  Files         122      123       +1     
  Lines        6849     6920      +71     
==========================================
+ Hits         5126     5159      +33     
- Misses       1723     1761      +38     
Impacted Files Coverage Δ
golem/visualisation/opt_history/diversity.py 23.52% <23.52%> (ø)
golem/visualisation/opt_viz.py 79.06% <100.00%> (+1.56%) ⬆️

... and 7 files with indirect coverage changes

@MorrisNein
Copy link
Collaborator

Отлично, больше доступных визуализаций всегда лучше, чем меньше. Подскажи, diversity всегда измеряешь как разнообразие значений в используемой метрике? Оценивается ли разнообразие состава узлов графа?

@nicl-nno nicl-nno self-requested a review June 6, 2023 09:15
@nicl-nno
Copy link
Collaborator

nicl-nno commented Jun 6, 2023

А в структурах проверяется только полное совпадение? Может добавить что-то вроде распределения попарных расстояний между графами?

@MorrisNein MorrisNein self-requested a review June 6, 2023 16:17
@gkirgizov
Copy link
Collaborator Author

gkirgizov commented Jun 7, 2023

Отлично, больше доступных визуализаций всегда лучше, чем меньше. Подскажи, diversity всегда измеряешь как разнообразие значений в используемой метрике? Оценивается ли разнообразие состава узлов графа?

И то, и другое.
В основном, разнообразие по метрикам. Дополнительно -- доля структурно уникальных индивидов, сравнивается через __eq__

@gkirgizov
Copy link
Collaborator Author

gkirgizov commented Jun 7, 2023

А в структурах проверяется только полное совпадение? Может добавить что-то вроде распределения попарных расстояний между графами?

Да, полное. Можно добавить такое распределение, пожалуй. Попробую

UPD
нет, это не так-то просто. Надо отдельный график под это реализовывать. В общем случае edit distance между графами и так может по минуте считаться, а тут сложность O( (H*N)^2 ) , где H -- длина истории, а N - размер поколения. Не посчитается

@nicl-nno
Copy link
Collaborator

nicl-nno commented Jun 7, 2023

edit distance между графами и так может по минуте считаться

Может сделать какую-то приближенную оценку? Сравнивать хотя бы совпадение вектора вершин и вектора ребер.

В стиле "0 - совпадают полностью, различаются гиперпараметры - плюс <число различающихся вершин>, различаются типы моделей - плюс<число различающихся вершин>, различаются ребра (в предположении что ребро это пара вершин) - плюс число ребер.

Чтобы было проще отлавливать ситуации, когда различия есть, но около-минимальны.

Но наверное уже не в этом PR, в любом случае.

Copy link
Collaborator

@MorrisNein MorrisNein left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Небольшое пожелание: две шкалы это удобно, но глаза теряются. Предлагаю немного поразмыслить, каким образом визуально выделить показатель для правой шкалы. Пока в голову приходит отрисовка его пунктиром или проекции от линии на соответствующую ось.

Если выйдет запарно/некрасиво, то пусть будет как есть

Comment on lines 16 to 23
class DiversityLine(HistoryVisualization):
def visualize(self, show: bool = True, save_path: Optional[Union[os.PathLike, str]] = None):
return plot_diversity_dynamic(self.history, show=show, save_path=save_path, dpi=self.visuals_params['dpi'])


class DiversityPopulation(HistoryVisualization):
def visualize(self, save_path: Union[os.PathLike, str], fps: int = 4):
return plot_diversity_dynamic_gif(self.history, filename=save_path, fps=fps, dpi=self.visuals_params['dpi'])
Copy link
Collaborator

@MorrisNein MorrisNein Jun 7, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Добавь, пожалуйста, докстринги - методам visualize. Для diversity line были сомнения, как его читать, пока не залез в код.

Upd: если понятнее оформить визуал у diversity line, то отсутвие описания не критично.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Добавил комменты

@MorrisNein
Copy link
Collaborator

Небольшое пожелание: две шкалы это удобно, но глаза теряются. Предлагаю немного поразмыслить, каким образом визуально выделить показатель для правой шкалы. Пока в голову приходит отрисовка его пунктиром или проекции от линии на соответствующую ось.

Если выйдет запарно/некрасиво, то пусть будет как есть

Можно, например, сделать цветную подпись у правой шкалы, как в этом примере

@gkirgizov
Copy link
Collaborator Author

Можно, например, сделать цветную подпись у правой шкалы, как в этом примере

Цветовая ассоциация полезна, да. Вот обновленный вариант с более понятными подпиясми осей к тому же.

Figure_3-v2

@gkirgizov gkirgizov requested a review from MorrisNein June 8, 2023 05:34
@gkirgizov gkirgizov merged commit e231edf into main Jun 8, 2023
@gkirgizov gkirgizov deleted the diversity-plot branch June 8, 2023 07:19
YamLyubov pushed a commit that referenced this pull request Jun 14, 2023
* WIP add plot of std of fitness for estimating diversity after the run

* WIP add plot of fitness diversity for GIF

* WIP diversity plot gif

* WIP diversity plot gif in experiment

* Fix diversity plot to be correct after all

* WIP violin plot

* Add unique ratio to the graph

* Make violinplot instead of histograms in Diversity

* DIV PLOT: upd add saving to diversity plot

* Drop unused code from diversi

* Move diversity.py to visualisation

* WIP Add limits to diversity plot & better legend

* Integrate diversity viz into OptHistoryVizualizer

* Fix pep8 issues

* Make diversity plot a bit clearer,add comments

* Change plot color
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request visualizations Related to visualizations of graph, histories etc

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants