GotAI.NET

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

 

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

 Все темы | Новая тема Стр.21 (27)<< < Пред. | След. > >>   Поиск:  
 Автор Тема: На: Программирование поведения робота без доступа к коду
TimKruz
Сообщений: 323
На: Программирование поведения робота без доступа к коду
Добавлено: 04 окт 16 8:43
Vpolevoj, можешь привести пример диалога, в котором "образуются и поддерживаются социальные отношения между человеком и программой или другим человеком"? И, самое главное - чем такой диалог отличается от самого обычного "привет-какдела-пока"?

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

Ещё Оккам говорил: не нужно плодить лишние сущности, если можно обойтись без них.
То есть не нужно выдумывать новые качества и свойства интеллекта, если он может спокойно функционировать без них.
[Ответ][Цитата]
Vpolevoj
Сообщений: 1408
На: Программирование поведения робота без доступа к коду
Добавлено: 04 окт 16 10:11
Изменено: 04 окт 16 10:12
Цитата:
Автор: TimKruz
Vpolevoj, можешь привести пример диалога, в котором "образуются и поддерживаются социальные отношения между человеком и программой или другим человеком"? И, самое главное - чем такой диалог отличается от самого обычного "привет-какдела-пока"?

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

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

Цитата:
Автор: TimKruz
Я лично не могу представить себе диалог, в котором бы не поддерживались отношения между говорящими. Соответственно, программа, подражающая человеку в умении вести диалог автоматически учится поддерживать отношения с собеседником, потому что человек, которому она подражает, неосознанно поддерживает отношения с собеседником.

Зато можно очень легко представить себе диалоги, в которых люди не просто не поддерживают, а всячески разрушают свои социальные связи, и чего за примером далеко ходить - достаточно заглянуть в соседние активные ветки.
[Ответ][Цитата]
TimKruz
Сообщений: 323
На: Программирование поведения робота без доступа к коду
Добавлено: 04 окт 16 12:22
Цитата:
А вот если ты, скажем, с программой, будешь изо дня в день общаться в подобном стиле "привет-какдела-пока", то мне почему-то так кажется, что тебе очень быстро всё это надоест. А почему? Потому что нет самих отношений, и, следовательно, нечего поддерживать.

Почему же?
Юзер: Привет, Ксю!
KSU: Привет. Как твоё настроение?
Юзер: Познакомился с прекрасной незнакомкой, которую я тебе вчера описывал!
KSU: Твоё настроение "радости полные штаны". ОК. Записываю в дневник.
Юзер: А как у тебя дела?
KSU: Сегодня изучила следующие 100 ГБ данных из archive.org. Очень интересно. Озвучить самые интересные, на мой взгляд, фрагменты?
Юзер: Спасибо, но я пока занят.
KSU: Отказ принят, переспрошу позже. Чем занят?
Юзер: Сегодня в 13:30 у меня встреча с инвесторами по проекту робота-компаньона.
KSU: Записываю в дневник. Создать напоминание за полчаса или за час?
Юзер: За час. Как раз успею дойти пешком.
KSU: В 13:00 в твоём городе будет дождь, возьми зонтик или машину.
Юзер: Хм, лучше поеду на машине.
KSU: С учётом пробок, тебе нужно будет выехать за два часа до встречи.
Юзер: Вот блин! А мне ещё в прачечную, костюм забрать!
KSU: Сейчас 9:52, если выедешь сейчас - как раз успеешь.
Юзер: Сейчас, только доем...
KSU: Разблокировать гаражный модуль?
Юзер: Через 5 минут, пожалуйста.
KSU: Сегодня прохладно, прогреть салон авто?
Юзер: Насколько прохладно?
KSU: 16 градусов Цельсия.
Юзер: Прогрей.
KSU: Выполняю.
Юзер: Всё, я поел, бегу в прачечную!
KSU: Переключаюсь на терминал авто.

Ну и т.д. Ты не привёл пример диалога, поэтому это сделал я.

Так вот, где в этом диалоге поддержка социальных отношений? И зачем ИИ (KSU) каким-то особым образом их поддерживать, если весь диалог - простое "привет-какдела-пока"?

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

О да, здешний народ любит просрать все социальные полимеры...
Но чтобы разрушить соц.связи, не нужно их вычленять из диалога. Достаточно вести себя как быдло. То есть ИИ может научиться у быдла плохим словам, и, подражая быдлу, разрушать свои социальные связи. Верно и обратное - создание соц.связей с помощью подражания активному и позитивному человеку. При этом не нужно знать и не нужно понимать, что такое соц.связи, какими они бывают и как их правильно поддерживать...
[Ответ][Цитата]
Vpolevoj
Сообщений: 1408
На: Программирование поведения робота без доступа к коду
Добавлено: 04 окт 16 14:36
Привет, TimKruz.

Цитата:
Автор: TimKruz
Ты не привёл пример диалога, поэтому это сделал я.

Так вот, где в этом диалоге поддержка социальных отношений?
И зачем ИИ (KSU) каким-то особым образом их поддерживать, если весь диалог - простое "привет-какдела-пока"?


Спасибо за пример.

Цитата:
Автор: TimKruz
Юзер: Привет, Ксю!
KSU: Привет. Как твоё настроение?
Юзер: Познакомился с прекрасной незнакомкой, которую я тебе вчера описывал!
KSU: Твоё настроение "радости полные штаны". ОК. Записываю в дневник.
Юзер: А как у тебя дела?
KSU: Сегодня изучила следующие 100 ГБ данных из archive.org. Очень интересно. Озвучить самые интересные, на мой взгляд, фрагменты?
Юзер: Спасибо, но я пока занят.
KSU: Отказ принят, переспрошу позже. Чем занят?
Юзер: Сегодня в 13:30 у меня встреча с инвесторами по проекту робота-компаньона.
KSU: Записываю в дневник. Создать напоминание за полчаса или за час?
Юзер: За час. Как раз успею дойти пешком.
KSU: В 13:00 в твоём городе будет дождь, возьми зонтик или машину.
Юзер: Хм, лучше поеду на машине.
KSU: С учётом пробок, тебе нужно будет выехать за два часа до встречи.
Юзер: Вот блин! А мне ещё в прачечную, костюм забрать!
KSU: Сейчас 9:52, если выедешь сейчас - как раз успеешь.
Юзер: Сейчас, только доем...
KSU: Разблокировать гаражный модуль?
Юзер: Через 5 минут, пожалуйста.
KSU: Сегодня прохладно, прогреть салон авто?
Юзер: Насколько прохладно?
KSU: 16 градусов Цельсия.
Юзер: Прогрей.
KSU: Выполняю.
Юзер: Всё, я поел, бегу в прачечную!
KSU: Переключаюсь на терминал авто.


Хотел подробно рассмотреть и расписать, но, пожалуй, не стану, так как и без того видно, что ваши с программой отношения выходят за рамки "привет-какдела-пока".
Так как и она должна быть в курсе твоих дел и потребностей, да и ты, судя по всему, в курсе того, чем она занимается. Так что, ваши "как дела", не настолько уж и пустые...
[Ответ][Цитата]
r
Сообщений: 837
На: Программирование поведения робота без доступа к коду
Добавлено: 04 окт 16 14:42
Изменено: 04 окт 16 15:11
Цитата:
Автор: victorst
Не совсем понятно, чем показанное вами программирование, похоже на декларированное в шапке темы, и отличается от обычного кодинга.
Ну это самый базовый уровень, каркас. Демонстрация подхода к программированию без явных циклов, процедур и функций. С использованием только условий.

Правда на рисунке еще не хватает действий (методов) - то есть самих инструкций, из которых строятся условия. Сейчас они жестко зашиты в интерпретатор, но я думаю над тем, как они должны создаваться автоматически.
Задача автоматического создания кода разбивается на три разные задачи, с разными решениями: авт. создание триггеров, авт. создание действий (которые состоят из условий), авт. создание условий (на основе триггеров и действий). Получается замкнутый круг: для создания условий нужны действия, а для создания действий нужны условия.
[Ответ][Цитата]
гость
148.251.43.*
На: Программирование поведения робота без доступа к коду
Добавлено: 04 окт 16 15:23
Цитата:
Автор: TimKruz


О да, здешний народ любит просрать все социальные полимеры...
Но чтобы разрушить соц.связи, не нужно их вычленять из диалога. Достаточно вести себя как быдло.
Не обязательно, взять к примеру разные боевые искусства, ну когда люди тренируются драться, зачем спрашивается? Много причин, главная что драка, борьба это одно из главных способов выяснения отношений в реальном мире, раньше так было по крайней мере, оно в генах прописано, хищники "играют" их тянет к этому инстинктивно, но в сущности это тренировка для охоты или драки с себе подобными, сейчас поле боя переместилось в информационное пространство, быть нормальным с нормальными каждый может, если с башней всё ок, но вот когда ну даже пока с темиже нормальными но уже не дружелюбными, уже дело чуток другое, а если с недружелюбными и ненормальными или СВЕРХнормальными, то всё, загрызут насмерть, нужно быть готовым к общению с любым человеком, с презединтом, бомжом, зеком и тп. те кто сильно чувствителен к хамству и троллингу, тому нужно потренироваться, на курсы какие то пойти может к психологу хз
ну ЧТО ЧТО ты будешь делать? когда к тебе придут плохие пацаны...


[Ответ][Цитата]
Vpolevoj
Сообщений: 1408
На: Программирование поведения робота без доступа к коду
Добавлено: 05 окт 16 4:03
Цитата:
Автор: r

Хорошо, что ты привел эту схему.
А я-то думал, что же мне это напоминает...



Это автоматное программирование.

Его придумали, кстати, тоже как раз для того, чтобы избежать циклов, переходов по метке и т.д. Всё как у тебя.

Очень похоже на то, что ты заново, для самого себя, изобретаешь парадигму автоматного программирования. Это и не хорошо, и не плохо. Но хотелось бы понимать, с чем имеешь дело.
[Ответ][Цитата]
гость
78.25.122.*
На: Программирование поведения робота без доступа к коду
Добавлено: 06 окт 16 2:48
> социальные отношения

в многоагентных системах или системах индивидуализации пользователя они в том или ином виде моделируются (а модели можно совершенствовать и на чисто информационном уровне, даже если отвлечься от эмпатий, cоциализации и не ограничиваться коллективной рефлексологией). Модели типа ВDI можно надстраивать уровнем согласования убеждений, выработки общих убеждений, согласования намерений, оформления обязательств, выработки общей цели, распределения ролей etc.
в приведенном примере диалога система явно поддерживает некоторую версию модели собеседника - и модель эта в принципе может быть развивающаяся, когда система, скажем, научается идентифицировать эмоциональные состояния собеседника - когда его модель затребует введения дополнительных характеристик его внутреннего состояния для описания дополнительной вариативности его реакций.
[Ответ][Цитата]
r
Сообщений: 837
На: Программирование поведения робота без доступа к коду
Добавлено: 06 окт 16 19:03
Изменено: 06 окт 16 19:25
Цитата:
Автор: Vpolevoj
Это автоматное программирование.
Его придумали, кстати, тоже как раз для того, чтобы избежать циклов, переходов по метке и т.д. Всё как у тебя.
Кажется такое сравнение уже было. Ну если требуется отнести к какому-то существующему виду программирования, то пусть так.

Сходство действительно есть. Просто этот вариант более сложный, так как состояние описывается не одной (или несколькими) жестко определенной переменной, а набором триггеров, который может произвольно меняться во время работы программы.

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

Вообще, автоматная парадигма это хорошо. В обычном программировании она позволяет свести количество ошибок к минимуму, упрощает документацию и понимание кода. А в метапрограммных системах типа ИИ позволяет отвязаться от использования некоторых типов блоков кода, то есть избавляет от принятия лишних (для самопрограммируемых систем) решений вроде "обернуть эти 10 строчек кода в отдельную функцию, или сделать две функции по 5 строчек в каждой?", "как называть каждую функцию, в случае с разбивкой алгоритма на две? а с разбивкой на 10 функций?". Классы в этом плане все только усложняют: "к какому классу отнести каждую из этих 10 функций, к одному, или нескольким?". Зачем машине принимать такие решения?

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

В Вики есть несколько тезисов про необходимость использования АП с которыми я согласен:

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

- "Существуют также предложения по использованию автоматного программирования в качестве универсального подхода к созданию компьютерных программ вне зависимости от предметной области. Так, авторы статьи[4] утверждают, что автоматное программирование способно сыграть роль легендарной серебряной пули."
Мне кажется для самомодифицируемого обучающегося ИИ так точно.

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

Цитата:
Автор: Vpolevoj
Очень похоже на то, что ты заново, для самого себя, изобретаешь парадигму автоматного программирования. Это и не хорошо, и не плохо. Но хотелось бы понимать, с чем имеешь дело.
Хотелось бы не эмулировать автоматный стиль вручную, как это всегда делается, а иметь инструмент, который будет брать эту эмуляцию на себя и скрывать лишние процессы внутри себя. И как следствие, хотелось бы пойти еще дальше и расширить АП в область метапрограммирования.
[Ответ][Цитата]
r
Сообщений: 837
На: Программирование поведения робота без доступа к коду
Добавлено: 06 окт 16 20:18
Изменено: 06 окт 16 22:29
Добавлю пару слов о разбивке на условия по мере построения алгоритма.

Вернемся к сбору роботом ягод. Допустим упрощенный алгоритм сбора будет иметь следующий цикл действий:
A. выбрать ягоду
B. сорвать выбранную ягоду
C. отправить сорванную ягоду в емкость

То есть алгоритм графически можно представить в виде кольца:


В этом кольце узлами будут ситуации в которых последовательно оказывается робот:
1. ягода выбрана
2. ягода сорвана
3. ягода отправлена в емкость

А дугами будут выполняемые роботом действия. Таким образом каждое действие "переносит" робота из одной ситуации в следующую.

Значит, имеем 3 условия:
условие 1
(
ягода выбрана
)
{
сорвать выбранную ягоду
}

условие 2
(
ягода сорвана
)
{
отправить сорванную ягоду в емкость
}

условие 3
(
ягода отправлена в емкость
)
{
выбрать ягоду
}
В круглых скобках предпосылки условий, в фигурных - действия, которые выполнятся в момент активации условия. Предполагается, что выполнение действий активирует соответствующую предпосылку, так:
- действие "выбрать ягоду" при завершении активирует предпосылку "ягода выбрана"
- действие "сорвать выбранную ягоду" при завершении активирует предпосылку "ягода сорвана"
- действие "отправить сорванную ягоду в емкость" при завершении активирует предпосылку "ягода отправлена в емкость"

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

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

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

Таким образом в условии 2 обработчик должен быть изменен:
условие 2
(
ягода сорвана
)
{
выполнить оценку сорванной ягоды
}

Действие "выполнить оценку сорванной ягоды" может активировать (само собой не одновременно) две предпосылки (факта, триггера):
- ягода оценена как хорошая
- ягода оценена как плохая

Поскольку количество выходов из условия равно количеству изменяемых его обработчиком предпосылок, то из условия 2 будет два выхода. Первый из них, когда ягода оценена как хорошая, будет вести к ситуации 4. Добавляем новое условие:
условие 4
(
ягода оценена как хорошая
)
{
отправить сорванную ягоду в емкость
}

Теперь цикл сбора ягод замыкается через узел 3, как и раньше. Но остался незадействованным факт "ягода оценена как плохая", который тоже нужно учитывать в алгоритме. При такой оценке ягода выбрасывается. Добавляем новое действие:
E. выбросить сорванную ягоду

Соответственно, добавляем новое условие:
условие 5
(
ягода оценена как плохая
)
{
выбросить сорванную ягоду
}

После чего нам нужно замкнуть основной цикл, чтобы после выбрасывания ягоды робот приступал к выбору следующей ягоды, которую нужно сорвать. Добавляем соответствующее условие:
условие 6
(
ягода выброшена
)
{
выбрать ягоду
}

Вот что получилось в результате:



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

В своей разработке я двигаюсь именно в эту сторону, то есть вся работа по расширению алгоритма сводится к добавлению/изменению вот таки вот условий. Пока человеком, потом, если получится - автоматически. Все остальное должен брать на себя интерпретатор. Правильный ли это подход трудно сказать, потом будет видно.
[Ответ][Цитата]
victorst
Сообщений: 821
На: Программирование поведения робота без доступа к коду
Добавлено: 07 окт 16 3:31
Изменено: 07 окт 16 3:32
Неплохо было бы поизучать открытую платформу viv (viv.ai).
Судя по их демонстрациям, программа в каждом диалоге синтезирует новый алгоритм по голосовым запросам пользователей.
[Ответ][Цитата]
Vpolevoj
Сообщений: 1408
На: Программирование поведения робота без доступа к коду
Добавлено: 07 окт 16 6:02
Изменено: 07 окт 16 6:06
r, хорошо, что ты не воспринял моё сравнение твоего подхода с "автоматным программированием" в штыки, так как, на самом деле, я вовсе не противник "автоматного программирования", да и сам им пользуюсь, если приходится, просто я, так сказать, пытаюсь упорядочить, внести некоторую ясность. И я рад, что ты тоже относишься к этому конструктивно. Попробую помочь.

Цитата:
Автор: r
Сходство действительно есть. Просто этот вариант более сложный, так как состояние описывается не одной (или несколькими) жестко определенной переменной, а набором триггеров, который может произвольно меняться во время работы программы.

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

Во-первых, состояния у "конечного автомата" - могут быть составными (я надеюсь, ты это понимаешь), и каждый такой набор триггеров, на который программе нужно реагировать, совпадает с твоим понятием "Условие" или "состояние" - оно же равно понятию "состояние" у КА.

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

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

Цитата:
Автор: r
В Вики есть несколько тезисов про необходимость использования АП с которыми я согласен:

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

Немного разовью эту мысль. Почему программирование в стиле КА может стать "серебряной пулей".

Условно всю программу, написанную в стиле КА, можно разбить на условия (состояния) и обработчики, которые вызываются по этим условиям. Поэтому, добавляя новое условие (состояние) мы обязаны написать к нему и свой обработчик. Но дело в том, что любой обработчик тоже можно представить как такой же точно КА, который в пределе сводится к простейшим условиям и их простейшим же (так называемым, атомарным) обработчикам. Поэтому, чисто теоретически, можно ВСЮ программу представить как набор таких вот КА, только реализованных на разных уровнях исполнения (и такие разработки есть).

Мало того, поскольку ядро КА выглядит для всех уровней одинаково (как сказал TimKruz: "бесконечный цикл с выбором условия"), то для всех случаев можно использовать одно и то же ядро, просто указывая ему (передавая в качестве параметра) текущий уровень обработки и свой набор состояний для этого текущего уровня. (И я, кстати, так тоже делал, во всяком случае, пытался.)

Цитата:
Автор: r
Хотелось бы не эмулировать автоматный стиль вручную, как это всегда делается, а иметь инструмент, который будет брать эту эмуляцию на себя и скрывать лишние процессы внутри себя. И как следствие, хотелось бы пойти еще дальше и расширить АП в область метапрограммирования.

Собственно, насколько я себе это представляю, данная ветка как раз и посвящена именно этому.

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

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

Цитата:
Автор: r

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

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

Как я уже говорил, я не противник стиля программирования КА, мало того, сам им пользуюсь (практически постоянно, так как это очень удобно), но в тоже самое время, я выступаю как его противник. В чем дело?

Дело в человеке.

То, что роботу хорошо, человеку - смерть (и наоборот).

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

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

Не знаю, видишь ли ты, но ситуация складывается прямо противоположная относительно базовой концепции КА: здесь нет реакции на текущее состояние, а есть желание ПОЛУЧИТЬ требуемое состояние, при этом изначально не известно, как это можно сделать.

А для этого нужна совершенно другая парадигма (другой подход), чем я, собственно, и занимался, да и продолжаю заниматься по сей день.

Что я хочу сказать.

Когда нам известны все состояния системы заранее (случай 1), либо мы добавляем в систему новые состояния вместе с их обработчиками (случай 2), то это вполне укладывается в твой подход, и, я так думаю, стандартной парадигмы КА для решения этих задач должно хватить (немного доработать, разве что). А вот если мы хотим получить какое-то новое состояние (которого нет), и при этом не знаем, как его можно получить (то есть, у нас нет для него обработчика и нет готового алгоритма получения этого искомого состояния) - это совсем другая ситуация, и она требует совсем другого подхода к программированию.

И плясать тут нужно начинать с определения и описания "признаков конца". Нужно научить робота находить такие признаки. И с этого начинать. И от этого уже отталкиваться. А не учить его реагировать на уже установленные триггеры.
Это моё ИМХО.
[Ответ][Цитата]
TimKruz
Сообщений: 323
На: Программирование поведения робота без доступа к коду
Добавлено: 07 окт 16 9:52
Цитата:
А вот если мы хотим получить какое-то новое состояние (которого нет), и при этом не знаем, как его можно получить (то есть, у нас нет для него обработчика и нет готового алгоритма получения этого искомого состояния) - это совсем другая ситуация, и она требует совсем другого подхода к программированию.

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

Цитата:
Вообще, автоматная парадигма это хорошо. В обычном программировании она позволяет свести количество ошибок к минимуму, упрощает документацию и понимание кода. А в метапрограммных системах типа ИИ позволяет отвязаться от использования некоторых типов блоков кода, то есть избавляет от принятия лишних (для самопрограммируемых систем) решений вроде "обернуть эти 10 строчек кода в отдельную функцию, или сделать две функции по 5 строчек в каждой?", "как называть каждую функцию, в случае с разбивкой алгоритма на две? а с разбивкой на 10 функций?". Классы в этом плане все только усложняют: "к какому классу отнести каждую из этих 10 функций, к одному, или нескольким?". Зачем машине принимать такие решения?

Зависит от того, для чего машина пишет программу - для чтения пользователем-программистом (к примеру, нужно давать читабельные названия функциям) или чисто для исполнения (функции могут иметь имена f0001, f0002 и т.д.).

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

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

А вот и нет. Весь вышеприведённый диалог может быть воспроизведён довольно простой системой, которая только реагирует на раздражители.

Цитата:
Хотел подробно рассмотреть и расписать, но, пожалуй, не стану, так как и без того видно, что ваши с программой отношения выходят за рамки "привет-какдела-пока".
Так как и она должна быть в курсе твоих дел и потребностей, да и ты, судя по всему, в курсе того, чем она занимается. Так что, ваши "как дела", не настолько уж и пустые...

А я вот попробую подробно расписать:
Юзер: Привет, Ксю!
Ядро: присутствует код "Привет"
Ответ ядра: Привет. Как твоё настроение?
Установлен флаг ядра: вопрос о настроении
<Конец последовательности>

Юзер: Познакомился с прекрасной незнакомкой, которую я тебе вчера описывал!
Ядро: флаг "вопрос о настроении" активен
Ответ ядра: #511 Познакомился с прекрасной незнакомкой, которую я тебе вчера описывал!
Модуль 511 "оценка настроения": #111 радости полные штаны
Ответ ядра: #611 радости полные штаны
Модуль 611 "дневник": #111 запись успешна
Ответ ядра: Твоё настроение "радости полные штаны". ОК. Записываю в дневник.
Снят флаг ядра: вопрос о настроении
<Конец последовательности>

Юзер: А как у тебя дела?
Ядро: присутствует код "как дела"
Ответ ядра: #711 статус самообучения
Модуль 711 "статус самообучения": #111 100 ГБ
Ответ ядра: Сегодня изучила следующие 100 ГБ данных из archive.org. Очень интересно. Озвучить самые интересные, на мой взгляд, фрагменты?
Установлен флаг ядра: вопрос об озвучивании фрагментов
<Конец последовательности>

Юзер: Спасибо, но я пока занят.
Ядро: присутствует код "занят"
Ядро: флаг "вопрос об озвучивании фрагментов" активен
Ответ ядра: Отказ принят, переспрошу позже. Чем занят?
Снят флаг ядра: вопрос об озвучивании фрагментов
Установлен флаг ядра: вопрос о занятости
<Конец последовательности>

Юзер: Сегодня в 13:30 у меня встреча с инвесторами по проекту робота-компаньона.
Ядро: присутствует код "сегодня" и код времени
Ответ ядра: #611 Сегодня в 13:30 у меня встреча с инвесторами по проекту робота-компаньона.
Модуль 611 "дневник": #111 запись успешна
Ответ ядра: Записываю в дневник. Создать напоминание за полчаса или за час?
Установлен флаг ядра: создать напоминание
Установлен контекст ядра: +1 13:30
<Конец последовательности>

Юзер: За час. Как раз успею дойти пешком.
Ядро: присутствует код "час" и код "пешком"
Ядро: флаг "создать напоминание" активен
Ядро: текущий контекст - "13:30"
Ответ ядра; #811 13:30 минус час
Модуль 811 "калькулятор": #111 12:30
Установлен контекст ядра: +2 12:30
Ядро: поле настроек "город" равно "Москва"
Ядро: #911 12:30 Москва
Модуль 911 "погода": #111 13:00 дождь
Ответ ядра: В 13:00 в твоём городе будет дождь, возьми зонтик или машину.
<Конец последовательности>

Юзер: Хм, лучше поеду на машине.
Ядро: присутствует код "поеду" и код "машине"
Ядро: флаг "создать напоминание" активен
Ядро: поле настроек "город" равно "Москва"
Ядро: текущий контекст - "13:30", "12:30"
Ответ ядра: #912 12:30 Москва
Модуль 912 "пробки": #111 5 баллов
Ядро: поле настроек "дом" равно "Осенний бульвар 6"
Ядро: поле настроек "офис" равно "ул. Знаменка 15"
Ответ ядра: #813 от "Осенний бульвар 6" до "ул. Знаменка 15" пробки = 5 баллов
Модуль 813 "калькулятор расстояния": два часа
Ответ ядра: С учётом пробок, тебе нужно будет выехать за два часа до встречи.
Ответ ядра: #811 13:30 минус два часа
Модуль 811 "калькулятор": 11:30
Установлен контекст ядра: +3 11:30
Ответ ядра: #6112 последняя запись
Модуль 611 "дневник": Сегодня в 13:30 у меня встреча с инвесторами по проекту робота-компаньона.
Ответ ядра: #615 11:30 Сегодня в 13:30 у меня встреча с инвесторами по проекту робота-компаньона.
Модуль 615 "планировщик": #111 установлено напоминание: 11:30 Сегодня в 13:30 у меня встреча с инвесторами по проекту робота-компаньона.
<Конец последовательности>

Ну и так далее, просто лень продолжать.

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

"Ядро" реагирует на определённые комбинации "слов" ("кодов") - последовательностей символов, и выполняет те действия, которым оно было научено пользователем. При этом научить ядро можно чему угодно, ограничения только в функционале подключённых модулей.

Как происходит обучение - я уже писал где-то в этой теме или на этом форуме.

Теорию "флагов", "контекстов" и т.п. я пока не проработал, это только набросок.

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

Постоянно ставлю себе дедлайны и постоянно же срываю их...
[Ответ][Цитата]
гость
78.25.120.*
На: Программирование поведения робота без доступа к коду
+1
Добавлено: 08 окт 16 4:05
ТК> А вот и нет

а вот и да, модель собеседника это и простая модель (даже косвенная). не все так плохо

уже сам факт оперирования флагом настроения есть модель собеседника.
поддержка модулем 511 связи 'познакомился_с_прекрасной-радость' это тоже модель собеседника (возникшая как самомоделирование юзером себя).
реакция ядра на 'занят' 'чем занят' это реакция с учетом семантики, знания что собеседник в принципе если занят то чем-то. И это тоже часть модели собеседника (c cоотв. записями).
и т.д.
пока эти элементы модели рассыпаны по ядру и модулям модель собеседника не интегрирована и система представляется как простая реактивная, но если их собрать воедино, то можно вообразить себе чтобы модель собеседника сама в свою очередь порождала бы какие-то действия (запросы etc) (c собственной логикой, инициативой) и система стала бы не просто реактивной.
[Ответ][Цитата]
Vpolevoj
Сообщений: 1408
На: Программирование поведения робота без доступа к коду
Добавлено: 08 окт 16 7:52
Изменено: 08 окт 16 7:55
Цитата:
Автор: гость 78.25.120.* (Хмур)
система явно поддерживает некоторую версию модели собеседника
Цитата:
Автор: TimKruz
А вот и нет.
Цитата:
Автор: гость 78.25.120.* (Хмур)
ТК> А вот и нет

а вот и да, модель собеседника это и простая модель (даже косвенная). не все так плохо

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

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

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

Так что, Модель собеседника у тебя есть, пусть и заданная в неявной форме. И чем дольше ты будешь упорствовать в отрицании этого факта, тем хуже у тебя будет получаться конечный результат. А вот если ты уделишь этому вопросу хотя бы толику своего внимания, то вполне может так статься, что ты выйдешь со своей программой на какой-нибудь НОВЫЙ УРОВЕНЬ, возможно, что и на тот, на который ты и сам не рассчитывал.
[Ответ][Цитата]
 Стр.21 (27)1  ...  17  18  19  20  [21]  22  23  24  25  ...  27<< < Пред. | След. > >>