Здравствуйте, в голову пришла очередная идея, написать ИИ, по принципу анализа мира, отбросив жесткие конкретизированные условия, в планах следующее:
Создать мир, запустить в него существо, мир будет состоять из земли, воды, огня и человекоподобных существ, изначально человек не будет иметь представления об огне, воде, других людях, если он подойдет к огню, испытает что то типа боли, в зависимости от силы боли что ли… он присвоит огню определенный уровень опасности, если у людей не будет еды, и найти ее они не могут, скорее всего они свернут с правильного пути и убьют кого нить сцелью отобрать пищу, при такой реализации уже появляется нечто немного напоминающее наш мир, интересно таким заняться, тем
более что ето только часть всего задуманного, в планах гораздо большее, теоретически я представляю как все ето реализовавывется, проблема только с созданием мира… Из идей есть одно:
сощдать 1 мерный массив который будет содержать значение от 0 до 2-х
0 – трава
1 – огонь
2 – вода (в будущем список расширится)
далее есловие если массив[1]=0 загружаем траву на х,у
следующую картинку загружаем на х+10,y+10 потом +20,+30, через цикл реалтзовать легко, го тогда получается что х,у- ето не клетка с картинкой, а только верхний левый угол картинки, при таком раскладе неудобно проверять столкновение объектов и сканировать массив, на какой клетке что стоит.
Какие методы создания мира вы быпредложили?
24 октября 2008 в 15:01
Я эту задачу поставил именно потому, что считаю ее практически нерешаемой – я хотел, чтобы и остальные это увидели.
Попробовать было бы интересно, но скорее всего, у меня бы ничего серьезного не получилось, да и времени нету :-/
24 октября 2008 в 15:01
по-моему автор книги считает эту задачу вполне решаемой. я вот только не заметил там "медленных" эффектов. Вроде бы расматривает только быстрые – типа идет бот, ударяется о дерево, думает, в следующий раз будет обходить.
24 октября 2008 в 14:05
пролистал не читая книжецу. много букаф =) будет время – изучу повнимательнее. Жаль в книге нет реальных примеров кода. Может, Жека, ты сам предложишь решение самим же собой поставленной задачи про существо и кнопки? Я хоть у тебя поучусь как писать надо
24 октября 2008 в 11:02
Конечно, перебор вариантов нужен – но фишка в том, что одним перебором вариантов ограничиться нельзя – я об этом и твержу.
Необходима куча всего другого, в чем и заключается сложность:
– Представление самих "вариантов"
– Определение применимости варианта
– Мысленное моделирование варианта и оценка полученного
– Сочинение новых вариантов
– Расширение базы знаний на основе опыта
– Поиск закономерностей в происходящем вокруг
– Поиск закономерностей в собственной базе знаний и обогащение ее найденными закономерностями
– И т.п.
Почитай книжку А.А.Жданова "Автономный искусственный интеллект" – я сейчас фактически пересказываю ее Очень интересная штука.
24 октября 2008 в 11:02
ща скачаю и посмотрю. =)
а, да! вот:
//4file.org/5543011
24 октября 2008 в 11:01
смотрю все затухли =) я продолжу
2Жека jkff Кирпичев:
"И чтобы в этом случае он начинал перебирать свою базу знаний в поисках того, что, будучи мысленно смоделировано, приводило бы к хорошему самочувствию."
опять мы вернулись к перебору вариантов. Как ты ни крути, а в итоге все действия бота/существа попадают под некий алгоритм, где на входе мы имеем карту мира, некий набор внешних раздражающих факторов, а на выходе мы должны получить одно или несколько действий, которые бот собирается сделать в соответствии с этими факторами.
То есть R = F(x1,x2,x3,…), где xi – факторы, R – результат (он может быть выражен и в пунктах удовольствия, например). При этом задача бота не просто вычислить R, а найти ее максимум, то есть максимизировать. R = Max(F(x1,x2,x3,…)).
Если часть факторов известна (карта, некоторые эффекты кнопок или еще чего), а часть не известна (например неизвестные действия кнопок, влияние движения на бота и др.), то перебор в данном случае пойдет по неизвестным факторам (например будет перебирать все возможные перемещения бота и вычислять R для каждого движения)
24 октября 2008 в 6:04
Этот тред метит стать эпическим
23 октября 2008 в 13:01
В общем приблизительно к такому подходу я лет 5 назад хотел прицепить простенькую нейронную сетку, искать в событиях от поведения юзеров закономерности в том, какие последовательности событий они генерят своими действиями, затем запоминать закономерности в обработке этих событий другим игроком, на этих данных и обучать нейронную сетку.
Чтобы компьютер умел сам определять закономерности, генерить подобные правила(в предыдущем посте обозначил как Rule), затем их придерживаться.
23 октября 2008 в 13:01
Уж не беспокойся, что такое динамическое программирование – я знаю Я, честно говоря, не понял, к чему ты это упомянул.
Правила это хорошо, и, конечно, их стоит писать на скриптовых языках итп, но это неинтересно. Иногда они эффективны, а иногда выясняется, что взаимодействие сотни умных правил приводит, например, к тому, что бот застревает в углу и начинает топтаться на месте, или к тому, что он начинает метаться от одного врага к другому, то решая, что лучше врезать вон тому, то что лучше врезать вот этому, и т.п.
Есть 2 способа решения таких проблем:
1) Математически сформулировать все требования, которым должна удовлетворять система правил (например, "система должна быть такой, чтобы бот всегда находил путь и убивал всех врагов за конечное время, если это вообще возможно"), и верифицировать их. Это безумно сложно.
2) Внедрить элементы адаптивности – чтобы бот все-таки стремился чувствовать себя хорошо, и чтобы он, например, чувствовал себя плохо, если давно не делал ничего полезного или не узнавал нового куска карты, и предвкушал хорошее самочувствие, видя за мостом новуюю пушку. И чтобы в этом случае он начинал перебирать свою базу знаний в поисках того, что, будучи мысленно смоделировано, приводило бы к хорошему самочувствию. Адаптивность должна заключаться в том, что он должен САМ находить закономерности между своими действиями, реакцией среды и самочувствием, а не ждать, пока ты придумаешь еще 100 правил и перекомпилируешь его. Это тоже безумно сложно.
23 октября 2008 в 13:01
Да, ты меня опередил. И как, у тебя что-нибудь получилось?
23 октября 2008 в 12:05
Алгоритмов по типу нахождения кратчайшеко пути, раскраски графа, задач коммивояжёра и подобных? хм. Есть интересная тема динамического программирования, когда за основу очередной итерации используются данные из предыдущей. Примеров кода в интернете полно. Вот тебе и чёткие алгоритмы.
А про код, что именно кодить? Думаю это последнее, что нужно делать. Сначала надо чётко представлять себе модель. А я понятия не имею какой нужен конкретный результат. Вон, в интернете полно примеров различного кода на различные темы, если уж на то пошло.
Да, кстати, я уже немного затрагивал выше тему событий и их обработчиков. Так вот на основе списков представлять поток событий по отношению к какому-либо объекту мира, и он обрабатывает конкретные события конкретными обработчиками, так же можно внести обработчики на группу последовальных событий, на определённое правило, например в определённом промежутке списка произошли определённые события и если они превысили какой-то определённый порог, товыполнить обработчик. Код в таком случае будет простой.
Сущности: события(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: другие обработчики размещать тут:
// …
}
Можно вынести в конфиг, оформить отдельным скриптовым языком и т.п.
Так же можно разделить логику на стратегическое поведение и тактическое (макро/микро контроль).
В общем придётся применять много разных алгоритмов, от нахождения кратчайших путей в графе, до выявления разного рода тупиковых для ИИ ситуаций.
23 октября 2008 в 7:05
Под четким алгоритмом я имею в виду детерминированный алгоритм, который дает гарантированно оптимальное решение. Нейронные сети итп под это не подходят.
Вячеслав, может, хоть ты выделишься из общей массы постеров этой темы и напишешь хоть строчку кода в подтверждение своих слов?
23 октября 2008 в 1:03
но в итоге, на обученой нейронной сетке подобный алгоритм будет выполнять решения довольно быстро, за сумму произведений, т.е. с линейной сложностью
23 октября 2008 в 1:02
так вот,
что, если алгоритм принимает N параметров, и возвращает M результатов.
Нужно научить алгоритм действовать так, чтобы на выходе получались ожидаемые результаты (для этого при обучении AI надо использовать какое-то количество шаблонных данных). фактически, получается простенький граф из N+M узлов c N*M дуг.
Не буду вдаваться в детали реализации, но приблизительно должно работать так: при прогонке данных через эту структуру получаем по M результатов, сверяем с шаблоном, соответственно корректируем нейроны. В итоге сетка подстраивается под определённый поток данных пропускаемых через неё.
Все результаты логируем, затем через определённое количество итераций смотрим как сильно коррелируется результат от ожидаемого и правим соотвественно не параметры нейронов, а вносим новый нейрон в структуру из N+M узлов, в то место, где результат ведёт себя не стабильно и сильно искажается при небольшом изменении входных данных. В общем встряхиваем сетку, и по новой обучаем. В результате в этом месте многомерная функция начнёт вести себя гибче, и будет лучше подстраиватся под ожидаемый результат.
В итоге, пропуская через подобную структуру маршруты игровых персонажей наделённых AI, можно заставить их выбирать правильные пути. И под каждую игровую карту можно подготовить разные нейронные сетки уже обученые до какого-то базового уровня, с возможностью их приспосабливаться дальше, к игрокам(людям) играющим на этих картах.
PS: Хоть алгоритм баян, но почему-то вспомнился)
23 октября 2008 в 1:02
задаться бы ещё целью, оценить сложность подобного алгоритма на определённых типах задач..
23 октября 2008 в 0:04
я вот тут задумался о коррелируемости получаемых алгоритмом значений, и в зависимости от величины корреляции изменять структуру графа, для более рационального приспособления сетки под решение определённой задачи…
23 октября 2008 в 0:04
можно было бы тут как на доске, рисовать картинки, схемки, и постить вместе с теском сообщения, было бы удобно вести обсуждения + сопровождать их чертёжиками )
23 октября 2008 в 0:03
Одно другому не мешает. Там, где четкий алгоритм возможен – его и надо использовать. Есть случаи, когда он невозможен и адаптивность необходима.
23 октября 2008 в 0:03
алгоритм по определению чёткий
23 октября 2008 в 0:01
хм, а не думали как-нибудь абстрагироваться от всяких болот, существ и прочего и просто перейти к матчасти, алгоритмике и прочему подобному?)
а то образно всё конечно же красиво, но оно образно, а не формально…
22 октября 2008 в 16:00
#87 > Зачем увеличивать количество кнопок? Себе усложнить?
Ну… вообще-то это было дано в первоначальной задаче. Той, которую Вы взялись решать. Если Вы считаете, что эта задача слишком сложна, то не надо говорить, что Вы ЕЕ решили, приводя решение для весьма упрощенного варианта. Это не всегда верно.
22 октября 2008 в 15:03
Не составите. Никогда. Потому что есть разница между нормальным документом и бредовым набором отрывочных сообщений.
—
Я еще раз повторяю, тут обсуждался не проект, а проектирование мира, никто полное описание всего задуманного не выкладывал и не собирается
Аргументировать слабо?
—
тоесть ты не согласен что понятия не имеешь обо мне и проекте? Странный текст от тебя исходит
>>сделать из файла память
Зачот! Жжоте.
—
Вы не умеете содержимое массивов и переменных сохранять в файл, а при старте игры считывать? Ета часть вашего сообщения для меня не адекватна.
>>кроме бессмысленной критики от тебя ничего не поступило, следовательно удалить надо тебя
1. Аргументированная критика всегда имеет смысл.
2. Удалить меня из этой группы никто не сможет. Невероятно, но факт.
—
Оргументов небыло, были только догадки, а точнее вердикты, которые небыли осонаны на фактах, я не говорил удалиться тебе из группы, мне ето не интересно никак, имелось ввиду удаление из темы.
>>зря вконтакте нет репутации
А была бы? Дабы повлиять на чью либо репутацию нужно сначала иметь хоть какую-то свою
—
Вполне возможно влиять и с нейтральной репутацией.
Кстает прочитал статью про проект майкрософта, питомцы вроде…не видели такие аналоги для делфятников?
22 октября 2008 в 15:00
ну я тут подумал.
короче первые сколько-то существ вымрут в болоте (они же не знают что заходить туда опасно).
Ну и как итог получим неподвижное вечно кушающее существо (раз в 20 сек =) с раскрытым зонтиком.
Это нормальный результат адаптации к той среде, что ты привел.
Разумеется в другой среде адаптация будет другой (сколько вымрет существ там на опытах тоже непонятно).
теперь про марсоход. у марсохода нет задачи прижиться в некоторых условиях. у него другая (исследовательская) задача. А эта задача не из области программирования, а из области конструирования. Форма шасси марсохода окажет куда большее влияние на исход всей кампании, чем программа (я не говорю что программа не важна). Забор грунта, проб атмосферы и прочее тоже из области конструирования.
Согласен, что я, походу дела тоже перегибаю, но чем-то мне это теперь все напоминает рассказ Станислава Лема "Непобедимый". =) читал? если читал то ты поймешь про какой ИИ я говорю.
22 октября 2008 в 14:05
Если задачи такого рода кажутся тебе нереалистичными, то представь себе, что ты программируешь полностью автономную систему управления марсоходом, и что у марсохода есть 5 тысяч датчиков – датчики наклона разных его частей, давления воздуха, силы и направления ветра, химического состава ветра, химического состава почвы, температуры почвы, силы окружающего магнитного поля, 1000 ячеек зрения, слух, температура всех двигателей, загруженность каждого из 32 процессоров, и т.п.
Еще у марсохода есть тысяча кнопок – включение различных двигателей его механических частей, включение освещения, выдвижение зонда для забора пробы почвы или воздуха,и т.п.
Разумеется, бессмысленно вообще НЕ начинять марсоход алгоритмами поиска пути, численного интегрирования итп. Но факторов настолько много, что одними точными алгоритмами тут не обойтись! А взаимодействие факторов и реакция среды могут оказаться – и окажутся – непредсказуемо сложными и начиненными заранее неизвестными закономерностями. Вот тут-то и пригодится ИИ.
22 октября 2008 в 14:05
Задача, которую я предлагаю – это просто квинтэссенция необходимости самообучения и адаптации. Этим она и интересна: можно абстрагироваться от того факта, что часть задач ты будешь все-таки решать точными алгоритмами, и заняться собственно адаптивностью.
22 октября 2008 в 14:04
> Жека, дорогой мой, что это за каша в голове?
Я привел тебе эти примеры, чтобы ты понял, что существо не знает, что делают кнопки, и они могут делать самые неожиданные вещи, и что реакция среды зависит не только от нажатий кнопок, среда может меняться сама по себе, и существу придется адаптироваться к ней. И что любая твоя модель – модель, что у кнопок есть веса, или что существуют удачные последовательности кнопок, или что кнопки можно разбивать на быстрые и медленные – будет неполной.
Хорошо, если примеры последствий выбора того или иного действия в реальности тебя не вдохновляют, давай формальную и непонятную модель.
Пусть есть 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 секунд идет дождь, и если существо забыло открыть зонтик, то ему становится плохо.
Как твоя модель поведет себя, будучи запущенной с такой средой?
22 октября 2008 в 13:04
ой, товарищи, Жека и Павел, а вы не замечаете, что в ваших рассуждениях ключевую роль играет волшебное слово "ДОГАДАЕТСЯ".
КАК я вас спрашиваю существо догадается? Догадаться можно ТОЛЬКО на опыте. Думаете ребенок полутора лет не станет трогать чайник если он до этого увидел как обожглась мама или папа? станет! чтобы проверить.
А тем более КОМПЬЮТЕРНОЕ существо. Ему вообще в принципе догадываться нечем. Какие еще терминаторы и терминаторы 2?
"Догадываться" для компьютера заменяют два термина: "опыт" и "выбор варианта". То есть: нет опыта – будет тыкать во все подряд, будет умирать в болоте, будет чахнуть без домика и т.д.
Идем далее. Цитата: "Пусть одна из кнопок означает достать пилу, другая означает дергать рукой туда-сюда". Вы чо издеваетесь? 0_о
Это ж компьютер. Речь идет о некой среде обитания компьютерного существа. Законы мира известны заранее (иногда и карта тоже). Поэтому что именно делать с пилой ("дергать туда сюда") существо знает и не обучаясь.
Можно конечно программеру испортить самому себе жизнь и потратить время на обучение существа и этому (сколько их перегибнет при опытах неизвестно, но думаю не менее 6 цифр в числе), потому что "стукать себя по голове" пилой никто еще не отменял. Допустим (предположим) что наши предки произошли от обезьян. Вы хотите СМОДЕЛИРОВАТЬ их много_миллионо_летнюю эволюцию? или все-таки у нас тут речь идет о Искусственном Интеллекте с правом выбора?
далее
Цитата: "начать двигаться влево, начать поворачиваться".
Жека, дорогой мой, что это за каша в голове? При чем тут это? Алгоритм движения никак не связан с ИИ. Алгоритм – он алгоритм и есть. Своего рода класс или некоторая функция, которая на входе получает карту местности (или ту часть что видна в данный момент) и на выходе получаешь координаты пути, по которому идет движение. Тут нет ИИ. Просто алгоритм (он сам рассчитает и поворот и скорость).
ИИ начинается (опять таки притянем за уши) возможно когда существо обдумывает а стоит ли вообще сходить с места.
PS Не впадайте в маразм. Давайте не будем ИИ для игрушки (а вроде с этого начинали) доводить до моделирования движения и столкновения элементарных частиц. Это вы перегнули оба
22 октября 2008 в 13:04
те же шахматы. там же компьютер не "ДОГАДЫВАЕТСЯ" о своем следующем ходе, а просто вычисляет по формуле, либо берет из готовой БД с ходами.
22 октября 2008 в 13:04
#84: не могу не ответить.
Зачем увеличивать количество кнопок? Себе усложнить?
Надо наоборот упрощать, уходить на макроуровень.
То есть не надо дробить действия на более мелкие действия. Не надо "вскипятить чайник" дробить на "налить воду","открыть газ","зажечь спичку" и т.д.
К чему это? А тем более компьютеру?
22 октября 2008 в 12:04
> Что я хотел этим сказать? А то, что все эти ваши "медленные" и "быстрые" эффекты один фиг для программиста – ПЕРЕБОР ВАРИАНТОВ.
Конечно, это перебор вариант… другое дело, что при увеличении числа кнопок хотя бы до восьми и увеличении возможной длительности хотя бы до 6 шагов, этих вариантов становится весьма много. И предложенных 100000 шагов на обучение становится ой как мало. Вопрос именно в том, как ИИ будет выбирать те варианты, которые имеют смысл, чтобы их опробовать.
ЗЫ Наша вселенная – это тоже всего-лишь последовательность состояний элементарных частиц. Но перебрать все варианты весьма тяжело.
22 октября 2008 в 11:01
О! Видишь, как расширяется твоя модель? Начиналась с весов кнопок, потом стал перебор последовательностей кнопок, теперь ты каждую кнопку разбил на две – "быструю" и "медленную". Чуешь, чем пахнет? Чуешь, что после еще пары замечаний модель станет необъятной и нереализуемой?
Вот тебе первое замечание:
Пусть одна из кнопок означает "начать двигаться влево", а еще одна из кнопок означает "начать поворачиваться по часовой стрелке". При этом существо находится в среде, в которой есть болото – и чем дальше оно заходит в болото, тем ему хуже, надо выбираться – а при этом еще и кушать хочется, и надо иногда нажимать последовательность кнопок "открыть рюкзак, достать бутерброд, откусить, откусить, закрыть рюкзак". Как твоя модель с этим справится?
Вот еще одно замечание: Пусть одна из кнопок означает "достать пилу", другая означает "дергать рукой туда-сюда", и есть кнопки для хождения и т.п. Тогда существу станет в долгосрочной перспективе гораздо лучше, если оно догадается напилить деревьев и построить себе шалаш или хотя бы зонтик, чтобы защититься от периодически возникающих дождей – хотя действия по построению шалаша у него и будут вызывать ухудшение самочувствия из-за усталости.
А как твоя модель справится с этим?
Какие варианты тут верные, а какие нет?
22 октября 2008 в 10:00
#81: да блин так же. я уже привел вам пример программы. все её захаяли. но главное принцип:
итак, начнем
1) у каждой кнопки есть быстрый и медленный эффект
2) допустим существо может вызвать любой из них:
а) например нажать кнопку А и тут же сразу В – получим: быстрый эффект А + быстрый эффект В + быстрый эффект АВ + медленный эффект А + медленный эффект В + медленый эффект АВ
(медленный эффект будет полюбому – время то не стоит на месте)
б) или нажмем А, подождем, нажмем В, еще подождем – получим: быстрый эффект А + медленный эффект А + быстрый эффект В + быстрый эффект АВ + медленный эффект В + медленный эффект АВ
то есть ОДИН из ШЕСТИ вариантов.
тут придется как в физике упрощать модель.Пример: тут кто-то выше мне писал про последовательность кипячения чайника, зазигания газа и все такое. Дак вот у кнопки "ОТКРЫТЬ ГАЗ" нет быстрого эффекта, поэтому во многих случаях общая формула из 6 неизвестных сокращается на 1-2 неизвестных (или больше в зависимости от ситуации). Почему у "ОТКРЫТЬ ГАЗ" нет быстрого эффекта? А вот попробуй открыть газ и тут же закрыть. Много изменилось? То-то и оно. Только медленный эффект есть у кнопки "ОТКРЫТЬ ГАЗ" (ну и быстрый эффект АВ, если в качестве В будет кнопка "ЗАЖЕЧЬ СПИЧКУ", в таком случае сумма медленного эффекта "ОТКРЫТЬ ГАЗ"+быстрый эффект "ЗАЖЕЧЬ СПИЧКУ" даст быстрый эффект "ВОСПЛАМЕНЕНИЕ")
Разумеется в общем случае подобная задача вряд ли будет решена если даже мы люди не можем четко сформулировать что же там такое получилось после многих нажиманий. И это я рассмотрел только 2 кнопки
Теперь возвращаемся к компьютерной модели.
Допустим у нас есть 2 кнопки А и В. Жать на них можно быстро и медленно.
Внесем в эту систему еще 4 кнопки (обозначим их как А', B', AB, AB' – здесь штрихом я пометил медленный эффект).
Теперь задача нахождения лучшей комбинации из двух кнопок автоматически превращается в нахождение лучшей последовательности из A,B,A',B',AB,AB'
Что недалеко ушло от моей реализации. Пофигу что у меня рандом (честно не знаю как просто и весело сделать перебор всех вариантов).
После того, как результаты всех опытов проведены вычеркиваем те, которые заведомо неверные (например A' не может быть нажата раньше A).
Итого для двух кнопок: максимум 6!=720 вариантов (из которых я подозреваю только треть имеет смысл).
Что я хотел этим сказать? А то, что все эти ваши "медленные" и "быстрые" эффекты один фиг для программиста – ПЕРЕБОР ВАРИАНТОВ.
То, что вы называете ИИ в данном случае некий алгоритм, который будет вычеркивать неверные варианты.
22 октября 2008 в 0:05
#77 В данной ситуации все достаточно просто… Кроме этого "опыта", ставим еще пару:
1) Жмем B и смотрим – если эффекта не было, то скорее всего верен один из двух других вариантов.
2) Жмем A и ждем достаточно долго – если эффект есть, то угадали, нет – скорее всего это результат комбинации.
И интересно написать как раз такой ИИ, который сможет самостоятельно проводить такие эксперименты, а главное – решать, какие эксперименты надо провести. Я не представляю, как это сделать
22 октября 2008 в 0:04
Советую искать англоязычные маны по словам
нейронные сети
генетические алгоритмы
//www.gotai.net/
//habrahabr.ru/blogs/artificial_intelligence/40...
//cs.gmu.edu/~eclab/publications.html
22 октября 2008 в 0:00
ну дак ответь мне смотря на #76 что должно подумать существо? вот оно нажало А, потом В. что-то с ним случилось (плюсовое или минусовое не важно). Как теперь существо поймет что это было такое? Какой из трех вариантов #76 оно выберет и запомнит?
спрошу еще проще: ты бы какой выбрал? (оставим существо немного в покое).
то есть наживаем А, потом В. получаем эффект. Теперь вопрос лично тебе, Жека: какой вариант ты выберешь? что это было?
21 октября 2008 в 23:05
Блин, Антон! Так в этом и задача – интеллект написать, а не фигню, которая перебирает последовательности!
Теперь-то осознаешь, насколько это сложно?
21 октября 2008 в 23:03
#76: "неизвестно, результат какого нажатия мы получаем"
и как в такой ситуации бедному существу быть? я в смысле как такую фиготу запрограммировать то? если неопнятно что сработало, то и реакция на это "непонятное" будет непонятная.
%-(
нееет. пожалуй задержки лучше исключить…
21 октября 2008 в 23:01
#75 В предложенных условиях вариантов настолько много, что все их перебрать нереально. К тому неизвестно, какой из вариантов выбирается при одном нажатии кнопки. Например, если есть 2 кнопки A и B, то после последовательного нажатия A, а потом B, неизвестно, результат какого нажатия мы получаем. Возможные варианты:
1) эффект от A с задержкой
2) эффект от B немедленный
3) эффект от последовательного нажатия обеих кнопок
А ведь таких вариантов гораздо больше, т.к. количество возможных последовательностей велико.
21 октября 2008 в 22:05
Лямбда, я назову его Лямбда…
21 октября 2008 в 22:05
#68 Жека: вы сговорились что ли?
зачем писать если не понятно что писать?
ты пояни мне в чем же я неправ (я про перебор вариантов)
21 октября 2008 в 22:01
Ы, ептыть.. Я надеялся, ты прогу про существо написал…
21 октября 2008 в 22:00
Если непонятно будет-я перевыложу по нормальному)))
21 октября 2008 в 21:05
Давай, показывай.
21 октября 2008 в 21:05
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
21 октября 2008 в 21:01
Я накидал уже немного)))Кто хочет посмотреть??Я выложу)))
21 октября 2008 в 20:02
Антон, повторюсь еще раз – общие рассуждения тут бесполезны – слишком легко за словами упустить из виду необходимость решения каких-то очень сложных задач и решить, что "тупо перебираем все последовательности", "максимизируем вес кнопки" или еще что-нибудь в этом роде. Ты и в этом посте упустил множество вещей.
Писать надо! Только тогда станет что-то ясно.
21 октября 2008 в 19:05
#59 Жека jkff Кирпичев:
"Конечно, существу придется иногда экспериментировать и жать кнопки случайно."
вот оно! представим некоторое подопытное реальное существо (просто представим). Найдя хоть одну последовательность, которая в итоге дает плюсовой результат, существо на этом успокаивается и использует эту последовательность чтобы нормально себя чувствовать (кстати, так живут большинство людей, которые работают на нелюбимой работе, но нехотят сменить ее ради некоторой другой, но более доходной, потому что работа сейчас – это синица в руках…).
Ну дак вот. Предположим что существо наткнулось на последовательность (или просто одну кнопку), которая дает заметный плюс. И жмет последовательность не переставая.
Нам как исследователям приходится иногда тыкать существо иголкой в зад, чтобы оно отвлеклось и начало искать другую последовательность. Понятно уже, что как только найдет другую – будет использовать её.
Тыкаем снова. Снова ищет…. и т.д.
Если количество наших тыканий ничем не ограничивается, то lim (предел) таких поисков приведут нас опять таки к ПЕРЕБОРУ всех вариантов нажатия на кнопки.
PS Насчет того, что существо может погибнуть при опытах.
Учитывая поставленное вами условие задачи, оно может и погибнуть. Это своего рода риск. Существо же не знает (именно НЕ ЗНАЕТ, потому что оно должно обучиться), что некоторая последовательность приведет к смерти.
=) узнает когда уже будет поздно
21 октября 2008 в 19:01
>>если я составлю диздок
Не составите. Никогда. Потому что есть разница между нормальным документом и бредовым набором отрывочных сообщений.
>>Бред, ты и понятия не имеешь о идеи и тем более о знаниях, которые нормальные люди преобретают, а не сразу все знают
Аргументировать слабо?
>>сделать из файла память
Зачот! Жжоте.
>>кроме бессмысленной критики от тебя ничего не поступило, следовательно удалить надо тебя
1. Аргументированная критика всегда имеет смысл.
2. Удалить меня из этой группы никто не сможет. Невероятно, но факт.
>>зря вконтакте нет репутации
А была бы? Дабы повлиять на чью либо репутацию нужно сначала иметь хоть какую-то свою
P.S. Читать Розенталя перед сном.
21 октября 2008 в 18:01
#14: нет не "желания", а "знания" и самой "идеи", что вы вообще понимаете под "проф языком"?
—-
Бред, ты и понятия не имеешь о идеи и тем более о знаниях, которые нормальные люди преобретают, а не сразу все знают
—-
#17: память – это не файл! в школу – учить матчасть. Про пост вцелом – АМ
—
Если твой ИИ называемый мозгом не способен сделать из файла память, ето твои проблемы, как ты жизненный опыт будешь хранить? Из программы выходят и заходят, надо где то сохранять информацию, кроме бессмысленной критики от тебя ничего не поступило, следовательно удалить надо тебя, а тему оставить в покое, она вызвала интерес к небольшим программам с елементами ИИ. Ты же вызвал только бурю неготивных емоций, зря вконтакте нет репутации.
21 октября 2008 в 18:00
согласен)))
21 октября 2008 в 17:03
Дмитрий analizer Потапов извините, но какое вам дело до идеи? Я сюда пришел с вопросом, а не "оцените мою идею" она вам по барабану должна быть, если я составлю диздок и выложу его тут ответ на массивы я бы точно не увидел, первый месяц все бы читали, второй комментировали.
Всем спасибо за ссылки, пойду их читать и дочитывать тему.
21 октября 2008 в 14:00
Я сам нуб-но есть вещи,в которых я лучше остальных и я всегда помогаю всем,кто меня просит,если я вижу,что он чего-то хочет)))Так что не надо ругаться на нас!!Мы тут обсуждаем просто,как при помощи Ооп написать пародию на искуственный интелект!!!!
21 октября 2008 в 11:03
Ну а как же иначе они узнают, что они нубы и что им еще многому надо научиться?
21 октября 2008 в 11:02
> а как же еще существо узнает о "последовательности кнопок" не нажав в один прекрасный день её случайно?
Конечно, существу придется иногда экспериментировать и жать кнопки случайно.
> в итоге результат какой будет: "перебираем все возможные сочетания всех кнопок и выясняем какие сочетания лучше"
Ага, только от того, в каком порядке существо будет их перебирать, будет зависеть его жизнь. Ты ведь, чтобы включить чайник, не перебираешь все возможные сочетания действий {взять чайник, чиркнуть спичкой, включить газ, выключить газ, поставить чайник на плиту, снять чайник с плиты}. А если будешь перебирать – то можешь доперебираться до того, что задохнешься газом.
21 октября 2008 в 11:02
>>хаятель нашелся =) тебя веселит что ли принижать нубов
меня оскорбляет то что нубы вываливают свой словесный понос в общественных местах
21 октября 2008 в 9:05
#54: "Да… давно я не хаял болтунов в этой группе…"
хаятель нашелся =) тебя веселит что ли принижать нубов? все ж там были
всякие твои "респект, уважуха" – это сам в школу иди
теперь по существу:
дело было вечером, хотелось спать – и как следствие не так увидел поставленный вопрос. Ладно, исправимся.
#47: "Просто догадываться о полезности кнопок – в этом ничего интересного."
а как же еще существо узнает о "последовательности кнопок" не нажав в один прекрасный день её случайно?
в итоге результат какой будет: "перебираем все возможные сочетания всех кнопок и выясняем какие сочетания лучше"
так что ли?
ну поясните мне если я не понимаю
21 октября 2008 в 8:04
велосипедисты
//www.linux.org.ru/view-message.jsp?msgid=2318220
А вот это мне особенно нравится (потому что Scheme):
//www.linux.org.ru/view-message.jsp?msgid=2993347
21 октября 2008 в 8:00
Я подумаю и прикину,че моно сделать))Я не среднячок даже,но мож что-нить да выйдет)))Система будет не офигенной и не продвинутой,но сойдет)))Мне нужно 2 дня)))
21 октября 2008 в 0:05
Да не, удалять не буду – все надеюсь, что кто-нибудь таки попытается написать "существо". Ежели так, то будет интересно.
21 октября 2008 в 0:04
Да… давно я не хаял болтунов в этой группе…
Постов много, буду краток – извините если кого забыл или пропустил. Итак:
#1: это не "идея" – это "словесный понос", ни формулировки нормального вопроса, ни практической сути, ни нормального описания – просто /dev/urandom брошенный на словарь Ожегова. Здесь и далее о всех постах топикстартера – КГ/АМ.
#6: после меня видимо стало модно употреблять эту цитату
#9: хоть один нормальный человек нашёлся…
#11-#13: браво, респект и уважуха, честно, вам бы ещё права модерские, авось весь этот флуд бы зарубили на корню.
#14: нет не "желания", а "знания" и самой "идеи", что вы вообще понимаете под "проф языком"?
#15: а чего его его формировать-то? КГ – оно и есть бесформенное нечто
#16: можно было ограничиться только первой фразой ))
#17: память – это не файл! в школу – учить матчасть. Про пост вцелом – АМ
#21: "классы более критичны для реалтайм" – тоже в школу…
вопщем, флуд и моральный террор…
можете удалять
21 октября 2008 в 0:01
***оформить подписку на создание мира при помощи массивов***
20 октября 2008 в 23:04
По-моему, RoboWar недавно уже обсуждали… но мне кажется, что тут она тож будет в тему:
//en.wikipedia.org/wiki/Robowar
Ну, и далее по ссылкам
ЗЫ Думаю, что это проще, чем куча разных кнопок, которые фиг знает, что и когда делают.
20 октября 2008 в 23:04
И еще вот… Террариум для животных:
//offline.computerra.ru/2002/466/21144/
20 октября 2008 в 23:03
Ну, извини, это слишком неуниверсально. Просто догадываться о полезности кнопок – в этом ничего интересного. А вот догадаться о целых полезных *действиях* (последовательностях кнопок), причем в определенном контексте – это интересно. Либо я не понял, что твоя прога делает. Может, исходник покажешь?
Давай все-таки так: Попробуй написать программу, которая выживет в моей среде; программа должна быть классом, реализующим такой интерфейс:
interface Being {
int feelAndReact(int feeling);
}
Протокол такой: Создается объект типа Being. Затем каждую "единицу времени" у него вызывают feelAndReact, передавая ему его текущее "состояние" в качестве параметра feeling.
Существо должно вернуть число, означающее следующее:
0 – ничего не делать
k, где 0<k<10 – нажать кнопку k
k, где -10<k<0 – отпустить кнопку k
Существу дается 10000 ходов на обучение и еще 100000 ходов на выживание.
"Счетом" программы считается среднее арифметическое ее самочувствий за ходы выживания.
Параллельно в той же среде несколько раз запускается программа, которая действует случайным образом.
А потом сравниваем счет твоей программы и средний счет случайной программы, и смотрим, в чью пользу разница, и насколько эта разница велика по сравнению со стандартным отклонением для случайных программ.
Согласен?
20 октября 2008 в 23:03
Ах да: все это проводится на нескольких моих программах, симулирующих "среду".
20 октября 2008 в 23:03
Хотелось бы код
Просто, по-моему, ты не совсем правильно понял задачу. То, что здесь показано, действительно, программируется в 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! Так вот существо должно найти эту мега-цепочку кликов и жать именно ее.
20 октября 2008 в 23:03
Не, не пойдет. Условия были такие:
"Соответственно, окружающая среда может в любой момент измениться под действием нажатых кнопок. Например, может оказаться, что если нажать кнопку 3 и кнопку 5 одновременно, а потом нажать и отпустить кнопку 7, то существу станет хорошо на 5 ходов, а потом состояние начнет ухудшаться, а что кнопку 2 нажимать ни в коем случае нельзя, т.к. если ее нажать, то существу становится очень плохо. Никаких этих законов существо изначально не знает, ему придется о них догадаться.
Попробуй написать программу, которая будет "мозгом" этого существа и будет стремиться поддерживать его самочувствие на достойном уровне."
Т.е.
1) от последовательности нажатия кнопок зависит результат;
2) эффект от нажатия кнопки может проявляться не сразу;
3) несколько кнопок можно нажимать одновременно – при этом может появляться новый эффект.
Это дает нам гораздо большее число правил, нежели 8 в случае с единичным эффектом каждой кнопке (что реализовано). При том количество правил и их эффекты заранее неизвестны, и неизвестно, когда они проявляются.
Возможный аналог этого в реальном мире это:
– налить чайник водой
– поставить на плиту
– выключить, когда чайник закипит
– попить чаю.
Ошибка в последовательности действий может стоить жизни.
20 октября 2008 в 23:00
во! чиста ради себя потешить написал я самообучающееся существо и кнопки.
качать экзешник с примерами тут:
//narod.ru/disk/3304090000/jaba.zip.html
кнопок сделал 8, но так как это массив, то надо будет сделать больше – легко)
думаю 8 хватит для примера.
в качестве ИИ использовал тупо самообучающуюся машину тьюринга. Код занял примерно 100 строк. Из них сам ИИ только три строки. Остальное – марафет (типа проверка на правильность ввода данных, save/load и все прочее)
20 октября 2008 в 23:00
кто не понял – это ответ на пост #29 =)
20 октября 2008 в 21:03
Ну вааще мне такой замут нравится….Если отбросить то,что программированием я занимаюсь год,то мне тоже уже много раз приходила в голову эта мысль))Такие вещи делаются:
1)Путем введения условной координатной сеткой
2)Путем циклических проверок по (максимум) 3 мерному массиву
3)я думаю,все поняли,зачем тут цикл)))
4)Там последующие условия влияют на "воспитание" героя и на реагирование….
Проблемы:
1)Ареал взаимодействия будет не слишко большим
2)Так как при компилировании цикл в цикле 4 раза(при 4-х мерном массиве) и при структуре сравнения If…Then…Else… будут тормозить систему до безобразия
3)Система не практична и требует много времени для написания и отладки
Преимущества
1)Происходит углубление в дебри ООП
2)Лично мне процесс написания доставляет огромное удовольствие
3)Данная система очень универсальна-и находит применение почти в любой моей программе
Вот так!!Прошу на меня не ругаться,я еще новичок)))
20 октября 2008 в 21:00
а! во! нашел статью которую искал про поиск пути:
//dbasic.narod.ru/docs/algpath.htm
20 октября 2008 в 21:00
Автор темы, почитай вот это, будет интересно:
_ttp://ru.wikipedia.org/wiki/Интеллектуальный_агент
20 октября 2008 в 20:05
Василий, ты мне понравился своим напором.
Ну ладно подскажу.
Заходим в группу "Алгоритмы&Исходники" в списке ссылок находим "Разработки игр".
Через минуту находим такую подборку:
//www.gamedev.ru/articles/?sect=7
Там есть среди прочего ссылка на алгоритм поиска пути (включая поиск пути через препятствия как огонь, маньяки и прочее):
//www.gamedev.ru/articles/?id=70121
Алгоритм поиска пути А* (А-звездочка) тоже можешь поискать в нете.
20 октября 2008 в 20:05
#29 Жека jkff Кирпичев: фигасебе отжиг =)
но про существа и кнопки – это идея)
20 октября 2008 в 20:02
Да, кстати, мне тут подсказывают разницу между интеллектом и разумом. Интеллект – это конкретный мозг, а разум – это осознание окружающего мира.
20 октября 2008 в 20:01
Как-то давным давно у меня было представление, что можно взять 3д массив, представить каждую точку массива как опять же 3д массив и так до бесконечности.. или же ограничить его вложенонсть и вложенность каждой вложенности и приспособить эту структуту под решение определённых задач. Но тут проблема, такая структура требует огромных ресурсов для приспособления(обучения), она не рациональна, если же сравнить с мозгом человека, то в нас нейронная структура cо своими синапсами, размерами и всеми прочими коэффициентами сама формируется с развитием человека, а хим-процессы протекающие по ней и есть процессы предугадывания каких-либо действий, и обуславливающие наше поведение. Вообще тема сложная и малопонятная, скорей всего я во многом заблуждаюсь) так что просто оборву мыслю…
Остановлюсь на вопросе, где грань, между интеллектом и разумом, в контексте вышеописанных постов?)
Кстати, любой рефлекс (например, стремление мотылька на свет) можно отнести к простейшему искуственному интеллекту.
PS: В общем изначальную тему обсуждения свернул нечайно нетуда, сори)..
PPS: ушёл за пивом))
20 октября 2008 в 20:00
Жека jkff Кирпичев Я могу реалтзовать то что ты хочешь, но опять же ето будет основано на условиях, ты по всей видимости хочешь использовать нечто другое, наверное человеческий мозг подключенный по проводам, разум ето наверно способность мыслить, машина максимум может анализировать и выбирать один из вариантов, не может придумать что то свое, например в моей задумке они никогда не додумаются перелесть через забор и бегать за екраном создавая там новую цивилизацию, построить пушки, разнести забор и захватить территорию, разумвроде как создать невозможно, по крайней мере на данный момент…
20 октября 2008 в 19:05
"ИИ – это программа, которая САМА может догадаться, что если враг близко, то надо достать оружие.", опять же не убедительно.
С моей точки зрения, ИИ скорей похоже на сложную формулу получающую на входе числа и на выходе тоже. Обучение ИИ – это как раз таки процесс корректировки коэффициентов этой самой сложной формулы. Формула может иметь множество входных данных, множество неизвестных, и множество выходных вариантов, но несколько ограниченных, например, определённым диапазоном значений (есть ещё понятие: программирование в ограничениях).
И всё это я считаю входит в понятия ИИ.
20 октября 2008 в 19:05
интеллектуал получивший образование и разумный философ…
для меня разное
20 октября 2008 в 19:05
в принципе можно их считать синонимами)
но почему-то слово "разум" у меня в голове прокручивается, как что-то бОльшее, чем "интеллект"
20 октября 2008 в 19:05
Хорошо, значит, понятие искусственного интеллекта – скучное, оно меня не интересует, и обсуждать в нем нечего. Меня интересует только понятие искусственного разума.
20 октября 2008 в 19:04
Василий, я ведь не из вредности нападаю. Просто ты до сих пор отделываешься общими словами. Я пытаюсь уговорить тебя *как следует* задуматься над этой задачей. ИИ – это не набор правил вида if(враг_близко) then (достать оружие). Такой набор правил – это программа, решающая одну конкретную задачу, и обучаться такая программа НЕ МОЖЕТ. ИИ – это программа, которая САМА может догадаться, что если враг близко, то надо достать оружие.
ИИ должен начинать С НУЛЯ. Если у него изначально есть знания о том, что такое враг, что такое оружие, и как его достать – это не ИИ, а просто набор if/then/else и жестко фиксированных алгоритмов.
Давай по-другому. Вот ты – человек, у тебя есть интеллект. Ты знаешь, что если хочется пить, то надо пойти на кухню и налить себе воды из кувшина, который стоит на столе. В какой форме представлено это знание у тебя в голове? У тебя же нет в голове программы на паскале, в которой написано if(me.is_thirsty) then begin goToKitchen; pourWater end. У тебя в голове есть сложнейшая система, которая неясным до сих пор никому образом способна представлять такие понятия, как "хочется", "пить", "ходить", "кухня", "кувшин", "наливать", которая знает, как управлять твоими мышцами и как интерпретировать сигналы от твоих органов чувств, как интерпретировать несколько десятков миллионов сигналов от твоих глаз и как догадаться, что ты видишь именно кувшин; знает, что если не попить, то умрешь от жажды; знает (инстинктивно), что умирать нехорошо, …
Конечно, симулировать настолько сложную систему – абсолютно непосильная задача (тем более на паскале), но попробуй сделать что-то попроще.
Попробуй написать программу, которая симулирует поведение мнимого существа.
У существа есть один орган чувств, чувствующий, насколько существу "хорошо" – целое число от -10 до 10.
Перед существом находится 10 кнопок, каждую из которых оно может включать или выключать в любой момент – таким образом существо может "управлять" окружающей средой.
Соответственно, окружающая среда может в любой момент измениться под действием нажатых кнопок. Например, может оказаться, что если нажать кнопку 3 и кнопку 5 одновременно, а потом нажать и отпустить кнопку 7, то существу станет хорошо на 5 ходов, а потом состояние начнет ухудшаться, а что кнопку 2 нажимать ни в коем случае нельзя, т.к. если ее нажать, то существу становится очень плохо. Никаких этих законов существо изначально не знает, ему придется о них догадаться.
Попробуй написать программу, которая будет "мозгом" этого существа и будет стремиться поддерживать его самочувствие на достойном уровне.
А я напишу несколько разных программ, моделирующих поведение среды, и посмотрим, насколько хорошо твое существо выживет в моей среде.
Если существо действительно будет обладать интеллектом, то поначалу оно будет тыкать во все кнопки подряд, исследуя мир, а затем узнает некоторые правила, и со временем оно будет все более успешно добиваться хорошего самочувствия.
Давай, а?
20 октября 2008 в 19:04
Антон RichDad Кононов, хоть и объективные даёшь ответы, но зачем же человека так заставлять использовать классы.. дело то не в классах, а в том, как человек может выделять сущности, и использовать их в коде, образовывать зависимости между ними.
Использование же классов, не классов, и других средств для реализации в удобносопровождаемом виде системы — совсем другая тема.
20 октября 2008 в 19:04
#29, "ИИ – это не набор правил вида if(враг_близко) then (достать оружие)." — как раз таки я думаю, что ИИ тем и ИИ, а не искуственный разум, что в нём можно ограничиться набором правил, возможно с условием их коррекции в процессе работы системы. Можно даже задействовать генетически алгоритмы, это всё по моему вписывается в понятия ИИ.
20 октября 2008 в 19:04
Пардон, ИИ – это искусственный *интеллект*. Интеллект и разум – синонимы.
Тогда давай задам вопрос по-другому: Как построить искусственный разум?
Василий, в моей задачке речь идет именно об искусственном разуме
Если же ты собираешься построить искусственный интеллект в понимании Вячеслава, т.е. набор правил – то тогда я беру назад слова о том, что это очень сложно – но беру назад и слова о том, что это интересно.
Так что: интеллект или разум?
20 октября 2008 в 19:02
Надеюсь вы не расчитываете что я выполню вашу работу?
20 октября 2008 в 19:02
О! В матлабе ведь много полезностей для подобных экспериментов
20 октября 2008 в 19:02
На счёт работы, это уж как хочешь)
Я немножко в другой теме от ИИ, и мне оно пока не надо…
20 октября 2008 в 19:02
Моё резюме, кстати: //coder.moy.su/
20 октября 2008 в 19:01
ето не игра, вы в ней участие принимать не сможете, толкьо наблюдать, можно использовать как скринсейвер, все будет конечно в реальном времени, домашний зоопарк.
Насчет типов ето в качестве примеров, совсем не факт что разработка будет на делфи, возможно ява.
20 октября 2008 в 19:01
У меня была идея как-то давно реализовать модуль который бы умел на входе получать список выполняемых команд, и предугадывать следующие команды с вероятностью их срабатывания.
Т.е. хотел составить сетку, которая бы принимала N-ное кол-во команд из последовательности, и выдавало N-ное же кол-во команд + вероятность их срабатывания, да так, чтобы эти команды на выходе были упорядочены по наиболее вероятному их срабатыванию, ну или их сумма вероятностей была наибольшей. Затем обучать эту нейронную сеть(или перцептрон) на основе списка бесконечно поступающих команд. Сам же перцептрон принимает этот список как очередь, выталкивая последнюю команду и принимая новую.
Вот только что мысля в голову пришла, самообучать такую сетку так, чтобы на выходе получался список из этих же N команд с вытолкнутым последним элементом, и в голове с новым, наиболее вероятным.
На основе послупления очередной команды, сетка обучается в старом режиме, уже потом новая команда добавляется в нчало на вход сети, и выталкивает тем самым последнюю команду.
Идея возможно баян.. Реализаций думаю уже таких много, интересно было бы взглянуть на код.
20 октября 2008 в 19:00
пока писал #20 появилось сообщение #19 не могу не ответить =)
type record – прошлый век. Тяжело задавать взаимодействие объектов.
Еще раз говорю: тут нужны классы.
Хотя…. классы более критичны для реалтайм. У тебя же пошаговая? Ну если пошаговая, то массивами тоже можно (но полюбому без классов будет больше непонятного кода)
20 октября 2008 в 19:00
То есть в данной ситуации проходимость огня обозначим как 5, а маньяка как 10. Допустим, что сразу за огнем начинается болото, а за маньяком трава. Куда пойдет персонаж в твоей реализации? Понятно что через огонь (маньяк-то сильнее) и затонет в болоте.
персонаж будет имять некий обзор, например 6 клеток вперед, 3 клетки по бокам, 1 клетка сзади, перед тем как он примит решение, он осмотрится в поле его зрения рачитает вероятность того или иного события и потомпримит решение, я бы не создавал тут тему если бы гугл мне помог, подскажите запросы по алгоритму который мне нужен, а насчет неверного названия темы, вы уж извините, в том что тема сменила направление, тут не я виноват.
20 октября 2008 в 18:05
type
sex//пол
heat//жизни
maxheat//макс жизни
attak//атака
sleep//желание спать
maxsleep//при макс спать не охото
speed//скорость
eat//голод
maxeat//голода нет
x,y//где стоим
nx,ny//куда хотим шагнуть
nastr//настроение
warning//соц опасность обществу
love//номер избранной
friends//номера друзей
babys//ну всякое в жизни случается…
dead:boolean;
End;
ето не все поля и изначально их будет меньше, в будущем буду дописывать, так как плонирую улучшать проект пока он мне интересен
20 октября 2008 в 18:05
так. прочитал. пост #17 после первого предложения не стал дочитывать. жесть
теперь объясняю (Василий, я в свое время писал мого всяких подобных игр, но ничего толкового не написал, но как заметили Жека и Вячеслав, да и ты сам заметил, в процессе писания многому учишься):
имхо:
1) сложное взаимодействие объектов (а то, что ты описал я отношу под понятие "сложное") проще всего реализовать на основе классов, а значит тема топика "игра на массивах" теряет смысл.
2) то, что ты написал в #5 – это то же самое что я тебе объяснял в #4. Ну ладно поясню второй раз: ситуация – кругом огонь, на выходе маньяк. Опять все те же герои. То есть в данной ситуации проходимость огня обозначим как 5, а маньяка как 10. Допустим, что сразу за огнем начинается болото, а за маньяком трава. Куда пойдет персонаж в твоей реализации? Понятно что через огонь (маньяк-то сильнее) и затонет в болоте. А если использовать ГОТОВЫЙ (скачать) алгоритм поиска пути на клеточном поле, то такой алгоритм покажет, что выгоднее потратить часть жизни, но пройти через маньяка (разумеется если там босс, то маньяку дадим не 10, а большее число, тогда, возможно, придется идти болотом).
3) народ недаром пытается указать тебе на книги по ИИ. Знаешь есть возможность научить коробок спичек выигрывать у тебя в крестики нолики. Реально у коробка спичек. Принцип? Да вот примерно (но только примерно) та схема обучения, что ты описал. Ну поищи в общем.
пока мысль ушла…
20 октября 2008 в 18:04
память ето файл, будет разработана система команд 12,15,1,id[0],10
человек подошел х=12 у=15 далее 1 команда атаки, к id[0] 10 команда поражения, что то по етому типу, за 10 секунд я тебе не соченю рациональную и работающую систему команд,
if id[0].attk>my.attk then x:=x-1; вот убегаем, ето самый банальный пример, там убегать будет не исходя из атаки, а смотреть количество жизней врага, силу, кучу других параметров и высчитывать свои шансы… если ты адекватин тоже поймешь что составить такие формулы дело минимум пары часов, да и вообще с таким подъходом объяснять тебе ничего не хочется, взгляни на название темы, на цель темы и если не нравится выйди.
20 октября 2008 в 18:04
так. фига тут тема разгулялась. ща буду читать)
и самое главное: аффтар, огонь по-английски не fair, а fire.
ну все ушел читать.
20 октября 2008 в 18:03
у меня просто нет желания расписывать все на проф языке, пытаюсь объяснить все проще, книги по ИИ не помешают, но тут сплошные условия, чему я успешно научился за год практики, каждый елемент того что я хочу реализовать я уже делал в какой либо игре или программе, осталось просто все ето собрать в кучу, на данный момент сложно создать такой мир, чтобы в будущем небыло проблем с ним и не пришлось переделывать етот фундамент.
Ну и добавлю что я не планирую все ето сделать уже завтра, только на создание мира готов выделить столько, сколько потребуется и перепроверять не раз, просто надоело делать мелкие аркады на телефон, нужен проект который увлечет меня возможно на годы.
20 октября 2008 в 18:03
ммм…немного не так сформировал пост, я понимаю что все ето очень сложно, но ето как раз то, что поможет мне развиться в программировании и долгое время не давать мозгурасслабиться, на крайней случай есть форумы,одногруппники которые мне готовы помочь.
20 октября 2008 в 18:03
Да хватит уже языком болтать, делай!
Расскажи все-таки, как ты будешь представлять правила типа описанного тобою?
"он записывает в память, что если народ сильнее, то лучше не нападать"
Только не общими словами, а конкретно – какие будут поля и каких типов у класса "правило", и т.п.
20 октября 2008 в 18:02
ой, тема то была про массивы )
сори за офтоп
20 октября 2008 в 18:02
Василий, возьми, прочитай хотя бы одну книжку об искусственном интеллекте – иначе то, что ты говоришь, выглядит чрезвычайно наивно и даже смехотворно – как и у всех людей, пытающихся всерьез рассуждать о чем-то, в чем они не разбираются.
Очень рекомендую "Автономный искусственный интеллект" А.А.Жданова.
Ну, либо ты можешь попробовать все-таки придумать что-то полностью свое, но тогда уж придумывай это до конца, со всеми подробностями, а еще лучше – напиши программу.
Например, "он записывает в память, что если народ сильнее, то лучше не нападать" – в какой форме он это записывает? Придумай паскалевский тип данных, которым можно было бы представить любое подобное правило. Я серьезно – возьми бумажку, ручку и придумай! И дай бог, чтобы у тебя получилось меньше нескольких тысяч страниц кода
Если ты попытаешься всерьез копнуть глубоко в этой задаче, то ты увидишь, что сделать что-то хоть сколько-нибудь рабочее – исполински, титанически, невообразимо сложно – это только кажется, что "осталось всего-навсего сделать то-то и то-то". Зато будет очень интересно и ты, возможно, многому научишься.
20 октября 2008 в 18:02
можно ещё почитать про саоорганизующиеся сети Кохонена, сети Петри, можно что-нибудь по фракталам, вейвлетам и т.п)
20 октября 2008 в 18:02
про сложность алгоримтов
про железо под специально сконструированные нейронные сети
матчасть и Д.Кнута)
ещё можно Совершенный Код и так далее.
20 октября 2008 в 18:02
правда после всего этого отпадёт идея разрабатывать что-то подобное…
20 октября 2008 в 18:01
Корованы можно будет грабить?
20 октября 2008 в 18:01
хм, можно задать мир состоящий из объектов, каждый объект может взаимодействовать с каждым, можно задать несколько параметризуемых видов взаимодействий, а ИИ будет регулировать эти параметры..
например взять объект "существо", оно взаимодействует несколькими способами с объектом "мир", каждый из способов регулируется для конкретного "существа"… теперь этот же объект "существо" вступил в контакт с другим объектом "другое существо", между ними появляются определённые зависимости, какие конкретно зависимости появятся, можно отправить другому ИИ, не конкретного об… кароче сами развивайте )) у меня фантазия дурная)
20 октября 2008 в 18:01
грубо говоря, у меня идея заключалась в разделении ИИ на микро ИИ, и макро ИИ… макро ИИ бы строил перцептроны или небольшие нейросетки для конкретного типа связи между объектами, выделял бы похожие связи и группировал бы их, а микро ИИ занимался бы регулированием каждой связи по отдельности..
20 октября 2008 в 17:04
ну больето образное выражение, у каждого объекта есть атака, жизни, при сближении человека с огнем, огонь атакует с определенно силой и долей рендома, в зависимости от силы человечек будет присваивать определенное количество опасности, например 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]=нельзя подходить ибо смерть, в моем случае подходить можно, просто ето больно и можно умереть.
и насчет алгоритма героев, ето точ то мне нудно, по какому примерно запросу искать? Все изгуглил не нашел…
20 октября 2008 в 17:03
Ну не совсем, Spore ето игра, а у меня программа, в которой можно будет только наблюдать…как вариант сделать 2 или более племен с разными вещами в мире, с разными взглядами и при их спаривании просто кусок записи одного племени складывается с какой то частью другого племени, тоесть смешивание для получения 3-го вида, нечто близкое к споре, но совершенно другое, скорее всего реализовываться будет наGDI графике, никаких спец еффектов и деретиксов не будет, да и людей в игру я не хочу пускать, наше общество только может взять калаш и расстрелять племена вынашиваемые мною месяцами,, а может и годами =)
20 октября 2008 в 17:03
первое. я ниче не понял. например что за такое: "ИИ, по принципу анализа мира, отбросив жесткие конкретизированные условия"
второе. давай все-таки разделим твою реализацию на два этапа: 1) отрисовка мира, 2) ИИ
итак.
отрисовка идет пофигу как. хочешь отрисовывать клеточное поле из двумерного массива – нет проблем. Всякие там х+10 это пропускаем. Еще раз скажу – как там графика будет работать это определиться всегда успеешь.
насчет ИИ.
сила боли – это от лукавого. Смотри как сделано в героях: есть клеточная территория. Каждая клетка поля имеет тип (трава, огонь и все такое) и проходимость. Проходимость измеряется в пунктах движения (трава-1, снег-2, лава-2.5, болото-2.8, каменная дорога-0.4, и так далее, цифры тут не реальныеиз героев, а для примера). Обучением ИИ тут и не пахнет. Это простая задача на нахождения пути по клеточному полю, где известен вес (в данном случае проходимость) каждой клетки. Такие алгоритмы можно поискать и скачать уже готовые.
Развивай далее твою идею. Где все таки обучаемость?
20 октября 2008 в 17:02
а ля Spore решил сбацать?