• Информационные системы с понятийными моделями. Часть вторая

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

      Здесь, во второй части, поговорим о том, как может быть реализована полнофункциональная информационная система, основанная на понятийном моделировании предметных областей. Теперь уже в деталях рассмотрим информационную систему LANCAD, которую в нашей компании “ИНСИСТЕМС” используют для организации проектной деятельности по разработке проектно-сметной документации для строительства.

      Следует заметить, что появление информационной системы LANCAD явилось результатом реализации нескольких крупных проектов компании.

      Читать дальше →
    • Использование ядерной регрессии для прогноза спроса в сетевых магазинах

      Доброго времени суток, уважаемые хабровчане! В данной публикации речь пойдет о модели прогноза спроса на товары в сетевых магазинах и ее реализации на C++.

      Постановка задачи


      Допустим, у нас имеется сеть магазинов, в каждый из которых завозят товары. Товары (для модели прогноза) попадают в каждый магазин произвольным образом. За некий период времени мы имеем статистику — сколько в каждом магазине продано тех или иных товаров. Требуется спрогнозировать продажи товаров за период времени, аналогичный выбранному, для всех магазинов по всем товарам, которые в них не завозились.

      Примечания и допущения постановки задачи
      • Товары, завезенные в магазины, не заканчивались за период сбора статистики.
      • Если в магазин завезли новые для него товары (при том, что старые товары остались), продажи не перераспределяться между старыми и новыми товарами. Статистика по старым товарам останется прежней, просто кто-то дополнительно покупает новые товары. Прогнозирование при невыполнении этого условия потребует дополнительных данных о том, как насыщается спрос при увеличении количества товаров.
      • Период, за который собирали статистику, и период, для которого нужно сделать прогноз, идентичны по спросу.
      Метод решения и исходный код под катом
      • +11
      • 2,4k
      • 5
    • Информационные системы с понятийными моделями. Часть первая

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

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

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

        Читать дальше →
      • Ричард Хэмминг: «Необъяснимо высокая эффективность математики»

        • Перевод
        «Это самое глубокое эссе, которое я видел относительно философии науки; на самом деле, оно важно для всего нашего понимания мысли, познания или реальности.»

        image

        Пролог


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

        Человек, насколько мы знаем, всегда задавался вопросом о себе, мире вокруг и смысле жизни. Во множестве мифов повествуется о том почему и как Бог или боги создали человека и вселенную. Это теологические объяснения. Их отличительная черта — нет смысла спрашивать почему вещи таковы, как они есть, если боги создали их такими.

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

        Из этих ранних попыток объяснить мир постепенно возникла философия, также как и современная наука. Не то чтобы наука объясняет «почему» вещи таковы, как они есть — гравитация не объясняет «почему» предметы падают, но наука дает нам столь детальное объяснение «каким образом» это происходит, что у нас появляется чувство, будто мы знаем «почему». Давайте проясним; море связанных между собой фактов позволяет науке сказать «почему» вселенная именно такая.
        Читать дальше →
      • Как обновление Rust 1.26 ускорило мой код в три с лишним раза

        • Перевод
        Хочу поделиться небольшой историей о мощи LLVM и преимуществах языков высокого уровня над ассемблером.

        Я работаю в компании Parity Technologies, которая поддерживает клиент Parity Ethereum. В этом клиенте нам нужна быстрая 256-битная арифметика, которую приходится эмулировать на программном уровне, потому что никакое оборудование не поддерживает её аппаратно.

        Долгое время мы параллельно делаем две реализации арифметики: одну на Rust для стабильных сборок и одну со встроенным ассемблерным кодом (который автоматически используется nightly-версией компилятора). Мы так поступаем, потому что храним 256-битные числа как массивы 64-битных чисел, а в Rust нет никакого способа умножить два 64-битных числа, чтобы получить результат более 64 бит (так как целочисленные типы Rust только доходят до u64). Это несмотря на то, что x86_64 (наша основная целевая платформа) нативно поддерживает 128-битные результаты вычислений с 64-битными числами. Так что мы разделяем каждое 64-битное число на два 32-битных (потому что можно умножить два 32-битных числа и получить 64-битный результат).
        Читать дальше →
      • Хроматическое число плоскости не меньше 5

          Задача о хроматическом числе плоскости формулируется следующим образом: в какое наименьшее число цветов можно раскрасить плоскость так, чтобы любые две точки на расстоянии 1 были покрашены в различные цвета?

          Эту задачу сформулировали Хуго Хадвигер и Пал Эрдёш в сороковых годах XX века. Независимо от них примерно в то же самое время этой задачей занимались Эдуард Нелсон и Дж. Р. Исбелл. После работы Хадвигера 1961 года об открытых на тот момент проблемах, хроматическое число плоскости стало активно изучаться.

          Сразу же было показано, что в 3 цвета плоскость требуемым образом раскрасить нельзя, однако 7 цветов достаточно. Действительно, легко выбрать на плоскости несколько точек так, что некоторые из них находятся на расстоянии ровно 1 (такая конструкция точек называется графом единичных расстояний), и затем перебором показать, что в 3 цвета эти точки раскрасить невозможно. Примеры таких графов — веретено Мозера и граф Голомба приведены на картинке ниже. Чтобы показать, что 7 цветов достаточно, замостим плоскость правильными шестиугольниками со стороной 0.4 и закрасим их по определённому паттерну, как на картинке ниже. Тогда, как несложно убедиться, концы любого отрезка длины 1 будут лежать в разных шестиугольниках различных цветов.



          Однако, с тех пор никто не мог уточнить ни верхнюю, ни нижнюю границы. Задача получила название Проблема Нелсона — Эрдёша — Хадвигера. Прошло 60 лет, и вот, в апреле 2018 года математик-любитель Обри де Грей предъявил граф единичных расстояний, который нельзя покрасить в 4 цвета.
          Читать дальше →
          • +31
          • 7,7k
          • 8
        • Ой, у вас баннер убежал!

          Ну. И что?
          Реклама
        • Инверсная кинематика в двухмерном пространстве

          • Перевод

          Часть 1. Математика



          Введение


          Мы так привыкли к взаимодействию с окружающим нас миром, что не задумываемся о том, насколько сложно двигаются наши руки и ноги. В академической литературе задача управления манипулятором робота называется инверсной кинематикой. Кинематика обозначает "движения", а понятие "инверсная" связано с тем, что обычно мы не управляем самой рукой. Мы управляем «двигателями», поворачивающими каждую отдельную часть. Инверсная кинематика — это задача определения того, как перемещать эти двигатели, чтобы сдвинуть руку в конкретную точку. И в своём общем виде эта задача чрезвычайно сложна. Чтобы вы понимали, насколько она сложна, то можете вспомнить о таких играх, как QWOP, GIRP или даже Lunar Lander, в которой вы выбираете не куда двигаться, а какие мускулы (или ускорители) приводить в действие.

          Задача управления подвижными приводами распостраняется даже на область робототехники. Вас не должно удивлять то, что на протяжении веков математики и инженеры смогли разработать множество решений. В большинстве 3D-редакторов и игровых движков (в том числе и в Unity) есть наборы инструментов, позволяющих выполнять риггинг человекоподобных и звероподобных существ. Для различных схем (манипуляторов роботов, хвостов, щупалец, крыльев и т.д.) встроенных решений обычно не существует.
          Читать дальше →
          • +36
          • 6,6k
          • 3
        • Математическое моделирование хабро-будущего

          image

          Неделю назад на Хабре появился очередной пост, что Хабр уже не тот. Безотносительно к затрагиваемым в нем темам заинтересовал вопрос о системе рейтинга и кармы — некоторые видят деградацию или сползание ресурса «не туда» именно в ней.

          Ни в коей мере не критикуя нынешнюю систему и не влазя во внутренние дела администрации захотелось исследовать этот вопрос с теоретической стороны — нахождение оптимальной системы градации пользователей с помощью элементарных математических методов.
          Читать дальше →
          • –10
          • 1,3k
          • 1
        • Пронумеровать все действительные числа на отрезке [0,1]

            В качестве доказательства несчетности действительных чисел во всех учебниках по теории множеств приводится так называемый диагональный метод Кантора (подробнее можно ознакомиться в книге «Что такое математика?», авторы Курант, Роббинс, §4. Математический анализ бесконечного. 2. Счетность множества рациональных чисел и несчетность
            континуума.). Данный метод доказывает несчетность подмножества действительных чисел, принадлежащих диапазону [0,1]. Однако, если присмотреться к доказательству, становится ясно, что оно не учитывает экспоненциальный рост возможных вариантов с каждым увеличиеним порядкового номера в десятичной дроби.
            Читать дальше →
          • Теория вычислений. Введение в конечные автоматы

            Спойлер
            Cкажу cразу, что не буду объяснять слишком формально.

            Конечные автоматы (finite-state machine)


            Это до предела упрощенная модель компьютера имеющая конечное число состояний, которая жертвует всеми особенностями компьютеров такие как ОЗУ, постоянная память, устройства ввода-вывода и процессорными ядрами в обмен на простоту понимания, удобство рас­суждения и легкость программной или аппаратной реализации.

            С помощью КА можно реализовать такие вещи как, регулярные выражения, лексический анализатор, ИИ в играх и тд.

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

            Таблица переходов — В ней хранятся переходы для текущего состояния и входного символа. Простейшая реализация может быть как двумерный массив.

            Пример 1
            • По горизонтали вверху находятся возможные входные символы.
            • По вертикали слева находятся текущие возможные состояния.

            image

            Здесь видно, что из состояния 0 в состояние 1 можно попасть только, если у нас будет входной символ 'a', из состояния 1 в состояние 2, если символ 'b'.


            Текущее состояние — множество состояний в котором автомат может находиться в данный момент времени.

            Стартовое состояние — состояние откуда КА начинает свою работу.

            Заключительное состояние — множество состояний в которых автомат принимает определенную цепочку символов, в ином случае отвергает.
            Читать дальше →
            • +19
            • 6,8k
            • 8
          Самое читаемое