Рубрика «Алгоритмы» - 63

image

Эта неделя была короткой, в понедельник и вторник я продолжал работать над системой 2D-освещения. Остальное время я потратил на реализацию деревьев квадрантов (quadtree).

В этой статье я поделюсь своей реализацией и мыслями, возникшими в процессе её проектирования.

Во-первых, мне нужно сказать, почему я решил реализовать дерево квадрантов.

Quadtree — это структура данных разбиения пространства. Её новное преимущество по сравнению с другими структурами данных заключается в адаптивности. Оно обеспечивает хорошую производительность при вставке, удалении и поиске. То есть мы можем использовать это дерево в динамическом контексте, где данные часто меняются. Более того, эту структуру довольно легко понять и реализовать.

Если разбиение пространства для вас новая тема, то рекомендую прочитать эту статью Роберта Нистрома. Если вы хотите более подробно узнать о деревьях квадрантов, то прочитайте эту или эту статьи.
Читать полностью »

image

Facebook AI Research заявила о разработке системы машинного обучения, которая не дает искусственному интеллекту определять людей по видео. На этой технологии основаны все современные системы распознавания лиц.

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

Я упоминал о левой рекурсии как о камне преткновения несколько раз, и пришло время разобраться с этим. Основная проблема заключается в том, что парсер с лево-рекурсивным спуском мгновенно падает из-за переполнения стека.

Содержание серии статей о PEG-парсере в Python

Рассмотрим это гипотетическое правило грамматики:

expr: expr '+' term | term

Читать полностью »

image

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

BERT может учитывать полный контекст, рассматривая слова, которые идут до и после ключевого, что особенно полезно для понимания цели поисковых запросов. В компании отметили, что теперь в поиске задействованы новейшие тензорные процессоры Google (Google Tensor Processing Unit, Google TPU). Читать полностью »

В начале октября 2019 года в Федеральной антимонопольной службе (ФАС) прошла встреча по привлечению недропользователей (на встрече участвовали представители золотодобывающих компаний) к биржевой торговле драгоценными металлами, как было заявлено в письме ФАС: «в рамках разработки Плана мероприятий по системному развитию организованных торгов на товарных рынках».

Цель этой статьи показать на примерах, что мероприятия, которые обсуждались на встрече для роста ликвидности золота на биржевом рынке РФ, не дадут должного эффекта к росту объема торгов золотом, если не принять во внимание информацию о современной природе ликвидности торгов, о чем собственно и пойдет речь далее по тексту.

Если Вам интересна тема: почему например ликвидность по нефти на биржах РФ далеко отстает от ликвидности нефти на биржах CME и ICE, то стоит продолжить чтение.
Читать полностью »

Рубрика «Читаем статьи за вас». Июль — Сентябрь 2019 - 1

Привет! Продолжаем публиковать рецензии на научные статьи от членов сообщества Open Data Science из канала #article_essense. Хотите получать их раньше всех — вступайте в сообщество!

Статьи на сегодня:

  1. Layer rotation: a surprisingly powerful indicator of generalization in deep networks? (Université catholique de Louvain, Belgium, 2018)
  2. Parameter-Efficient Transfer Learning for NLP (Google Research, Jagiellonian University, 2019)
  3. RoBERTa: A Robustly Optimized BERT Pretraining Approach (University of Washington, Facebook AI, 2019)
  4. EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks (Google Research, 2019)
  5. How the Brain Transitions from Conscious to Subliminal Perception (USA, Argentina, Spain, 2019)
  6. Large Memory Layers with Product Keys (Facebook AI Research, 2019)
  7. Are We Really Making Much Progress? A Worrying Analysis of Recent Neural Recommendation Approaches (Politecnico di Milano, University of Klagenfurt, 2019)
  8. Omni-Scale Feature Learning for Person Re-Identification (University of Surrey, Queen Mary University, Samsung AI, 2019)
  9. Neural reparameterization improves structural optimization (Google Research, 2019)

Читать полностью »

Создаём свою Minecraft: генерация 3D-уровней из кубов - 1

Частично из-за популярности Minecraft, в последнее время наблюдается рост интереса к идее игры, действие которой происходит в состоящем из кубов мире, построенном из 3D-рельефа и заполненного такими элементами, как пещеры, обрывы и так далее. Такой мир — идеальное применение для шума, сгенерированного в стиле моей библиотеки ANL. Данная статья возникла из обсуждений моих предыдущих попыток реализации этой техники. С тех пор в структуре библиотеки появились незначительные изменения.

В предыдущих постах я рассказывал об использовании функций 3D-шума для реализации рельефа в стиле Minecraft. После этого библиотека немного эволюционировала, поэтому я решил вернуться к этой теме. Так как мне пришлось отвечать на множество вопросов по этой системе, я попытаюсь более подробно рассказать о задействованных концепциях. Чтобы базовые концепции были понятнее, я начну с идеи генерации 2D-рельефа, используемого в таких играх, как Terraria и King Arthur's Gold, а затем расширю систему до 3D-примеров наподобие Minecraft. Это позволит мне эффективнее демонстрировать концепции на примере изображений.

Эта система разрабатывалась с учётом следующей абстрактной цели: мы должны иметь возможность передать системе координату определённой точки или ячейки, и определить, какой тип блока должен находиться в этой локации. Мы хотим, чтобы система представляла собой «чёрный ящик»: передаём ей точку, возвращаем тип блока. Разумеется, это относится только к изначальной генерации мира. Блоки в подобных играх могут изменяться действиями игрока, и будет неудобно пытаться описать такие изменения при помощи такой же системы. Подобные изменения должны отслеживаться каким-то иным образом. Эта система генерирует изначальный мир, первозданный и нетронутый руками игрока и других персонажей.
Читать полностью »

image

Я занялся изучением процессов распознавания коллизий, и это привело меня к алгоритму Гилберта — Джонсона — Кирти (Gilbert-Johnson-Keerthi, GJK).

Все примеры кода в посте написаны на TypeScript. В примерах используются созданные мной структуры, которые подробно в посте не рассмотрены. Они просты и их можно посмотреть в репозитории GitHub:

  • Vector
  • IShape
  • Collision

Весь код из поста хранится в репозитории GitHub:

https://github.com/jthomperoo/gjk-ts-implementation

Пост написан на основании этой статьи и рекомендованного в ней видео:

Введение

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

Новый алгоритм поиска пути в Factorio - 1

На прошлой неделе мы говорили в своём блоге об изменениях, которые позволят врагам (biters) не наталкиваться друг на друга, но это было не единственное обновление, связанное с biter-ами. Совпало так, что в обновления этой недели вошло то, над чем мы работали предыдущие несколько недель — обновление системы поиска пути для врагов.

Поиск пути

Когда юнит хочет куда-то переместиться, ему сначала нужно понять, как туда добраться. В самом простом случае можно двигаться прямиком к цели, но на пути иногда возникают препятствия — скалы, деревья, гнёзда врагов (spawners), юниты игрока. Чтобы проложить дорогу, мы должны сообщить функции поиска пути (pathfinder) текущую и конечную позиции, а pathfinder вернёт нам (возможно, через много тактов) путь, который просто является набором промежуточных точек (waypoints), по которым должен двигаться юнит, чтобы добраться до места назначения.

Для выполнения своей работы pathfinder использует алгоритм под названием A* (произносится «A star»). Простой пример поиска пути при помощи A* показан на видео: biter хочет найти путь в обход скал. Функция поиска пути начинает исследовать карту вокруг biter-а (исследование показано белыми точками). Сначала она пытается пойти напрямик к цели, но как только достигает скал, «разливается» в обе стороны, пытаясь найти позицию из которой снова можно будет двигаться к цели.
Читать полностью »

ИИ DeepMind расшифровывает древнегреческие тексты лучше, чем учёные-люди - 1

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

Каждый год, как пишет New Scientist, учёные-археологи открывают десятки новых артефактов с текстом. Со временем многие предметы стали разрушаться, что приводит к потерям фрагментов текста. Какими могут быть пробелы, выясняет наука эпиграфика. Работа эпиграфистов начинается с изучения сохранившихся фрагментов и других подобных текстов.
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js