GotAI.NET

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

 

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

 Все темы | Новая тема Стр.6 (8)<< < Пред. | След. > >>   Поиск:  
 Автор Тема: На: Полевая философия
lsd
Сообщений: 47
На: Полевая философия
Добавлено: 22 апр 13 9:24
Цитата:
Могу, если ты примеш мою философию

я приму любую философию, есть лишь требования к оформлению, касабельно регистра букв - имя алгоритма (типа,метода итп) может содержать лишь маленькие буквы, разделяются нижними слешами.
Имя данных (константы там, переменные, значения enum) должны содержать хотябы одну заглавную.
пример std::vector< int > IntVector;
моим глазкам так чуть легше понимать чё происходит.

Цитата:
Вот только без плюсов

OpenCL кстати весь C-style, алгоритм придётся писать именно на нём :-)

Цитата:
struct neurons

скорее вот так..

struct neuron
{
float mWeights[ 64 ];
float mInputs[ 64 ];
};

у меня нету там unsigned char. всё во float..

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


[Ответ][Цитата]
lsd
Сообщений: 47
На: Полевая философия
Добавлено: 22 апр 13 10:05
по части кода.. consider having something like this


#define NUM_DENDRITES 64

struct neuron
{
float mWeights[ NUM_DENDRITES ];
float mInputs[ NUM_DENDRITES ];
float mSigmoidCoeff;
float mSigmoidOffset;
flaot mOutput; // Axon
};


float tanh_sigmoid( float X, float Coeff = 1, float Offset = 0 )
{
return 2 / ( 1 + exp( Offset - Coeff * X ) ) - 1
}

float dot_product( float* pX, float* pY, size_t Length )
{
float Result = 0;
for( size_t I = 0; I < Length; I += 1 )
Result += pX[ I ] * pY[ I ];
return Result;
}

void process_one( neuron* pNeuron )
{
pNeuron->mOutput = dot_product( pNeuron->mInputs, pNeuron->mWeights, NUM_DENDRITES );
pNeuron->mOutput = tanh_sigmoid( pNeuron->mOutput, pNeuron->mSigmoidCoeff, pNeuron->mSigmoidOffset );
}

// computing kernel
void process_parallel( neuron* pNeuronData, size_t Length )
{
parallel_for( size_t I = 0; I < Length; I++ )
{
process_one( pNeuronData + I );
}
}

это полупсевдокод с C синтаксисом. Эта часть алгоритма будет работать на GPU. точка входа - process_parallel(). pNeuronData формируется и заполняется на CPU, записывается в память видеокарты, рассчёт происходит на видеокарте, затем результат считывается обратно в оперативную память и используется на CPU для формирования поведения.

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


вопрос стоит за алгоритмом обучения исходя из вышепредложенной задачи - построение карты мира, запоминание маршрутов..
[Ответ][Цитата]
гость
31.181.240.*
На: Полевая философия
Добавлено: 22 апр 13 10:52
Цитата:
#include <stdbool.h> // это нужно для bool, true, false

Я в принципе не против, но это лишнее, истинность не проверяется, я его использую как переключатель и только.
И какбы незачем советовать мне как списать код так чтобы было проще вам. :D Даже не знаю как ещё описать.. Вы щас меня склоняете писать так как того хотели бы вы.
Цитата:
OpenCL кстати весь C-style, алгоритм придётся писать именно на нём :-)

Ето что?
Цитата:

это полупсевдокод с C синтаксисом. Эта часть алгоритма будет работать на GPU. точка входа - process_parallel(). pNeuronData формируется и заполняется на CPU, записывается в память видеокарты, рассчёт происходит на видеокарте, затем результат считывается обратно в оперативную память и используется на CPU для формирования поведения.

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

Я конечно не знаком с большинством того что было тут описано, но мне чтото дико интересно.
Жалко не видно взаимодействия с GPU. Я тоже хочу видеокарту попользовать, тока у меня чтото фигово с API и чтением англоязычной документации.
Возражаю против входных и выходных слоёв. Можно их не использовать.
Возражаю против отрицательного веса - по факту в мозге есть тормозные нейроны, но нет тормозных связей кроме аксо-аксональных. Что я этим хочу сказать - ты точно представляеш как будет действовать связь с отрицательным весом как в самом нейроне так и в составе сети? Точно представляеш как будут действовать положительные и отрицательные связи? Ты уверен что сеть сможет осуществить последовательность действий даже если подан единичный сигнал на один сенсор?
У меня всё.
[Ответ][Цитата]
гость
31.181.240.*
На: Полевая философия
Добавлено: 22 апр 13 11:40
Вот такой кусочек, простенький. Связи меняются при наличии тормозного сигнала, память это сами связи и значение сигнала. Пока не проверял, но вроде должно работать.
Может иметь два типа реакции - "всё хорошо" и "всё плохо", ну и когда плохо изменяется сеть, а вместе с ней и выполняемые действия.

struct neurons
{
unsigned char signal;
unsigned short id[UCHAR_MAX];

}neuron[UCHAR_MAX];

struct io
{
unsigned char signal;
unsigned char id;
}output;

typedef void callback(struct io*);

void handler(struct io* input, unsigned char trm, callback fp)
{
if(input != NULL)
neuron[input->id].signal = (neuron[input->id].signal + input->signal) / 2;

#define src neuron[i]
#define dst neuron[neuron[i].id[n]]
unsigned char i, n;
for(i = 0; i < UCHAR_MAX; i++)
{
for(n = 0; n < UCHAR_MAX; n++)
{
if(src.signal > 0 && trm > 0) src.id[n]++;
if(src.id[n] <= UCHAR_MAX)
dst.signal = (dst.signal + src.signal) / 2;
else
{
output.signal = src.signal;
output.id = src.id[n];
fp(&output);
}
}
}
}
[Ответ][Цитата]
lsd
Сообщений: 47
На: Полевая философия
Добавлено: 22 апр 13 12:06
Цитата:
Возражаю против входных и выходных слоёв

их нет, точнее они есть лишь на уровне абстракции. массив нейронов одним блоком.
Цитата:
Ето что?

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

прикинь что GPU исполняет программы на С. оформляешь С программу особым образом и она вычисляется на 100500 ядрах видеокарты довольно шустро. знать всего то надо - есть ограниченный объём видеопамяти - из оперативки ты закружаешь входные данные.

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

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

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

Цитата:
Ты уверен что сеть сможет осуществить последовательность действий даже если подан единичный сигнал на один сенсор?

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

Цитата:
У меня всё.

Регистрируйся на бакете чтобы продолжать и не засорять форум тоннами кода . Попутно покажу как препарировать opencl, это легко и я бы даже сказал нудно и скучно. Я на винде, пишу кроссплатформенно - такчто на gcc собрать тоже можно. поможешь вот в портировании, я во всю использую С++11, не знаю что из новинок потянет gcc.
[Ответ][Цитата]
lsd
Сообщений: 47
На: Полевая философия
Добавлено: 22 апр 13 12:23
Цитата:
unsigned char signal;

да едриттунг залупирт! float signal; везде float, видеокарта float поддерживает хорошо.
float - число с плавающей запятой. 0.0 - значит 100% нет. 1.0 значит 100% да. есть градации между ними. 0.5 - значит 50%, типа фиг знает нет или да, фифти-фифти, уверенность сети что образ относится к некоему классу на 50%. зависит от того как трактовать. все сигналы у меня float, как некое значение напряжения на мембране. Можно подать сигнал выше 1.. соответственно и интересует меня нечто определённое.

Цитата:

void handler(struct io* input, unsigned char trm, callback fp)
{
if(input != NULL)
neuron[input->id].signal = (neuron[input->id].signal + input->signal) / 2;

#define src neuron[i]
#define dst neuron[neuron[i].id[n]]

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

Вкратце своими словами расскажу - что происходит? нейрон пробегается по !!!СВОЕМУ!!! дендритному дереву, выполняет векторное произведение X[]*W[]. X - входной вектор. содержит массив входных сигналов. W - вектор весов синаптических связей. далее либо срабатывает/либо не срабатывает (активационная функция). записывает !!!СВОЙ!!! выходной сигнал. К другим нейронам внутри алгоритма не обращается. иначе хрен распараллелишь по человечески. тоесть внутри нейрона есть такой алгоритм который не знает о других. "алгоритм работы и обучения одного! нейрона". рассмотри ещё раз внимательно кусочек кода который я предоставил - это просто база. (алгоритма обучения и подстройки весов там нет - только "шаг" работы нейросети).

Цитата:
typedef void callback(struct io*);

в opencl нет указателей на функции

Цитата:
у меня чтото фигово с API и чтением англоязычной документации.

на вот, я перевёл. прими что все значения напряжений выражаются во float и зацени Метод «интегрировать-и-сработать» с утечками. я код пишу под него.
[Ответ][Цитата]
гость
31.181.240.*
На: Полевая философия
Добавлено: 22 апр 13 12:53
на скорую руку исправил, теперь работает точно.

#include <limits.h>

struct neurons
{
unsigned char signal;
unsigned short id[UCHAR_MAX];

}neuron[USHRT_MAX];

struct io
{
unsigned char signal;
unsigned short id;
}output;

typedef unsigned char callback(struct io*);

void handler(struct io* input, callback fp)
{
unsigned char trm = UCHAR_MAX;

if(input != NULL)
neuron[input->id].signal = (neuron[input->id].signal + input->signal) / 2;

#define src neuron[i]
#define dst neuron[neuron[i].id[n]]
unsigned char i, n;
for(i = 0; i < UCHAR_MAX; i++)
{
for(n = 0; n < UCHAR_MAX; n++)
{
if(src.signal > 0)
{
if(trm > 0) dst.signal = ((dst.signal + src.signal) / 2) / trm;
else dst.signal = (dst.signal + src.signal) / 2;
if(dst.signal == 0)++src.id[n];

if(src.id[n] > UCHAR_MAX)
{
output.signal = src.signal;
output.id = src.id[n];
trm = fp(&output);
}
}
}
}
}
[Ответ][Цитата]
гость
31.181.240.*
На: Полевая философия
Добавлено: 22 апр 13 13:15
Цитата:

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

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

Цитата:
сеть рекурсивная
Манал я рекурсию, раз попробовал чуть мозг не вывихнул ища ошибки, больше не пытался.
Цитата:
float signal; везде float,
я в курсе что такое float, спасибо.
Цитата:
Некая система уже имеется, нужно её развить
Я развивать некую систему не собирался а усердно насаждаю свою мысль. Я думал ето очевидно..
Цитата:
дендритному дереву
Почему дендритному, когда сигнал образуется в соме(аксональном холмике) и передаётся по аксону?
Цитата:
иначе хрен распараллелишь по человечески
Не вижу выгоды в паре миллиардов паралельных нейронов.
Цитата:
в opencl нет указателей на функции
А указатель можно и не использовать, а на пример просто функцию вызвать или массив заполнить и return-ом передать. Всё в твоих руках.
И видать ты моей философии не понял. Суть в паре слов - моделируем разум, а не нейрон.
Чуть шире - находим явные признаки активности, действия, изменения и т.д. моделируем и применяем на практике, получая по возможности максимальное сходство работы искуственной нейросети и биологической исходя из собственных предположений и трудов высоких лбов аки Тьюринг и прочие ноб.лоуреаты.
Яж тоже не первый день нейроны щупаю и до сих пор не понял, нахрена моделировать нейрон 1в1 и использовать всякие математические функции и прочие труды богоподобных людей, если чемто можно пренебречь, а чтото перекроить по своему.
[Ответ][Цитата]
lsd
Сообщений: 47
На: Полевая философия
Добавлено: 22 апр 13 14:43
Цитата:
Вот как раз этого то мне и не видно.

"а зачем тебе мне видеть?"

Цитата:
Пардон - аксон. Дендрит в этом отношении пассивен(приёмник)

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

Цитата:
if(trm > 0) dst.signal = ((dst.signal + src.signal) / 2) / trm;

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

Цитата:
Манал я рекурсию

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

Цитата:
Почему дендритному, когда сигнал образуется в соме(аксональном холмике) и передаётся по аксону?

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

Цитата:
if(dst.signal == 0)++src.id[n];

знаешь кто ты после этого? ктулху)) в добром смысле конечно. вот результат работы этой строке в контексте функционирования сети простому смертному ВООБЩЕ не дано понять.

Цитата:
Не вижу выгоды в паре миллиардов паралельных нейронов

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

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

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

PS кстати, integrate and fire это такая тема, когда нейроны рождают спайки. весьма удобно например управлять PWM-моторчиком.
[Ответ][Цитата]
rrr3
Сообщений: 11857
На: Полевая философия
Добавлено: 22 апр 13 21:42
Цитата:
Автор: lsd
... принципиально о другом, и никак не помогает найти то, что я ищу?...

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

...Ммм..., а нельзя для тех кто на бронетранспортере (если конечно не лень), на обычном не строгом языке очень кратко на уровне идей рассказать, что же Вы ищете и что хотите проверить. (Конечно с моими дилетантскими представлениями о Нечто-когнитроне Вы не знакомы, но если вдруг..., то можно ли как-то соотнести-сравнить енто с тем, что Вы собираетесь проверить)
[Ответ][Цитата]
гость
31.181.240.*
На: Полевая философия
Добавлено: 23 апр 13 0:42
Цитата:
входная звезда проще для моего понимания чем выходная. смысл общепринятого подхода в том, что у нейрона много входов, один выход. тогда функция рассчёта заключается в вычислении выхода и корректировке весов. а тут всё "от противного", вход один - это текущее значение signal, выходов уйма.

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

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

Цитата:
Цитата:
if(dst.signal == 0)++src.id[n];


знаешь кто ты после этого? ктулху)) в добром смысле конечно. вот результат работы этой строке в контексте функционирования сети простому смертному ВООБЩЕ не дано понять.

Вот это условие коррекции веса, так как вес я не стал использовать для простоты, то если в нейроне, которому был передан сигнал сигнал не формируется(он заторможен тормозным нейроном или по ещё какой причине) то тогда изменяется нейрон назначения.
Говоря простыми словами нейрон в который отправляется сигнал какбы говорит "я не то что ты ищеш". Тут же можно вставить пару строк, в виде
if(dst.signal == 0){if(weight > 0)weight--; if(weight == 0) ++src.id[n];}else if(weight < UCHAR_MAX) weight++;

Что означает смену связи если вес равен нулю и уменьшение веса если сигнал в нейроне назначения равен нулю. И проверка чтобы порог 0 или 255 значение веса не перескочило.
Цитата:
ну как же, это быстрый обсчёт. симуляцию горазд быстрее гонять когда она в параллели и желательно не на ЦП.
Ну ето я спать хотел, глупость написал. Если взять колобка, то он же не будет с парой миллиардов нейронов? зачем тогда параллельность.
[Ответ][Цитата]
гость
31.181.240.*
На: Полевая философия
Добавлено: 23 апр 13 0:51
Цитата:
знаешь кто ты после этого? ктулху)) в добром смысле конечно. вот результат работы этой строке в контексте функционирования сети простому смертному ВООБЩЕ не дано понять.

Так может мне на конкурс самого запутанного кода послать это?:D
[Ответ][Цитата]
kondrat
Сообщений: 4026
На: Полевая философия
Добавлено: 23 апр 13 3:10
А пускай колобки ещё жрут друг-друга. И делятся от этого с небольшими мутациями.
[Ответ][Цитата]
lsd
Сообщений: 47
На: Полевая философия
Добавлено: 23 апр 13 5:44
rrr3
Цитата:
на обычном не строгом языке очень кратко на уровне идей рассказать

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

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

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

гость 31.181.240.*
Цитата:
Вникай и тебе откроется истина.

А вот ты меня заинтересовал. Давай заценим на что она способна на практике. Помоги мне организовать всё как надо. Давай об интерфейсе договоримся следующим образом. На вход к тебе поступает:
struct kolo_brain_sensor_data
{
float mSpeedPercent; // процент от максимума текущей скорости на предыдущем тике симуляции[0.0->1.0)
float mCompassAngle; // угол поворота на предыдущем тике симуляции, диапазон [0, 2Pi) нормализован в [0, 1)
float mTurnSpeed; // угловая скорость, процент от максимума, опять же 0-1
float mFoodReserve; // запас жраки в брюхе, процент [0.0-1.0)
float mFoodSmell; // интенсивность запаха еды, процент [0.0-1.0) 0.0 - совсем не пахнет.
float mFoodAngle; // Локальный угол относительно носа на источник запаха. если коло смотрит ровно на еду - 0.0.
};

На выходе хочу иметь:
struct kolo_brain_motor_data
{
float mGasPedal; // педаль газа, управляет двигателем колобка. возможные значения в диапазоне [0, 1).
float mRotoSteer; // руль колобка. управляет двигателем поворота. возможные значения в диапазоне [-1.0, 1.0]
};


Мне требуется код, который принимает указанный вход и формирует указанный выход. А внутри там твоя целиком лавочка, твой эксперимент. Хочешь байты, хочешь выход в вход, хочешь чё хочешь - лишь бы скомпилилось. код можно положить например на http://pastebin.com/ и ссылочку на пасту в тред. Время истечения только поставь там с недельку, а то бывает, делами заваливает, за день могу и не зайти.. Давай начнём, а там видно будет.. вдруг ты прав, а это я дурак

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

Цитата:
Если взять колобка, то он же не будет с парой миллиардов нейронов

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

Цитата:
Так может мне на конкурс самого запутанного кода послать это?:D

ага, обязательно. также, имена переменных сделай такие a, b, c, d, e, f, .. имена методов x, y, z,
сотри все лишние пробелы. ну и куски кода передевайнь так чтобы даже самому было непонятно.

kondrat
Цитата:
А пускай колобки ещё жрут друг-друга. И делятся от этого с небольшими мутациями.

хорошо, но чуть попозже, ладно? добавим разный пол, добавим разные типы чуваков, в духе одни травоядные, другие плотоядные, итд, итп.. а сначала надо основу допилить.
[Ответ][Цитата]
Fractaler
Сообщений: 2490
На: Полевая философия
Добавлено: 23 апр 13 5:52
Цитата:
Автор: lsd
хорошо, но чуть попозже, ладно? добавим разный пол, добавим разные типы чуваков, в духе одни травоядные, другие плотоядные, итд, итп.. а сначала надо основу допилить.

Что не пойму. Для чего вся эта симуляция? Сделать ещё одну симулякру? Она точно будет лучше моделировать, чем аналоги?
[Ответ][Цитата]
 Стр.6 (8)1  2  3  4  5  [6]  7  8<< < Пред. | След. > >>