Pull to refresh
6
0
Send message

L-системы и что они себе позволяют

Reading time3 min
Views7.4K

Вперёд за кроликом, всё ниже и ниже…

Давайте начнём с азов, если брать определение из всем известной и всеми любимой Википедии, то L-система (или же система Линденмайера) — это параллельная система переписывания и вид формальной грамматики. Если говорить простым языком, то L-система состоит из алфавита символов, которые могут быть использованы для создания строк, набора порождающих правил, которые задают правила подстановки вместо каждого символа, начальной строки ( “аксиомы” ), с которой начинается построение, и механизм перевода образованной строки в геометрические структуры. Самым простым примером L-системы может служить задача построения дерева.

Вводные данные:

Строка (далее Аксиома): A B

Переменные (которые мы можем задействовать в построении дерева): A B C

Правило (правило по которому каждая переменная на последующие строке меняется):

Читать далее
Total votes 10: ↑8 and ↓2+6
Comments4

Кроссплатформенный мультиплеер на Godot без боли

Reading time8 min
Views11K

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

Всех, кому интересна эта тема, прошу под кат.

Читать далее
Total votes 13: ↑13 and ↓0+13
Comments6

Может ли разум подделать Вселенную?

Reading time8 min
Views16K

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


Софи Хебден
FQXi Awardees: Маркус Мюллер 1
18 января 2019 г.


Творение космоса.
Credit: Юрий Акурс, iStock

Читать дальше →
Total votes 19: ↑18 and ↓1+17
Comments35

Оптимизация поиска в ширину: как обработать граф с 10 миллиардами состояний

Reading time17 min
Views10K
image

Пару месяцев назад мне наконец пришлось признать, что я недостаточно умён, чтобы пройти некоторые уровни головоломки Snakebird. Единственным способом вернуть себе часть самоуважения было написание солвера. Так я мог бы притвориться, что создать программу для решения головоломки — это почти то же самое, что и решить её самому. Код получившейся программы на C++ выложен на Github. Основная часть рассматриваемого в статье кода реализована в search.h и compress.h. В этом посте я в основном буду рассказывать об оптимизации поиска в ширину, который бы потребовал 50-100 ГБ памяти, чтобы он уместился в 4 ГБ.

Позже я напишу ещё один пост, в котором будет описана специфика игры. В этом посте вам нужно знать, что мне не удалось найти никаких хороших альтернатив грубому перебору (brute force), потому что ни один из привычных трюков не сработал. В игре множество состояний, потому что есть куча подвижных или толкаемых объектов, при этом важна форма некоторых из них, которая может меняться со временем. Не было никакой пригодной консервативной эвристики для алгоритмов наподобие A*, позволяющих сузить пространство поиска. Граф поиска был ориентированным и заданным неявно, поэтому одновременный поиск в прямом и обратном направлении оказался невозможным. Единственный ход мог изменить состояние множеством несвязанных друг с другом способов, поэтому не могло пригодиться ничего наподобие хеширования Зобриста.

Приблизительные подсчёты показали, что в самой большой головоломке после устранения всех симметричных положений будет порядка 10 миллиардов состояний. Даже после упаковки описания состояний с максимальной плотностью размер состояния составлял 8-10 байт. При 100 ГБ памяти задача оказалась бы тривиальной, но не для моей домашней машины с 16 ГБ памяти. А поскольку Chrome нужно из них 12 ГБ, мой настоящий запас памяти ближе к 4 ГБ. Всё, что будет превышать этот объём, придётся сохранять на диск (старый и ржавый винчестер).
Читать дальше →
Total votes 27: ↑26 and ↓1+25
Comments1

Unity: бесконечный процедурно генерируемый город, получаемый при помощи алгоритма WFC (коллапс волновой функции)

Reading time7 min
Views25K
Привет, Хабр!

Как законодатели мод по теме Unity на российском рынке предлагаем вам почитать интересное исследование о практическом использовании алгоритма WFC (Wave Function Collapse), построенного по образу и подобию известного принципа квантовой механики и очень удобного при процедурной генерации уровней в играх. Ранее на Хабре уже публиковался подробный рассказ об этом алгоритме. Автор сегодняшней статьи Мариан Кляйнеберг рассматривает алгоритм в контексте трехмерной графики и генерации бесконечного города. Приятного чтения!

Читать дальше →
Total votes 46: ↑46 and ↓0+46
Comments22

Перенос стиля

Reading time5 min
Views9.3K
Перенос стиля это процесс преобразования стиля исходного к стилю выбранного изображения и опирается на Сверточный тип сети (CNN), при этом заранее обученной, поэтому многое будет зависеть от выбора данной обученной сети. Благо такие сети есть и выбирать есть из чего, но здесь будет применяться VGG-16.

Для начала необходимо подключить необходимые библиотеки

Код объявления библиотек
import time
import torch
from torch.autograd import Variable
import torch.nn as nn
import torch.nn.functional as F
from torch import optim
import torchvision
from torchvision import transforms
from io import BytesIO
from PIL import Image
from collections import OrderedDict
from google.colab import files
Читать дальше →
Total votes 23: ↑22 and ↓1+21
Comments13

Дизайн уровней и геймплея roguelike на примере Cogmind

Reading time25 min
Views9.1K
image

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

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

В этой статье я пройдусь по всем этапам процесса дизайна и реализации, от начала до конца. В процессе создания Beta 8 я сделал много заметок о самом процессе, специально для того, чтобы поделиться ими с читателями и дать чёткую картину происходящего.

Учтите, что в отличие от большинства карт Cogmind, из-за своей природы эта конкретная карта имеет в основном статичную схему и контент, и в ней не так активно используются процедурные методы. Поэтому в процессе отсутствуют некоторые этапы, но их я рассмотрю в отдельной статье. С другой стороны, по большей части статичная карта сама по себе предоставляет уникальные возможности анализа.
Читать дальше →
Total votes 22: ↑20 and ↓2+18
Comments0

nanoFOX — простое RISC-V совместимое ядро

Reading time4 min
Views4.1K

Небольшое вступление:


Идея написания собственного ядра появилась после прохождения школы-семинара по цифровой схемотехнике в городе Томске. На данном мероприятии проводилось знакомство с текущими языками описания аппаратуры (Verilog HDL и VHDL), а также с небольшим процессорным ядром schoolMIPS. Для понимания устройства ядер было принято решение изобрести собственный велосипед, следуя по пути развития schoolMIPS, но взяв за основу другую систему команд. Вследствие роста популярности RISC-V и открытости его системы команд (MIPS на момент начала написания ядра не имел открытую систему команд) для осуществления разработки будущего ядра был выбран набор инструкций RISC-V, а именно RV32I. RV32I имеет небольшой набор базовых инструкций (37 без учёта специальных) и при желании его можно расширить, например, добавив инструкции целочисленного умножения и деления (RV32M) или поддержку сокращённых инструкций (compressed instructions) (RV32C). Также данный проект задумывался как образовательный, поэтому было решено по максимуму увеличить наглядность работы ядра для эффективной демонстрации его работы.


По аналогии с schoolMIPS были реализованы следующие версии ядра:


  1. Однотактная версия (00_simple_risc_v_cpu).
  2. Однотактная версия с поддержкой инструкций lw/sw (load word/store word) (01_simple_risc_v_cpu_lwsw).
  3. Конвейерная версия (5-ти стадийный конвейер) (02_pipe_risc_v_cpu).

На текущий момент описывается следующая версия ядра (03_pipe_risc_v_cpu_fc) с полным набором команд RV32I (без учёта некоторых специальных).

Читать дальше →
Total votes 23: ↑23 and ↓0+23
Comments15

PsyGuide: Дефицит внимания. #0001/1001

Reading time10 min
Views13K
*** эмоциональная ночная сказка Шахерезады — старшей дочери визиря, словившей маниакальный психоз, сопровождавшийся ощущением собственной избранности, неотразимости и интеллектуального превосходства над миром, толкнувшим ее, рискуя своей головой, отправиться к безумному царю Шахрияру, чтобы несправедливый мир сделать справедливым и остановить бессмысленные ежедневные казни молодых красивых персидских дев.

Выражение “дефицит внимания” в психиатрической практике обычно рассматривается в разрезе симптоматики СДВГ (синдром дефицита внимания и гиперактивности, F90 МКБ-10). Считается, что неустойчивость внимания таких пациентов является патологией, требующей коррекции. Остальные, жалующиеся на плохую концентрацию, — просто лентяи. И некоторые психиатрические основания под этой позицией имеются. Хотя незакрытым остается вопрос, куда отнести лентяев и разгильдяев, которые не хотят быть лентяями и разгильдяями, испытывающими явные страдания, но не преуспевающими в бесконечной борьбе за ”лучшего себя”. Впрочем, у меня есть ответ и на этот вопрос.
Читать дальше →
Total votes 15: ↑15 and ↓0+15
Comments25

Помощь и просьба о ней. Статья про информационную безопасность для рядовых пользователей

Reading time118 min
Views100K
Я предлагаю вам некоторые шаги по повышению безопасности и приватности в интернет сети (и не только) для рядовых пользователей. Обоснование почему это необходимо – в начале статьи. Для тех, кто всё знает и недоумевает, почему этот текст находится здесь — просьба прочитать пункт «Для тех, кто уже всё знает». Три месяца назад я написала этот текст, но в связи с моей необразованностью и нескончаемым потоком новостей о новых угрозах безопасности, мне надоело переделывать, так что пусть в этом тексте остаётся всё как было).
Читать дальше →
Total votes 30: ↑27 and ↓3+24
Comments98

Аскота 170 — механический компьютер и советский палеоэндемик

Reading time13 min
Views25K
В мире наступили восьмидесятые. IBM захватывал рынок профессиональных компьютеров своими PC и PC XT — родоначальниками всех современных настольных компьютеров. Джобс одну за другой выпускал новые модели Apple. Commodore 64 и ZX Spectrum гремели по миру. А в это время в советском блоке продолжали выпускаться Ascota 170 — механические компьютеры родом из начала пятидесятых. Почему-то, в рунете (да и в остальном интернете тоже) мало говорят об этих удивительных машинах, едва ли не единственных серийно (больше трёхсот тысяч с 1955 до 1983 годов) выпускавшихся Тьюринг-полных механических компьютерах. Я и сам о них узнал только тогда, когда Аскота случайно попала мне в руки.
Надеюсь, моя статья сможет изменить это.


Моя Аскота закончила считать квадратный корень из 2.
Total votes 128: ↑127 and ↓1+126
Comments79

Случайные числа и децентрализованные сети: имплементации

Reading time17 min
Views2.9K

Введение


function getAbsolutelyRandomNumer() {
        return 4; // returns absolutely random number!
}

Как и в случае с концепцией абсолютно стойкого шифра из криптографии, реальные протоколы “Publicly Verifiable Random Beacon” (далее PVRB) лишь пытаются максимально приблизиться к идеальной схеме, т.к. в реальных сетях в чистом виде она неприменима: договариваться надо строго об одном бите, раундов должно быть много, а все сообщения должны быть идеально быстрыми и всегда доставляться. Разумеется, в реальных сетях это не так. Поэтому, при проектировании PVRB под конкретные задачи в современных блокчейнах, помимо невозможности контроля получаемого рандома и криптографической стойкости, возникает еще много чисто архитектурных и технических проблем.

Читать дальше →
Total votes 20: ↑20 and ↓0+20
Comments4

Печатная плата заменяет два линейных двигателя

Reading time2 min
Views46K


Предлагаемая конструкция показывает, насколько безграничны возможности двух довольно старых изобретений — печатной катушки и линейного двигателя. Одна плата заменяет сразу два таких двигателя. Положите на неё магнит, и он будет перемещаться в двумерном пространстве. Положите несколько — они будут перемещаться синхронно. Новую электронику разрабатывать не придётся, подойдут существующие драйвера шаговых двигателей.
Читать дальше →
Total votes 114: ↑114 and ↓0+114
Comments101

Как сделать из сайта приложение и выложить его в Google Play за несколько часов. Часть 1/2: Progressive Web App

Reading time8 min
Views97K


Наверное, все близкие к веб-разработке люди уже наслышаны о Progressive Web App. Ещё бы! Эта технология практически уравняла веб и мобильную разработку с точки зрения распространения продуктов и вовлечённости пользователей.

Да, современный фронтенд, написанный, например, на React, работает как приложение. Но вот только скачивается это приложение в браузер и запускается из него. В этом и заключается огромный гандикап, который всегда имела мобильная разработка. Давайте подумаем, чем с точки зрения обычного пользователя, «приложение» отличается от «сайта». Сразу в голову приходит, что приложение в телефоне, а сайт на компьютере. Но ведь есть мобильный браузер, так что сайт и в телефоне тоже. Тогда остаётся 3 существенных отличия:
Читать дальше →
Total votes 52: ↑52 and ↓0+52
Comments31

Огромный открытый датасет русской речи

Reading time3 min
Views35K
image

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

Мы торопимся исправить это годами длящееся недоразумение.

Итак, мы предлагаем вашему вниманию набор данных из 4000 часов аннотированной устной речи, собранный из различных интернет-источников.

Подробности под катом.
Читать дальше →
Total votes 101: ↑96 and ↓5+91
Comments50

Создание надёжного и проверяемого ИИ: соответствие спецификациям, надёжное обучение и формальная верификация

Reading time9 min
Views3.6K
Ошибки и ПО шли рука об руку с самого начала эпохи программирования компьютеров. Со временем разработчики выработали набор практик по тестированию и отладке программ до их развёртывания, однако эти практики уже не подходят к современным системам с глубоким обучением. Сегодня основной практикой в области машинного обучения можно назвать тренировку на определённом наборе данных с последующей проверкой на другом наборе. Таким способом можно подсчитать среднюю эффективность работы моделей, однако важно также гарантировать надёжность, то есть приемлемую эффективность в худшем случае. В данной статье мы опишем три подхода для точного определения и устранения ошибок в обученных прогнозирующих моделях: состязательное тестирование [adversarial testing], устойчивое обучение [robust learning] и формальную верификацию [formal verification].

Системы с МО по определению не устойчивы. Даже системы, выигрывающие у человека в определённой области, могут не справиться с решением простых задач при внесении малозаметных различий. К примеру, рассмотрим проблему внесения возмущений в изображения: нейросеть, способную классифицировать изображения лучше людей, легко заставить поверить в то, что ленивец – это гоночный автомобиль, добавив небольшую долю тщательно рассчитанного шума в изображение.
Читать дальше →
Total votes 14: ↑12 and ↓2+10
Comments1

Как новые технологии приближают мечту о бессмертии?

Reading time5 min
Views4.6K


Новое будущее, картину которого мы описали в предыдущей статье о подключении человека к Интернету по предположению ряда исследователей ожидает человечество в ближайшие 20 лет. В чём в целом вектор развития человечества?

Значительные финансовые потоки вкладывают в развитие качества жизни человека. Основные источники ухудшения качества жизни в целом — это всевозможные заболевания и смертность. Работа над решением этих проблем идёт по семи главным направлениям:
Читать дальше →
Total votes 13: ↑12 and ↓1+11
Comments8

О предвзятости искусственного интеллекта

Reading time12 min
Views9.2K


tl;dr:


  • Машинное обучение ищет закономерности в данных. Но искусственный интеллект может быть «предвзят» — то есть, находить неверные паттерны. К примеру, система обнаружения рака кожи по фотографии может обращать особое внимание на снимки, сделанные во врачебном кабинете. Машинное обучение не умеет понимать: его алгоритмы лишь выявляют закономерности в числах, и если данные не репрезентативны, таким будет и результат их обработки. А отлавливать такие баги может быть непросто из-за самой механики машинного обучения.
Читать дальше →
Total votes 22: ↑22 and ↓0+22
Comments11

Google News and Leo Tolstoy: visualizing Word2Vec word embeddings using t-SNE

Reading time7 min
Views13K

Everyone uniquely perceives texts, regardless of whether this person reads news on the Internet or world-known classic novels. This also applies to a variety of algorithms and machine learning techniques, which understand texts in a more mathematical way, namely, using high-dimensional vector space.

This article is devoted to visualizing high-dimensional Word2Vec word embeddings using t-SNE. The visualization can be useful to understand how Word2Vec works and how to interpret relations between vectors captured from your texts before using them in neural networks or other machine learning algorithms. As training data, we will use articles from Google News and classical literary works by Leo Tolstoy, the Russian writer who is regarded as one of the greatest authors of all time.

We go through the brief overview of t-SNE algorithm, then move to word embeddings calculation using Word2Vec, and finally, proceed to word vectors visualization with t-SNE in 2D and 3D space. We will write our scripts in Python using Jupyter Notebook.

Read more →
Total votes 28: ↑28 and ↓0+28
Comments0
1

Information

Rating
Does not participate
Registered
Activity