Pull to refresh

Comments 8

Так и не понял зачем вам матрицы, кроме того что вы в ней значения храните?
Зачем вам потенциал взаимодействия с поверхностью сферы, когда по условию точка должна находиться на её поверхности и это условие элементарно реализуется. Вы этим усложняете себе задачу и скорость её решения и также можете получить побочные решения, когда точки будут симметрично отклоняться от поверхности в обе стороны.
HOMPAIN, большое спасибо за комментарий!

Вы всё поняли совершенно правильно. Матрица нужна для того, чтобы хранить в ней координаты точек. Этот подход позволяет эффективно использовать возможности библиотек numpy, pytorch и tensorflow, тем самым обойдя «медленность» языка Python.

Полностью с Вами согласен. Условие нахождения точки на поверхности сферы может быть элементарно реализовано. Например, нормированием векторов на их длину. И это является одним из способов решения задачи получения случайно раскиданных по сфере точек с равномерной плотностью вероятности.

Так же полностью согласен с тем что рассмотрение квадратичного потенциала может уменьшить скорость схождения алгоритма. Более аккуратным будет решение с использованием множителей Лагранжа и линейным по расстоянию штрафом. Будем живы, рассмотрю этот подход ;)

К сожалению не могу согласиться с тем, что точки будут симметрично отклоняться от поверхности в обе стороны. Квадратичный потенциал взаимодействия с поверхностью единичной сферы действительно инвариантен относительно смены знака расстояния до поверхности. Но взаимодействие точек между собой не инвариантно. Помещение точек под поверхность сферы увеличит энергию взаимодействия. Поэтому в ходе уменьшения целевой функции будет выбран вариант где точки летают над поверхностью единичной сферы, как это изображено на картинке, с которой начинается статья.
Интересно, ждём продолжения
Спасибо. Постараюсь сделать ожидание по-короче ;)
Pythran и numba сходу позволяют получить решение в 20 раз быстрее вашего numpy варианта в пару строк кода, а если покопаться, то, может быть, и быстрее. А еще я бы сюда рассказал про line_profiler, который помогает понимать где именно мы тратим время.
Большое спасибо за ссылки. К сожалению, расчёт функции потерь не является самоцелью. Основная особенность приведённого в статье кода — возможность использования pytorch и tensorflow для расчёта градиента функции потерь с помощью backpropagation и нахождение расположения точек, минимизирующего функцию потерь. Интересно будет сравнить по производительности Ваш вариант минимизации функции многих переменных с тем, что получится, если использовать методы оптимизации из этих библиотек.
В разделе «Визуализация» должно быть «Wolfram Mathematica» вместо «Wolfram Mathematics» и «Matplotlib» вместо «Matplolib». Присутствие последнего в данном перечне особенно интересно.

Чтоб два раза не вставать, хотелось бы заметить, что: «К сожалению, если перед тобой стоит простая, но нестандартная задача, ты оказываешься безоружен,» — это высказывание в большей степени про автора, чем про указанные системы символьных вычислений.
Опечатки в названиях пакетов поправил, спасибо!

Спасибо за уточнение. Действительно, я делюсь здесь своим опытом.
Sign up to leave a comment.