Разбираемся в АА-деревьях (Python)

АА-дерево - это модификация красно-черного дерева с целью упрощения реализации
Как его реализовать и как оно работает на конкретных примерах - вот о чем эта статья

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

АА-дерево - это модификация красно-черного дерева с целью упрощения реализации
Как его реализовать и как оно работает на конкретных примерах - вот о чем эта статья

Привет, Хабр!
Сегодня я расскажу и покажу, как сделать Genetic Algorithm(GA) для нейросети, чтобы с помощью него она смогла проходить разные игры. Я его испробовал на игре Pong и Flappy bird. Он себя показал очень хорошо. Советую прочитать, если вы не читали первую статью: "Создание простого и работоспособного генетического алгоритма для нейросети с Python и NumPy" , так как я доработал свой код который, был показан в той статье.
Я разделил код на две скрипта, в одной нейросеть играет в какую-то игру, в другой обучается и принимает решения(сам генетический алгоритм). Код с игрой представляет из себя функцию которая возвращает фитнес функцию (она нужна для сортировки нейросетей, например, сколько времени она продержалась, сколько очков заработала и т.п.). Поэтому код с играми(их две) будет в конце статьи. Генетический алгоритм для нейросети для игры Pong и игры Flappy Bird различаются лишь параметрами.
Используя скрипт, который я написал и описал в предыдущей статье, я создал сильно изменённый код генетического алгоритма для игры Pong, который я и буду описывать больше всего, так как именно на него я опирался, когда я уже создавал GA для Flappy Bird.
Вначале нам потребуется импортировать модули, списки и переменные:

Метод главных компонент (Principal Component Analysis или же PCA) — алгоритм обучения без учителя, используемый для понижения размерности и выявления наиболее информативных признаков в данных. Его суть заключается в предположении о линейности отношений данных и их проекции на подпространство ортогональных векторов, в которых дисперсия будет максимальной.
Такие вектора называются главными компонентами и они определяют направления наибольшей изменчивости (информативности) данных. Альтернативно суть PCA можно определить как линейное проецирование, минимизирующее среднеквадратичное расстояние между исходными точками и их проекциями.

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

Кластеризация — это набор методов без учителя для группировки данных по определённым критериям в так называемые кластеры, что позволяет выявлять сходства и различия между объектами, а также упрощать их анализ и визуализацию. Из-за частичного сходства в постановке задач с классификацией кластеризацию ещё называют unsupervised classification.
В данной статье описан не только принцип работы популярных алгоритмов кластеризации от простых к более продвинутым, но а также представлены их упрощённые реализации с нуля на Python, отражающие основную идею. Помимо этого, в конце каждого раздела указаны дополнительные источники для более глубокого ознакомления.

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

Пару недель назад я прочитал о запавшем мне в душу челлендже по обработке миллиарда строк, поэтому захотел решить его на Go.
Я немного опоздал, соревнования проводились в январе. И на Java. Меня не особо интересует Java, зато давно интересует оптимизация кода на Go.
Этот челлендж был очень прост: обработать текстовый файл названий метеорологических станций и температур, и для каждой станции вывести минимальное, среднее и максимальное значение. Чтобы упростить задачу, было ещё несколько ограничений, однако я проигнорировал те, что относятся только к Java.

В статье хотим поделиться своим опытом реализации алгоритма решения задачи маршрутизации на основе метода имитации отжига в Norbit CDS – умной системе управления доставкой.
Проанализировав материалы, можно обнаружить различные предлагаемые способы решения VRP-задач (Vehicle Routing Problem). Главная их цель – планирование маршрутов для транспортных средств оптимальным способом. Основными критериями, как всегда, остаются наикратчайший путь для транспортного средства и доставка услуг во все заданные точки. В рабочем месте логиста Norbit CDS задача не отличается.
Создавая свой алгоритм оптимизации построения маршрутов доставки, мы исходили из следующих входных данных: количество транспортных средств, число заявок для распределения с учетом их габаритов и окон желаемого времени доставки. Для реализации был выбран метод отжига.

В этом материале мы поговорим об устройстве компонента‑декодера в системах машинного обучения, построенных по архитектуре «трансформер», уделив особое внимание отличию декодера от энкодера. Уникальной особенностью декодеров является то, что они похожи на циклы. Они, по своей природе, итеративны, что контрастирует с линейными принципами обработки данных, на которых основаны энкодеры. В центре декодера находятся две модифицированные формы механизма внимания: механизм множественного внимания с маскировкой (masked multi‑head attention) и механизм множественного внимания энкодера‑декодера (encoder‑decoder multi‑head attention).
Слой множественного внимания с маскировкой в декодере обеспечивает последовательную обработку токенов. Благодаря такому подходу предотвращается воздействие последующих токенов на сгенерированные токены. Маскировка важна для поддержки порядка следования и согласованности сгенерированных данных. Взаимодействие между выходом декодера (из слоя множественного внимания с маскировкой) и выходом энкодера организовано с помощью механизма множественного внимания энкодера‑декодера. Этот последний шаг даёт декодеру доступ к входным данным.
Мы, кроме того, продемонстрируем реализацию этих концепций с использованием Python и NumPy. Мы создали простой пример перевода предложения с английского языка на португальский. Практическая демонстрация обсуждаемых здесь идей поможет проиллюстрировать работу внутренних механизмов декодера в трансформерах и позволит лучше понять роль декодеров в больших языковых моделях (Large Language Model, LLM).

Построение годографа точки звуковой волны в изотропной среде при линейном изменении скорости с высотой. Возврат к геометрической акустике.


Недавно я наткнулся на пост Алехандры Гонсалес (@blyxyas), в котором рассказывается о попытке сжать игру крестики-нолики в минимальное количество битов. Она пришла к решению из 18 битов. Это заставило меня задуматься: а можно ли улучшить этот результат?
Как говорит Алехандра, существует 765 возможных состояний игры1. Мы можем просто назначить число каждому состоянию, что займёт 10 битов2. Но, по словам Алехандры, это «скучно». С таким описанием игры мы практически ничего не сможем сделать. Когда будет нужно считать значение из конкретной ячейки или перейти из одного состояния в другое, на практике нам придётся использовать таблицу поиска, сопоставляющую каждое число с более крупным и структурированным описанием, что делает бессмысленным саму идею сжатого описания.
Решим такую алгоритмическую задачу: дано множество точек на плоскости, имеющих метки 0 или 1. Требуется выделить область
, в которой отношение числа 1 к числу 0 максимально, при условии, что число нулей в этой области не меньше заданного числа.

В предыдущей статье мы уже затрагивали задачу реконструкции 3D-объектов по их 2D-изображениям. В этой же углубимся в реконструкцию с головой! Вообще говоря, как мне кажется, сейчас мы рассмотрим гораздо более концептуально интересные методы, а именно - HSP и Mesh R-CNN. Это база, которая просто должна осесть в головах всех любителей ИИ в 3D!
Хоть убейте, не нашёл отличий. Впервые увидел на Коде Дурова, там, как обычно, не дали подробностей. Ключи используются от устройств, ну и что? Сейчас не также? Также. Приватный ключ здесь, публичный остальным, приватный никому не показываем. Всё, пошло поехало.
Но это же Apple! Не может всё так быть просто. Окей, ищу дальше, натыкаюсь на securitylab, там уже побольше подробностей.

Привет, Хабр!
Собственно, а все ли поняли мем?
Человек прошел обучение, отбор посредством собеседования, имеет багаж знаний. После освоения навыков, набравшись практики (в наши дни стать junior-разработчиокм без практики нереально) добравшись до цели в виде трудоустройства. Не успев толком продышаться сразу сталкивается с такой вещью как бизнес процессы. Пытается понять что от него хотят коллеги по работе и как тут вообще все устроено. Он чувствует растерянность. Но тут стоит оговориться что бизнес это конкурентная среда. Там всем приходится непросто. Смотрите: программист это ремесленник, инструмент которым он пользуется сложный и не понятный - это его собственный мозг. Своим мозгом он обслуживает бизнес процессы. Решает задачи за счет которых приложение работодателя остается в рабочем состоянии и развиваются с точки зрения прибыли. Поток этих задач такой, что нет времени плавно погружаться в процесс, надо срочно в бой. Если вы не знакомы с программированием, взгляните на примеры кода и вы примерно ощутите тоже самое что junior-разработчик в свой первый рабочий день.

Здравствуйте!
Расскажу о серии задач, которая случайно возникла в процессе решения другой задачи. Мне на глаза попалось равенство:
81 * 27 = 2187
– Интересно, – подумал я. – А бывают ли ещё такие числа, чтобы цифры слева и справа повторялись?

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

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

Привет! Меня зовут Артем. Я работаю Data Scientist'ом в компании МегаФон (платформа для безопасной монетизации данных OneFactor).
В данной статье разберемся что такое live coding интервью и как к нему готовиться.
Материал в первую очередь будет полезен Data Scientist'ам и ML инженерам, при этом некоторые разделы, например, Алгоритмы и структуры данных подойдут всем IT специалистам, которым предстоит пройти секцию live coding.