Elite Games - Свобода среди звезд!
.
ВНИМАНИЕ!
Наша конференция посвящена космической тематике и компьютерным играм.
Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!

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

Поиск | Правила конференции | Фотоальбом | Регистрация | Список пилотов | Профиль | Войти и проверить личные сообщения | Вход

   Страница 1 из 2
На страницу: 1, 2  След. | Все страницы
Поиск в этой теме:
Канал Игры Мечты: «Проект без названия»
БулерМэн
 420 EGP


Рейтинг канала: 2(21)
Репутация: 68
Сообщения: 1580
Откуда: Гороховец
Зарегистрирован: 07.02.2006


Добрый день, читатель!

Сегодня я вам расскажу о проекте, которым занимаюсь очень давно, практически с момента регистрации на данном сайте, с 2006 г.

Что это такое?!

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

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

Реализация

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

 Собственно ядро   (кликните здесь для просмотра)

Код снабжен дополнительным описанием и рассуждением на тему ИИ, не стал убирать, долго.
Двойной обратный слэш перед текстом "//" это комментарий.
Код:

// язык GML, интерпретатор GameMaker8.1

//set_step(id, in1,in2,in3,out1,out2,out3, mem1,mem2,mem3,mem4,mem5,mem6,timer6);// передаем все данные единому скрипту
//show_message("trigger start id:"+string(id));
control.ids = 0;
var cur_adr,link;
cur_adr = 0;
link=0;
//
if(in[1]!=0)//есть сигнал на одном входе 1? (и адрес не содержит значения 0 - простаивание/отдых)
{
//show_message("Включаем процессор1");
   if(mem[1]!=0)// проверяем память первого входа, если в памяти что-то есть:
   {
       if(timer[1]>0 )// счетчик первого входа положителен?
       {
       // Дополнительно: если произошло увеличение HP - укрепить связь.
          timer[1]+=2;//увеличить счетчик себе
          out[mem[1]] = in[1]; //передали 1 на выход N адрес которого хранится в памяти...
          //control.id_array[8].//
          // Каждый объект имеет ссылку на связанный с ним другой объект.
          // Причем каждый выход жестко связан со входом другого! Перепутать нельзя.
          //out1_obj;// Адрес объекта связи 1(его адрес) - не меняется!
          // Нужно присвоить новый in1 связанному объекту.
             // а как мы узнаем, на какой вход следует подавать сигнал?
             // Все время на вход1 подавать - нельзя...
             // Соединение, являясь жестким - хранит соединения в виде массив-значение...
             
             // Значит адреса входов тоже должны быть прописаны, т.к. они разные для каждого ПП.             

          if(mem[1]==1)//если in1 обращается к out1 то
          {
            link = control.id_array[ output[1] ].input[1];
            control.id_array[ output[1] ].in[link] = in[1];             
            // output[1] - это номер X объекта, к которому необходимо подключить вывод 1, задан изначально при создании
            // .input[1] - это вход у объекта, значение которого определяет, на какой вход подать данный сигнал.
            // link - это номер входа in[X]
          }
          if(mem[1]==2)//если in1 обращается к out2 то
          {
            link = control.id_array[ output[2] ].input[1];
            control.id_array[ output[2] ].in[link] = in[1];
          }
          if(mem[1]==3)//если in1 обращается к out3 то
          {
            link = control.id_array[ output[3] ].input[1];
            control.id_array[ output[3] ].in[link] = in[1];
          }
          in[1] = 0; //сбросили значение на входе
         
         
         
       }
       else // если в памяти ничего нет: (данное событие срабатывает один раз для ПП)
       {
            // если подан сигнал на вход, но таймер отрицателен - значит запомнить данное значение и обновить таймер на максимум.
            cur_adr = irandom_range(1,3);
            timer[1]=control.globaltimer;
            mem[1] = cur_adr;
           
            //out[mem[1]] = in[1];
           
            in[1]=0;
       }
       
       if(robot.powerloss > robot.globalpowerlosless)
       {
            robot.powerloss=0;
           
            cur_adr = irandom_range(1,3);
            timer[1]=control.globaltimer;
            mem[1] = cur_adr;
            in[1]=1;
       }
   }
   else
   {
        //show_message("входящий сигнал на контакте 1, в памяти нет действия");
        cur_adr = irandom_range(1,3);
        timer[1]=control.globaltimer;//300 шагов максимальный счетчик, то есть срабатывание цепочки - возможно только если таймер положителен 
        //и на данный вход приходит сигнал.
        // Как только сигнал приходит на вход, у которого таймер отрицателен - генерируется случайная связь и заносится в память
        // с максимальным (оперативным) промежутком времени существования.
        // Если связь актуальна и вызывается часто - "таймер жизни" данной связи увеличивается, следовательно,
        // другие два варианта связей - не используются до тех пор, пока "сильна" связь1.
        // В то же время, если сигнал приходит на другой контакт - там действует перекрестная система связей, то есть связь через
        // данный ПП может существовать, но через другие точки входа.
       
        mem[1] = cur_adr;// в памяти содержится адрес направления сигнала, а не само значение! (разве?)
        // Адрес выхода - случаен, определяет подбор оптимального пути и запоминания "полезного" пути.
       
        // Если представить, что мозг хранит числа - то он мог бы хранить огромное число информации, но непосредственно числа он не хранит
        // они закодированы последовательностью ассоциаций, связями между ячейками памяти. Таким образом, данные в памяти распределены по всему
        //"массиву" связей и переменчивая структура данных связей и отражает содержание памяти.
        // Мозг не может подать "сигнал" мышцам задав уровень сигнала на 100% или 50% - скорее всего
        // происходит одновременный вызов множества связей, ведущих к одному "исполнительному устройству" либо этот одиночный сигнал
        // повторяющийся с определенной частотой - регулирует усилие. Фактически - чем выше частота, или чем меньше "пробелов в сигнале" тем больше
        // усилие.
        //out[mem[1]] = in[1];
        in[1]=0;
   }
}


////////////////////////////////

if(in[2]!=0)//есть сигнал на одном входе 1? (и адрес не содержит значения 0 - простаивание/отдых)
{
   if(mem[2]!=0)// проверяем память первого входа, если в памяти что-то есть:
   {
       if(timer[2]>0 )// счетчик первого входа положителен?
       {
          timer[2]+=2;

          out[mem[2]] = in[2]; //передали 1 на выход N адрес которого хранится в памяти...             

          if(mem[2]==1)//если in1 обращается к out1 то
          {
            link = control.id_array[ output[1] ].input[2];
            control.id_array[ output[1] ].in[link] = in[2];             
          }
          if(mem[2]==2)//если in1 обращается к out2 то
          {
            link = control.id_array[ output[2] ].input[2];
            control.id_array[ output[2] ].in[link] = in[2];
          }
          if(mem[2]==3)//если in1 обращается к out3 то
          {
            link = control.id_array[ output[3] ].input[2];
            control.id_array[ output[3] ].in[link] = in[2];
          }
          in[2] = 0; //сбросили значение на входе
         
       }
       else
       {
            cur_adr = irandom_range(1,3);
            timer[2]=control.globaltimer;
            mem[2] = cur_adr;
           
            //out[mem[2]] = in[2];
            in[2]=0;
       }
       
       if(robot.powerloss > robot.globalpowerlosless)
       {
            robot.powerloss=0;
           
            cur_adr = irandom_range(1,3);
            timer[2]=control.globaltimer;
            mem[2] = cur_adr;
            in[2]=1;
       }
   }
   else
   {
        cur_adr = irandom_range(1,3);
        timer[2]=control.globaltimer;//300 шагов максимальный счетчик, то есть срабатывание цепочки - возможно только если таймер положителен 
        mem[2] = cur_adr;// в памяти содержится адрес направления сигнала, а не само значение! (разве?)
       
        //out[mem[2]] = in[2];
       
        in[2]=0;
   }
}
////////////////////////////////
if(in[3]!=0)//есть сигнал на одном входе 1? (и адрес не содержит значения 0 - простаивание/отдых)
{
   if(mem[3]!=0)// проверяем память первого входа, если в памяти что-то есть:
   {
       if(timer[3]>0 )// счетчик первого входа положителен?
       {
          timer[3]+=2;

          out[mem[3]] = in[3]; //передали 1 на выход N адрес которого хранится в памяти...             

          if(mem[3]==1)//если in1 обращается к out1 то
          {
            link = control.id_array[ output[1] ].input[3];
            control.id_array[ output[1] ].in[link] = in[3];             
          }
          if(mem[3]==2)//если in1 обращается к out2 то
          {
            link = control.id_array[ output[2] ].input[3];
            control.id_array[ output[2] ].in[link] = in[3];
          }
          if(mem[3]==3)//если in1 обращается к out3 то
          {
            link = control.id_array[ output[3] ].input[3];
            control.id_array[ output[3] ].in[link] = in[3];
          }
          in[3] = 0; //сбросили значение на входе
         
       }
       else
       {
            cur_adr = irandom_range(1,3);
            timer[3]=control.globaltimer;
            mem[3] = cur_adr;
            //out[mem[3]] = in[3];
           
            in[3]=0;
       }
       
       if(robot.powerloss > robot.globalpowerlosless)
       {
            robot.powerloss=0;
           
            cur_adr = irandom_range(1,3);
            timer[3]=control.globaltimer;
            mem[3] = cur_adr;
            in[3]=1;
       }
   }
   else
   {
        cur_adr = irandom_range(1,3);
        timer[3]=control.globaltimer;//300 шагов максимальный счетчик, то есть срабатывание цепочки - возможно только если таймер положителен 
        mem[3] = cur_adr;// в памяти содержится адрес направления сигнала, а не само значение! (разве?)
       
        //out[mem[3]] = in[3];
       
        in[3]=0;
   }
}

//out[mem[1]]=0;
//out[mem[2]]=0;
//out[mem[3]]=0;

if(timer[1]-1>0)
{
timer[1]-=1;         
}

if(timer[2]-1>0)
{
timer[2]-=1;//постоянно уменьшать счетчики адресам
}

if(timer[3]-1>0)
{
timer[3]-=1;
}


Для чего это нужно? Этот пример кода был изначально написан для выполнения простых действий ботом в онлайн-игре. Планируется использовать в робототехнике.

Бот, или робот, обучается посредством заложенных пользователем условий, при срабатывании которых бот получает вознаграждение в виде пополнения своего HP (health power).
Далее описание будет вестись в настоящем времени, так как до натравливания на онлайн-игру дело так и не дошло - необходима быстрая библиотека для сканирования изображения с экрана/камеры, плюс сам факт работы на GML тормозит обработку изображения в разы.

Описание работы

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

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

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

Обучение


Рис.1 Программа эмулятор робота работающего на блоках.

Обучать данную программу с небольшим количеством блоков можно, но трудно.
Программа эмулятор из 9-ти логических блоков и одним задающим активность блоком - не справляется с простейшим поиском "пищи" в простом лабиринте,
так что приходится кормить с ложечки Гы-гы
Единственная заковыка в том самом задающем активность элементе, на рисунке 1 под номером 9.
Из-за того, что через один вход постоянно подается единообразный сигнал, зависящий от рандомного числа задающего генератора - при каждом пуске программы выполняется один из трех сценариев, по числу выходов каждого блока. Сценарии координально не отличаются, лишь с небольшими флуктуациями.

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

Программирование

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

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

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


А как же пример, Карл?!

Если данная тема интересна и вам есть что сказать, а уж тем более запустить и пощупать как работает - пишите Улыбка


И все же?
 Cкрытый текст   (кликните здесь для просмотра)

Гы-гы


_________________
Дулички и фигушки

Последний раз редактировалось: БулерМэн (01:23 01-03-2018), всего редактировалось 1 раз
    Добавлено: 18:15 28-02-2018   
_RAZAAR_
 62 EGP


Репутация: -13
Сообщения: 2854 Заблокирован
Откуда: РАЗААРЪ - 40Лы от Лаве
Зарегистрирован: 15.04.2008
БулерМэн :

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


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


Упрощенно можно взять за основу принцип генерации кода днк человека,
мне мало что о нём извесно, но всем извесно главное, он очень сложный, людей с одинаковым кодом днк, небывает.
соответственно чем сложней будет генератор задающий активность тем разнообразней будут выходные сценарии.
Кроме того у каждого генератора есть стартовые параметры, и если они будут меняться каждый раз тоже рандомно, то можно получить довольно длинную цепь неповторяющихся сценариев, даже при ограниченом числе алгоритмов генерации рандомного числа с рандомно изменяемыми стартовыми параметрами.
_________________
Quaere Vērum
------------------------

Последний раз редактировалось: _RAZAAR_ (19:35 28-02-2018), всего редактировалось 1 раз
    Добавлено: 19:15 28-02-2018   
БулерМэн
 420 EGP


Рейтинг канала: 2(21)
Репутация: 68
Сообщения: 1580
Откуда: Гороховец
Зарегистрирован: 07.02.2006
_RAZAAR_ :
ты пробовал использовать несколько разных типов рандомных генераторов, отличающихся принципом генерации, которые бы каждый раз по разному тактировали задающий активность элемент и плодилибы большие флуктуации чем с одним генератором и принципом генерации рандомного числа.

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

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

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

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

Я надеюсь, что для тех, кто читает я выражаюсь достаточно понятно.
_________________
Дулички и фигушки

Последний раз редактировалось: БулерМэн (20:20 28-02-2018), всего редактировалось 3 раз(а)
    Добавлено: 20:07 28-02-2018   
_RAZAAR_
 62 EGP


Репутация: -13
Сообщения: 2854 Заблокирован
Откуда: РАЗААРЪ - 40Лы от Лаве
Зарегистрирован: 15.04.2008
БулерМэн :
_RAZAAR_ :
ты пробовал использовать несколько разных типов рандомных генераторов?, отличающихся принципом генерации, которые бы каждый раз по разному тактировали задающий активность элемент и плодилибы большие флуктуации чем с одним генератором и принципом генерации рандомного числа.

Это так. Но всем свойственно ошибаться.

Я забыл поставить знак вопроса, "Это так" означает что пробовал сделать как я описал?

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

добавлено спустя 8 минут:
БулерМэн :

Трудно представить, что биологическая система генерирует рандомные числа/действия, не так ли?

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


И ещё несовсем понятно, до проверки получения HP или не получения, память о всех связях во всех блоках начиная с первого до последнего есть или нет?
Информация о событиях приведших к удачному результату гдето както запоминается или нет?
_________________
Quaere Vērum
------------------------

Последний раз редактировалось: _RAZAAR_ (20:34 28-02-2018), всего редактировалось 4 раз(а)
    Добавлено: 20:26 28-02-2018   
БулерМэн
 420 EGP


Рейтинг канала: 2(21)
Репутация: 68
Сообщения: 1580
Откуда: Гороховец
Зарегистрирован: 07.02.2006
_RAZAAR_ :
пробовал сделать как я описал?

Честно говоря, не пробовал.
Утверждать, что такой подход не работоспособен я не могу.

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

И еще более глобально - не уверен, что в итоге получится именно какой-то "искусственный интеллект". Подобие обучающейся и приспосабливающейся программы - наверное да.

ЗЫ Попробую различные генераторы.

добавлено спустя 12 минут:
_RAZAAR_ :
Чего нужно добиться как я понял и тебе для обеспечения множественности сценариев?

Множественность сценариев не самоцель, иначе мы получим утюг который греет воздух Улыбка

_RAZAAR_ :
до проверки получения HP или не получения, память о всех связях во всех блоках начиная с первого до последнего есть или нет?

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

Последний раз редактировалось: БулерМэн (20:58 28-02-2018), всего редактировалось 3 раз(а)
    Добавлено: 20:50 28-02-2018   
_RAZAAR_
 62 EGP


Репутация: -13
Сообщения: 2854 Заблокирован
Откуда: РАЗААРЪ - 40Лы от Лаве
Зарегистрирован: 15.04.2008
БулерМэн :
_RAZAAR_ :
пробовал сделать как я описал?

Честно говоря, не пробовал.
Утверждать, что такой подход не работоспособен я не могу.


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




 Cкрытый текст   (кликните здесь для просмотра)
БулерМэн :
Тут стоит обратить внимание на то, что это все таки модель.
В модели мы уславливаемся принять какие-то ограничения дабы не увязнуть в реализации подробностей, которые потянут за собой всю фундаментальную науку вплоть до описания Большого Взрыва.
И тут возникает вопрос - а модель чего мы тут обсуждаем чтобы внести соответствующие ограничения?
Честно - я понятия не имею Гы-гы
Я не настолько силен в знании того как работают биологические системы чтобы сказать - что по образу и подобию мы воткнем сюда генератор случайных чисел, потому как в природе это уже есть и это работает. Если кто-то мне подскажет в каких именно процессах присутствует "рандомайзинг" в живой клетке - буду признателен.
На сколько я правильно понимаю, процесс репликации ДНК это линейный, запрограммированный процесс, и случайности там скорее всего тоже не случайны - небольшое повреждение участка вроде бы как обратимо и рибосома(поправьте если не так) восстанавливает цепочку. Весь вопрос в правильности работы "сборщика" и отсутствие вмешательства в процесс извне.

И еще более глобально - не уверен, что в итоге получится именно какой-то "искусственный интеллект". Подобие обучающейся и приспосабливающейся программы - наверное да.

ЗЫ Попробую различные генераторы.


Не не, тут это вода, я также как и ты ни вчем про биологию не силён , мне просто пришла в голову идея аналогии с днк, но это просто ассоциации приведшие к идее и ни грамма никаких знаний по этому поводу.
Генераторы не просто различные, а как описал высше, выбираемые рандомно обратной связью от результата (сценария).
До проверки есть HP нет HP , все данные о связях в цикле между элементами и в плоть до значений рандомного числа, номера генератора который его произвел и стартовых данных генератора, должны гдето запоминаться, и если успех, то сохраняться для будущего использования, как наиболее вероятные данные для получения HP опять.
_________________
Quaere Vērum
------------------------
    Добавлено: 21:04 28-02-2018   
БулерМэн
 420 EGP


Рейтинг канала: 2(21)
Репутация: 68
Сообщения: 1580
Откуда: Гороховец
Зарегистрирован: 07.02.2006
_RAZAAR_ :
как наиболее вероятные данные для получения HP опять.

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

добавлено спустя 4 минуты:
Отклонение внешних условий должно провоцировать генерацию нового алгоритма.
_________________
Дулички и фигушки

Последний раз редактировалось: БулерМэн (21:30 28-02-2018), всего редактировалось 2 раз(а)
    Добавлено: 21:26 28-02-2018   
_RAZAAR_
 62 EGP


Репутация: -13
Сообщения: 2854 Заблокирован
Откуда: РАЗААРЪ - 40Лы от Лаве
Зарегистрирован: 15.04.2008
БулерМэн :
_RAZAAR_ :
как наиболее вероятные данные для получения HP опять.

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


Так точно, номер генератора на всякий случай, в основном нужно сгенерированное число, номер генератора нужен для запоминания как наиболее приоритетный, для того чтобы в последствии его использовать перед принятием решения забыть всю старую успешную последовательность при нескольких неудачных попытках её повторить или попытаться использовать этот же генератор с тем чтоб получить положительный результат, если уж опять неудача тогда всё нафиг забыть вообше, но не слишком быстро.
_________________
Quaere Vērum
------------------------
    Добавлено: 21:27 28-02-2018   
БулерМэн
 420 EGP


Рейтинг канала: 2(21)
Репутация: 68
Сообщения: 1580
Откуда: Гороховец
Зарегистрирован: 07.02.2006
_RAZAAR_ :
номер генератора на всякий случай
_RAZAAR_ :
наиболее приоритетный

То есть ты считаешь, что способ генерации случайного адреса как то влияет на успех, например, поиска пути роботом в лабиринте?

добавлено спустя 2 минуты:
А ничего, что генератор случайного числа сам зависит, например от глобального таймера? Который в свою очередь не зависит от лабиринта? Тогда где связь между поставленной задачей поиска пути и выбором какого-то конкретного генератора случайных чисел?
_________________
Дулички и фигушки

Последний раз редактировалось: БулерМэн (21:37 28-02-2018), всего редактировалось 1 раз
    Добавлено: 21:37 28-02-2018   
_RAZAAR_
 62 EGP


Репутация: -13
Сообщения: 2854 Заблокирован
Откуда: РАЗААРЪ - 40Лы от Лаве
Зарегистрирован: 15.04.2008
БулерМэн :
_RAZAAR_ :
номер генератора на всякий случай
_RAZAAR_ :
наиболее приоритетный

То есть ты считаешь, что способ генерации случайного адреса как то влияет на успех, например, поиска пути роботом в лабиринте?

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

добавлено спустя 2 минуты:
А ничего, что генератор случайного числа сам зависит, например от глобального таймера? Который в свою очередь не зависит от лабиринта? Тогда где связь между поставленной задачей поиска пути и выбором какого-то конкретного генератора случайных чисел?

Это не особо важно, если инструмент был применён один раз успешно, то следует попытаться применить его повторно, тем более если явных предосылок к неудачному его применению нет, если они есть тогда стоит определить какие и не делать заведомо безполезную работу.
Поддерживать аналогию человеческого мышления начиная с простых задач, выглядит просто переспективно, если двигаться к более широкой цели, если нет, то робот автомат обязан кормиться с ложки, потомучто это просто и удобно.
_________________
Quaere Vērum
------------------------

Последний раз редактировалось: _RAZAAR_ (22:14 28-02-2018), всего редактировалось 2 раз(а)
    Добавлено: 22:12 28-02-2018   
Shirson
 1605 EGP


Модератор
Рейтинг канала: 7(626)
Репутация: 219
Сообщения: 16511
Откуда: 79°W 44°N
Зарегистрирован: 29.01.2002
БулерМэн :

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

Чисто мнение практика - робот не просто действует хаотически, ты заставляешь его делать это намерено Улыбка

Цитата:
Исходя из сказанного, понятно, что просто обычным хаотичным действием очень сложно ожидать результата от такого бота, так как вероятность выполнения нужной последовательности команд сводится к вероятностям. И чем больше и сложнее действие бота, тем дольше он будет идти таким путем к награде.
Проблема (точнее корень) в другом - в том, что ты заложил в алгоритм один не очень хороший особеносТ - запоминание успешной цепочки и задрачивание её до остервенения.
Этим достигнутв сразу два нехороших результата:
1. Отсутствие у робота периода обучения, именно как начального периода, когда его можно поместить в контролируемые условия для быстрой тренировки. У тебя этот период вообще не выделяется и "начальное" обучение ведётся всё время.
2. Проистекает из первого - резкое снижение пространства принятия решений для некотрой задачи. Отсюда куча более абстрактных проблем, вроде предсказуемости действий, негибкости и пр.

Как это поправить - убрать выделенное запоминание успешной цепочки.
IMHO (на весь текст, просто делюсь опытом) более работающий вариант, это сделать так, чтобы каждое решение боролось за своё выживание.
Если по простому. У нас есть пространство всех решений для каждой возможной ситуации.
Робот, попадая в определённую ситуацию, выбирает случайное решение из всего пространства вариантов, и оценивает результат этого решения.
Результатов может быть три:
Положительный - робот получил плюшку.
Нейтральный - робот не получил плюшку.
Отрицательный - робот получил плюху.

Отрицательный результат удаляется (а ещё лучше, получает -1 балл).
Нейтральный результат получает 1 балл
Положительный результат получает 2 балла.

На этапе первоначального обучения, робота нужно как можно больше погонять по всяким вариантам ситуаций.
После этого, включаем режим жизни. Он работает точно так же, как режим обучения, но у робота уже выброшены множественные отрицательные результаты.
Кроме того, робот имеет наборы достоверно безопасных и достоверно полезных результатов, которые могут выбираться, если имеется такой приоритет (например, если HP робота съехали ближе к 0, стоит воспользоваться двухбальными решениями.
Если у робота стоит цель добраться до какой-то определённой ситуации, то можно пройтись по нейтральным, однобальным результатам (особенно, если есть разница в скорости выполнения/затратами ресурсов/ещёчемлибоподобным).
Если же робот бодр и свеж, то он может пробовать решения с нулевыми баллами, чтобы пополнить свой опыт.

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

Вобщем, возможности широки, но, как и всё, имеют область своего применения, конечно же.
_________________
У меня бисера не доxеpа.
    Добавлено: 22:38 28-02-2018   
БулерМэн
 420 EGP


Рейтинг канала: 2(21)
Репутация: 68
Сообщения: 1580
Откуда: Гороховец
Зарегистрирован: 07.02.2006
интересную ссылочку кинули мне тут в скайпе: ссылка

добавлено спустя 32 минуты:
Shirson :
запоминание успешной цепочки и задрачивание её до остервенения.

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

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

Последний раз редактировалось: БулерМэн (23:24 28-02-2018), всего редактировалось 1 раз
    Добавлено: 23:24 28-02-2018   
_RAZAAR_
 62 EGP


Репутация: -13
Сообщения: 2854 Заблокирован
Откуда: РАЗААРЪ - 40Лы от Лаве
Зарегистрирован: 15.04.2008
БулерМэн :

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


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


БулерМэн :

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


каким образом датчик столкновения сможет отнимать половину HP?
датчик следует ставить чтоб предотвратить лишний расход HP, иначе он такой совсем не нужен.
Сигнал с датчика должен произвести останов движения в сторону препятствия, и инициировать принятие решения что делать дальше.
_________________
Quaere Vērum
------------------------

Последний раз редактировалось: _RAZAAR_ (23:51 28-02-2018), всего редактировалось 2 раз(а)
    Добавлено: 23:49 28-02-2018   
БулерМэн
 420 EGP


Рейтинг канала: 2(21)
Репутация: 68
Сообщения: 1580
Откуда: Гороховец
Зарегистрирован: 07.02.2006
Shirson :
убрать выделенное запоминание успешной цепочки.


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

Положительный - робот получил плюшку.
Нейтральный - робот не получил плюшку.
Отрицательный - робот получил плюху.

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

Опираюсь на тот факт, что робот не имеет в своей структуре каких-нибудь процессоров или карт памяти, на которых будет храниться программа, и например, значения -1, 1, 2 и т.д.

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

На данный момент, опыт Ширсона в данном вопросе неоспарим и имеет место быть как типовое решение, но в моем случае - как-то не тривиально реализовать сказанное на том, что уже есть.
_________________
Дулички и фигушки
    Добавлено: 23:51 28-02-2018   
Shirson
 1605 EGP


Модератор
Рейтинг канала: 7(626)
Репутация: 219
Сообщения: 16511
Откуда: 79°W 44°N
Зарегистрирован: 29.01.2002
БулерМэн :
Суть в том, что робот выполняя действие получает обратную связь, например идет вправо, хватает "еду", получает плюшку в виде добавки к HP. Логично, что для того, чтобы получить еще один бонус нужно повторить действие - то есть двигаться еще раз право.

Вообще-то, логично хватать еду. Именно за неё дают бонус, а не за движение вправо, не так ли? Подмигиваю

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

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

Если же у тебя робот нахватывает еду автоматически, когда на неё наезжает, и ситуация для него существует только как "есть еда"-"нету еды", то тогда нужно менять сам подход к его поведению. По сути, его целью становится прочёсывание местности на предмет еды, что является сильно более простой и сильно более другой задачей. Т.е. решения, как таковые, ему принимать не нужно. Есму нужно просто своим маршрутом "закрасить область", ограниченную стенками. Задача совершенно другого плана, решаемая голимым алгоритмом заливки, без всяких ИИшных штучек Улыбка
_________________
У меня бисера не доxеpа.
    Добавлено: 23:54 28-02-2018   
БулерМэн
 420 EGP


Рейтинг канала: 2(21)
Репутация: 68
Сообщения: 1580
Откуда: Гороховец
Зарегистрирован: 07.02.2006
_RAZAAR_ :
Это зачем ещё? если есть датчик столкновения , то роботу нужно пробно двинуться в любую сторону пока сигнал не уменьшится, проверив как минимум все доступные стороны движения где нет препятствия, а потом двигаться паралельно препятствию до тех пор пока оно не исчезнет, или появится другое в той стороне в которую он двигался и решать как выходить из угла в который он попал аналогичным образом.

Проблема в том, что процесс поиска пути выхода из лабиринта или угла - это уже готовый алгоритм, который допустим заранее известен, но роботу конечно же нет. Робот у нас призван быть универсальным и чтобы он мог выйти из самого запутанного лабиринта или ямы на дороге например, ну то есть справится с необычной ситуацией - ему нужно обладать заложенным минимумом функционала для преодоления препятствий в виде того самого лабиринта.
Или я себе плохо представляю как на простых логических элементах научить робота двигаться в лабиринте
_RAZAAR_ :
датчик следует ставить чтоб предотвратить лишний расход HP, иначе он такой совсем не нужен.
.
Проблема в том, что сигнал с датчика столкновения нужно как-то обработать на низком уровне, а не на высоком уровне "ЕСЛИ ТО".
Ну вот смотри, поставили мы 4 датчика по сторонам света, робот может двигаться только в этих направлениях, допустим.
Робот тюкается в стенку - замыкает контакт датчика и образуется "цепочка" по которой проходит сигнал от одного блока к другому. Это пораждает моментально реакцию робота - реверс двигателя А, так как сигнал проходит через цепь питания двигателя А в реверсивном направлении.
Теперь вопрос, для реализации ЕСЛИ-ТО придется создавать поверх существующих логических элементов еще пару, например более простых без собственной памяти. И так для каждого заранее заложенного условия! Здоровенная микросхема получится однако.

добавлено спустя 1 минуту:
Shirson :
Задача совершенно другого плана, решаемая голимым алгоритмом заливки, без всяких ИИшных штучек

В попытках пройти путь от простого к сложному.

Если пойти от обратного то придется переписывать все с нуля.
_________________
Дулички и фигушки

Последний раз редактировалось: БулерМэн (00:15 01-03-2018), всего редактировалось 1 раз
    Добавлено: 00:15 01-03-2018   
_RAZAAR_
 62 EGP


Репутация: -13
Сообщения: 2854 Заблокирован
Откуда: РАЗААРЪ - 40Лы от Лаве
Зарегистрирован: 15.04.2008
БулерМэн :


Опираюсь на тот факт, что робот не имеет в своей структуре каких-нибудь процессоров или карт памяти, на которых будет храниться программа, и например, значения -1, 1, 2 и т.д.

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

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


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

Ну нет процессоров и не надо Улыбка достаточно 3 д-триггера активные биты в которых обозначают значения -1, 1, 2

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

добавлено спустя 2 минуты:
БулерМэн :

Или я себе плохо представляю как на простых логических элементах научить робота двигаться в лабиринте

Это гемор, и получится грамоздкое жрущее нечто, абсолютно не соответствующее современной действительности.
_________________
Quaere Vērum
------------------------

Последний раз редактировалось: _RAZAAR_ (00:41 01-03-2018), всего редактировалось 1 раз
    Добавлено: 00:41 01-03-2018   
БулерМэн
 420 EGP


Рейтинг канала: 2(21)
Репутация: 68
Сообщения: 1580
Откуда: Гороховец
Зарегистрирован: 07.02.2006
_RAZAAR_ :
реализовать эту жесть будет довольно не тривиальный гемор, неговоря уже о чемто ещё более простом.

То есть все сводится к утверждению, что сделать что-то примитивное на данном уровне развития технологии - нецелесообразно? Гы-гы
_________________
Дулички и фигушки
    Добавлено: 00:47 01-03-2018   
_RAZAAR_
 62 EGP


Репутация: -13
Сообщения: 2854 Заблокирован
Откуда: РАЗААРЪ - 40Лы от Лаве
Зарегистрирован: 15.04.2008
БулерМэн :

Проблема в том, что сигнал с датчика столкновения нужно как-то обработать на низком уровне, а не на высоком уровне "ЕСЛИ ТО".
Ну вот смотри, поставили мы 4 датчика по сторонам света, робот может двигаться только в этих направлениях, допустим.
Робот тюкается в стенку - замыкает контакт датчика и образуется "цепочка" по которой проходит сигнал от одного блока к другому. Это пораждает моментально реакцию робота - реверс двигателя А, так как сигнал проходит через цепь питания двигателя А в реверсивном направлении.
Теперь вопрос, для реализации ЕСЛИ-ТО придется создавать поверх существующих логических элементов еще пару, например более простых без собственной памяти. И так для каждого заранее заложенного условия! Здоровенная микросхема получится однако.


Если-то, это никакой не высокий уровень, а один из 4ех удобных элементов микросхемы ттл или кмоп логики, и,и-не, или, или-не, исключаюшее или, итд...

Это именно способ реализации на простой логике, триггерах, регистрах, дешифраторах, мультиплексорах, шифраторах, генераторах, таймерах, счетчиках, и так далее всём том что на данный момент запихнуто в любой микроконтроллер, имеет компактные размеры, и удобно к применению больше чем разница между небом и землёй, чем то что было доступно 30 лет назад в качестве отдельных микросхем комп или ттл серий, или ещё более назад во времени когда неумели отливать кремний в нужные пластины. Улыбка

Давай на лампах сделаем, запустим белку и стрелку в космос, просто и со вкусом.
_________________
Quaere Vērum
------------------------

Последний раз редактировалось: _RAZAAR_ (01:07 01-03-2018), всего редактировалось 1 раз
    Добавлено: 00:53 01-03-2018   
БулерМэн
 420 EGP


Рейтинг канала: 2(21)
Репутация: 68
Сообщения: 1580
Откуда: Гороховец
Зарегистрирован: 07.02.2006
_RAZAAR_ :
если есть комп на котором работает эмулятор робота то реализовать виртуальное всё необходимое, задача написанного кода.


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

А теперь посмотрим, что же исходя из написанного кода выше у нас есть:
1. Ячейки памяти хранящие три состояния (переключатели адресов)
2. Ячейки памяти хранящие число от 1 до N либо уровень от 0 до N.(счетчики уменьшают либо увеличивают значение)
3. Обвязка выполняющая в той или иной мере операции сложения и вычитания.

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

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

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

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

добавлено спустя 2 минуты:
_RAZAAR_ :
Это именно способ реализации на простой логике, триггерах, регистрах, дешифраторах, мультиплексорах, шифраторах, генераторах, таймерах, счетчиках

Эта простая логика умеет работать параллельно? Или шибко сложная задача в таком случае?
_________________
Дулички и фигушки

Последний раз редактировалось: БулерМэн (01:19 01-03-2018), всего редактировалось 3 раз(а)
    Добавлено: 01:14 01-03-2018   
Канал Игры Мечты: «Проект без названия»
На страницу: 1, 2  След. | Все страницы
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: Может, хватит ночью такое писать?! (Kish) - Может, хватит ночью такое читать?! (Alone)

  » Проект без названия | страница 1
Каналы: Новости | Elite | Elite: Dangerous | Freelancer | Star Citizen | X-Tension/X-BTF | X2: The Threat | X3: Reunion | X3: Terran Conflict | X Rebirth | X4: Foundations | EVE Online | Orbiter | Kerbal Space Program | Evochron | VoidExpanse | Космические Миры | Онлайновые игры | Другие игры | Цифровая дистрибуция | play.elite-games.ru | ЗВ 2: Гражданская война | Творчество | Железо | Игра Мечты | Сайт
   Дизайн Elite Games V5 beta.18