Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
4 / 4 / 1
Регистрация: 14.10.2012
Сообщений: 95

Какую платформу выбрать для максимальной скорости решения задачи?

25.02.2015, 12:45. Показов 1466. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

У меня есть алгоритм, в котором считается матрица близостей для большого количества точек. Вектора (точки) могут иметь большой размер, а количество точек исчисляется тысячами и десятками тысяч. Соответственно, работает у меня все медленно: 10 000 записей в массиве перебираются 10 000 раз и при этом считается эвклидово расстояние. Я программирую на VBA & MQL (metatrader).

Как можно это ускорить? Применение расчетов на GPU может дать ускорение? Может быть, есть какие-то хитрости для ускорения алгоритма полного перебора?

Буду благодарен за подсказки.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.02.2015, 12:45
Ответы с готовыми решениями:

Какой язык программирование выбрать для решения следующей задачи
Здравствуйте, уважаемые форумчане-программисты! Я являюсь полнейшей зеленью и обладаю нулевым опытом в написании программ, но сейчас, в...

Помогите выбрать правильный путь решения задачи
Есть база данных Access(78 таблиц), кое-какой интерфейс через формы и т.д. Нужно написать приложение, которое бы не требовало установки...

Какую среду/платформу и базу выбрать для кроссплатформы?
Здравствуйте, хочу написать небольшую кроссплатформенную программу на С++, с графическим интерфейсом и нагруженной объемной базой на SQL....

8
2619 / 1630 / 266
Регистрация: 19.02.2010
Сообщений: 4,324
25.02.2015, 22:28
Лучший ответ Сообщение было отмечено alexmosc как решение

Решение

переписывайте расчёты в виде функций на языке С, запихивайте их в dll, затем вызывайте из метатрейдера.
Ускорение математики (по моему опыту года 2007 вроде бы - т.е. на МТ4, а пятый может и побыстрее четвёртого быть) было раз в 20. За счёт того, что псевдокомпилированный (и затем исполняемый интерпретатором) метатрейдеровский код был заменён истинным машинным кодом. У меня тоже евклидовы расстояния считались - но для алгоритма кластеризации типа динамических ядер.
Ещё в 4 раза ускорение будет при векторизации расчётов (при использовании SSE-команд процессора). Хороший сишный компилятор (типа интеловского, майкрософтовского) может векторизовать и сам - но я бы на это не надеялся, если не имеете опыта и не знаете, как правильно всё указать компилятору и сделать всё сопутствующее (ибо там ещё надо будет данные выравнивать на границу параграфа). Или даже в 8 раз ускорение - на AVX-командах. Т.е. 20*4=80, или 20*8=160, вот такое вот ускорение может быть, грубо говоря - в сотню раз.

GPUшка подобное тоже ускорит. Но к ней надо будет тоже ходить из dll, написанной на С/С++ (васик же вроде не позволит?), так что проще, наверно, будет сделать минимальный шаг (сишный код, пусть и не оптимизированный, зато откомпилированный в настоящие команды процессора) - вдруг уже после ускорения раз в 20 всё станет комфортным?

Насчёт изменения алгоритма - пока ничего сказать не могу, недостаточно информации о задаче (нафиг считается матрица близостей и т.д.).
1
 Аватар для evgr
117 / 33 / 14
Регистрация: 13.02.2015
Сообщений: 795
25.02.2015, 23:36
Цитата Сообщение от alexmosc Посмотреть сообщение
Применение расчетов на GPU может дать ускорение?
Конечно может! Вместо вложенного цикла со сложность алгоритма https://www.cyberforum.ru/cgi-bin/latex.cgi?O\left({N}^{2} \right) будете считать всё сразу в https://www.cyberforum.ru/cgi-bin/latex.cgi?{N}^{2} потоков со сложность O(C).
Цитата Сообщение от alexmosc Посмотреть сообщение
Может быть, есть какие-то хитрости для ускорения алгоритма полного перебора?
Если условия задачи позволяют - замените евклидово расстояние на метрику Минковского 1-го порядка (расстояние городских кварталов).
1
4 / 4 / 1
Регистрация: 14.10.2012
Сообщений: 95
26.02.2015, 18:33  [ТС]
Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
переписывайте расчёты в виде функций на языке С, запихивайте их в dll, затем вызывайте из метатрейдера.
VTsaregorodtsev, спасибо за подробный ответ!

Я попробую сделать dll на C, или попрошу кого-нибудь. Сейчас я могу комфортно прогнать 20 000 записей, как раз хватает времени на чай попить. А хотелось бы, например, часовые бары за 15 лет (более 90 000) посмотреть. Это реализую в будущем.

Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
Насчёт изменения алгоритма - пока ничего сказать не могу, недостаточно информации о задаче (нафиг считается матрица близостей и т.д.).
VTsaregorodtsev, я был бы рад услышать Ваше мнение о том, что я делаю. Думаю написать даже статью (первую по статистике).

Дошел до идеи критерия силы зависимостей в произвольном ряде данных (может не произвольном, но в обширном семействе рядов).

(Знаю, что таких методов много. Сам считал теоретико-информационные статистики, в частности: total correlation, mutual information, pointwise mutual information).

1 шаг алгоритма: считаю среднее расстояние между двумя случайными точками. Для этого и беру полную матрицу близостей и считаю среднее по полученным значениям. Некоторые тонкости буду опускать, чтобы быть кратким. Каждая точка отражает отрезок ряда данных любой длины n >= 1. Выбираем сами. Данное среднее расстояние есть не что иное как мат.ожидание расстояний между прошлым и будущим ряда при отсутствии памяти. То есть, за любым вектором последует любой другой (перехлесты частичные и полные исключаю).

2 шаг. Считаю расстояния между последовательно идущими векторами (без перехлеста). Беру также среднее. Это будет мат.ожидание расстояния между прошлым и будущем, наблюдаемое в ряде.

3 шаг. Беру отношение второго к первому. Получаем либо 1 - наблюдаемый ряд без памяти, меньше 1 - за произвольным вектором следует похожий вектор - персистентность ряда, больше 1 - за вектором следует отличный от него вектор - антиперсистентность ряда. В пределе данное отношение будет равно 0 или 2 (можно поделить на 2, чтобы получить от 0 до 1, где 0,5 - памяти нет), что означает полную детерминированность. Это я называю слабым критерием, так как вероятен вариант, когда в ряде с памятью мат.ожидание расстояний между соседними векторами совпадет с мат.ожиданием рандомного ряда.

4 шаг - вычисление сильного критерия. Построим гистограмму плотности расстояний по 1 и 2 пункту. Количественно выразим различие в функциях плотности. Если в гиперкубе есть упорядоченность связей между точками, все будет видно на гистограммах.

Таким образом, я говорю про критерий наличия статистических связей в последовательности данных. С параметрами нужно играть: длина вектора выбирается эмпирически, преобразование ВР в вектора тоже опытно, логарифмировать, взять differences, в процентах или в абсолютных значениях, нормализовать ли каждую переменную вектора в один интервал - на выбор исследователя.

На ряде котировок цен открытия дня EURUSD за 10 лет получается, что минимум критерия достигается на длине вектора 10-20, где коэффициент принимает значения 0,95. То есть, работает персистентность.

Для биткоинных данных по дням коэффициент очень отличается от рандома.

Для синтетика, цепи Маркова 1 порядка, порог вероятности 0,6, отлично видно, ряд трендовый или антитрендовый. Коэффициент отличается от рандома на 20%!

И т.д.

Как вы думаете, эта работа заслуживает детального описания в рамках статьи?


Цитата Сообщение от evgr Посмотреть сообщение
Конечно может! Вместо вложенного цикла со сложность алгоритма будете считать всё сразу в потоков со сложность O(C).
evgr, спасибо! Буду иметь в виду на будущее, но сам факт уже радует!

Добавлено через 7 часов 13 минут
Цитата Сообщение от evgr Посмотреть сообщение
Если условия задачи позволяют - замените евклидово расстояние на метрику Минковского 1-го порядка (расстояние городских кварталов).
Спасибо! Почитаю, подумаю.
0
2619 / 1630 / 266
Регистрация: 19.02.2010
Сообщений: 4,324
01.03.2015, 22:38
Цитата Сообщение от alexmosc Посмотреть сообщение
А хотелось бы, например, часовые бары за 15 лет (более 90 000) посмотреть. Это реализую в будущем.
Ну, это обычный процессор без проблем сделает. Сужу, правда, по своему опыту программирования расчётных задач (а я программировать-оптимизировать математику умею).
Сотня тыс. векторов, и перебор каждого с каждым - это для меня комфортно. Пример - оценка константы Липшица в задаче обучения с учителем, там надо найти максимум отношения нормы разности выходных (зависимых) частей векторов к норме разности входных (независимых) частей векторов. Т.е. получение оценки, насколько существенно может меняться выход моделируемой системы при некотором изменении входов.
Причём, заметьте, ещё и на несколько ядер процессора расчёты можно распараллелить (ну, это уже кто насколько компетентен или насколько готов глубоко погружаться в системное программирование).

Насчёт же Вашей идеи алгоритма/статистики... Не знаю. Сильно просто получается - может, эта америка уже давно открыта. Мне, например, похожий (вернее, не для временных рядов) подход показали мои ботанико-экологические соавторы. У них это называется коэффициентом коллигации (если нужна ссылка на печатную работу, откуда всё это растёт - то, например, Нешатаев В.Ю. Методы анализа геоботанических материалов. – Л., 1987 - 188 С.), он равен отношению апостериорной вероятности p(y_i|z_j) наблюдаемости i-го биовида в j-й зоне к априорной вероятности p(y_i) встречи этого вида среди всех видов на всей широкой территории (несколько неперекрывающихся зон). Когда коэффициент коллигации выше единицы, можно говорить о предпочтениях вида к j-й зоне, когда значительно ниже единицы – о приближении эколого-климатических условий зоны к границам ареала биовида (биовиду в условиях этой зоны некомфортно, он там встречается реже, чем "в среднем по большой больнице").
Мне просто мой склероз во втором часу ночи уже изменяет - помню то, чего реально касался руками Для лесообразователей Сибири - коэффициенты коллигации таки нормально показывают приуроченности или предпочтения разных пород к разным климатическим зонам.
У Вас же вместо отношения вероятностей - отношение расстояний, и дальнейшие шаги. В общем, мне подумать надо (вспомнить, встречал ли что подобное) - но на свежую голову я на форуме обычно не появляюсь
0
4 / 4 / 1
Регистрация: 14.10.2012
Сообщений: 95
02.03.2015, 11:25  [ТС]
Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
Насчёт же Вашей идеи алгоритма/статистики... Не знаю. Сильно просто получается - может, эта америка уже давно открыта.
Спасибо большое за ответ! Я специально Вам задал вопрос, так как знаю, что Вы большой эксперт.

Я тоже думаю, что похожие расчеты уже могли производиться, может быть, в другом контексте. Про ботанику почитаю - интересно, и другая область.

Я тут думал еще над этим алгоритмом и понял, что он сырой. Ну во-первых, не факт все же, что разница в плотности расстояний буде обязательно иной. Не могу доказать. Сила критерия под вопросом.

Во-вторых, смущают экстремумы критерия: если он близок к нулю, векторы будут максимально похожи, а если 1 - зеркально непохожи. А если вектор детерминирован по ацки сложной нелинейной формуле, но не похож?, - подумал я. Тогда максимизации или минизации не произойдет вообще. И пришел к следующему шагу.

В-третьих. Я набираю массив расстояний между двумя любыми векторами (без повторов), где количество расчетов будет равно (N^2 - N) / 2. Догадался снизить объем расчетов, исключая повторы.

Заполняю массив, например, расстоянием между точкой Ai и Ai+x, в другом столбце массива я считаю расстояния между векторами, которые соответствуют "будущему" двух обработанных точек: Ai+future и Ai+x+future, то есть, со сдвигом на количество лагов, отделяющих будущее.

Заполнил весь массив, затем построил по парам значений точечную диаграмму. Теперь самое интересное. В предположении о том, что два соседних вектора связаны функционально и строго, имеет место положение: при расстоянии между двумя точками стремящемся к 0, расстояние между соответствующими этим точкам векторам "будущего" будет также стремиться к 0.

То есть, полностью похожие векторы продуцируют похожее будущее, а при росте расстояния между векторами, полученные будущие состояния будут произвольно сильно отличаться.

Для логистического отображения хаоса, при параметре r = 3,7 (при векторе длиной 1, то есть мерим связь между соседними точками) получается следующая графика - во вложении.

Интересует левый угол. Четко видно, что в пределе уменьшение расстояния между парой точек ведет к уменьшению расстояния между соответствующими им точками будущего.

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

Пока я выдохся.
Миниатюры
Какую платформу выбрать для максимальной скорости решения задачи?  
0
2619 / 1630 / 266
Регистрация: 19.02.2010
Сообщений: 4,324
02.03.2015, 11:46
alexmosc, ну, динамические системы и детерминированный хаос как расчётные примеры - это уже совсем другое, по сравнению с "невидимой рукой рынка"
Для нормальных динам.систем - Вы так получите оценку ляпуновского показателя, с точностью до какого-то масштабирующего множителя или гладкой функции y=f(x) (где y - то, что посчитается у Вас, а х - оценка ляпуновского показателя, которая меряется не по отстоящим во времени векторам, а по параллельно (вернее, рядом) проходящим участкам траектории динам.системы).
0
4 / 4 / 1
Регистрация: 14.10.2012
Сообщений: 95
02.03.2015, 13:04  [ТС]
Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
динамические системы и детерминированный хаос как расчётные примеры - это уже совсем другое, по сравнению с "невидимой рукой рынка"
Спасибо, VTsaregorodtsev.

Это был синтетический пример, чтобы продемонстрировать работу подхода. Такая же красивая картинка получается при анализе простой синусоиды, если мы берем n>1 длину вектора - тогда полная детерминированность следующего состояния кривой: в нуле точки сходятся, что говорит о функциональной зависимости, а по ходу роста X растет и Y.

Ну, я говорю о том, что если функциональная зависимость - пусть слабая - есть, то будет наблюдаться схождение в нуле. Получается, похоже на теорию хаоса. Хм, интересно, может я подсознательно оттуда и почерпнул методику.

А вот данные по реальным наблюдениям. Пара eurusd, дневные цены открытия, примерно 8 лет. Вектор взят длиной 3 точки.

Первый график всеобъемлющий, а второй с увеличением, чтобы левый край было лучше видно.

Заметно, что расстояния начинают расти. Вот как оформить в виде одного числа тот факт, что около нуля распределение не равномерное, растущее, я пока не додумался.

Еще, кстати, интересно, что максимальное дистанцированные вектора (правая часть X) дают будущее более похожее, чем рандом.

"Невидимая рука рынка" это же и есть функция зависимости, только один маленький вопросик: чего от чего и как это измерить. Это поиск иголки в стоге сена.
Миниатюры
Какую платформу выбрать для максимальной скорости решения задачи?   Какую платформу выбрать для максимальной скорости решения задачи?  
0
4 / 4 / 1
Регистрация: 14.10.2012
Сообщений: 95
02.03.2015, 13:50  [ТС]
Ааа, подчеркну, что связи с мат.аппаратом хаотических динамических систем не предполагается! Достаточно показать, что чем ближе вектора, тем более похожее будущее они генерируют, что выливается в наличие зависимости. А дальше идет игра с построением вектора, количеством лагов и т.д. Можно, например, даже сравнить многомерный вектор и следующую за ним одну точку (между ними расстояния точно также будут считаться).

Проблема остается в многовариантности возможных связей и необходимости перебора этих вариантов, чтобы найти максимально сильную сходимость в нуле.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.03.2015, 13:50
Помогаю со студенческими работами здесь

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

Какую аппаратную платформу выбрать для контрольной точки в пейнтбол?
Приветствую всех! Помогите пожалуйста с выбором платформы для моей задачи: Хотелось бы сделать для игры пейнтбол захват флага(как...

Какую платформу выбрать новичку? Желательно кроссплатформенную
Немного знаю .NET и C#

Какую серверную платформу выбрать? ASUS или INTEL?
необходимо собрать сервер для небольшого предприятия. и вот назрел вопрос, какую платформу выбрать? другие не рассматриваю, т.к. их нет в...

Какую лучше использовать БД для решения поставленной задачи
Добрый день, необходимо выбрать наиболее подходящую БД для реализации приложения для расчетов. Был небольшой опыт работы с SQL Server, и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru