GotAI.NET

Форум: Проблемы искусственного интеллекта

 

Регистрация | Вход

 Все темы | Новая тема Стр.1 (1)   Поиск:  
 Автор Тема: Экспериментальный интерпретатор aimcore
r
Сообщений: 837
Экспериментальный интерпретатор aimcore
Добавлено: 03 май 17 14:39
В соответствии со своим видением ИИ как Пользователя (инструментами) решился набросать мини-интерпретатор правил для экспериментов. Хочу поделиться.

Эта тема - блог, то есть будет полностью чиститься от сторонних постов. Так что довольства/недовольства лучше оформлять в других ветках, например в этой.
[Ответ][Цитата]
r
Сообщений: 837
На: Экспериментальный интерпретатор aimcore
Добавлено: 03 май 17 15:03
Разработка представляет собой консольную программу, в которую в построчном режиме вводится описание задачи в виде инструкций-правил.
[Ответ][Цитата]
r
Сообщений: 837
На: Экспериментальный интерпретатор aimcore
Добавлено: 04 май 17 13:32
Изменено: 04 май 17 14:29
Внутреннее устройство.

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


Модель мира содержит субъективные отражения реальных объектов мира. Модель является объектной, но никаких классов (пока?) нет, объект создается пустым, без атрибутов (свойств) и действий (методов). Атрибуты и действия создаются и удаляются соответствующими инструкциями.

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


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


Взаимодействие с внешним миром.

Для взаимодействия со средой программа имеет два канала ввода-вывода: выходной и входной.
В качестве внешней среды может служить другая программа, подключенная к другим концам входного и выходного каналов.


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

Обмен производится при помощи паттернов - последовательностей управляющих команд, начинающихся с символа "^". Например:^MOVE_UP^MOVE_DOWN^MOVE_RIGHT^MOVE_LEFT


Принцип работы.

Сразу после запуска программа имеет пустую модель мира (пул объектов) и пустой пул задач. Пользователю необходимо создать задачу, заполнить ее необходимыми данными и запустить на выполнение. Во время выполнения задача взаимодействует с внешней средой через каналы ввода-вывода.

Создание, заполнение и запуск задачи осуществляется в консольном режиме, построчно. Но для экономии времени есть возможность загружать в систему правила из .tsk-файла, если передать имя файла как аргумент командной строки при запуске интерпретатора.
[Ответ][Цитата]
r
Сообщений: 837
На: Экспериментальный интерпретатор aimcore
Добавлено: 06 май 17 6:50
Изменено: 06 май 17 7:15
Основная причина разработки интерпретатора правил лежит в желании отказаться от непосредственного программирования процесса взаимодействия машины с окружающей средой, сделать его более опосредованным, более свободным и гибким. А уход от непосредственного программирования процесса взаимодействия подразумевает его полную автоматизацию, когда программа, работающая по одному алгоритму, порождает второй алгоритм. При этом главная проблема - в отсутствии у меня ясности понимания принципов работы первого алгоритма. Ну и собственно интерпретатор - попытка выработать одно из возможных решений этой проблемы.

Для примера первой задачи я взял самое простое взаимодействие с внешней средой - перемещение себя в дискретном пространстве. Я взял пример из старого учебника по информатике и предельно его упростил. В учебнике большинство задач сводятся к такой постановке, что есть поле NxM клеток, есть робот, который может передвигаться по полю, взаимодействовать с препятствиями и выполнять какие-то дополнительные действия, например, закрашивать клетки поля. Ученик должен написать на условном алгоритмическом языке алгоритм последовательности действий робота по решению каждой конкретной задачи.

Препятствия и дополнительные действия я пока выбросил и сформулировал такую постановку. Есть поле f размером 10х10 клеток, есть робот r. У робота есть атрибут (свойство) x, условно назовем его "местоположение робота по оси X". Также есть атрибут y, условно назовем его "местоположение робота по оси Y". Робот может выполнять четыре действия по перемещению себя на поле: "шаг вправо", "шаг влево", "шаг вверх", "шаг вниз". Начальное условие: робот находится в точке [1:1]. Целевое условие: робот должен оказаться в точке [10:10].

[Ответ][Цитата]
r
Сообщений: 837
На: Экспериментальный интерпретатор aimcore
Добавлено: 08 май 17 10:58
Изменено: 08 май 17 14:19
Для решения задачи перемещения робота из исходной точки [1:1] в целевую [10:10] был разработан минимально необходимый набор инструкций-правил.
create task t1
Инструкция create task t1 создает новую задачу с именем t1.

t1 has object r
Инструкция t1 has object r в задаче с именем t1 создает новый объект r.

r has attribute x
r.x has view field
r.x has type integer
r.x has value 1
Инструкция r has attribute x у объекта r создает атрибут x. Инструкция r.x has view field устанавливает ракурс field для атрибута x у объекта r. Возможные ракурсы предполагаются следующие: field (поле, переменная), record (запись, структура), table (таблица), set (множество, массив). Инструкция r.x has type integer устанавливает целочисленный тип значений integer у поля x. Инструкция r.x has value 1 устанавливает значение 1 для поля x.

r has attribute y
r.y has view field
r.y has type integer
r.y has value 1
Инструкция r has attribute y у объекта r создает атрибут y. Инструкция r.y has view field устанавливает ракурс field для атрибута y у объекта r. Инструкция r.y has type integer устанавливает целочисленный тип значений integer у поля y. Инструкция r.y has value 1 устанавливает значение 1 для поля y.

r has action xi
r.xi has pattern ^MOVE_RIGHT
r.xi leads-to r.x +
Инструкция r has action xi создает действие (метод) с именем xi (xincrease) у объекта r. Инструкция r.xi has pattern ^MOVE_RIGHT присваивает методу xi объекта r паттерн ^MOVE_RIGHT. Эта команда будет отправлена в канал вывода в момент вызова метода r.xi. Правило r.xi leads-to r.x + означает, что вызов действия r.xi приводит к увеличению значения атрибута r.x.

r has action yi
r.yi has pattern ^MOVE_UP
r.yi leads-to r.y +
Инструкция r has action yi создает действие с именем yi (yincrease) у объекта r. Инструкция r.yi has pattern ^MOVE_UP присваивает методу yi объекта r паттерн ^MOVE_UP. Правило r.yi leads-to r.y + означает, что вызов действия r.yi приводит к увеличению значения атрибута r.y.

t1 has aim r.x = 10
t1 has aim r.y = 10
Инструкция t1 has aim r.x = 10 устанавливает цель r.x = 10 для задачи t1. Инструкция t1 has aim r.y = 10 устанавливает цель r.y = 10 для задачи t1.

run t1
Инструкция run t1 запускает процесс достижения заданных целей для задачи t1.
[Ответ][Цитата]
r
Сообщений: 837
На: Экспериментальный интерпретатор aimcore
Добавлено: 15 май 17 15:00
Изменено: 15 май 17 15:33
Цикл задачи (task loop)
После запуска задачи на выполнение, интерпретатор входит в непрерывный цикл, состоящий из нескольких фаз:
- анализ целей задачи
- выбор действий, приближающих к достижению целей задачи
- посыл в выходной канал паттернов выбранных действий
- прием из входного канала паттернов произошедших изменений во внешней среде

Далее, все фазы повторяются снова, вплоть до момента достижения всех целей задачи.

Проблема
Выявился архитектурный недостаток такого подхода.
Предполагалось, что задача может иметь не одну цель, а несколько - эдакий целевой образ. В примере с передвигающимся по полю роботом я задаю сразу две цели (целевой образ), поскольку роботу нужно оказаться в конкретной точке [10:10] двумерного пространства. Значения координат этих двух измерений независимы друг от друга и должны задаваться двумя независимыми целями, что я и сделал:
t1 has aim r.x = 10
t1 has aim r.y = 10

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

Через правила, я задал, что к увеличению значения координаты x местоположения робота приводит выполнение действия xi:
r.xi leads-to r.x +

Также, через соответствующее правило интерпретатору было указано, что действие xi имеет паттерн ^MOVE_RIGHT:
r.xi has pattern ^MOVE_RIGHT
Этот паттерн будет отправлен в выходной канал в момент выполнения действия xi.

Также интерпретатору было указано, что к увеличению значения координаты y приводит выполнение действия yi, и что действие yi имеет паттерн ^MOVE_UP:
r.yi leads-to r.y +
r.yi has pattern ^MOVE_UP

Когда задача выполняется, интерпретатор проанализирует обе цели в такой последовательности, в которой они были введены, подберет под каждую задачу свое действие и отправит в выходной канал паттерны обоих действий, а именно: "^MOVE_UP^MOVE_RIGHT". В случае, когда на поле нет препятствий, трудностей не возникнет. Допустим, если робот изначально находился в точке [1:1], то после такой последовательности паттернов робот окажется в точке [2:2], но сделает он это за два невидимых шага, сначала он как бы передвинется на клетку вверх, а затем, на клетку вправо:



Проблема проявится, если клетка [1:2] занята препятствием. В этом случае попасть в клетку [2:2] робот может только через клетку [2:1]. Это значит что последовательность паттернов должна быть обратной, то есть "^MOVE_RIGHT^MOVE_UP":

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

Что с этим делать - не понятно.
[Ответ][Цитата]
r
Сообщений: 837
На: Экспериментальный интерпретатор aimcore
Добавлено: 15 май 17 16:14
Изменено: 25 июн 17 13:32
Я пытаюсь решать архитектурную задачу, по внутреннему устройству системы способной использовать инструменты со сложным интерфейсом. Хочу научить играть в шашки, карты и т.п. Если повезет. Но чтобы не программировать поведение жестко, а объяснять, при помощи правил. Нужно разработать такой набор правил, который бы позволил описать все взаимосвязи между объектами игр, позволил бы создать модель противника и т.д.

Начал с малого. Системе доступны 4 действия, она использует их как инструмент для перемещения себя в заданную (целевую) точку дискретного (для упрощения модели) пространства.
[Ответ][Цитата]
r
Сообщений: 837
На: Экспериментальный интерпретатор aimcore
Добавлено: 23 июн 17 14:11
Работа программы

[Ответ][Цитата]
r
Сообщений: 837
На: Экспериментальный интерпретатор aimcore
Добавлено: 23 июн 17 15:22
Изменено: 23 июн 17 15:59
Интерпретатор претерпел некоторые изменения. Теперь он состоит из трех основных частей: пула типов, пула моделей и пула задач:


Пул типов содержит набор объектных типов, сгруппированных в группы типов:


Пул моделей содержит набор моделей, содержащих объекты:


Пул задач содержит набор активных задач. Каждая задача может содержать как объект (локальный для задачи - с областью видимости в пределах задачи), так и ссылку на объект, находящийся в одной из моделей, либо в другой задаче:
[Ответ][Цитата]
r
Сообщений: 837
На: Экспериментальный интерпретатор aimcore
Добавлено: 25 июн 17 14:09
Изменено: 25 июн 17 14:15
Наверное нужно обратить внимание (не помню говорил ли уже) на то, что пул типов, пул моделей и пул задач изначально (сразу после запуска интерпретатора) пусты. Они заполняются либо с клавиатуры построчно (но это долго), либо из текстового файла, имя которого передается программе (серверной части) как параметр командной строки.

Вот содержимое файла по которому работает пример из видео выше. Табуляция используется для удобства чтения человеком, интерпретатор ее игнорирует. Так же он игнорирует строки, которые начинаются с двух дефисов подряд: "--".
create type-group tg1

tg1 has object-type Field
Field has attribute x
Field.x has view set
Field.x has type integer
--Field.x can-not-be < 1
--Field.x can-not-be > 10

Field has attribute y
Field.y has view set
Field.y has type integer
--Field.y can-not-be < 1
--Field.y can-not-be > 10

tg1 has object-type Robot
Robot has attribute x
Robot.x has view field
Robot.x has type integer
--Robot.x belongs-to Field.x
Robot.x has pattern ^X$valY*=ROBOT

Robot has attribute y
Robot.y has view field
Robot.y has type integer
--Robot.y belongs-to Field.y
Robot.y has pattern ^X*Y$val=ROBOT

Robot has action xi
Robot.xi has pattern ^MOVE_RIGHT
Robot.xi leads-to Robot.x +

Robot has action xd
Robot.xd has pattern ^MOVE_LEFT
Robot.xd leads-to Robot.x -

Robot has action yi
Robot.yi has pattern ^MOVE_UP
Robot.yi leads-to Robot.y +

Robot has action yd
Robot.yd has pattern ^MOVE_DOWN
Robot.yd leads-to Robot.y -

create model m1

m1 has object f
f has type tg1.Field

m1 has object r
r has type tg1.Robot

create task t1

t1 has reference f
f is m1.f

t1 has reference r
r is m1.r
r.x has value 1
r.y has value 1

t1 has aim r.x = 10
t1 has aim r.y = 10

run t1

exit
[Ответ][Цитата]
r
Сообщений: 837
На: Экспериментальный интерпретатор aimcore
Добавлено: 01 авг 17 16:49
Изменено: 01 авг 17 18:16
При решении проблемы с обходом препятствий я пришел к выводу, что план действий по решению задачи должен разбиваться вплоть до одного отдельного движения в каждом шаге плана. Только так можно сохранять полный контроль над выполнением плана действий. Объясню на примере.

До этого момента, план по решению задачи перемещения роботом себя из точки [1:1] в точку [10:10] выглядел так:

Шаги выполняются последовательно один за другим. У каждого шага есть свой промежуточный целевой образ. Например, у шага №1 целевой образ состоит из двух целей: r.x = 2 и r.y = 2, у шага №2 целевой образ состоит из двух целей: r.x = 3 и r.y = 3, и так далее.

Шаг №1 переводил робота в позицию [2:2], шаг №2 переводил робота в позицию [3:3], и так далее, шаг №9 переводил робота в конечную позицию [10:10].

Недостаток такого подхода был в том, что, поскольку каждый шаг имеет две цели (r.x и r.y), то на каждом шаге выполнялось два действия: перемещение робота на одну клетку по оси X и перемещение робота на одну клетку по оси Y. И не было возможности управлять последовательностью вызовов этих двух действий в рамках каждого шага.

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

Принцип работы следующий. При запуске плана задачи на выполнение, первым выполняется шаг №1, если этот шаг имеет подшаги, то прежде чем выполнение перейдет к шагу №2, должны будут успешно выполнены все подшаги шага №1, а именно шаг №1.1 и шаг №1.2.

Что дает такое решение. Теперь каждый из подшагов имеет только одну цель. Допустим планировщик присвоил шагу №1.1 цель r.x = 2, а шагу №1.2 цель r.y = 2. Это означает, что на шаге №1.1 робот попытается переместиться по оси X в клетку [2:1], а на шаге №1.2 он попытается переместиться по оси Y в клетку [2:2]. Поскольку после выполнение каждого шага и каждого подшага планировщик контролирует достижение шагом/подшагом его целей, то в случае, когда одна из клеток поля будет занята, и роботу не удастся в нее переместиться, плнировщик сможет перепланировать шаг, изменив порядок выполнения его подшагов.

Теперь робот уже не двигается на две клетки за шаг, то есть наискосок, как на предыдущем видео, а двигается зигзагом:



Итак, если на шаге №1.1 робот попытается переместиться по оси X в клетку [2:1], но она окажется занята, то планировщик это сразу же заметит и перепланирует (и заново выполнит) шаг №1 так, что теперь на шаге №1.1 робот попытается переместиться сначала по оси Y в клетку [1:2], а на шаге №1.2 он попытается переместиться по оси X в клетку [2:2]. Если этот маршрут будет свободен (обе клетки: [1:2] и [2:2] не будут заняты), то робот как бы обойдет препятствие не отклоняясь от маршрута к конечной цели.

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



Хочу обратить внимание, что алгоритм движения робота не разрабатывался мной заранее, а был создан планировщиком динамически, в ответ на сложившуюся ситуацию на игровом поле (занятость некоторых клеток).
[Ответ][Цитата]
r
Сообщений: 837
На: Экспериментальный интерпретатор aimcore
Добавлено: 06 авг 17 4:40
Изменено: 06 авг 17 7:03
Взаимодействие интеллектуального агента со средой можно условно разбить на три раздела:
1. Получение информации
2. Накопление знаний
3. Использование информации и знаний

Тут необходимо напомнить, по какому принципу я отделяю информацию от знаний. Информация это не более чем совокупность всех значений всех свойств всех объектов в модели мира. Другими словами, информация описывает состояние объектов. Она может быть как актуальной (у важных объектов), так и неактуальной (устаревшей, не отражающей текущее состояние реального объекта). Знания - это данные внутри системы, указывающие на то, действительно ли существует отдельно взятый объект мира, какие свойства он имеет, в какие отношения может вступать с другими объектами. Другими словами, знания это как описание самого объекта в модели мира (набор его свойств), так и вся совокупность правил, описывающая все аспекты его функционирования.

I. Получение информации.

Этот вид взаимодействия можно разделить на следующие этапы:
1. Выбор сенсорного канала при помощи управляемого внимания.
2. Получение сырых данных из выбранного сенсорного канала.
3. Фильтрация данных - выделение части данных при помощи управляемого внимания.
4. Классификация оставшихся после фильтрации данных - выделение объектов, их признаков и текущих значений этих признаков.
5. Обновление признаков объектов во внутренней модели мира полученными после классификации актуальными значениями.

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

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

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

II. Накопление знаний

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

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

Во-вторых, получение знаний извне может быть как в рафинированном виде, так и в сыром, требующим осмысления. Получение знаний в рафинированном виде самый доступный для реализации вариант и заключается в простом помещении новых знаний в виде правила во внутреннюю модель мира. Получение знаний извне в сыром виде очевидно требует определенных умственных усилий и умения мыслить. Ну что же, если предположить, что в отдаленном будущем подсистема "III. Использование информации и знаний" будет способна на использование информации и знаний об использовании информации и знаний, что будет своего рода способностью мыслить, то опять же получим закольцованную систему, когда внешние данные попадая через подсистемы "I. Получение информации", либо "II. Накопления знаний" в подсистему "III. Использование информации и знаний" будут направлены обратно в подсистему "II. Накопления знаний".

Но я и тут пошел простейшим путем и реализовал накопление исключительно рафинированных знаний путем ввода в систему правил либо человеком вручную либо загрузкой из текстового файла. Тут я рассуждаю так. Известно, что интерпретатор задумывался как интеллектуальное ядро, предназначенное для использования инструментов со сложными интерфейсами для решения конкретных проблем. На раннем этапе разработки интерпретатора практически ничего не известно о том, какие это будут инструменты и какими интерфейсами они будут обладать. Для того, чтобы уметь пользоваться инструментом в своих целях, агент должен обладать набором необходимых знаний об этом инструменте, как об объекте, а так же должен обладать актуальной информацией о состоянии используемого инструмента в реальном времени. А поскольку заранее неизвестно какие инструменты будут использоваться, то неизвестно и то, какие знания могут понадобиться для их использования. Невозможно разработать программу, которая могла бы сама обучаться знаниям, если неизвестно какие это будут знания и каких типов. По этой причине, обучение/самообучение, как способ накопления знаний, пока в табу. А вот когда станет понятно, что это за знания такие, что позволяют нам пользоваться множеством разнотипных инструментов (в том числе и языками), тогда для вывода агентом правил можно будет использовать статистику или другие ML-штучки.
[Ответ][Цитата]
r
Сообщений: 837
На: Экспериментальный интерпретатор aimcore
Добавлено: 18 авг 17 12:45
Изменено: 18 авг 17 13:00
III. Использование информации и знаний

Этот вид взаимодействия можно разделить на следующие этапы:
1. Анализ текущей ситуации (мгновенного состояния модели мира)
2. Определение перечня проблем (выявленных потребностей, конфликтов, ошибок и т.д.)
3. Создание задачи для каждой проблемы
4. Формирование перечня целей (целевого образа) для каждой задачи
5. Формирование множества возможных решений (способов достижения целевого образа) для каждой задачи
6. Оценка каждого решения и выбор наилучшего
7. Разработка плана для каждой задачи согласно выбранного решения - построение маршрута из текущей ситуации в целевую
8. Пошаговая реализация плана задачи
9. Контроль достижения локальных целей для каждого шага плана
[Ответ][Цитата]
 Стр.1 (1)