-Поиск по дневнику

Поиск сообщений в eugene20237

 -Подписка по e-mail

 

Среда для ИИ

Дневник

Вторник, 04 Сентября 2012 г. 01:37 + в цитатник
Всё сводится к вопросу: а в какой среде должен обучаться ИИ? А этот вопрос автоматически порождает другой: а что мы вообще хотим от ИИ в итоге? Если мы хотим получить бота в компьютерной игре, то обучать его нужно соответственно в виртуальном мире этой игры. Если мы хотим разговорного собеседника, то обучать такого монстра придётся в мире, идентичном нашему или очень похожему на наш. Отсюда понятно зачем на самом деле нужна Матрица, где бегает Морфиус - чтобы обучать Смитов!

Что же мы можем сделать? Либо создавать большой виртуальный мир с социальными отношениями, смоделированными чувствами и прочим-прочим, либо сделать нечто совершенно иное и вырастить ИИ для решения узкоспециализированной задачи. Я вот подумал, что хорошо бы сделать робота, который будет писать программы вместо меня Для этого можно создать виртуальный мир в котором живёт язык программирования, а именно его виртуальная машина. Скорее всего язык придется изобретать свой, чтобы впихнуть ИИ в его концепции. Т.е. задача пока чисто академическая. Но в случае успеха, уверяю вас, мы будем уже грезить о Скайнете и будущем с терминаторами, потому что оно приблизится.

vm (650x155, 47Kb)

Метки:  

ИИ: решение сложной задачи

Дневник

Четверг, 07 Июня 2012 г. 04:33 + в цитатник
Есть идея насчёт ИИ... Надо не забыть.

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

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

Метки:  

Искусственная жизнь

Дневник

Воскресенье, 20 Мая 2012 г. 01:44 + в цитатник
В этом посте речь пойдёт о принципах построения искусственной жизни на основе ИИ, описанного ранее. Я обнаружил одну важную особенность: каждое действие неразрывно связано с состоянием, в котором его можно применять. Под состоянием (S) понимается все необходимые условия, в которых действие может быть исполнено. Т.е. в неоптимизированном идеальном варианте это совокупность всех параметров мира, в модели которого живёт ИИ. В оптимизированном варианте это только явно необходимые параметры без учета "погоды на Марсе".

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

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

Пусть A0 - множество всех действий прошитых в ИИ при рождении, а S - состояние системы. Тогда в общем виде алгоритм искусственной жизни будет выглядеть следующим образом.
PHP:

// необходимо достичь предустановленного эффекта S1
1.случайный_перебор_действий(A0S1)
// эффект S1 достигнут, а также найдены многие другие действия и сохранены в множество A1
// необходимо достичь предустановленного эффекта S2
2.случайный_перебор_действий(A0 A1S2)
// эффект S2 достигнут, а также найдены многие другие действия и сохранены в множество A2
// необходимо достичь предустановленного эффекта S1 и есть действие a75 для его достижения в условиях S75
3.случайный_перебор_действий(A0 A1 A2S75)
// достигнуты условия S75, теперь можно выполнять действия для достижения цели S1
4.выполнение_набора_действий(a75)
// эффект S1 достигнут, многие действия откорректированы
...
font>


На шаге 3 и 4 демонстрируется как ИИ выбирает промежуточный эффект S75 в качестве цели для достижения эффекта S1. Теперь о том, что такое случайный_перебор_действий(...) и как он может быть запрограммирован. Всё очень просто:
PHP:

случайный_перебор_действий
(Aмножество действийStцелевое состояние системы)
{
  
Ac найти_действия_приводящие_к_эффекту(ASt)
  
Ss извлечь_начальные_условия(Ac)
  while (
!= St && not(S in Ss))
  {
    
A0[random(LEN(A))]
    
выполнение_примитивного_действия(a)
  }
  if (
== St)
    return;
  if (
S in Ss)
  {
    
найти_действие_по_начальным_условиям(AcS)
    
выполнение_набора_действий(a)
    if (
== St)
      return;
    else
      exit(
"Критическая ошибка, обратитесь к разработчикам.");
  }
}
font>


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

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

Метки:  

ИИ: анализатор экспериментов

Дневник

Суббота, 19 Мая 2012 г. 22:00 + в цитатник
В этом посте я приведу очень простой пример предметной области и алгоритм анализатора экспериментов, указанного в схеме к прошлому посту. Вообще, лог экспериментов - это аналог последовательности команд на языке ассемблера. Поэтому в нём могут быть скрыты условные переходы и циклы за логикой примитивных операций. В данном посте я не рассматриваю варианты поиска циклов и условных переходов в логе экспериментов. Для упрощения понимания сути работы анализатора он будет искать одну единственную каноническую конструкцию - простую последовательность операций. Операция в данном случае означает действие ИИ на объект исследования, выполняемое в ходе эксперимента.

Предметная область
Существует единственный объект исследования, состояние которого описывается набором дискретных параметров. Каждый параметр представляет собой флаг, т.е. может принимать только значения 0 и 1. Для этого объекта допустимо несколько примитивных действий, каждое из которых определённым образом меняет состояние объекта. Изменение состояния объекта имеет внутреннюю логику и недоступно извне. Т.е. объект исследования является для нас "чёрным ящиком". Однако, каждое примитивное воздействие всегда оказывает однозначный простой эффект. Кроме того, существует несколько фиксированных последовательностей команд, которые оказывают на объект новые эффекты. Эти эффекты меняют параметры состояния объекта отлично от примитивных действий.

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

Цель и задача
Анализатор просматривает лог экспериментов и пытается обнаружить все последовательности команд и новые эффекты, которые они оказывают на объект. Полученные наборы действий являются новыми стратегиями поведения ИИ, что есть результат его обучения. Требуется определить все эти наборы действий.

Модель данных
A - это множество примитивных действий, допустимых для объекта исследования.
A = { a1, ..., ax }.
C - это эксперименты, т.е. последовательность наших действий, применяемых к объекту.
C = { c1, ..., cn }, где ci принадлежит множеству действий A.
S - состояние системы после каждого эксперимента. Каждое состояние объекта состоит из m флагов.
S = { s1, ..., sm }, где si может быть 0 или 1.

Если проанализировать последовательности C и S, то можно выявить удачные блоки, приводящие к новым эффектам на множестве S. E = { e1, ..., el } - это искомые последовательности действий, где ei принадлежит множеству команд A = { a1, ..., ax }.

Алгоритм анализа экспериментов
Для начала необходимо сопоставить каждому действию ci эффект, который оно оказывает на объект исследования. Эффект воздействия - это изменение переменных состояния из множества S. Для того чтобы собрать эту информацию введём хранилище эффектов воздействий и обозначим его множеством D.
D = { d1, ..., dx }, где di = { ds1, ..., dsn };
Каждый эффект - это изменение параметров состояния объекта, которое хранится во множестве S и меняется после каждого эксперимента. Обозначим изменение каждого параметра из множества S структурой ds:
dsi = { S[i][j-1], S[i][j] }.
Как видно из формулы, эта структура хранит два состояния параметра S[i] - до эксперимента под номером j и после. Здесь j - номер эксперимента, который лежит в интервале от 1 до n.
Для построения множества D можно использовать следующий простой алгоритм.
PHP:

2
while (j<=&& LEN(D) < x)
{
  
C[j]
  
A[c]
  if (
D[a] == NULL)
  {
    
= {}
    for (
i=1i<=mi++)
    {
      
ds = { S[i][j-1], S[i][j] }
      
d[i] = ds
    
}
    
D[a] = 
  
}
  
j++
}
font>


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

Теперь можно анализировать весь лог экспериментов C, чтобы найти в нём последовательности действий приводящие к неожиданным эффектам. Для этого предлагается просматривать лог до появления неожиданного изменения состояния и когда оно будет замечено, сохранить несколько предыдущих экспериментов, привязав их к этому эффекту. В данном случае мы будем запоминать 10 предыдущих экспериментов в список T. Далее продолжаем просматривать лог C и при обнаружении уже запомненного эффекта добавляем ему в соответствие новые 10 предыдущих экспериментов. Делаем так до тех пор, пока для каждого эффекта не накопится достаточно количество появлений и соответствующих экспериментов. В данном случае мы ограничимся 3-мя появлениями каждого эффекта. Три эффекта будем считать уже закономерностью. Теперь для каждого эффекта сравниваем группы экспериментов и, если среди них есть одинаковые последовательности команд, добавляем эти команды в искомое множество E. В целом, псевдокод алгоритма построения множества E выглядит следующим образом.
PHP:

= {} // список неожиданных эффектов
1
while (j<=n// анализируем эксперименты
{
  
C[j]
  
A[c]
  
= {}
  for (
i=1i<=mi++) // формируем d
  
{
    
ds = { S[i][j-1], S[i][j] }
    
d[i] = ds
  
}

  if (
D[a] != d// неожиданный эффект
  
{
    
// запоминаем эффект в другой переменной
    
= []
    
j
    
while (i>=&& i>=j-10// находим 10 предыдущих действий
    
{
      
C[i]
      
A[c]
      
= {}
      for (
k=1k<=mk++) // формируем d
      
{
        
ds = { S[k][i-1], S[k][i] }
        
d[i] = ds
      
}
      
// запоминаем в список t действие a и его эффект d
      
t[LEN(t) + 1] = { a}
      
i--
    }
    
// сохраняем 10 предыдущих действий для эффекта f
    
T[f][LEN(T[f]) + 1] = t
  
}
  
j++
}

// формируем множество E
for (fZin T // f - ключ, Z - значение в коллекции T
{
  if (
LEN(Z) >= 3// является ли это закономерностью?
  
{
    
= [] // элемент искомого множества E
    
Z[1// эталонный образец последовательности, приводящей к эффекту f
    // ищем, где заканчивается одинаковая последовательность действий
    
for (j=2j<=LEN(Z); j++)
    {
      
Z[j]
      
LEN(t)
      do
      {
        
t[i].// действие
        
t[i].// изменение состояния
        
if (== o[i].&& == o[i].d)
        {
          if (
e[LEN(e) + 1] == NULL)
            
e[LEN(e) + 1] = a
        
}
        else
          break
        
i++
      }
      while(
<= LEN(t))
    }
    
E[f] = // добавляем новую стратегию в множество E по ключу f
  
}
}
font>


Вот и всё, множество E построено. Оно содержит последовательности действий, которые приводят новым эффектам. Обратите внимание, что множество E представлено в псевдокоде ассоциативным массивом. В этом массиве каждому ключу f (сам эффект) сопоставлены последовательности действий из множества A, которые приводят к этому эффекту. Таким образом, элементы из множества E можно использовать в качестве новых, теперь уже составных, действий. Эти составные действия можно применять к объекту исследования чтобы добиться какого-либо эффекта f.

Прошу понять, что данный псевдокод может содержать мелкие логические ошибки и в целом я не делал такой реализации. Всё это лишь алгоритмические выкладки, которые являются основой для дальнейшего исследования и совершенствования ИИ. Это именно основа, база, потому что рассмотренная предметная область очень проста и не соответствует реальным задачам. Однако этот пример позволяет понять принцип работы анализатора экспериментов и генерации новых стратегий для ИИ.

Если Вы нашли логические ошибки в псевдокоде или у Вас есть другие ценные мысли по ИИ, прошу писать в комментарии. Спасибо.

Метки:  

Принципы самообучающегося интеллекта

Дневник

Вторник, 27 Марта 2012 г. 07:09 + в цитатник
Я уже начинаю путаться в своих рассуждениях об искусственном интеллекте. Рассуждения эти происходят исключительно в моей голове, поэтому я забываю, где я нахожусь и к чему пришёл. Чтобы не запутаться во всём этом, я решил написать этот пост, в котором постараюсь обозначить исходную точку своих рассуждений.

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

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

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

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

Так как девушки - существа пассивные, наш маленький друг будет инициативным. Он сам ломится к разным девушкам и начинает общение. Он пишет им одну из оригинальных фраз для знакомства, использую действие "познакомиться". Некоторые из них не отвечают или посылают его - их он обходит стороной, реагируя на ответ среды "отказ". Когда же девушка ответила что-то более приветливое, ВИ также адекватно реагирует на это, выбирая одну из тем, на которую он будет раскручивать девушку.
Т.к. никаких знаний о собеседнике на этом этапе у нас нет, начинается случайный перебор возможных действий. Всегда, в условиях полной неизвестности которые были у нас лишь в глубоком детстве, мы используем случайный выбор любого из возможных действий.
Выбрав одну из тем и пообщавшись на эту тему с девушкой, ВИ оценивает ответ среды в виде параметров "интерес", "эмоциональность", "знание", "благосклонность девушки" и возможно некоторых других. ВИ запоминает соответствие его действия ответным параметрам, которые пришли от внешнего мира. Далее ВИ продолжает случайным образом перебирать темы, запоминая параметрические ответы окружающей среды на его действия. Разговор на каждую тему является для ВИ экспериментом. После каждого проведённого эксперимента знаний об объекте исследования, коим для него является девушка, становится больше. ВИ уже не будет говорить с ней о недавнем матче Спартака и ЦСКА, если после предложенной аналогичной темы о футболе девушка написала нечто такое, что все параметры ответа оказались достаточно низкими. Однако, если ответ девушки на какой-либо вопрос оказался, например, эмоциональным и благосклонность при этом не уменьшилась, то ВИ конечно разовьёт эту тему, а также все схожие темы, потому что в таком случае он построит новое поведение:
PHP:

action вызывать_переживания
()
{
  
выбрать_случайную_тему("секс""гарри-поттер""бывший бойфренд""аниме");
  
говорить_на_выбранную_тему();
}
font>


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

выбрать_тему
("секс");
говорить_на_выбранную_тему();
-> 
проанализирована ответная реакция: { интерес: +2эмоциональность: +5знание0благосклонность_девушки}
выбрать_тему("гарри-поттер");
говорить_на_выбранную_тему();
-> 
проанализирована ответная реакция: { интерес: +1эмоциональность: +4знание: +2благосклонность_девушки: +}
выбрать_тему("бывший бойфренд");
говорить_на_выбранную_тему();
-> 
проанализирована ответная реакция: { интерес0эмоциональность: +6знание: +1благосклонность_девушки: +}
выбрать_тему("аниме");
говорить_на_выбранную_тему();
-> 
проанализирована ответная реакция: { интерес: +3эмоциональность: +4знание: +2благосклонность_девушки}
font>


Анализируя этот лог экспериментов ядро ВИ может сделать вывод, что эмоциональность объекта исследования проявляется в этих темах с заметной регулярностью. Значит можно добавить в арсенал новое действие для повышения эмоционального уровня девушки. ВИ только что научился разогревать эту особу! Совершенно самостоятельно написал себе подпрограмму. Думаю, также иногда поступают и люди, набираясь жизненного опыта.
Однако, продолжим рассказ об обольщении После нескольких удачных серий экспериментов ВИ обучился таким действиям как "зазогреть девушку", "приструнить девушку", "поучить девушку", "утомить девушку", "повысить настроение девушки", "разозлить девушку", "заинтересовать девушку" и т.п. После этого ВИ уже стал повсеместно использовать свои новые действия. Теперь он не просто болтает на случайные темы, но и выстраивает их определённые последовательности, желая достичь нужного эффекта. Да уж, всё просчитано наперёд у этих роботов Так вот, теперь ВИ имеет возможность анализировать в логах свои изученные действия! Это ключевой момент, поскольку на данном этапе обучения ВИ перешёл на новый уровень абстракций. Например, теперь он может выяснить, что если сначала "повысить благосклонность" девушки, затем "вызвать интерес" и далее "разогреть", то она, с большой долей вероятности, соглашается прислать свои голые фотки =) Поэтому ВИ построит новое действие "раскрутить девушку на фотки". Этот анализ уже будет произведён с использованием более сложных абстракций, которыми теперь ВИ может оперировать.

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

AI (600x668, 10Kb)

Метки:  

Мышление есть компиляция

Дневник

Понедельник, 28 Ноября 2011 г. 12:00 + в цитатник
labirint-mysh-b962 (225x300, 10Kb)
Большая просьба к знающим людям, скажите на верном ли я пути и куда копать?

Меня снова накрывают размышления об ИИ. Продолжаю развивать свою мысль о генерации новой стратегии на основе прожитого опыта. Т.е. есть некий жизненный опыт, который упрощённо можно считать логом команд и изменений состояния системы:
O = { C, S }, где C - это множество наших действий (команд), а S - состояние системы после каждого нашего действия;
C = { c1, ..., cn }, где ci принадлежит множеству команд A = { a1, ..., ax };
S = { s1, ..., sn }, где si = { d1, ..., dy }.

Если проанализировать этот лог, то можно выявить удачные блоки и даже построить из этих данных новые алгоритмы, приводящие к успеху. В общем случае новый алгоритм можно представить в виде функции:
f(p1, ..., pz) = E = { e1, ..., el }, где ei принадлежит множеству команд A = { a1, ..., ax };
f можно представить в виде функции на языке программирования с фиксированным набором параметров p1,...,pz.
Кроме того, есть частный случай, когда z = 0, т.е. функция не параметризированная. Тогда её тело E является всего лишь набором команд, которые могут быть просто фрагментом из лога C.

Задача состоит в том, чтобы разработать метод генерирации E из O. Т.е. преобразование O -> E. Это будет алгоритмом генерации алгоритма.

Метки:  

Искусственный интеллект

Дневник

Пятница, 07 Января 2011 г. 15:03 + в цитатник
Последнее время мне не дают покоя мысли об ИИ. Не знаю что на меня нашло: за несколько часов взял и набросал мат. модель самообучающегося бота на основе рецепторов с обратной связью. Всё бы хорошо, но в основе лежит алгоритм "тыкаться во всё подряд". И тогда я задумался о продвинутом ИИ, который сам генерирует алгоритмы и запоминает их. Как мы вообще думаем? Мне кажется, что в основе лежит тупой алгоритм перебора всех возможных вариантов. Затем мы запоминаем удачное решение и пытаемся применить его в будущем. Со временем кол-во запомненных функций растёт и мы умнеем. Мне кажется, что всё это реально смоделировать!

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

Мышь стоит в прямом тонеле, в конце которого лежит сыр. Доступных действий у неё 4: шаг вперед, шаг назад, шаг влево, шаг вправо. До сыра 10 шагов. Она их делает и достигает цели. Запоминает удачное решение. Потом её сажают в такой же тунель, но до сыра 20 шагов. Тут она вспоминает удачное решение и использует функцию Идти_Вперёд. Потом посадим её на поле, положим там сыр, а посреди поставим забор. Забор можно обойти. Снова она будет искать путь и в итоге найдёт его. Как запомнить это решение? Как обобщить его... В каком формате она это запоминает? Это похоже на алгоритм, но по-моему не совсем процедурный. Ведь препядствия разной величины, формы и всё это мы обобщаем и запоминаем. Мы все - программисты )

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

Если кому-то это интересно, отзовитесь!

Метки:  

 Страницы: [1]