Парадигму UNITS в массы

У первой статьи («Реальность существует и это надо учитывать» б https://habr.com/ru/articles/776550/) были очень интересные и содержательные комментарии, среди которых были озвучены идеи о необходимости примеров. С одной стороны это правильно, потому что на примерах можно вырабатывать практические навыки. С другой же, примеры могут создать впечатление, что речь только о том что совпадает с примерами.

Грубо говоря, если сказать «какой-нибудь лесной хищник, например, медведь», то есть риск того, что это поймут как «именно и только медведь»

Но без примеров и правда нельзя, поэтому — поехали.

Парадигму UNITS в массы!

Парадигму UNITS в массы!

Парадигма UNITS

  1. У величин должны быть свойства, указывающие на их физический смысл

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

  3. Свойства и размерности величин должны соответствовать физическому смыслу проводимого расчёта

  4. Числовое значение величин должно соответствовать их физическому смыслу в контексте выполняемого расчёта

  5. У оператора должна быть возможность проигнорировать любые несовпадения и сознательно выполнить расчёт, не имеющий физического смысла

… в примерах

1. У величин должны быть свойства, указывающие на их физический смысл

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

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

Почти 20 лет назад европейские представители Honda сделали вот такое объявление

«Начиная с 2007 года, технические мощностные характеристики двигателей общего назначения Honda будут рассчитываться в соответствии с SAE J1349 по «чистой» мощности. В этих расчетах изменен способ измерения мощности двигателя, что приведет к смене опубликованных в 2006 году значений мощностей двигателей. «Чистая» мощность двигателя рассчитывается с установленным воздушным фильтром и глушителем. «Гросс» мощность расчитывается без них. Необходимо заметить, что наши двигатели и их мощность не изменится.»

То есть, например для двигателя Honda GX120 мощность раньше указывалась «Максимальная мощность: 2.9 кBт (4 л.c.) / 3600 об/мин», а потом стало указываться «Полезная мощность: 2.4 кBт (3.2 л.c.) / 3600 об/мин » и «Продолжительная мощность: 2.1 кBт (2.8 л.c.) / 3600 об/мин»

Если взять данные 2006 года за 100%, получаем 80% и 70% соответственно. То есть, на одном и том же двигателе, при одних и тех же оборотах может быть указана заметно разная мощность.

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

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

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

Что измеряли, чем, в чём, с какой точностью и т.д.

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

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

И тут я снова вернусь к вопросу размерности вязкости жидкости. У предыдущей статьи возникло очень обсуждение этого вопроса (https://habr.com/ru/articles/776550/comments/#comment_26207460). И сразу скажу, что мой собеседник прав, но прав он с позиции узкого специалиста инкорпорированного в профессиональную среду.

Что именно мы там обсуждаем.

Я говорю, что трёхэтажная размерность »(Н\*м)/((м/с) * м^2)» является отражением физического смысла явления, а »Па\*с» — нет.

Так почему же @Andy_U прав?

А прав он потому, что размерность Па*с является отражением универсальной формулы расчёта упругой деформации. Мы берём гипотетический бесконечно малый параллелепипед, называем его тензором и нам становится доступна вся мощь дифференциального исчисления. А вместе с этим мы получаем готовый матаппарат и программное обеспечение для моделирования.

Но в реальности ничего этого нет, в реальности есть дощечка с какой-то площадью, на которую действует сила, под которой есть слой жидкости, и которая развивает скорость.

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

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

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

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

3. Свойства и размерности величин должны соответствовать физическому смыслу проводимого расчёта

И тут будет уместен пример, которого не было в первой статье — «кВт/ч».

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

Да, вы можете разделить мощность на время и получить числовое значение, но будет ли это значение иметь физический смысл?

Мощность умноженная на время это энергия. Это то, за что вы платите и что нужно вам для создания единицы продукции. А что такое мощность делённая на время? Может ли эта величина возникнуть в проводимом вами расчёте и создаваемой вами модели?

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

Кстати, можно представить себе вариант, когда с размерностью всё в порядке, например при умножении «ширина\*ширина\*высота» будет получена размерность соответствующая объёма (например, «м^3»). Но будет ли этот результат иметь физический смысл?

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

4. Числовое значение величин должно соответствовать их физическому смыслу в контексте выполняемого расчёта

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

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

И в поисках примера можно залезть в комментарии первой статье

«Чтобы не получалось, что у стальной балки длиной 1 метр прогиб 7 километров, как мне студенты сдавали.»

https://habr.com/ru/articles/776550/comments/#comment_26204292, @Jeshua

И надо понимать, что кроме отдельных физических свойств это могут быть характеристики сложных аппаратов: вес, скорость, грузоподъёмность, потребление топлива и т.д.

Например, мы можем взять двигатели из п.1 и, помня о п.3, вычислим удельный расход топлива. У нас же есть график работы двигателей, их мощность и отчётность по расходу топлива. Значит, делаем простой расчёт, в котором нам помогает п.2 и размерность «г/(л.с.*ч)».

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

Да, я не дам гарантии, что это сработает в 100% случаев, но это увеличит ваши шансы на создание правильной модели того, что вы там собрались моделировать.

5. У оператора должна быть возможность проигнорировать любые несовпадения и сознательно выполнить расчёт, не имеющий физического смысла

И, наконец, пункт который так же получил свою ветку обсуждения в комментариях — кто должен решать что можно, а что нельзя: программист или пользователь?

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

Например, упомянутое выше «кВт/ч», над которым можно насмехаться и подавать как признак безграмотности. Это ведь признак безграмотности, да?

А вот и нет.

Есть величина имеющая одновременно и размерность «кВт/ч» и физический смысл — скорость измерения мощности.

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

И если вы генерируете мощность 10 мВт , а к часу ИКС нужно 15 мВт, то скорость изменения мощности позволяет вычислить момент времени, когда надо начинать процесс наращивания мощности.

Из этого следует, что даже если в программе есть встроенные словари, содержащие допустимые размерности, диапазоны и т.д., то пользователь должен иметь возможность проигнорировать предупреждение.

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

Бонус — DDD

И тут уместно обратить внимание на комментарий, не получивший должного внимания в обсуждении первой статьи.

«Специально для Вас придумали DDD — там как раз во главе угла стоит бизнес-логика и то, как её видит и что от неё хочет эксперт.»

https://habr.com/ru/articles/776550/comments/#comment_26204990, @bonArt0

И правда, у нас же есть эксперты, у нас есть аналитики, у нас есть несколько команд, которые независимо друг от друга изучают суть моделируемого предприятия и общими усилиями создают качественный цифровой двойник объекта. И всё это происходит в рамках философии «Предметно-ориентированное проектирование» / «Domain-driven design».

Да! Всё так и должно быть.

Вот только в реальности всё не так.

Сейчас Python, машинное обучение и прочие штуки преподают и в школах и на онлайн-курсах.

Это модно.
Это выгодно.
Это перспективно.
Это массовые свежеобученные работники не самой высокой квалификации, которые разбредаются по самым разным местам работы.

Не все из них хотят и могут стать высококлассными аналитиками, и не у всех работодатели захотят раскошелиться на тех самых высококлассных аналитиков.

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

Давайте будем честными, человек, увидевший в ютуб ролике рекламную интеграцию онлайн курсов со скидкой от 50%, и решивший воспользоваться обещанным «гарантированным трудоустройством» чтобы мощно «войти в айти», этот человек не всегда будет заниматься глубокой аналитикой.

А вот взять и за недорого что-то по быстрому сделать для не очень богатого заказчика, это очень даже может быть.

И можно дать этим людям простой и понятный набор правил, который они смогут применять в своей работе.

Повторюсь, ПРОСТОЙ и ПОНЯТНЫЙ.

Пусть над их рабочим столом висит распечатанная бумажка с текстом

ПАРАДИГМА UNITS

  1. Пиши в базу откуда взялись данные и что они значат.

  2. Используй полные размерности и следи чтобы записанная формула совпадала с полной размерностью.

  3. Составь словарик того что может быть в твоём расчёте и следи чтобы не появлялось лишнего.

  4. Составь табличку минимумов и максимумов важных переменных и следи чтобы значения не вылезали за границы.

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

И если люди начнут следовать этим простым правилам, то, возможно, всем нам станет чуточку лучше.

Или нет, но попробовать стоит.

© Habrahabr.ru