Как ИИ проигрывает человеку. Это непопулярная тема в эпоху хайпа вокруг нейросетей, ведь принято считать, что они «заменят человека». Скажу сразу: я не типичный инженер. По второму диплому я преподаватель живописи и графики. Моя биография — это не только запах гари и припоя, но и запах масла, титановых белил и кадмиевых красок в старых паркетных аудиториях. Гипсовая анатомия, драпировки, подсохшие цветы в керамике — хорошо знакомо художникам.


Когда я ставил перед собой задачу создать графический движок для отрисовки Ladder-программ, я сформулировал следующие требования:

  • Бесконечные вложения веток друг в друга.

  • Автоматическая прорисовка размещения. То есть не так, как в OpenPLC или Beremiz, где всё нужно передвигать руками, а как в системах от Allen-Bradley.

  • Корректный перевод всей этой структуры в ассемблерные, линейные инструкции.

Конечно, первое, о чём я подумал, — это графы и рекурсия. То же самое мне начал советовать и ИИ. Он написал мне тонны псевдокода, и я этому типичному сценарию какое-то время следовал. Только вот мне постоянно казалось: как-то всё это сложновато. Была интуиция, что система должна работать намного проще.

Формула Эйнштейна, описывающая устройство Вселенной, помещается в несколько символов. Формулы Ньютона, описывающие движение планет и гравитацию, тоже состоят всего из нескольких переменных и констант. А какая-то траектория отрисовки Ladder-цепей должна занимать сотни строк?

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

Тестируем корректность  трансляции двумерных веток в последовательность машинных инструкций.
Тестируем корректность трансляции двумерных веток в последовательность машинных инструкций.

Так я перешёл на стековую модель: начало ветки — кладём координаты в стек, конец ветки — достаём обратно. Нужно вставить ветку внутрь другой ветки? Просто «выкидываем лист» из печатной машинки и переписываем всё заново по тем же правилам: с помощью пробелов и переходов на новую строку.

А самое главное — текст (последовательность инструкций) у печатной машинки изначально линейный. Он абсолютно точно, один в один, транслируется в машинный код. В то время как двумерные и прочие графы ещё нужно линеаризовать, что в средах разработки для ПЛК слишком часто приводило к ошибкам. То есть, программа ПЛК ведет себя так как видит человек на схеме.

Не хочу сказать, что я придумал что-то принципиально новое — подобные механизмы использовались в истории человечества много где. Но моя история — о меж доменном мышлении, творчестве и прямолинейности ИИ. С чего бы искусственному интеллекту проводить параллели между Ladder-программой и печатной машинкой? Почему не с фонарным столбом или почтовым ящиком? Если ИИ начнёт перебирать абсолютно все случайные варианты, ему не хватит ни ОЗУ, ни энергии, ни разумного промежутка времени, чтобы сделать хоть какие-то выводы. А человек — может.

Зимний Этюд. Бумага /Акварель.
Зимний Этюд. Бумага /Акварель.

О моем сквозном проекте разработки ПЛК, можно почитать тут:

https://habr.com/ru/articles/1027424/

https://habr.com/ru/articles/1103196/

Комментарии (0)