2espirit: Ну тут пролог использован, как я понял, для создания простого конечного автомата с условиями. Поэтому очень тяжело сказать - надо вообще пролог или не надо. К тому же четкая логика везде.
Надо пример ситуации, где есть программа на прологе выдающая нетривиальные решения (которые существенно сложней было бы делать на простых конечных автоматах или тупо на Си), которую показано как просто расширять (и показано что на Си или на конечных автоматах это было бы сложнее).
Тогда будет ясно - надо пролог в робототехнике или не надо
Проект [[Open Robotics]] - Универсальные модули для построения роботов
2Виталий: Ну вопрос же был - чем он лучше, относительно современных языков. Когда Буран начинали строить (в 1980 уже производство началось, я так понимаю) - какие языки были в СССР освоены? Ну и наконец - на тот момент ни Джавы, ни Си++ ни разумеется C# и в помине не было.
Добавлено спустя 24 секунды: С горя можно было софт под Буран и на асме писать
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Пролог хорош там, где существует замкнутый мир. В таком мире все объекты и их отношения имеют исчерпывающее описание относительно определенного уровня абстракции. Кроме того, т.к. в сам Пролог вмонтирован механизм обратного логического вывода, то с его помощью удобно решать задачи планирования и поведения сверху вниз (от общего к частному) или от цели к условиям. Упрощенный алгоритм - в правилах, описываемых с пом. Пролога берется следствие правила X, делается переход на его предпосылки и ищутся правила, у которых эти предпосылки X являются следствиями. И т.д. до того момента, когда не перестанут обнаруживаться правила, следствия кот. являются предпосылками текущего правила. Предпочтительный способ метод обхода списка правил - просмотр в глубину. В системах непрерывного контроля и распознавания в незамкнутом мире более подходящим является механизм прямого вывода, который активирует правило при появлении фактов, являющимися предпосылками этого правила. Правило при этом активируется и выполняется следствие этого правила. Если следствием правила является выработка новых фактов, то от них могут сработать другие правила. И т.д. Если следствием правила является выполнение какого-нибудь действия, производится его выполнение. В частности, так работает система CLIPS, модернизированный вариант которой AIAssistant с языком ECLIPS я разрабатываю. Существенным отличием работы, основанной на правилах от ООП и др. обычных видов программирования является то, что набором правил не задается заранее алгоритм выполнения программы. В каждый момент времени система отслеживает совокупность имеющихся фактов и "примеряет" их ко всем правилам, находящимся в системе. Для ускорения этого процесса обычно применяется RETE-алгоритм. При выполнении же обычного последовательного алгоритма IF сработает лишь тогда, когда дойдет очередь до данного оператора. В ООП начнется обработка события только при получении сообщения объектом.
ой ну прям такие все умные, критиковать стали. можно подумать никто не учился и ничего подобного не делал. я например ходил по художественному училищу мерял температуру стен лазерным термометром, а потом перерисовывал схему котельной(лазия там с фонариком) и считал теплопотери и отопление.
любая работа хороша если интересно и голова/руки работают
Система управления мобильным роботом была мной создана как курсовой проект в ходе изучения Visual Prolog 7.1. Робот исправно функционирует, на данный момент стоит на полке. На фестивалях и прочих крупных мероприятиях демонстрируется. Есть техническое описание: http://railab.ru/projects/behavior/mate ... nonDoc.doc. Хорошая идея снять робота на камеру, постараюсь осуществить.
Меня интересует искусственный интеллект в робототехнике. Я считаю, что декларативный (Prolog) стиль программирования имеет преимущество перед императивным (C++, Java): 1) Декларативный стиль более понятен и естественен для человека. 2) Как и в каком порядке выполнять правила - возлагается на Пролог-машину. Наша задача - описать задачу в правильных терминах, формализовать ее. 3) Унификация. Это значит, что нам не нужно рассматривать все частные случаи. Мы можем писать более общие, более универсальные программы.
Ответ тем, кто интересовался применением Пролога в робототехнике: вот единственный проект с Прологом в "железе", который мне удалось найти: http://www.ai.hccnet.nl/projectgroepen/B-AI-kar.html. Так что поле для исследований огромное. Если кто-то знает еще такие проекты - пишите в эту тему!
Спасибо всем, кто комментировал. Для меня важно, что моя работа заинтересовала хоть кого-нибудь.
С уважением, Татьяна Волкова, Лаборатория робототехники и искусственного интеллекта Политехнического музея.
Спасибо, Татьяна, что не обратила внимания на все эти наши сарказмы и прочее, за что теперь неудобно. Лично я ни в прологах, ни вообще в электронике нибумбум, но серъёзность дел распознать могу и уважаю
О существовании оного слышал давно. Пролог интересен тем, что оперирует фактами. Программирование поведения робота сводится к описанию совокупности фактов и операций над ними. На данном уровне познании Пролога полагаю, что так: Есть тележка: правое и левое колесо, датчик смещения координат (опт. система от мыши), датчик вращения колес. Тогда прямолинейное движение описывается так. факиы : вращение_правого_колеса(скорость_вращения) вращение_левого_колеса(скорость_вращения) координаты(х,у)
ехать_прямо(скорость) если (вращение_правого_колеса(n) или вращение_левого_колеса(m)) и координаты(х+скорость,у)
решение: значения n и m.
Интересны, так же, нейросети. организуем нейросеть с двумя входами (координты х и у) и двумя выходами (скорость вращения левого и правого колес) обучаем вывести такую скорость вращения правого и левого колес чтобы координата у не менялась.
Конечно все это можно сделать на олгоритмических языках программирования (С, Паскаль и иже с ними) но в данных схемах есть возможность обучения (движение прямо независимо от рзамера колес, грунта и др факторов).
Татьяна Волкова писал(а):Я считаю, что декларативный (Prolog) стиль программирования имеет преимущество перед императивным (C++, Java)
Вопрос в том, насколько пролог удобен в комбинациях с другими языками? Потому как 3Д-реконструкцию, распознавание образов или калмана писать на Прологе будет скорее всего очень тяжко
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Пролог как и др. системы подобного рода (LISP, CLIPS) так просто напрямую использовать для распознавания изображений и др. образов, 3D реконструкции не получится. Они очень медлительны, т.к. фактически происходит интерпретация правил, либо трехстековая работа со списками. На основе LISP фирма GenSym ( http://www.gensym.com/ ) создала реалтайм Rule-based Engine G2 на основе компиляции в С из LISP. Но это тот еще монстр. На данном форуме вряд ли нужно управлять ядерным реактором или полетом корабля к Марсу. Распознавание образов - сложный процесс, сочетающий анализ и синтез. Но в основном он основан на анализе. А для этого необходим механизм прямого логического вывода. Поэтому Пролог вряд. ли именно для этого процесса предпочтителен. На нем хорошо планировать поведение. Нужно определиться - идти ли к созданию "мозгов" подобного рода в виде мобильного бортового устройства робота или в принципе такое не нужно и всегда будет достаточно стационарного "мозга", соединенного с "тушкой" - телом робота каналом связи.