Обновить
170.23

Алгоритмы *

Все об алгоритмах

Сначала показывать
Порог рейтинга
Уровень сложности

Как перестать угадывать цены и довериться теории вероятностей. Хроника одного эксперимента

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели7.2K

В прошлой своей статье я открыл для себя интересную, но неприглядную истину — что рынок это то место, где можно зарабатывать даже не зная будущего. Не угадывая направление — пойдёт вверх или вниз, не изображая из себя Вангу, а лишь правильно работая с вероятностями и размерами позиции. Если вы подбрасываете монетку и ставите 100% на орла — вы банкрот при первом же выпадении решки. Но если вы дробите капитал по формуле Келли или используете ребалансировку, вы можете зарабатывать даже при череде неудач.

В прошлой статье по советам Дмитрия Шалаева я рассматривал математический трюк когда на сгенерированных котировках при убыточном активе капитал рос, а стратегия купил и держишь медленно обнуляла виртуальный счёт.

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

Так вот, я решил принять этот вызов и самостоятельно, без Дмитрия Шалаева разобраться как похожая стратегия может вести себя на акциях Московской биржи.

Про биржу часто пишут что это казино, но в данном случае я не буду ставить на красное или чёрное, а буду пытаться зарабатывать на самом факте вращения колеса рулетки: на волатильности, обороте и вероятности — то есть буду вести себя как казино, а не как игрок. Казино не знает, кто выиграет следующую раздачу, но оно знает, что в конце дня будет в плюсе.

Читать далее

Новости

Система частиц в The 13th Sign

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели7.1K

Доброго дня всем!

Мыс друзьями делаем инди‑игру The 13th Sign, и недавно выпустили первый трейлер, он же — техническое демо. После чего в узких кругах возник широкий круг вопросов формата «как это работает». Ниже — все детали реализации.

Читать далее

Тестирование в спортивном программировании: приемы и советы

Уровень сложностиСредний
Время на прочтение3 мин
Охват и читатели5.6K

Разберем самые популярные и удобные способы тестирования в спортивном программировании: Стресс-тесты, дебаггеры, проверка граничных условий. Обсудим, что делать, когда вердикт вашего решения WA или TL.

Читать далее

«Умный» бот для онлайн-версии «Битвы Големов»: от эвристики к иллюзии разума

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели12K

Меня давно просили сделать версию моей настольной игры «Битва Големов» в онлайн варианте. Полноценно переносить игру я в итоге не стал (да и она бесплатно доступна в Tabletop Simulator), а вот сделать мини-версию для игры с 1 или 2 ботами желание появилось. Сначала я хотел наделить ботов «Битвы Големов» настоящим ИИ — но нейросети путали направления и тормозили по 30 секунд. Тогда я бросил модные технологии и собрал «разум» из четырёх кирпичиков: случайной тактики, симуляции ходов, Манхеттенского расстояния и простой иерархии приоритетов.

Читать далее

Математические основы рекуррентных нейросетей (детские вопросы и ответы, о которых не принято говорить)

Время на прочтение26 мин
Охват и читатели7.2K

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

Читать далее

VLM / VLA / World Models / Physical AI

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели8.5K

Нейроночки в последнее время заполонили всё. Ну, почти всё. Cейчас подбираются к роботам. Настоящего прогресса почти так же много как нейрослопа, пиара и преувеличений.
В этой статье попробую рассказать про нейроночки для управления роботами:

🤖 Расскажу немного про теорию
🤖 Покажу как обучить всё это дома на коленке (и стать экспертом в Physical AI конечно)

Читать далее

Поиск решений управляемый данными. Детали механизма

Время на прочтение11 мин
Охват и читатели5.9K

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

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

Важно отметить, что изложение не привязано к каким-то конкретным математическим методам и технологическим решениям работы с данными: Марковский подход, RL (reinforcement learning), простая статистика частот, ML‑модели,  ….

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

Читать далее

Так как же всё-таки быстро конкатенировать строки в C++?

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели8K

Всем практикующим программистам приходится конкатенировать строки. Именно конкатенировать, у нас не какой-то там JavaScript или PHP, у нас в C++ это называется вот таким заумным словом. Программисты на других языках без излишних мудрствований строки просто "складывают", даже не особо задумываясь об этой операции. Ведь что может быть проще, чем

return "The answer is " + str_answer + ", count is " + count;

Но если для скриптописателей простительно не думать о том, что стоит за такой простой записью, для опытного разработчика не приемлемо так безответственно подходить к такому важному вопросу. Опытный разработчик, представив такой код на C++, сразу видит ужасающую бездну проблем, которые может породить такой подход.

Читать далее

Сравнение методов решения систем линейных алгебраических уравнений

Время на прочтение26 мин
Охват и читатели6.4K

Цель данной статьи - предоставить сравнение методов решения СЛАУ и их эффективности в разрезе времени решения и нормы невязки, характеризующей точность решения. В статье приводятся результаты решения для числа уравнений от 50 до 3000. Приводится сравнение результатов решения для методов: Гаусса, LU декомпозиции, компактной схемы исключения, QR декомпозиции, LL^T декомпозиции, методов вращений, релаксации и градиентного спуска.

Читать далее

От «яблока» до «королевы»: как нейросети учатся понимать смысл слов через эмбеддинги

Время на прочтение4 мин
Охват и читатели7.4K

Представьте, что вы объясняете ребёнку, что такое «яблоко». Вы покажете картинку, дадите попробовать, расскажете, что оно круглое, сладкое, растёт на дереве, а теперь попробуйте объяснить это нейросети. Она не видит, не пробует, но она понимает только числа.

Как же тогда заставить машину понять, что «яблоко» ближе к «груше», чем к «трактору»? Ответ на самом деле кроется в элегантном приёме, который произвёл революцию в NLP- векторных представлениях слов, или эмбеддингах.

Проблема «слепого» кодирования: почему one-hot не работает

Самый наивный подход- это пронумеровать все слова в словаре и закодировать каждое вектором из нулей и одной единицы:

Читать далее

Разбираю статью про FS-Researcher: как учёные научили ИИ вести конспекты

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели7.7K

ChatGPT и другие LLM "забывают" начало диалога при серьезном ресерче. Обычная проблема. Новые факты вытесняют старые из-за ограниченного контекстного окна, и отчет получается поверхностным. Недавнее исследование предлагает простое решение — дать ИИ-агенту "блокнот". Разбираемся как такой подход обходит ограничения контекста.

Читать далее

Метод наименьших квадратов Гаусса с весовыми коэффициентами отклонений

Уровень сложностиСредний
Время на прочтение3 мин
Охват и читатели9.5K

В моей практике метод наименьших квадратов Гаусса используется в двух случаях.

Когда производится измерение, для корректировки полученной величины.

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

Практика показала, что чем меньше величина, тем меньшая погрешность допускается.

Моя идея – это ввести весовые коэффициенты отклонений в формулу критерия Гаусса.

Читать далее

Как веб-камера и нейросеть помогают удалённо измерять частоту дыхания

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели4.2K

Российская ИТ-компания «Криптонит» продолжает развивать технологии дистанционного мониторинга показателей жизнедеятельности человека. В своей новой работе специалист отдела перспективных исследований компании «Криптонит» Алексей Протопопов представил бесконтактный метод определения частоты дыхательных движений (ЧДД) с высокой точностью. В этом методе применяется обычная веб-камера и алгоритм, использующий нейросеть на одном из этапов обработки видеосигнала. 

Традиционные способы измерения частоты дыхания требуют физического контакта с пациентом. Например, для этого применяют нагрудный ремень или датчики у носа. Это не всегда удобно, особенно когда важны скорость или свобода движений. Существующие бесконтактные подходы либо работают исключительно в идеальных условиях, либо дают значительную погрешность — до 13%, что вызвано недостаточной способностью отфильтровывать естественные движения человека. 

Метод Алексея Протопопова решает эту проблему. В его основе лежит сегментация изображения тела нейросетью и продвинутая фильтрация помех.  Метод протестировали на видеозаписях 14 добровольцев: 8 мужчин и 6 женщин в возрасте от 20 до 65 лет. Общая продолжительность записей превысила 2,5 часа. 

Принцип работы

В основе метода лежит анализ естественного смещения грудной клетки при вдохе и выдохе. Главная сложность — выделить именно дыхательные движения на фоне другой физической активности: разговора, жестов, поворотов и смены позы. 

Для решения этой задачи в предложенном методе нейронная сеть MediaPipe выделяет на каждом кадре области груди и живота. Тем самым она создаёт «маску» для анализа изображения. Этот этап называется «сегментация». Он самый ресурсоёмкий и занимает более 90% времени обработки. Сегментация позволяет алгоритму самостоятельно определять часть кадра, по которой нужно проводить измерения, поэтому смена позы почти не влияет на результат. 

Читать далее

Ближайшие события

Как я пытался сжимать смыслы вместо байтов

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели6.7K

Написал прототип SemanticZip: сжатие текста в 14 раз за счет удаления «выводимой» информации. Теория информации, Колмогоровская сложность. В теории все работало...
Разбор полетов: почему нельзя сжимать смыслы и почему красивые метафоры проигрывают скучному RAG

Читать далее

Антирекурсия. Часть 1

Время на прочтение13 мин
Охват и читатели5.6K

Рекурсия — прекрасный инструмент математического анализа. В математике это реально полезный и фундаментальный инструмент, поэтому математики привыкают мыслить рекурсиями и активно агитируют за перенос этой логики в программирование. Благо в программировании функции технически могут вызывать самих себя. Из‑за этого возникли даже так называемые функциональные языки программирования, основанные на идее отказа от циклов в пользу «универсальной» рекурсии.

Однако, следует понимать что рекурсия в математике и рекурсия в программировании далеко не одно и тоже. Как отметил Ален И. Голуб в книге «Веревка достаточной длины, чтобы… выстрелить себе в ногу» (п. 6. Если вы не можете сказать это по‑английски, то вы не сможете выполнить это и на Си/Си++) — математическое мышление может помешать писать хорошие программы. И как раз рекурсия наглядно демонстрирует эту мысль.

Математика абстрактна — в ней рекурсия работает в рамках математической логики, а это скорее логика вида «что было бы, если бы функция вызывала сама себя» — реальных вызовов функцией самой себя там нет — математики не вычисляют рекурсии пошагово (как это делает компьютер) поэтому там нет и описанных ниже побочных эффектов появляющихся у рекурсии в программировании. В математике рекурсия более универсальна чем цикл, но в программировании всё наоборот — здесь цикл намного гибче и универсальнее.

Негативные эффекты от рекурсии в программировании носят алгоритмический характер поэтому компиляторы языков программирования общего назначения не могут оптимизировать рекурсию — она неуправляема даже для программиста, не то что для компилятора. Компиляторы функциональных языков программирования умеют преобразовывать так называемую «хвостовую» рекурсию в цикл, убирая её негативные эффекты. Но «хвостовая» рекурсия позволяет реализовать лишь простейшие варианты рекурсии. В общем случае рекурсия эквивалентна нескольким псевдоциклам и анализ количества и функционала этих псевдоциклов нетривиален, а потому не подлежит оптимизации компилятором. По сути «хвостовая» рекурсия не более чем «заплатка» позволяющая вернуть в функциональные языки программирования опрометчиво удалённые из них циклы. Вред от мышления рекурсиями в программировании будет рассмотрен ниже на конкретных примерах.

Читать далее

Платформа очередей для клиентского сервиса в кровавом энтерпрайзе

Уровень сложностиСредний
Время на прочтение20 мин
Охват и читатели7.8K

Привет, меня зовут Дмитрий Крупенин. Последние 7 лет я занимаюсь созданием и развитием внутренних продуктов для крупных компаний. Я отвечал за распределение обращений в клиентском сервисе для одного биг.теха РФ, а сейчас помогаю строить распределение задач контента в рамках другого. Захотелось освежить все знания по этой теме, а заодно структурировать это в статью, которую вы сейчас и читаете.

В чем собственно вызов в этой области: современные алгоритмы назначения обращений операторам представляют собой критически важную технологическую основу для крупных компаний, обрабатывающих миллионы клиентских запросов ежемесячно. В условиях растущих ожиданий клиентов и необходимости обеспечения высокого качества обслуживания (при оптимальных для бизнеса операционных затратах) эффективность распределения обращений на подходящих исполнителей становится одним из ключевых факторов конкурентоспособности. Исследования (раз, два, три) показывают, что передовые AI-powered алгоритмы способны снижать время ожидания клиентов на 40-60%, повышать показатели решения с первого обращения до 85%, и одновременно оптимизировать загрузку операторов, предотвращая их выгорание. Давайте разберемся так ли это и как достичь таких результатов.

Читать далее

Noise-Based Logic: Введение в шумовую логику

Уровень сложностиСредний
Время на прочтение24 мин
Охват и читатели9.1K

— Как собрать квантовый компьютер из говна и палок на классических электронных компонентах?
 — Как передавать тысячи бит данных параллельно по одному электрическому проводу?
 — Как снизить энергопотребление чипов на 2–3 порядка и забыть про утечку по сторонним каналам?

Эти кликбейтные вопросы перестанут восприниматься таковыми после прочтения этой статьи.

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

Читать

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

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели47K

Подмести весь супермаркет Albert Heijn? Звучит несложно. Собственно, так и должно быть.

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

Поэтому вместо того, чтобы просто делать свою работу, ну то есть… подметать… я поступил так, как поступил бы любой здравомыслящий человек: превратил план этажа супермаркета в решётчатый граф, создал визуальный редактор и написал на C++ оптимизатор пути, используя алгоритм имитации отжига (simulated annealing).

Читать далее

Пишем игру-головоломку под macOS на SwiftUI [StarDust Collector]

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели7.1K

В прошлой статье я поделился опытом, как я писал с помощью ИИ кастомный TO-DO лист под macOS. Опыт оказался противоречивым, однако приложение было создано, и оно даже работало.

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

Читать далее

Я создал вдвое более быстрый лексер, но обнаружил, что узким местом был ввод-вывод

Уровень сложностиСредний
Время на прочтение18 мин
Охват и читатели14K

Я создал лексер ассемблера ARM64 (ну, точнее, сгенерировал его из моего собственного генератора парсера, но пост не об этом), обрабатывающий код на Dart вдвое быстрее официального сканера. Этого результата я добился при помощи статистических методик надёжного измерения малых различий в производительности. Затем я провёл его бенчмарк на 104000 файлов и обнаружил, что узким местом был не мой лексер, а ввод-вывод. Это история о том, как я случайно узнал, почему pub.dev хранит пакеты в виде файлов tar.gz.

Читать далее
1
23 ...