singlepost

Создание мира при помощи массивов << На главную или назад  

Здравствуйте, в голову пришла очередная идея, написать ИИ, по принципу анализа мира, отбросив жесткие конкретизированные условия, в планах следующее:
Создать мир, запустить в него существо, мир будет состоять из земли, воды, огня и человекоподобных существ, изначально человек не будет иметь представления об огне, воде, других людях, если он подойдет к огню, испытает что то типа боли, в зависимости от силы боли что ли… он присвоит огню определенный уровень опасности, если у людей не будет еды, и найти ее они не могут, скорее всего они свернут с правильного пути и убьют кого нить сцелью отобрать пищу, при такой реализации уже появляется нечто немного напоминающее наш мир, интересно таким заняться, тем
более что ето только часть всего задуманного, в планах гораздо большее, теоретически я представляю как все ето реализовавывется, проблема только с созданием мира… Из идей есть одно:
сощдать 1 мерный массив который будет содержать значение от 0 до 2-х
0 – трава
1 – огонь
2 – вода (в будущем список расширится)
далее есловие если массив[1]=0 загружаем траву на х,у
следующую картинку загружаем на х+10,y+10 потом +20,+30, через цикл реалтзовать легко, го тогда получается что х,у- ето не клетка с картинкой, а только верхний левый угол картинки, при таком раскладе неудобно проверять столкновение объектов и сканировать массив, на какой клетке что стоит.
Какие методы создания мира вы быпредложили?

206 ответов в теме “Создание мира при помощи массивов”

  1. 112
    Жека Кирпичев ответил:

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

  2. 111
    Антон Кононов ответил:

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

  3. 110
    Антон Кононов ответил:

    пролистал не читая книжецу. много букаф =) будет время – изучу повнимательнее. Жаль в книге нет реальных примеров кода. Может, Жека, ты сам предложишь решение самим же собой поставленной задачи про существо и кнопки? Я хоть у тебя поучусь как писать надо ;)

  4. 109
    Жека Кирпичев ответил:

    Конечно, перебор вариантов нужен – но фишка в том, что одним перебором вариантов ограничиться нельзя – я об этом и твержу.
    Необходима куча всего другого, в чем и заключается сложность:
    – Представление самих "вариантов"
    – Определение применимости варианта
    – Мысленное моделирование варианта и оценка полученного
    – Сочинение новых вариантов
    – Расширение базы знаний на основе опыта
    – Поиск закономерностей в происходящем вокруг
    – Поиск закономерностей в собственной базе знаний и обогащение ее найденными закономерностями
    – И т.п.

    Почитай книжку А.А.Жданова "Автономный искусственный интеллект" – я сейчас фактически пересказываю ее :) Очень интересная штука.

  5. 108
    Антон Кононов ответил:

    ща скачаю и посмотрю. =)

    а, да! вот:
    //4file.org/5543011

  6. 107
    Антон Кононов ответил:

    смотрю все затухли =) я продолжу

    2Жека jkff Кирпичев:
    "И чтобы в этом случае он начинал перебирать свою базу знаний в поисках того, что, будучи мысленно смоделировано, приводило бы к хорошему самочувствию."

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

    То есть R = F(x1,x2,x3,…), где xi – факторы, R – результат (он может быть выражен и в пунктах удовольствия, например). При этом задача бота не просто вычислить R, а найти ее максимум, то есть максимизировать. R = Max(F(x1,x2,x3,…)).

    Если часть факторов известна (карта, некоторые эффекты кнопок или еще чего), а часть не известна (например неизвестные действия кнопок, влияние движения на бота и др.), то перебор в данном случае пойдет по неизвестным факторам (например будет перебирать все возможные перемещения бота и вычислять R для каждого движения)

  7. 106
    Дмитрий Матвеев ответил:

    Этот тред метит стать эпическим

  8. 105
    Вячеслав Шиндин ответил:

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

  9. 104
    Жека Кирпичев ответил:

    Уж не беспокойся, что такое динамическое программирование – я знаю :) Я, честно говоря, не понял, к чему ты это упомянул.

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

  10. 103
    Жека Кирпичев ответил:

    Да, ты меня опередил. И как, у тебя что-нибудь получилось?

  11. 102
    Вячеслав Шиндин ответил:

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

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

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

    Сущности: события(Event), обработчики(Handler), правила(Rule).
    Правило должно содержать список условий и список действий, который выполняться при истинности условий.
    // в правилах можно оперировать следующими определёнными данными:
    bot = events->getChanged(POSITION)->each(); // первый из коллекции
    me = players->getCurrent();
    //miniMap = ;
    // …
    // сами правила:
    if // первое правило
    (
    (bot->getPathLength(me) < 5) &&
    (bot->canSee(me))
    /* todo: && или || и т.п. + другие условия */
    )
    // противник вблизости от меня и видит меня
    {
    miniMap->mark(bot->getMiniMapPosition(), SIGNAL_DANGER);
    sound->play(SIGNAL_DANGER);
    // todo: другие обработчики размещать тут:
    // …
    }
    Можно вынести в конфиг, оформить отдельным скриптовым языком и т.п.

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

  12. 101
    Жека Кирпичев ответил:

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

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

  13. 100
    Вячеслав Шиндин ответил:

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

  14. 99
    Вячеслав Шиндин ответил:

    так вот,
    что, если алгоритм принимает N параметров, и возвращает M результатов.
    Нужно научить алгоритм действовать так, чтобы на выходе получались ожидаемые результаты (для этого при обучении AI надо использовать какое-то количество шаблонных данных). фактически, получается простенький граф из N+M узлов c N*M дуг.

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

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

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

    PS: Хоть алгоритм баян, но почему-то вспомнился)

  15. 98
    Вячеслав Шиндин ответил:

    задаться бы ещё целью, оценить сложность подобного алгоритма на определённых типах задач..

  16. 97
    Вячеслав Шиндин ответил:

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

  17. 96
    Вячеслав Шиндин ответил:

    можно было бы тут как на доске, рисовать картинки, схемки, и постить вместе с теском сообщения, было бы удобно вести обсуждения + сопровождать их чертёжиками )

  18. 95
    Жека Кирпичев ответил:

    Одно другому не мешает. Там, где четкий алгоритм возможен – его и надо использовать. Есть случаи, когда он невозможен и адаптивность необходима.

  19. 94
    Вячеслав Шиндин ответил:

    алгоритм по определению чёткий

  20. 93
    Вячеслав Шиндин ответил:

    хм, а не думали как-нибудь абстрагироваться от всяких болот, существ и прочего и просто перейти к матчасти, алгоритмике и прочему подобному?)
    а то образно всё конечно же красиво, но оно образно, а не формально…

  21. 92
    Павел Потапов ответил:

    #87 > Зачем увеличивать количество кнопок? Себе усложнить?

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

  22. 91
    Василий Волкогонов ответил:

    Не составите. Никогда. Потому что есть разница между нормальным документом и бредовым набором отрывочных сообщений.

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

    Аргументировать слабо? ;-)

    тоесть ты не согласен что понятия не имеешь обо мне и проекте? Странный текст от тебя исходит

    >>сделать из файла память
    Зачот! Жжоте.

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

    >>кроме бессмысленной критики от тебя ничего не поступило, следовательно удалить надо тебя
    1. Аргументированная критика всегда имеет смысл.
    2. Удалить меня из этой группы никто не сможет. Невероятно, но факт.

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

    >>зря вконтакте нет репутации
    А была бы? Дабы повлиять на чью либо репутацию нужно сначала иметь хоть какую-то свою

    Вполне возможно влиять и с нейтральной репутацией.

    Кстает прочитал статью про проект майкрософта, питомцы вроде…не видели такие аналоги для делфятников?

  23. 90
    Антон Кононов ответил:

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

    Это нормальный результат адаптации к той среде, что ты привел.

    Разумеется в другой среде адаптация будет другой (сколько вымрет существ там на опытах тоже непонятно).

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

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

  24. 89
    Жека Кирпичев ответил:

    Если задачи такого рода кажутся тебе нереалистичными, то представь себе, что ты программируешь полностью автономную систему управления марсоходом, и что у марсохода есть 5 тысяч датчиков – датчики наклона разных его частей, давления воздуха, силы и направления ветра, химического состава ветра, химического состава почвы, температуры почвы, силы окружающего магнитного поля, 1000 ячеек зрения, слух, температура всех двигателей, загруженность каждого из 32 процессоров, и т.п.
    Еще у марсохода есть тысяча кнопок – включение различных двигателей его механических частей, включение освещения, выдвижение зонда для забора пробы почвы или воздуха,и т.п.

    Разумеется, бессмысленно вообще НЕ начинять марсоход алгоритмами поиска пути, численного интегрирования итп. Но факторов настолько много, что одними точными алгоритмами тут не обойтись! А взаимодействие факторов и реакция среды могут оказаться – и окажутся – непредсказуемо сложными и начиненными заранее неизвестными закономерностями. Вот тут-то и пригодится ИИ.

  25. 88
    Жека Кирпичев ответил:

    Задача, которую я предлагаю – это просто квинтэссенция необходимости самообучения и адаптации. Этим она и интересна: можно абстрагироваться от того факта, что часть задач ты будешь все-таки решать точными алгоритмами, и заняться собственно адаптивностью.

  26. 87
    Жека Кирпичев ответил:

    > Жека, дорогой мой, что это за каша в голове?
    Я привел тебе эти примеры, чтобы ты понял, что существо не знает, что делают кнопки, и они могут делать самые неожиданные вещи, и что реакция среды зависит не только от нажатий кнопок, среда может меняться сама по себе, и существу придется адаптироваться к ней. И что любая твоя модель – модель, что у кнопок есть веса, или что существуют удачные последовательности кнопок, или что кнопки можно разбивать на быстрые и медленные – будет неполной.

    Хорошо, если примеры последствий выбора того или иного действия в реальности тебя не вдохновляют, давай формальную и непонятную модель.
    Пусть есть 4 кнопки.
    Среда реагирует на их нажатие так:
    class Env {
    private int x = 0;
    private int y = 0;
    private int time = 0;
    private int health = 10;

    mainLoop() {
    while(true) {
    creature.tick(health);

    if(button1) x–;
    if(button3) x++;
    if(time-y > 20) {
    if(button2) {
    time = y;
    health += 5;
    } else {
    health–;
    }
    }

    if(x < -5) health += x;
    if(x > 5) health -= x;

    if(time%25 == 0 && !button4) health -= 3;
    }
    }
    }

    Это я смоделировал то, что слева и справа от существа есть болото, и что ему иногда хочется кушать. Если существо лезет в болото, то ему становится плохо. Если оно давно не кушало, то ему становится плохо. Кушать чаще, чем раз в 20 секунд бессмысленно. Каждые 25 секунд идет дождь, и если существо забыло открыть зонтик, то ему становится плохо.

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

  27. 86
    Антон Кононов ответил:

    ой, товарищи, Жека и Павел, а вы не замечаете, что в ваших рассуждениях ключевую роль играет волшебное слово "ДОГАДАЕТСЯ".

    КАК я вас спрашиваю существо догадается? Догадаться можно ТОЛЬКО на опыте. Думаете ребенок полутора лет не станет трогать чайник если он до этого увидел как обожглась мама или папа? станет! чтобы проверить.

    А тем более КОМПЬЮТЕРНОЕ существо. Ему вообще в принципе догадываться нечем. Какие еще терминаторы и терминаторы 2?

    "Догадываться" для компьютера заменяют два термина: "опыт" и "выбор варианта". То есть: нет опыта – будет тыкать во все подряд, будет умирать в болоте, будет чахнуть без домика и т.д.

    Идем далее. Цитата: "Пусть одна из кнопок означает достать пилу, другая означает дергать рукой туда-сюда". Вы чо издеваетесь? 0_о

    Это ж компьютер. Речь идет о некой среде обитания компьютерного существа. Законы мира известны заранее (иногда и карта тоже). Поэтому что именно делать с пилой ("дергать туда сюда") существо знает и не обучаясь.
    Можно конечно программеру испортить самому себе жизнь и потратить время на обучение существа и этому (сколько их перегибнет при опытах неизвестно, но думаю не менее 6 цифр в числе), потому что "стукать себя по голове" пилой никто еще не отменял. Допустим (предположим) что наши предки произошли от обезьян. Вы хотите СМОДЕЛИРОВАТЬ их много_миллионо_летнюю эволюцию? или все-таки у нас тут речь идет о Искусственном Интеллекте с правом выбора?

    далее

    Цитата: "начать двигаться влево, начать поворачиваться".
    Жека, дорогой мой, что это за каша в голове? При чем тут это? Алгоритм движения никак не связан с ИИ. Алгоритм – он алгоритм и есть. Своего рода класс или некоторая функция, которая на входе получает карту местности (или ту часть что видна в данный момент) и на выходе получаешь координаты пути, по которому идет движение. Тут нет ИИ. Просто алгоритм (он сам рассчитает и поворот и скорость).

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

    PS Не впадайте в маразм. Давайте не будем ИИ для игрушки (а вроде с этого начинали) доводить до моделирования движения и столкновения элементарных частиц. Это вы перегнули оба

  28. 85
    Антон Кононов ответил:

    те же шахматы. там же компьютер не "ДОГАДЫВАЕТСЯ" о своем следующем ходе, а просто вычисляет по формуле, либо берет из готовой БД с ходами.

  29. 84
    Антон Кононов ответил:

    #84: не могу не ответить.

    Зачем увеличивать количество кнопок? Себе усложнить?

    Надо наоборот упрощать, уходить на макроуровень.

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

    К чему это? А тем более компьютеру?

  30. 83
    Павел Потапов ответил:

    > Что я хотел этим сказать? А то, что все эти ваши "медленные" и "быстрые" эффекты один фиг для программиста – ПЕРЕБОР ВАРИАНТОВ.

    Конечно, это перебор вариант… другое дело, что при увеличении числа кнопок хотя бы до восьми и увеличении возможной длительности хотя бы до 6 шагов, этих вариантов становится весьма много. И предложенных 100000 шагов на обучение становится ой как мало. Вопрос именно в том, как ИИ будет выбирать те варианты, которые имеют смысл, чтобы их опробовать.

    ЗЫ Наша вселенная – это тоже всего-лишь последовательность состояний элементарных частиц. Но перебрать все варианты весьма тяжело.

  31. 82
    Жека Кирпичев ответил:

    О! Видишь, как расширяется твоя модель? Начиналась с весов кнопок, потом стал перебор последовательностей кнопок, теперь ты каждую кнопку разбил на две – "быструю" и "медленную". Чуешь, чем пахнет? Чуешь, что после еще пары замечаний модель станет необъятной и нереализуемой?

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

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

    Какие варианты тут верные, а какие нет?

  32. 81
    Антон Кононов ответил:

    #81: да блин так же. я уже привел вам пример программы. все её захаяли. но главное принцип:

    итак, начнем

    1) у каждой кнопки есть быстрый и медленный эффект
    2) допустим существо может вызвать любой из них:

    а) например нажать кнопку А и тут же сразу В – получим: быстрый эффект А + быстрый эффект В + быстрый эффект АВ + медленный эффект А + медленный эффект В + медленый эффект АВ
    (медленный эффект будет полюбому – время то не стоит на месте)
    б) или нажмем А, подождем, нажмем В, еще подождем – получим: быстрый эффект А + медленный эффект А + быстрый эффект В + быстрый эффект АВ + медленный эффект В + медленный эффект АВ

    то есть ОДИН из ШЕСТИ вариантов.
    тут придется как в физике упрощать модель.Пример: тут кто-то выше мне писал про последовательность кипячения чайника, зазигания газа и все такое. Дак вот у кнопки "ОТКРЫТЬ ГАЗ" нет быстрого эффекта, поэтому во многих случаях общая формула из 6 неизвестных сокращается на 1-2 неизвестных (или больше в зависимости от ситуации). Почему у "ОТКРЫТЬ ГАЗ" нет быстрого эффекта? А вот попробуй открыть газ и тут же закрыть. Много изменилось? То-то и оно. Только медленный эффект есть у кнопки "ОТКРЫТЬ ГАЗ" (ну и быстрый эффект АВ, если в качестве В будет кнопка "ЗАЖЕЧЬ СПИЧКУ", в таком случае сумма медленного эффекта "ОТКРЫТЬ ГАЗ"+быстрый эффект "ЗАЖЕЧЬ СПИЧКУ" даст быстрый эффект "ВОСПЛАМЕНЕНИЕ")

    Разумеется в общем случае подобная задача вряд ли будет решена если даже мы люди не можем четко сформулировать что же там такое получилось после многих нажиманий. И это я рассмотрел только 2 кнопки ;)

    Теперь возвращаемся к компьютерной модели.
    Допустим у нас есть 2 кнопки А и В. Жать на них можно быстро и медленно.
    Внесем в эту систему еще 4 кнопки (обозначим их как А', B', AB, AB' – здесь штрихом я пометил медленный эффект).

    Теперь задача нахождения лучшей комбинации из двух кнопок автоматически превращается в нахождение лучшей последовательности из A,B,A',B',AB,AB'
    Что недалеко ушло от моей реализации. Пофигу что у меня рандом (честно не знаю как просто и весело сделать перебор всех вариантов).

    После того, как результаты всех опытов проведены вычеркиваем те, которые заведомо неверные (например A' не может быть нажата раньше A).

    Итого для двух кнопок: максимум 6!=720 вариантов (из которых я подозреваю только треть имеет смысл).

    Что я хотел этим сказать? А то, что все эти ваши "медленные" и "быстрые" эффекты один фиг для программиста – ПЕРЕБОР ВАРИАНТОВ.

    То, что вы называете ИИ в данном случае некий алгоритм, который будет вычеркивать неверные варианты.

  33. 80
    Павел Потапов ответил:

    #77 В данной ситуации все достаточно просто… Кроме этого "опыта", ставим еще пару:
    1) Жмем B и смотрим – если эффекта не было, то скорее всего верен один из двух других вариантов.
    2) Жмем A и ждем достаточно долго – если эффект есть, то угадали, нет – скорее всего это результат комбинации.

    И интересно написать как раз такой ИИ, который сможет самостоятельно проводить такие эксперименты, а главное – решать, какие эксперименты надо провести. Я не представляю, как это сделать ;)

  34. 79
    Евгений Гаврин ответил:

    Советую искать англоязычные маны по словам
    нейронные сети
    генетические алгоритмы

    //www.gotai.net/
    //habrahabr.ru/blogs/artificial_intelligence/40...
    //cs.gmu.edu/~eclab/publications.html

  35. 78
    Антон Кононов ответил:

    ну дак ответь мне смотря на #76 что должно подумать существо? вот оно нажало А, потом В. что-то с ним случилось (плюсовое или минусовое не важно). Как теперь существо поймет что это было такое? Какой из трех вариантов #76 оно выберет и запомнит?

    спрошу еще проще: ты бы какой выбрал? (оставим существо немного в покое).

    то есть наживаем А, потом В. получаем эффект. Теперь вопрос лично тебе, Жека: какой вариант ты выберешь? что это было?

  36. 77
    Жека Кирпичев ответил:

    Блин, Антон! Так в этом и задача – интеллект написать, а не фигню, которая перебирает последовательности!

    Теперь-то осознаешь, насколько это сложно?

  37. 76
    Антон Кононов ответил:

    #76: "неизвестно, результат какого нажатия мы получаем"

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

    %-(

    нееет. пожалуй задержки лучше исключить…

  38. 75
    Павел Потапов ответил:

    #75 В предложенных условиях вариантов настолько много, что все их перебрать нереально. К тому неизвестно, какой из вариантов выбирается при одном нажатии кнопки. Например, если есть 2 кнопки A и B, то после последовательного нажатия A, а потом B, неизвестно, результат какого нажатия мы получаем. Возможные варианты:

    1) эффект от A с задержкой
    2) эффект от B немедленный
    3) эффект от последовательного нажатия обеих кнопок

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

  39. 74
    Дмитрий Гайдамович ответил:

    Лямбда, я назову его Лямбда…

  40. 73
    Антон Кононов ответил:

    #68 Жека: вы сговорились что ли?

    зачем писать если не понятно что писать?
    ты пояни мне в чем же я неправ (я про перебор вариантов)

  41. 72
    Жека Кирпичев ответил:

    Ы, ептыть.. Я надеялся, ты прогу про существо написал…

  42. 71
    Денис Горячёв ответил:

    Если непонятно будет-я перевыложу по нормальному)))

  43. 70
    Жека Кирпичев ответил:

    Давай, показывай.

  44. 69
    Денис Горячёв ответил:

    ublic Class Main
    Public Shared StepProgress As Single
    Public Shared NowDoing As NowDoingCharac
    Public Shared Hero As HeroCharac
    Public Shared HeroWorryes(0 To 10) As Coordinates
    Public Shared Mesh(0 To 10) As MeshCharac
    Public Structure HeroCharac
    Public Hungry As Integer
    Public Lazy As Integer
    Public Love As Integer
    Public Fair As Integer
    Public Health As Integer
    Public Energy As Integer
    Public Worry As Integer
    Public X As Single
    Public Y As Integer
    Public Favorite As FavoriteCharac
    Public Const Widht As Single = 20
    Public Const Height As Single = 20
    End Structure
    Public Structure MeshCharac
    Public Fair As Integer
    Public X As Single
    Public Y As Single
    Public Const Widht As Single = 10
    Public Const Height As Single = 10
    Public Health As Single
    Public Damage As Single
    Public Cure As Single
    End Structure
    Public Structure FavoriteCharac
    Public FavoriteSleep As Coordinates
    Public FavoriteEat As Coordinates
    End Structure
    Public Shared Sub StarSimulation()
    If Hero.Energy <= 10 Then
    WantSleep()
    End If
    End Sub
    Public Shared Sub WantSleep()
    If NowDoing.OnWay = False Then
    SearcPath(Hero.Favorite.FavoriteSleep.X, Hero.Favorite.FavoriteSleep.Y)
    NowDoing.OnWay = True
    Exit Sub
    Else
    If Hero.X = Hero.Favorite.FavoriteSleep.X Then
    If Hero.Y = Hero.Favorite.FavoriteSleep.Y Then
    StopMove()
    End If
    End If

    BeginMove()
    Hero.X = Path(StepProgress).X
    Hero.Y = Path(StepProgress).Y
    End If
    End Sub
    Public Structure Coordinates
    Public X As Integer
    Public Y As Integer
    Public Found As Boolean
    End Structure
    Public Structure NowDoingCharac
    Public WantSleep As Boolean
    Public WantEat As Boolean
    Public OnWay As Boolean
    End Structure
    Public Shared Function SearcPath(ByVal DesX As Single, ByVal DesY As Single)
    Main.StepProgress = 0
    Path(1).X = Hero.X
    Path(1).Y = Hero.Y

    For i = 1 To 1000
    If Path(i).X > DesX Then
    Path(i + 1).X = Path(i).X – 5
    GoTo 1
    ElseIf Path(i).X < DesX Then
    Path(i + 1).X = Path(i).X + 5
    GoTo 1
    ElseIf Path(i).X = DesX Then
    Path(i + 1).X = DesX
    Exit For
    End If
    1:
    Next

    For i = 1 To 1000
    If Path(i).Y > DesY Then
    Path(i + 1).Y = Path(i).Y – 5
    GoTo 2
    ElseIf Path(i).Y < DesY Then
    Path(i + 1).Y = Path(i).Y + 5
    GoTo 2
    ElseIf Path(i).Y = DesY Then
    Path(i + 1).Y = DesY
    Exit For
    End If
    2:
    Next
    End Function
    Public Shared Path(0 To 1000) As Coordinates
    End Class

  45. 68
    Денис Горячёв ответил:

    Я накидал уже немного)))Кто хочет посмотреть??Я выложу)))

  46. 67
    Жека Кирпичев ответил:

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

    Писать надо! Только тогда станет что-то ясно.

  47. 66
    Антон Кононов ответил:

    #59 Жека jkff Кирпичев:

    "Конечно, существу придется иногда экспериментировать и жать кнопки случайно."

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

    Ну дак вот. Предположим что существо наткнулось на последовательность (или просто одну кнопку), которая дает заметный плюс. И жмет последовательность не переставая.

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

    Тыкаем снова. Снова ищет…. и т.д.

    Если количество наших тыканий ничем не ограничивается, то lim (предел) таких поисков приведут нас опять таки к ПЕРЕБОРУ всех вариантов нажатия на кнопки.

    PS Насчет того, что существо может погибнуть при опытах.
    Учитывая поставленное вами условие задачи, оно может и погибнуть. Это своего рода риск. Существо же не знает (именно НЕ ЗНАЕТ, потому что оно должно обучиться), что некоторая последовательность приведет к смерти.

    =) узнает когда уже будет поздно

  48. 65
    Дмитрий Потапов ответил:

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

    >>Бред, ты и понятия не имеешь о идеи и тем более о знаниях, которые нормальные люди преобретают, а не сразу все знают
    Аргументировать слабо? ;-)

    >>сделать из файла память
    Зачот! Жжоте.

    >>кроме бессмысленной критики от тебя ничего не поступило, следовательно удалить надо тебя
    1. Аргументированная критика всегда имеет смысл.
    2. Удалить меня из этой группы никто не сможет. Невероятно, но факт.

    >>зря вконтакте нет репутации
    А была бы? Дабы повлиять на чью либо репутацию нужно сначала иметь хоть какую-то свою

    P.S. Читать Розенталя перед сном.

  49. 64
    Василий Волкогонов ответил:

    #14: нет не "желания", а "знания" и самой "идеи", что вы вообще понимаете под "проф языком"?
    —-
    Бред, ты и понятия не имеешь о идеи и тем более о знаниях, которые нормальные люди преобретают, а не сразу все знают
    —-

    #17: память – это не файл! в школу – учить матчасть. Про пост вцелом – АМ

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

  50. 63
    Денис Горячёв ответил:

    согласен)))

  51. 62
    Василий Волкогонов ответил:

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

  52. 61
    Денис Горячёв ответил:

    Я сам нуб-но есть вещи,в которых я лучше остальных и я всегда помогаю всем,кто меня просит,если я вижу,что он чего-то хочет)))Так что не надо ругаться на нас!!Мы тут обсуждаем просто,как при помощи Ооп написать пародию на искуственный интелект!!!!

  53. 60
    Жека Кирпичев ответил:

    Ну а как же иначе они узнают, что они нубы и что им еще многому надо научиться? :)

  54. 59
    Жека Кирпичев ответил:

    > а как же еще существо узнает о "последовательности кнопок" не нажав в один прекрасный день её случайно?
    Конечно, существу придется иногда экспериментировать и жать кнопки случайно.

    > в итоге результат какой будет: "перебираем все возможные сочетания всех кнопок и выясняем какие сочетания лучше"
    Ага, только от того, в каком порядке существо будет их перебирать, будет зависеть его жизнь. Ты ведь, чтобы включить чайник, не перебираешь все возможные сочетания действий {взять чайник, чиркнуть спичкой, включить газ, выключить газ, поставить чайник на плиту, снять чайник с плиты}. А если будешь перебирать – то можешь доперебираться до того, что задохнешься газом.

  55. 58
    Дмитрий Потапов ответил:

    >>хаятель нашелся =) тебя веселит что ли принижать нубов

    меня оскорбляет то что нубы вываливают свой словесный понос в общественных местах

  56. 57
    Антон Кононов ответил:

    #54: "Да… давно я не хаял болтунов в этой группе…"

    хаятель нашелся =) тебя веселит что ли принижать нубов? все ж там были
    всякие твои "респект, уважуха" – это сам в школу иди

    теперь по существу:
    дело было вечером, хотелось спать – и как следствие не так увидел поставленный вопрос. Ладно, исправимся.

    #47: "Просто догадываться о полезности кнопок – в этом ничего интересного."

    а как же еще существо узнает о "последовательности кнопок" не нажав в один прекрасный день её случайно?

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

    так что ли?

    ну поясните мне если я не понимаю

  57. 56
    Дмитрий Матвеев ответил:

    велосипедисты ;-)
    //www.linux.org.ru/view-message.jsp?msgid=2318220

    А вот это мне особенно нравится (потому что Scheme):
    //www.linux.org.ru/view-message.jsp?msgid=2993347

  58. 55
    Денис Горячёв ответил:

    Я подумаю и прикину,че моно сделать))Я не среднячок даже,но мож что-нить да выйдет)))Система будет не офигенной и не продвинутой,но сойдет)))Мне нужно 2 дня)))

  59. 54
    Жека Кирпичев ответил:

    Да не, удалять не буду – все надеюсь, что кто-нибудь таки попытается написать "существо". Ежели так, то будет интересно.

  60. 53
    Дмитрий Потапов ответил:

    Да… давно я не хаял болтунов в этой группе…
    Постов много, буду краток – извините если кого забыл или пропустил. Итак:

    #1: это не "идея" – это "словесный понос", ни формулировки нормального вопроса, ни практической сути, ни нормального описания – просто /dev/urandom брошенный на словарь Ожегова. Здесь и далее о всех постах топикстартера – КГ/АМ.
    #6: после меня видимо стало модно употреблять эту цитату :)
    #9: хоть один нормальный человек нашёлся…
    #11-#13: браво, респект и уважуха, честно, вам бы ещё права модерские, авось весь этот флуд бы зарубили на корню.
    #14: нет не "желания", а "знания" и самой "идеи", что вы вообще понимаете под "проф языком"?
    #15: а чего его его формировать-то? КГ – оно и есть бесформенное нечто
    #16: можно было ограничиться только первой фразой :) ))
    #17: память – это не файл! в школу – учить матчасть. Про пост вцелом – АМ
    #21: "классы более критичны для реалтайм" – тоже в школу…

    вопщем, флуд и моральный террор…
    можете удалять

  61. 52
    Дмитрий Гайдамович ответил:

    ***оформить подписку на создание мира при помощи массивов***

  62. 51
    Павел Потапов ответил:

    По-моему, RoboWar недавно уже обсуждали… но мне кажется, что тут она тож будет в тему:
    //en.wikipedia.org/wiki/Robowar
    Ну, и далее по ссылкам :)

    ЗЫ Думаю, что это проще, чем куча разных кнопок, которые фиг знает, что и когда делают.

  63. 50
    Павел Потапов ответил:

    И еще вот… Террариум для животных:
    //offline.computerra.ru/2002/466/21144/

  64. 49
    Жека Кирпичев ответил:

    Ну, извини, это слишком неуниверсально. Просто догадываться о полезности кнопок – в этом ничего интересного. А вот догадаться о целых полезных *действиях* (последовательностях кнопок), причем в определенном контексте – это интересно. Либо я не понял, что твоя прога делает. Может, исходник покажешь?

    Давай все-таки так: Попробуй написать программу, которая выживет в моей среде; программа должна быть классом, реализующим такой интерфейс:

    interface Being {
    int feelAndReact(int feeling);
    }

    Протокол такой: Создается объект типа Being. Затем каждую "единицу времени" у него вызывают feelAndReact, передавая ему его текущее "состояние" в качестве параметра feeling.
    Существо должно вернуть число, означающее следующее:
    0 – ничего не делать
    k, где 0<k<10 – нажать кнопку k
    k, где -10<k<0 – отпустить кнопку k

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

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

    Согласен?

  65. 48
    Жека Кирпичев ответил:

    Ах да: все это проводится на нескольких моих программах, симулирующих "среду".

  66. 47
    Alexander Zubakov ответил:

    Хотелось бы код ;)

    Просто, по-моему, ты не совсем правильно понял задачу. То, что здесь показано, действительно, программируется в 20 строк. Проблема была вот какая:

    1. есть некий интеллект;
    2. интеллект стремится получать удовольствие;
    3. удовольствие может наступать от: (здесь внимание!)
    -нажатия какой-то одной кнопки (у тебя реализовано),
    - нажатия последовательно сначала одной, а потом второй, причем, если нажать первую кнопку, то можно "обжечься", но вторая компенсирует "боль" от первой,
    - нажатия последовательности из трех кнопок в различных комбинациях и т.п.

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

    Пример.
    Удовольствие – положительные цифры, боль – вычитание из удовольствия. Т.е., например, есть 4ед и -2 ед. +4ед – это 4 единицы удовольствия, а -2ед – это 2 единицы боли, что в сумме даст 2ед, 2 единицы удовольствия.

    Кнопки 1, 2, 3. Если нажать 1, получишь 2ед. удовольствия. Нажмешь 2 – станет больно на -1ед. удовольствия. Нажмешь 3 – станет больно на -2ед. удовольствия. Однако, если нажать сначала 2, а потом 1, то получив свои -1ед боли, при клике на 1 получаешь уже 6ед удовольствия, что больше, чем при двух кликах по кнопке 1! Так вот существо должно найти эту мега-цепочку кликов и жать именно ее.

  67. 46
    Павел Потапов ответил:

    Не, не пойдет. Условия были такие:

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

    Т.е.
    1) от последовательности нажатия кнопок зависит результат;
    2) эффект от нажатия кнопки может проявляться не сразу;
    3) несколько кнопок можно нажимать одновременно – при этом может появляться новый эффект.

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

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

    Ошибка в последовательности действий может стоить жизни. ;)

  68. 45
    Антон Кононов ответил:

    во! чиста ради себя потешить написал я самообучающееся существо и кнопки.

    качать экзешник с примерами тут:
    //narod.ru/disk/3304090000/jaba.zip.html

    кнопок сделал 8, но так как это массив, то надо будет сделать больше – легко)

    думаю 8 хватит для примера.

    в качестве ИИ использовал тупо самообучающуюся машину тьюринга. Код занял примерно 100 строк. Из них сам ИИ только три строки. Остальное – марафет (типа проверка на правильность ввода данных, save/load и все прочее)

  69. 44
    Антон Кононов ответил:

    кто не понял – это ответ на пост #29 =)

  70. 43
    Денис Горячёв ответил:

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

    1)Путем введения условной координатной сеткой

    2)Путем циклических проверок по (максимум) 3 мерному массиву

    3)я думаю,все поняли,зачем тут цикл)))

    4)Там последующие условия влияют на "воспитание" героя и на реагирование….

    Проблемы:

    1)Ареал взаимодействия будет не слишко большим

    2)Так как при компилировании цикл в цикле 4 раза(при 4-х мерном массиве) и при структуре сравнения If…Then…Else… будут тормозить систему до безобразия

    3)Система не практична и требует много времени для написания и отладки

    Преимущества

    1)Происходит углубление в дебри ООП

    2)Лично мне процесс написания доставляет огромное удовольствие

    3)Данная система очень универсальна-и находит применение почти в любой моей программе

    Вот так!!Прошу на меня не ругаться,я еще новичок)))

  71. 42
    Антон Кононов ответил:

    а! во! нашел статью которую искал про поиск пути:

    //dbasic.narod.ru/docs/algpath.htm

  72. 41
    Alexander Zubakov ответил:

    Автор темы, почитай вот это, будет интересно:
    _ttp://ru.wikipedia.org/wiki/Интеллектуальный_агент

  73. 40
    Антон Кононов ответил:

    Василий, ты мне понравился своим напором.
    Ну ладно подскажу.
    Заходим в группу "Алгоритмы&Исходники" в списке ссылок находим "Разработки игр".

    Через минуту находим такую подборку:
    //www.gamedev.ru/articles/?sect=7

    Там есть среди прочего ссылка на алгоритм поиска пути (включая поиск пути через препятствия как огонь, маньяки и прочее):
    //www.gamedev.ru/articles/?id=70121

    Алгоритм поиска пути А* (А-звездочка) тоже можешь поискать в нете.

  74. 39
    Антон Кононов ответил:

    #29 Жека jkff Кирпичев: фигасебе отжиг =)

    но про существа и кнопки – это идея)

  75. 38
    Вячеслав Шиндин ответил:

    Да, кстати, мне тут подсказывают разницу между интеллектом и разумом. Интеллект – это конкретный мозг, а разум – это осознание окружающего мира.

  76. 37
    Вячеслав Шиндин ответил:

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

    Остановлюсь на вопросе, где грань, между интеллектом и разумом, в контексте вышеописанных постов?)

    Кстати, любой рефлекс (например, стремление мотылька на свет) можно отнести к простейшему искуственному интеллекту.

    PS: В общем изначальную тему обсуждения свернул нечайно нетуда, сори)..

    PPS: ушёл за пивом))

  77. 36
    Василий Волкогонов ответил:

    Жека jkff Кирпичев Я могу реалтзовать то что ты хочешь, но опять же ето будет основано на условиях, ты по всей видимости хочешь использовать нечто другое, наверное человеческий мозг подключенный по проводам, разум ето наверно способность мыслить, машина максимум может анализировать и выбирать один из вариантов, не может придумать что то свое, например в моей задумке они никогда не додумаются перелесть через забор и бегать за екраном создавая там новую цивилизацию, построить пушки, разнести забор и захватить территорию, разумвроде как создать невозможно, по крайней мере на данный момент…

  78. 35
    Вячеслав Шиндин ответил:

    "ИИ – это программа, которая САМА может догадаться, что если враг близко, то надо достать оружие.", опять же не убедительно.
    С моей точки зрения, ИИ скорей похоже на сложную формулу получающую на входе числа и на выходе тоже. Обучение ИИ – это как раз таки процесс корректировки коэффициентов этой самой сложной формулы. Формула может иметь множество входных данных, множество неизвестных, и множество выходных вариантов, но несколько ограниченных, например, определённым диапазоном значений (есть ещё понятие: программирование в ограничениях).

    И всё это я считаю входит в понятия ИИ.

  79. 34
    Вячеслав Шиндин ответил:

    интеллектуал получивший образование и разумный философ…
    для меня разное

  80. 33
    Вячеслав Шиндин ответил:

    в принципе можно их считать синонимами)
    но почему-то слово "разум" у меня в голове прокручивается, как что-то бОльшее, чем "интеллект"

  81. 32
    Жека Кирпичев ответил:

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

  82. 31
    Жека Кирпичев ответил:

    Василий, я ведь не из вредности нападаю. Просто ты до сих пор отделываешься общими словами. Я пытаюсь уговорить тебя *как следует* задуматься над этой задачей. ИИ – это не набор правил вида if(враг_близко) then (достать оружие). Такой набор правил – это программа, решающая одну конкретную задачу, и обучаться такая программа НЕ МОЖЕТ. ИИ – это программа, которая САМА может догадаться, что если враг близко, то надо достать оружие.

    ИИ должен начинать С НУЛЯ. Если у него изначально есть знания о том, что такое враг, что такое оружие, и как его достать – это не ИИ, а просто набор if/then/else и жестко фиксированных алгоритмов.

    Давай по-другому. Вот ты – человек, у тебя есть интеллект. Ты знаешь, что если хочется пить, то надо пойти на кухню и налить себе воды из кувшина, который стоит на столе. В какой форме представлено это знание у тебя в голове? У тебя же нет в голове программы на паскале, в которой написано if(me.is_thirsty) then begin goToKitchen; pourWater end. У тебя в голове есть сложнейшая система, которая неясным до сих пор никому образом способна представлять такие понятия, как "хочется", "пить", "ходить", "кухня", "кувшин", "наливать", которая знает, как управлять твоими мышцами и как интерпретировать сигналы от твоих органов чувств, как интерпретировать несколько десятков миллионов сигналов от твоих глаз и как догадаться, что ты видишь именно кувшин; знает, что если не попить, то умрешь от жажды; знает (инстинктивно), что умирать нехорошо, …

    Конечно, симулировать настолько сложную систему – абсолютно непосильная задача (тем более на паскале), но попробуй сделать что-то попроще.

    Попробуй написать программу, которая симулирует поведение мнимого существа.
    У существа есть один орган чувств, чувствующий, насколько существу "хорошо" – целое число от -10 до 10.
    Перед существом находится 10 кнопок, каждую из которых оно может включать или выключать в любой момент – таким образом существо может "управлять" окружающей средой.
    Соответственно, окружающая среда может в любой момент измениться под действием нажатых кнопок. Например, может оказаться, что если нажать кнопку 3 и кнопку 5 одновременно, а потом нажать и отпустить кнопку 7, то существу станет хорошо на 5 ходов, а потом состояние начнет ухудшаться, а что кнопку 2 нажимать ни в коем случае нельзя, т.к. если ее нажать, то существу становится очень плохо. Никаких этих законов существо изначально не знает, ему придется о них догадаться.
    Попробуй написать программу, которая будет "мозгом" этого существа и будет стремиться поддерживать его самочувствие на достойном уровне.
    А я напишу несколько разных программ, моделирующих поведение среды, и посмотрим, насколько хорошо твое существо выживет в моей среде.

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

    Давай, а?

  83. 30
    Вячеслав Шиндин ответил:

    Антон RichDad Кононов, хоть и объективные даёшь ответы, но зачем же человека так заставлять использовать классы.. дело то не в классах, а в том, как человек может выделять сущности, и использовать их в коде, образовывать зависимости между ними.

    Использование же классов, не классов, и других средств для реализации в удобносопровождаемом виде системы — совсем другая тема.

  84. 29
    Вячеслав Шиндин ответил:

    #29, "ИИ – это не набор правил вида if(враг_близко) then (достать оружие)." — как раз таки я думаю, что ИИ тем и ИИ, а не искуственный разум, что в нём можно ограничиться набором правил, возможно с условием их коррекции в процессе работы системы. Можно даже задействовать генетически алгоритмы, это всё по моему вписывается в понятия ИИ.

  85. 28
    Жека Кирпичев ответил:

    Пардон, ИИ – это искусственный *интеллект*. Интеллект и разум – синонимы.

    Тогда давай задам вопрос по-другому: Как построить искусственный разум?

    Василий, в моей задачке речь идет именно об искусственном разуме :)

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

    Так что: интеллект или разум?

  86. 27
    Василий Волкогонов ответил:

    Надеюсь вы не расчитываете что я выполню вашу работу?

  87. 26
    Вячеслав Шиндин ответил:

    О! В матлабе ведь много полезностей для подобных экспериментов :)

  88. 25
    Вячеслав Шиндин ответил:

    На счёт работы, это уж как хочешь)
    Я немножко в другой теме от ИИ, и мне оно пока не надо…

  89. 24
    Вячеслав Шиндин ответил:

    Моё резюме, кстати: //coder.moy.su/

  90. 23
    Василий Волкогонов ответил:

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

  91. 22
    Вячеслав Шиндин ответил:

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

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

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

    На основе послупления очередной команды, сетка обучается в старом режиме, уже потом новая команда добавляется в нчало на вход сети, и выталкивает тем самым последнюю команду.

    Идея возможно баян.. Реализаций думаю уже таких много, интересно было бы взглянуть на код.

  92. 21
    Антон Кононов ответил:

    пока писал #20 появилось сообщение #19 не могу не ответить =)

    type record – прошлый век. Тяжело задавать взаимодействие объектов.

    Еще раз говорю: тут нужны классы.
    Хотя…. классы более критичны для реалтайм. У тебя же пошаговая? Ну если пошаговая, то массивами тоже можно (но полюбому без классов будет больше непонятного кода)

  93. 20
    Василий Волкогонов ответил:

    То есть в данной ситуации проходимость огня обозначим как 5, а маньяка как 10. Допустим, что сразу за огнем начинается болото, а за маньяком трава. Куда пойдет персонаж в твоей реализации? Понятно что через огонь (маньяк-то сильнее) и затонет в болоте.

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

  94. 19
    Василий Волкогонов ответил:

    type
    sex//пол
    heat//жизни
    maxheat//макс жизни
    attak//атака
    sleep//желание спать
    maxsleep//при макс спать не охото
    speed//скорость
    eat//голод
    maxeat//голода нет
    x,y//где стоим
    nx,ny//куда хотим шагнуть
    nastr//настроение
    warning//соц опасность обществу
    love//номер избранной
    friends//номера друзей
    babys//ну всякое в жизни случается…
    dead:boolean;
    End;
    ето не все поля и изначально их будет меньше, в будущем буду дописывать, так как плонирую улучшать проект пока он мне интересен

  95. 18
    Антон Кононов ответил:

    так. прочитал. пост #17 после первого предложения не стал дочитывать. жесть

    теперь объясняю (Василий, я в свое время писал мого всяких подобных игр, но ничего толкового не написал, но как заметили Жека и Вячеслав, да и ты сам заметил, в процессе писания многому учишься):

    имхо:
    1) сложное взаимодействие объектов (а то, что ты описал я отношу под понятие "сложное") проще всего реализовать на основе классов, а значит тема топика "игра на массивах" теряет смысл.
    2) то, что ты написал в #5 – это то же самое что я тебе объяснял в #4. Ну ладно поясню второй раз: ситуация – кругом огонь, на выходе маньяк. Опять все те же герои. То есть в данной ситуации проходимость огня обозначим как 5, а маньяка как 10. Допустим, что сразу за огнем начинается болото, а за маньяком трава. Куда пойдет персонаж в твоей реализации? Понятно что через огонь (маньяк-то сильнее) и затонет в болоте. А если использовать ГОТОВЫЙ (скачать) алгоритм поиска пути на клеточном поле, то такой алгоритм покажет, что выгоднее потратить часть жизни, но пройти через маньяка (разумеется если там босс, то маньяку дадим не 10, а большее число, тогда, возможно, придется идти болотом).
    3) народ недаром пытается указать тебе на книги по ИИ. Знаешь есть возможность научить коробок спичек выигрывать у тебя в крестики нолики. Реально у коробка спичек. Принцип? Да вот примерно (но только примерно) та схема обучения, что ты описал. Ну поищи в общем.

    пока мысль ушла…

  96. 17
    Василий Волкогонов ответил:

    память ето файл, будет разработана система команд 12,15,1,id[0],10
    человек подошел х=12 у=15 далее 1 команда атаки, к id[0] 10 команда поражения, что то по етому типу, за 10 секунд я тебе не соченю рациональную и работающую систему команд,
    if id[0].attk>my.attk then x:=x-1; вот убегаем, ето самый банальный пример, там убегать будет не исходя из атаки, а смотреть количество жизней врага, силу, кучу других параметров и высчитывать свои шансы… если ты адекватин тоже поймешь что составить такие формулы дело минимум пары часов, да и вообще с таким подъходом объяснять тебе ничего не хочется, взгляни на название темы, на цель темы и если не нравится выйди.

  97. 16
    Антон Кононов ответил:

    так. фига тут тема разгулялась. ща буду читать)

    и самое главное: аффтар, огонь по-английски не fair, а fire.

    ну все ушел читать.

  98. 15
    Василий Волкогонов ответил:

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

  99. 14
    Василий Волкогонов ответил:

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

  100. 13
    Жека Кирпичев ответил:

    Да хватит уже языком болтать, делай!

    Расскажи все-таки, как ты будешь представлять правила типа описанного тобою?
    "он записывает в память, что если народ сильнее, то лучше не нападать"

    Только не общими словами, а конкретно – какие будут поля и каких типов у класса "правило", и т.п.

  101. 12
    Вячеслав Шиндин ответил:

    ой, тема то была про массивы )
    сори за офтоп

  102. 11
    Жека Кирпичев ответил:

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

    Очень рекомендую "Автономный искусственный интеллект" А.А.Жданова.

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

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

  103. 10
    Вячеслав Шиндин ответил:

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

  104. 9
    Вячеслав Шиндин ответил:

    про сложность алгоримтов
    про железо под специально сконструированные нейронные сети
    матчасть и Д.Кнута)
    ещё можно Совершенный Код и так далее.

  105. 8
    Вячеслав Шиндин ответил:

    правда после всего этого отпадёт идея разрабатывать что-то подобное…

  106. 7
    Сергей Шпикин ответил:

    Корованы можно будет грабить?

  107. 6
    Вячеслав Шиндин ответил:

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

  108. 5
    Вячеслав Шиндин ответил:

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

  109. 4
    Василий Волкогонов ответил:

    ну больето образное выражение, у каждого объекта есть атака, жизни, при сближении человека с огнем, огонь атакует с определенно силой и долей рендома, в зависимости от силы человечек будет присваивать определенное количество опасности, например fair[0].warning:=7 конечно опасность будет высчитываться по формулам, которые пока еще не выдуманны, после чего человек заносит себе в память, что fair[0] не есть хорошо, далее рассматриваем другую ситуацию, идет ему на встечу голодный человек, жрать охото пойдука я убью кого нить, встречает вас, избивает пока вы не ощутите опасность id[0].warning:=10, после чего если повезет он убегает, спит, гуляет, что то делает, изучает дальше мир…и тут ситуация, по всюду огонь, единственный выход закрыл маньяк id[0], проверяем уровень опасности всего что рядом, id[0].warning=10 fair[0].warning=7 решение, ломиться через огонь, далее есть желание реализоваться отношения, т.к. ето не отъемлемая часть нашей жизни, пока я вижу ето смутно, поетому буду образно говорить, идут 2 друга вместе, их сила практически удваивается и на встечу маньяк id[0], человечки оценивают свои силы и пытаются его вальнуть, в итоге id[0] вероятно убежит, он записывает в память, что если народ сильнее, то лучше не нападать, последняя часть сложновата для реализации, но вполне реализуема. Чувствуете тут интелект? Если нет ето ничего не изменит =)жесткие конкретизированные условия – ето условие вида fair[0]=нельзя подходить ибо смерть, в моем случае подходить можно, просто ето больно и можно умереть.
    и насчет алгоритма героев, ето точ то мне нудно, по какому примерно запросу искать? Все изгуглил не нашел…

  110. 3
    Василий Волкогонов ответил:

    Ну не совсем, Spore ето игра, а у меня программа, в которой можно будет только наблюдать…как вариант сделать 2 или более племен с разными вещами в мире, с разными взглядами и при их спаривании просто кусок записи одного племени складывается с какой то частью другого племени, тоесть смешивание для получения 3-го вида, нечто близкое к споре, но совершенно другое, скорее всего реализовываться будет наGDI графике, никаких спец еффектов и деретиксов не будет, да и людей в игру я не хочу пускать, наше общество только может взять калаш и расстрелять племена вынашиваемые мною месяцами,, а может и годами =)

  111. 2
    Антон Кононов ответил:

    первое. я ниче не понял. например что за такое: "ИИ, по принципу анализа мира, отбросив жесткие конкретизированные условия"

    второе. давай все-таки разделим твою реализацию на два этапа: 1) отрисовка мира, 2) ИИ

    итак.
    отрисовка идет пофигу как. хочешь отрисовывать клеточное поле из двумерного массива – нет проблем. Всякие там х+10 это пропускаем. Еще раз скажу – как там графика будет работать это определиться всегда успеешь.

    насчет ИИ.
    сила боли – это от лукавого. Смотри как сделано в героях: есть клеточная территория. Каждая клетка поля имеет тип (трава, огонь и все такое) и проходимость. Проходимость измеряется в пунктах движения (трава-1, снег-2, лава-2.5, болото-2.8, каменная дорога-0.4, и так далее, цифры тут не реальныеиз героев, а для примера). Обучением ИИ тут и не пахнет. Это простая задача на нахождения пути по клеточному полю, где известен вес (в данном случае проходимость) каждой клетки. Такие алгоритмы можно поискать и скачать уже готовые.

    Развивай далее твою идею. Где все таки обучаемость?

  112. 1
    Саттар Имамов ответил:

    а ля Spore решил сбацать?

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