Очень часто я встречаю слишком пространные рассуждения на тему искуственного интеллекта. Кому то не нравится что он поработит человечество, кто то хочет приписать к нему человеческие эмоции. Даже разговаривая со своим окружением часто натыкаюсь на софизмы. Неудивительно что ИИ еще не создан, — мы не знаем чего хотим от него.
Теория без практики не может создать ничего полезного. Практика без теории хотя бы попытается.
Но, вначале я упомяну несколько своих рассуждений.
Определение Алекса Дж. Шампандара (ведущий программист по искуственному интеллекту во всем мире):
«Интеллект — это набор умений и навыков, которые мозволяют людям решать задачи в условиях ограниченности ресурсов.»
Пусть то ограничение по времени или по входным данным. Все остальные определения меня не удовлетворяют. Не будем забывать так же что интеллект в некоторой степени присутствует у любых живых существ (многоклеточных коненчо и не растений). Собаку так же можно научить не только приносить тапочки, но и простейшей арифметике.
Недавно видел как собаку учили методу исключения. Перед собакой некий агрегат с экраном (видимо электрочувствительным) и снизу прорезь для появления лакомства. Необходимо выбирать нужный предмет из двух доступных: сначала даются изображения сумки и коробки. Собака должна выбрать сумку, тогда она получает награду. Если же она выбирает коробку, — экран становится красным и ничего не происходит. Спустя некоторое время собака запоминает что нужно выбирать сумку. После чего на экране появляется коробка и шляпа. Собака уже знает, что коробку выбирать не надо и выбирает шляпу. Со временем условия меняются и задача усложняется.
Первую часть своих рассуждения я веду к тому что для обучения необходимо поощрение. Только при таком условии обучение будет возможно. Есть одно «но». Не сделано еще такой системы ИИ, в которую можно было бы внедрить систему поощрений. Можно переформулировать условие: «Поощрение — это то, что дает гораздо бОльшие шансы на развитие интеллекта и обучение интеллектуальной модели». После этого я заменил поощрение размножением. Точно так же клетки размножались до многоклеточных. Если клетка нашла пищу, то она получает право на размножение. Исходя из того, что ИИ должен решать поставленные ему задачи пищей можно считать само условие задачи. После ее решение модель размножается и усложняется. Приму во внимание то, что я рассматриваю множество моделей ИИ в одной самозамкнутой системе. Это позволяет масштабировать развитие эволюции в системе.
Про нейроны и многослойные перцептроны уже много чего сказано. Не буду посигать на эту довольно сложную тему (до некоторых пор). Лишь упомяну свои наблюдения. Есть мнение, что истина рождается в споре. Когда начинают спорить два человека, при этом ни один из них не хочет окончательно доказать свою точку зрения, а только узнать мнение другого и далее развить свои рассуждения, осознание новой идеи обычно приходит через промежуток времени. До этого момента оппонент выслушивает чужую точку зрения и пытается применить ее на свою идею. Некоторые аспекты проходят развитие. Другие отвергаются по разным причинам. Все это время в мозгу рождаются и умирают клетки. Именно в момент осознания новой идеи, по моему мнению, и происходит завершение цикла обновления нейронов. Понимание этого пришло ко мне, только после принятия во внимание определенного промежутка времени ТАУ, разного для всех людей.
Для кого то будет легко решить задачку по алгебре 10-11 класса школы. Но некоторым это будет не под силу. Многие здесь вспомнят про коэффициент интеллекта: чем он выше, тем умнее человек. Возникает вопрос: от чего зависит IQ? Упрощая все процессы мозга можно считать, с некоторой условностью, то IQ — это скорость обновления группы нейронов мозга. Т.е не только обмена между ними информации, но и умирания и рождения.
Теперь поговорим о записи гештальта в ЦНС. С рождения у ребенка есть уже данные природой определенные понятия такие как «мама, родители, больно, страх» и тп. На них проявляется разная реакция. На боль, нааример, плач или обида. Но кто сказал ребенку что боль это плохо? Это уже заложено в новорожденном. Это генетическая память. Именно эти понятия я хочу найти в мозгу. Они содержатся либо в определенных группах нейронов, либо в структуре связей. Я уверен их можно записать каким либо способом. Очень возможно что некоторые понятия привязаны к структуре «круг» когда структура нейронов аналогична ленте, скрепленной с двух сторон и нейроны фигуры взаимодействуют с вышележащими и нижележащими (если развернуть фигуру и положить на плоскость). При этом неважно как она свернута. Другие фигуры образуют другие понятия. Но это все в идеале. На самом же деле фигуры очень большие и громоздкие.
И все же теория без практики — ничто. И начать я решил с нахождения пути от точки А до точки Б. Взял самый распространенный волновой алгоритм А* и написал на нем простейшую программку. Пример здесь.

Программа написана на Delphi. Поле level[0..49,0..49] представляет собой бинарный массив. Кроме него есть массив m[-1..50,-1..50] увеличенный во все стороны на одну клетку представляющий запись из integer и boolean.
integer — это колличество ходов до данной клетки от точки А. boolean нужен для того чтобы программа знала обсчитывалась эта клетка ранее или нет.
Признаюсь программа написана криво, — все делалось на скорость. Можно было поставить пару лишних условий для уменьшения использования процессорного времени.
До первого этапа алгоритма программа выставляет в массив m[j,i].d:integer препятствия. Там где Level[j,i] равен True массиву m[j,i].d присваивается значение 65535 и m[j,i].p:=true; — эта клетка обсчитана.
Затем начинается сам алгоритм: поставлен цикл
for h:=1 to 2500 do
for i:=0 to 49 do
for j:=0 to 49 do
и если клетка m[j,i].p равна False, т.е не обсчитана, а рядом есть любая из обсчитаных то этой клетке m[j,i].d присваивается минимальное значение из окружающих обсчитаных.
Число 2500 обуславливает собой максимальное колличество ходов. 50*50=2500. В любом случае по этому полю можно сделать не более 2500 ходов, так что эта цифра достаточна для алгоритма.
Увеличение во все стороны реализовано для того чтобы при просчете точки пути и если путь идет у самого края поля программа не думала что за краем массива имеется 0. Ведь на второй стадии прорисовки проставляется путь от точки Б до точки А выбирая минимальное число изокружающих точку Б. Таким образом точка Б передвигается к ячейке, от которой путь до А минимален. после передвижения точки Б идет отрисовка. После всего цикл повторяется. В конце концов точка Б имеет координаты точки А.
Другими словами вся система представляет трехмерное пространство, где препятствия — это очень высокие столбы, а сама карта наклоняется по отношению к точке А, которая является самой нижней точкой карты. Шарик скатывается по наклонной поверхности в сторону А абсолютно без инерции.
Первоначальная версия алгоритма, с которого я срисовывал, сделана чуть более хитрым способом.
http://functionalism.narod.ru/findpath.pas
Написанный на паскале он имеет поле level[1..80,1..25]. Кроме этих двух массивов имеется одномерный heads[1..2000] образованный записью из X:integer и Y:integer. Есть так же Maxhead:integer — колличество слотов фронта волны. Heads нужен для того чтобы просчитывать каждый следующий фронт волны (один фронт это ячейки с равным расстоянием до точки А). При перечислении от 1 до Maxhead программа каждый раз ищет вокруг level[heads[i].x,heads[i].y] необсчитанные ячейки и взависимости от нахождения ячейки относительно обсчитываемой следующей присваивается одно из состояний dirN..DirNW. С каждым следующим фронтом Maxhead увеличивается.
На втором этапе все ячейки массива TMoveMap[j,i].dir поворачиваются в обратную сторону. Т.е DirN становится DirS, а DirSE становится DirNW и тп. После чего вырисовывается сам маршрут.
Спасибо за внимание. В дальнейшем планируется:
Теория без практики не может создать ничего полезного. Практика без теории хотя бы попытается.
Поощрения
Но, вначале я упомяну несколько своих рассуждений.
Определение Алекса Дж. Шампандара (ведущий программист по искуственному интеллекту во всем мире):
«Интеллект — это набор умений и навыков, которые мозволяют людям решать задачи в условиях ограниченности ресурсов.»
Пусть то ограничение по времени или по входным данным. Все остальные определения меня не удовлетворяют. Не будем забывать так же что интеллект в некоторой степени присутствует у любых живых существ (многоклеточных коненчо и не растений). Собаку так же можно научить не только приносить тапочки, но и простейшей арифметике.
Недавно видел как собаку учили методу исключения. Перед собакой некий агрегат с экраном (видимо электрочувствительным) и снизу прорезь для появления лакомства. Необходимо выбирать нужный предмет из двух доступных: сначала даются изображения сумки и коробки. Собака должна выбрать сумку, тогда она получает награду. Если же она выбирает коробку, — экран становится красным и ничего не происходит. Спустя некоторое время собака запоминает что нужно выбирать сумку. После чего на экране появляется коробка и шляпа. Собака уже знает, что коробку выбирать не надо и выбирает шляпу. Со временем условия меняются и задача усложняется.
Первую часть своих рассуждения я веду к тому что для обучения необходимо поощрение. Только при таком условии обучение будет возможно. Есть одно «но». Не сделано еще такой системы ИИ, в которую можно было бы внедрить систему поощрений. Можно переформулировать условие: «Поощрение — это то, что дает гораздо бОльшие шансы на развитие интеллекта и обучение интеллектуальной модели». После этого я заменил поощрение размножением. Точно так же клетки размножались до многоклеточных. Если клетка нашла пищу, то она получает право на размножение. Исходя из того, что ИИ должен решать поставленные ему задачи пищей можно считать само условие задачи. После ее решение модель размножается и усложняется. Приму во внимание то, что я рассматриваю множество моделей ИИ в одной самозамкнутой системе. Это позволяет масштабировать развитие эволюции в системе.
Полный цикл обновления нейронов мозга
Про нейроны и многослойные перцептроны уже много чего сказано. Не буду посигать на эту довольно сложную тему (до некоторых пор). Лишь упомяну свои наблюдения. Есть мнение, что истина рождается в споре. Когда начинают спорить два человека, при этом ни один из них не хочет окончательно доказать свою точку зрения, а только узнать мнение другого и далее развить свои рассуждения, осознание новой идеи обычно приходит через промежуток времени. До этого момента оппонент выслушивает чужую точку зрения и пытается применить ее на свою идею. Некоторые аспекты проходят развитие. Другие отвергаются по разным причинам. Все это время в мозгу рождаются и умирают клетки. Именно в момент осознания новой идеи, по моему мнению, и происходит завершение цикла обновления нейронов. Понимание этого пришло ко мне, только после принятия во внимание определенного промежутка времени ТАУ, разного для всех людей.
Для кого то будет легко решить задачку по алгебре 10-11 класса школы. Но некоторым это будет не под силу. Многие здесь вспомнят про коэффициент интеллекта: чем он выше, тем умнее человек. Возникает вопрос: от чего зависит IQ? Упрощая все процессы мозга можно считать, с некоторой условностью, то IQ — это скорость обновления группы нейронов мозга. Т.е не только обмена между ними информации, но и умирания и рождения.
Запись гештальта
Теперь поговорим о записи гештальта в ЦНС. С рождения у ребенка есть уже данные природой определенные понятия такие как «мама, родители, больно, страх» и тп. На них проявляется разная реакция. На боль, нааример, плач или обида. Но кто сказал ребенку что боль это плохо? Это уже заложено в новорожденном. Это генетическая память. Именно эти понятия я хочу найти в мозгу. Они содержатся либо в определенных группах нейронов, либо в структуре связей. Я уверен их можно записать каким либо способом. Очень возможно что некоторые понятия привязаны к структуре «круг» когда структура нейронов аналогична ленте, скрепленной с двух сторон и нейроны фигуры взаимодействуют с вышележащими и нижележащими (если развернуть фигуру и положить на плоскость). При этом неважно как она свернута. Другие фигуры образуют другие понятия. Но это все в идеале. На самом же деле фигуры очень большие и громоздкие.
Практика
И все же теория без практики — ничто. И начать я решил с нахождения пути от точки А до точки Б. Взял самый распространенный волновой алгоритм А* и написал на нем простейшую программку. Пример здесь.

Программа написана на Delphi. Поле level[0..49,0..49] представляет собой бинарный массив. Кроме него есть массив m[-1..50,-1..50] увеличенный во все стороны на одну клетку представляющий запись из integer и boolean.
integer — это колличество ходов до данной клетки от точки А. boolean нужен для того чтобы программа знала обсчитывалась эта клетка ранее или нет.
Признаюсь программа написана криво, — все делалось на скорость. Можно было поставить пару лишних условий для уменьшения использования процессорного времени.
До первого этапа алгоритма программа выставляет в массив m[j,i].d:integer препятствия. Там где Level[j,i] равен True массиву m[j,i].d присваивается значение 65535 и m[j,i].p:=true; — эта клетка обсчитана.
Затем начинается сам алгоритм: поставлен цикл
for h:=1 to 2500 do
for i:=0 to 49 do
for j:=0 to 49 do
и если клетка m[j,i].p равна False, т.е не обсчитана, а рядом есть любая из обсчитаных то этой клетке m[j,i].d присваивается минимальное значение из окружающих обсчитаных.
Число 2500 обуславливает собой максимальное колличество ходов. 50*50=2500. В любом случае по этому полю можно сделать не более 2500 ходов, так что эта цифра достаточна для алгоритма.
Увеличение во все стороны реализовано для того чтобы при просчете точки пути и если путь идет у самого края поля программа не думала что за краем массива имеется 0. Ведь на второй стадии прорисовки проставляется путь от точки Б до точки А выбирая минимальное число изокружающих точку Б. Таким образом точка Б передвигается к ячейке, от которой путь до А минимален. после передвижения точки Б идет отрисовка. После всего цикл повторяется. В конце концов точка Б имеет координаты точки А.
Другими словами вся система представляет трехмерное пространство, где препятствия — это очень высокие столбы, а сама карта наклоняется по отношению к точке А, которая является самой нижней точкой карты. Шарик скатывается по наклонной поверхности в сторону А абсолютно без инерции.
Первоначальная версия алгоритма, с которого я срисовывал, сделана чуть более хитрым способом.
http://functionalism.narod.ru/findpath.pas
Написанный на паскале он имеет поле level[1..80,1..25]. Кроме этих двух массивов имеется одномерный heads[1..2000] образованный записью из X:integer и Y:integer. Есть так же Maxhead:integer — колличество слотов фронта волны. Heads нужен для того чтобы просчитывать каждый следующий фронт волны (один фронт это ячейки с равным расстоянием до точки А). При перечислении от 1 до Maxhead программа каждый раз ищет вокруг level[heads[i].x,heads[i].y] необсчитанные ячейки и взависимости от нахождения ячейки относительно обсчитываемой следующей присваивается одно из состояний dirN..DirNW. С каждым следующим фронтом Maxhead увеличивается.
На втором этапе все ячейки массива TMoveMap[j,i].dir поворачиваются в обратную сторону. Т.е DirN становится DirS, а DirSE становится DirNW и тп. После чего вырисовывается сам маршрут.
Спасибо за внимание. В дальнейшем планируется:
- Написание алгоритма с более прямой траекторией пути
- Дискретизация поля из рисунка (что в дальнейшем позволит машине самой создавать поле из имеющегося)
- Совмещение этих алгоритмов, что позволит упростить процесс создания карты.