GotAI.NET

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

 

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

 Все темы | Новая тема Стр.10 (27)<< < Пред. | След. > >>   Поиск:  
 Автор Тема: На: Программирование поведения робота без доступа к коду
r
Сообщений: 837
На: Программирование поведения робота без доступа к коду
Добавлено: 13 сен 16 15:53
Изменено: 13 сен 16 16:02
Цитата:
Автор: Vpolevoj
Под функциями я подразумевал вовсе не программные функции, а скорее - функционал, то есть, ту самую "последовательность действий, которую должен выполнить компьютер", вот только я хотел представить её не как Алгоритм (не как собственно последовательность), а как набор связанных между собой Функций (или Блоков, что на мой взгляд, примерно одно и то же). То есть, один Блок - это одна Функция, и есть еще и связи между ними, между этими Блоками-Функциями. Но в результате такого их соединения получается уже не Алгоритм (не "последовательность действий", как таковая), а скорее Конечный Автомат (КА), с некоторым ограниченным набором возможных состояний всей этой системы.
Как я вижу, то элементарные действия (функции) можно реализовать при помощи логически связанных между собой правил (условий). А сложные функции не должны быть писаны заранее, то есть их как бы заранее не существует. Их динамически строить должна некая сущность, которую я называю планировщиком. Комбинируя элементарные действия в цепочки действий.

Цитата:
Автор: Vpolevoj
Хотя, теоретически, эта основная Задача, которую я запускаю самой первой, может быть решена (если программа сумеет найти и достичь "смысл свой жизни"), выведена на исполнители и завершена, так как она точно такая же как и все остальные Задачи.
В простейшем случае такую главную цель можно организовать как бесконечный цикл, вроде while 1 == 1 {}; но более правильно будет представить задачу как некий объект с условиями достижения цели, чтобы машина проверив эти условия могла завершить эту задачу-цель. Возможно есть еще варианты реализации.
[Ответ][Цитата]
r
Сообщений: 837
На: Программирование поведения робота без доступа к коду
Добавлено: 13 сен 16 17:15
Изменено: 13 сен 16 17:21
Цитата:
Автор: TimKruz
Делов-то - запустить цикл в отдельном потоке. Тогда другие потоки будут выполняться параллельно этому циклу (по возможности; зависит от числа ядер и загруженности ЦП), а цикл сможет менять значения переменных программы.
Тут зависимость не столько от свободных вычислительных ресурсов, сколько от использования разными потоками одних и тех же объектов данных. А параллельный доступ к одной и той же переменной нужно как-то организовывать, возникают проблемы синхронизации, которые решаются программистом. Если говорить о программировании поведения робота непрограммистом, то эти проблемы желательно возложить на саму систему робота, так как обычный человек не совсем понимает причем тут он к какой-то там синхронизации непонятно чего.

Цитата:
Автор: TimKruz
Одного не пойму - если триггер "i изменилось" активируется внутри цикла, то это значит, что цикл никогда не будет прерываться (не считая второго триггера). Вот если бы i иногда изменялось бы, а иногда не изменялось - тогда такой финт ушами имел бы смысл.
Триггеры навешиваемые на изменение значения (а не на конкретное значение) автоматически сбрасываются в неактивное состояние в каждой итерации цикла после выполнения всех обработчиков условий, к которым этот триггер привязан. Я попробую показать это на примере как нибудь.

Цитата:
Автор: TimKruz
Не будут. Каждый раз, когда цикл доходит до строчки end, он в любом случае возвращается на свою первую строчку и проверяет своё условие. Чтобы оба цикла выполнялись параллельно (как бы параллельно, если у нас только одно ядро - их итерации будут чередоваться) - нужно запустить их в отдельных потоках. В Delphi это делается одним щелчком пальцев.
Конечно, выполняясь в одном потоке они физически не могут работать чисто параллельно. Я имел в виду псевдопараллельность - чередующиеся итерации. Но, в одном потоке. Вы просто воспринимаете цикл в пределах одного потока как нечто неделимое, так как это так и есть в мейнстриме.

Цитата:
Автор: TimKruz
Ещё можно сделать один-единственный цикл для всех условий, как-то так:
while true do
begin
if Trigger1 then Do1;
if Trigger2 then Do2;
if Trigger3 then Do3;
<...>
end;

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

Цитата:
Автор: TimKruz
Ээээ, всё современное программирование построено на функциях (процедурах, методах или подпрограммах - называй как хочешь). Без них никуда, даже в ООП. Без них придётся писать огромную простыню кода, переписывать один и тот же код десятки раз...
Все современное программирование построено на обязательном наличие программиста. Если вы считаете нормой, что к каждому роботу нужно будет приставить программиста, то я приму вашу идею насчет незыблемости устоявшихся подходов на веру. Однако же я считаю (котик - привет), что для общего (general) ИИ подход построенный на исключительно подготовленных заранее функциях не подходит. Абсолютно для всех случаев ими не запасешься.

Цитата:
Автор: TimKruz
А работа ИИ не зависит от того, каким способом сконструирован его код - важен алгоритм, а не его конкретная реализация.
Если говорить об AGI, то конкретная реализация как мне кажется будет очень даже важна.
[Ответ][Цитата]
r
Сообщений: 837
На: Программирование поведения робота без доступа к коду
Добавлено: 13 сен 16 17:50
Цитата:
Автор: victorst
Мне не совсем понятно, какие правила поведения робота здесь обсуждаются участниками диалога. Правила поведения, которые формулируем ограниченным ЕЯ или подобным способом, т.е. правила, которые мы запрашиваем у робота, требуем, чтобы он следовал им или его какой-то внутренний язык, внутренние механизмы, на основе которых робот действует?
Если второе, то, я так понимаю, вы хотите некими своими алгоритмами запрограммировать робота, создав алгоритмически его поведение. Есть и другие подходы.
И первое и второе.
Я понимаю, что внутренняя архитектура программы может быть кому-то интересна обычно только после того, как программа начнет решать реальные проблемы. Но ее обсуждение позволяет самому лучше понять эту самую внутреннюю архитектуру. Если есть идеи предлагайте.
[Ответ][Цитата]
rrr3
Сообщений: 11857
На: Программирование поведения робота без доступа к коду
Добавлено: 14 сен 16 0:29
Цитата:
Автор: r
Как я вижу, то элементарные действия (функции) можно реализовать при помощи логически связанных между собой правил (условий). А сложные функции не должны быть писаны заранее, то есть их как бы заранее не существует. Их динамически строить должна некая сущность, которую я называю планировщиком. Комбинируя элементарные действия в цепочки действий.
...
...Однако же я считаю (котик - привет), что для общего (general) ИИ подход построенный на исключительно подготовленных заранее функциях не подходит. Абсолютно для всех случаев ими не запасешься....

Общая идея о том, что заранее "не напасешься" мне нравится, но когда говорится о "планировщике" возникает ощущение перекладывания "проблемы" на некоего гомункулуса, в котором все должно быть, как бы, заранее предусмотрено ("напасено"). Другими словами, есть некая, как минимум, недоговоренность, если два приведенных отрывка рассматривать вместе.
[Ответ][Цитата]
TimKruz
Сообщений: 323
На: Программирование поведения робота без доступа к коду
Добавлено: 14 сен 16 4:49
Изменено: 15 сен 16 17:30, автор изменений: r
Цитата:
если две процедуры обращаются к одной и той же переменной (читают и изменяют), та процедура, которая только читает переменную обязательно должна вызываться перед процедурой, которая ее изменяет

Я показал самый простой вариант. Но сортировка списка вызова не проблема:
repeat
for F in Functions do
if F.Triggered then F.Invoke; // вызываем функции
RebuildFunctions(Functions); // по необходимости переделываем
SortByType(Functions); // сортируем: всех чтецов наверх!
until false;

Цитата:
Если говорить об AGI, то конкретная реализация как мне кажется будет очень даже важна.

Реализация во многом зависит от алгоритма. И результат зависит в первую очередь зависит от алгоритма, а только потом - от реализации.

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

Чёт я запутался. Речь шла о том, что i изменяется в цикле после сброса триггера, а раз она изменяется - то сброшенный триггер поднимается и цикл зацикливается.
[Ответ][Цитата]
Vpolevoj
Сообщений: 1408
На: Программирование поведения робота без доступа к коду
+1
Добавлено: 14 сен 16 7:02
Изменено: 14 сен 16 7:05
Цитата:
Автор: r

Все современное программирование построено на обязательном наличие программиста.

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

Однако же я считаю, что для ... всех случаев ими не запасешься.

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

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

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

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

Кстати, я думаю, что это можно будет сделать, используя механизм "ручного" программирования. То есть, теоретически, можно "вручную" составить такой план действий, который при его исполнении приведет к уже самостоятельному планированию роботом своих последующих действий. То есть, можно само это "планирование" представить как действие, и научить этому действию нашего робота извне "вручную".
[Ответ][Цитата]
victorst
Сообщений: 821
На: Программирование поведения робота без доступа к коду
Добавлено: 14 сен 16 11:35
Изменено: 14 сен 16 11:36
Планировщик в действии:



Робот Вальтер
[Ответ][Цитата]
r
Сообщений: 837
На: Программирование поведения робота без доступа к коду
Добавлено: 15 сен 16 16:43
Изменено: 15 сен 16 16:57
Цитата:
Автор: rrr3
Общая идея о том, что заранее "не напасешься" мне нравится, но когда говорится о "планировщике" возникает ощущение перекладывания "проблемы" на некоего гомункулуса, в котором все должно быть, как бы, заранее предусмотрено ("напасено"). Другими словами, есть некая, как минимум, недоговоренность, если два приведенных отрывка рассматривать вместе.
Не то чтобы недоговоренность, я и сам пока смутно представляю как конкретно это должно работать. Просто кажется, что именно в таком направлении нужно двигаться. Валерий в последнем посте хорошо объяснил идею, у меня бы так четко не получилось. Остальное нужно будет додумывать.
Насчет перекладывания проблемы, думаю что нет. Составление цепочки действий может быть автоматизировано в каких-то пределах без понимания сути явлений. Моя задача состоит в том чтобы выявить эти принципы и правила построения таких цепочек на основании взаимосвязей действий с фактами. Действия могут быть прописаны кодом, заученными, обнаруженными самостоятельно, скопированными у кого-то. Набор фактов - двоичная модель мира. Возможно знания какое из действий в какой момент применить получится описать формально.
[Ответ][Цитата]
r
Сообщений: 837
На: Программирование поведения робота без доступа к коду
Добавлено: 15 сен 16 17:24
Цитата:
Автор: TimKruz
Я показал самый простой вариант. Но сортировка списка вызова не проблема:
Да, только самое интересное начинается внутри этих функций. Нужно анализировать код.

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

Цитата:
Автор: TimKruz
Чёт я запутался. Речь шла о том, что i изменяется в цикле после сброса триггера, а раз она изменяется - то сброшенный триггер поднимается и цикл зацикливается.
Верно, зацикливается пока не деактивируется триггер "значение i меньше значения n".
[Ответ][Цитата]
rrr3
Сообщений: 11857
На: Программирование поведения робота без доступа к коду
Добавлено: 15 сен 16 23:53
Цитата:
Автор: r
Не то чтобы недоговоренность, я и сам пока смутно представляю как конкретно это должно работать. Просто кажется, что именно в таком направлении нужно двигаться. ...


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

Ну да ладно, не принимайте близко, я истин не глаголю...
[Ответ][Цитата]
Vpolevoj
Сообщений: 1408
На: Программирование поведения робота без доступа к коду
Добавлено: 16 сен 16 5:38
Изменено: 16 сен 16 5:56
Цитата:
Автор: rrr3
...но когда говорится о "планировщике" возникает ощущение перекладывания "проблемы" на некоего гомункулуса, в котором все должно быть, как бы, заранее предусмотрено...
Цитата:
Автор: r
... я и сам пока смутно представляю как конкретно это должно работать.

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

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

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

Мне видится это так.

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

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

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

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

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

Цель
/ | \
Цикл Выбор Условие
[Ответ][Цитата]
Luarvik.
Сообщений: 17287
На: Программирование поведения робота без доступа к коду
Добавлено: 16 сен 16 7:30
Цитата:
Автор: Vpolevoj
Если предположить, что у нашего робота уже есть некий исходный набор функций (предустановленных действий), которые этот робот может вызывать по своему разумению, то простейшим Планом (или Алгоритмом) будет являться связка "Если-То", это когда наш робот будет подставлять в качестве вывода на исполнители какую-то из имеющихся у него Функций в ответ на любой раздражитель (реакцию на который ему не запрограммировали). Правильное действие будет получено автоматически путем "естественного отбора"

Вы не зря оговорились насчет "автоматически". Именно автоматически и будет получен нужный результат. Интеллектом здесь и не пахнет, разумеется, опять получается тупой переборный автомат.
Вот если бы он "в уме" перебирал - на "воображаемых" моделях, то это был бы какой-то сдвиг, но "воображаемое действие" - это совсем другая история и на порядки сложнее, поскольку требует функциональной "прослойки" в виде виртуальной реальности.
[Ответ][Цитата]
Vpolevoj
Сообщений: 1408
На: Программирование поведения робота без доступа к коду
Добавлено: 16 сен 16 8:27
Цитата:
Автор: Luаrvik
Вы не зря оговорились насчет "автоматически". Именно автоматически и будет получен нужный результат.

Интеллектом здесь и не пахнет

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

Интеллект, само собой, подразумевает нечто большее, чем просто само-программирование (хотя есть и такие, кто именно так и думает).
[Ответ][Цитата]
Luarvik.
Сообщений: 17287
На: Программирование поведения робота без доступа к коду
Добавлено: 16 сен 16 8:52
Изменено: 16 сен 16 8:55
Цитата:
Автор: Vpolevoj
Про Интеллект никто и не говорит, речь идет всего лишь о способности робота самому составлять для себя Планы (так называемое само-программирование).

Так тут не только интеллекта, но и самопрограммирования не наблюдается.
Какое может быть программирование без понимания ?
А где есть понимание, там можно и без перебора обойтись.
В общем, "мозги" для того и даются, чтобы не тыкаться пальцем в небо и не делать каждый раз как в первый раз.
[Ответ][Цитата]
гость
176.9.136.*
На: Программирование поведения робота без доступа к коду
Добавлено: 16 сен 16 9:06
Цитата:
Автор: Luаrvik


Так тут не только интеллекта, но и самопрограммирования не наблюдается.
Какое может быть программирование без понимания ?
А где есть понимание, там можно и без перебора обойтись.
В общем, "мозги" для того и даются, чтобы не тыкаться пальцем в небо и не делать каждый раз как в первый раз.
всётаки Луарвик и КОТ чемто похожи, почти одно и тоже говорят, у обоих всё построенно на женских паттернах, на чувствах, чаянях, на чем то "высшем", неформализуемом, ту т неформалезуемость как основное свойство, то есть если что то вдруг решенно формально(запрограмированно), то оно по опредлению "НЕ ТО" что они имеют в виду
[Ответ][Цитата]
 Стр.10 (27)1  ...  6  7  8  9  [10]  11  12  13  14  ...  27<< < Пред. | След. > >>