Теория самообучающейся программы, на примере монополии |
Теория самообучающейся программы, на примере монополии |
RathaR |
1.08.2009 13:30
Сообщение
#1
|
Знаток Группа: Пользователи Сообщений: 346 Пол: Мужской Реальное имя: Иван Репутация: 7 |
Вот, меня весьма заинтересовала идея Lappa , о написании кокой нибуть вариации монополии, с самообучающимся ИИ. Погуглил я на эту тему, но единственное что нашёл, это описание принципа роботы с крестиками-ноликами и много бредней про то что машины зохавают мир
Поэтому и решил создать тему здесь, об самообучении ИИ в общем, и об монополии в частности. Так вот, как я это представляю: допустим в игре участтвуэт самообучающийся ИИ, и человек/жёстко заданый ИИ. Весь процес самообучения происходит следующим образом (поправте или скоординируйте меня если неправ): Человек/жёстко заданый ИИ делает ход, попадая на определённый участок(правила монополии я думаю всем известны ему нужно определить что делать дальше - либо купить его либо пустить на аукцион. Этот выбор он делает исходя их жёстких формул, определяя степень "необходимости" для него этого участка, он учитывает его стоимость, наличие у него участков такогоже цвета, арендную плату, суму денег в наличии а также степень нужности этого участка для противника, а если противнику он некчему, то может сдать этот участок на аукцион(!) чтобы попробывать купить его подешевле. В это время самообучающийся ИИ следит за действиями человека/жёстко заданого ИИ, и у себя в памяти записывает ситуацию и решение опонента(допустим у него в памяти есть ячейка для каждого участка, и в соответствующую ячейку он записывает: суму денег которая была у опонента, кол-во участков, как других так и такогоже цвета, рентабельность участка, и т.д, ну и наконец решение которое принял его опонент) дальше если в игре самообучающийся ИИ попадёт на етот участок, он сравнит ту ситуацию что сейчас у него (суму денег друг участки, рентабельность), и те ситуации что были у его противника, что у него записаны, и выберет то решение которое противник принял в наиболее похожей ситуации (тоесть под ситуацией я подразумеваю економ состояние игрока). Вот так и будет продолжаться игра, кроме того, самообучающийся ИИ будет записывать каждый раз когда его опонент заложит какой либо участок, или возьмёт зсуду в банке, и в случае возникновения похожей ситуации, будет поступать также, брать похожую зсуду, закладывать примерно равноценный участок. Ставить дома и отели на своих участках он тоже будет только после того как "научиться " этого у опонента. Хух, теперь о следуюющем После всего этого у меня возник ряд вопросов: 1) Всётаки монополия - это не крестики нолики, и каждая игра займёт время, такчто обучаться он будет медленно, в связи с этим появляеться необходимость сделать "автоматический режим " в игре, когда она будет играть сама з собой опр кол-во партий, чтобы достигнуть того или иного уровня знаний? 2) А вообще реально ли это зделать?, я имею в виду, не будет ли это всё занимать огромные обьёмы памяти, и не будет ли ИИ думать по 10 мин? ( прошу дать хоть приблизительную оценку, по даному алгоритму, потомучто мне самому очень тяжело об этом судить) 3) Правильно я уразумел алгоритм хотябы в общих чертах? Очень прошу поправить меня там где неправ И с удовольствием выслушаю другие идеи по поводу этой же темы, или алгоритма. И вообще мне кажеться что всё это не очень сложно в реализации, сложности могут возникнуть лишь с интерфейсом, графикой, а в общих чертах алгоритм сравнительно прост, или я не прав? З.Ы. Lappу +1 за идею (уж очень она мне понравилась ) Сообщение отредактировано: RathaR - 1.08.2009 17:15 -------------------- Считающий себя единственым здравомыслящим человеком сумасшедший? Если да, возможно я псих...
Пусть умолкнет всякий критик! Я - системный аналитик! |
andriano |
14.09.2009 12:26
Сообщение
#2
|
Гуру Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: 28 |
1. Под обучением обычно понимается совсем не тот процесс, что описан в первом сообщении. Там было "Запомнить, как поступил оппонент, и делать так же, как он". На самом деле обучение состоит примерно в следующем:
- на основе некоторой функц с настраиваемыми коэффициентами осуществляем выбор хода. - ходим. - ждем некоторое время (обычно не ранее окончания ответного хода оппонента и не позднее конца игры), когда будет ясно, "хорош" или "плох" оказался сделанный ход. - вносим изменения в настроечные коэффициенты нашей функции таким образом, чтобы увеличить вероятность выбора "хороших" ходов и уменьшить "плохих" в дальнейшем. 2. Процесс обучения - весьма длителен по времени, поэтому в подавляющем большинстве случаев человеку надоест играть раньше, чем ИИ завершит хотя бы первый цикл обучения. Поэтому IMHO реализация обучения непосредственно в процесссе игры утопична (кроме небольшого числа частных случаев игр, где по самому характеру игры возможно провести процесс обучения быстро), а обучение ИИ может быть целесообразно лишь на стадии тестирования и балансировки игры. |
Lapp |
15.09.2009 0:52
Сообщение
#3
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
1. Под обучением обычно понимается совсем не тот процесс, что описан в первом сообщении. ... andriano высказал то, что плясало у меня на языке, но так и не сформулировалось. Точнее, это все сказано в теме про Калах, но тут надо было подчеркнуть. Так сказать, основной принцип этого способа "обучения".Есть игровая ситуация (то есть состояние всех переменных) и есть ходы, сделанные в этой ситуации. Событием же назовем определенный ход в определенной ситуации. Событие может быть хорошим и плохим, а точнее - иметь вес, и это оценивается по результатам партии. Иначе говоря, все события (то есть все ходы, сделанные в возникших в игре ситуациях) победителя считаются хорошими, и их вес увеличивается на единицу. Напротив, вес всех событий проигравшего после игры мы уменьшаем на единицу. В этом и состоит обучение: когда очередная игра закончилась, мы пополняем БД событий новыми возникшими событиями (с нулевым начальным весом), а потом проводим политику кнута и пряника: вес хороших событий увеличиваем, плохих - уменьшаем. Соответственно, размер этой БД, являющейся нашим обучаемым мозгом, определяется количеством состояний в игре, умноженным на количество ходов (это в предположении, что для веса достаточно 1 байта). А если быть более точным, то это сумма Mi по всем состояниям, где Mi - количество ходов в i-том состоянии. Это число, даже для уже квантованных игр (то есть у которых пространство состояний не непрерывное, а дискретное), как правило немаленькое. Я в своем выборе (Калах) руководствовался именно тем, что размер БД должен быть как можно меньшим - и то он получился огромным (и, кажется, отпугнул тебя, RathaR). В ситуации же с непрерывными параметрами размер БД будет зависеть от уровня квантования (чем мельче уровни - тем он больше), и маленьким он точно не покажется. Но думается мне, что этот подход в них вообще нежелательно применять в таких играх (в частности, по этой причине). 2. Процесс обучения - весьма длителен по времени, поэтому в подавляющем большинстве случаев человеку надоест играть раньше, чем ИИ завершит хотя бы первый цикл обучения. Поэтому IMHO реализация обучения непосредственно в процесссе игры утопична (кроме небольшого числа частных случаев игр, где по самому характеру игры возможно провести процесс обучения быстро), а обучение ИИ может быть целесообразно лишь на стадии тестирования и балансировки игры. Это тоже верно, но никто же не заставляет играть реально. Мои программы играли сами с собой, а также с программой, ходящей случайным образом (на начальной стадии весьма полезно). Кроме того, я уже высказывал мысль такую: выложить ее на сайт в Инет, пусть народ играет. И посматривать на нее время от времени)).-------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
andriano |
15.09.2009 17:36
Сообщение
#4
|
Гуру Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: 28 |
...ходы ... победителя считаются хорошими, и их вес увеличивается на единицу. Напротив, вес всех событий проигравшего после игры мы уменьшаем на единицу. Ну, в частном случае может быть и так. При обучении сети Кохонена, например, обычно изменяется лишь вес "правильного" варианта, а остальные остаются неизменными. Да и величина шага может быть не единицей, а какой-либо другой величиной, в частности, допускающей настройку.Цитата Это тоже верно, но никто же не заставляет играть реально. Мои программы играли сами с собой, а также с программой, ходящей случайным образом (на начальной стадии весьма полезно). Да, это обучение в процессе балансировки. Пользователь получает уже обученную НС, причем обучающий модуль вообще в комплект поставки не входит, а остается в списке утилит разработчика, а не пользователя.Цитата Кроме того, я уже высказывал мысль такую: выложить ее на сайт в Инет, пусть народ играет. И посматривать на нее время от времени)). А это - обучение в процессе бетатестирования. База весов, опять же, остается у разработчика. |
Lapp |
16.09.2009 1:44
Сообщение
#5
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Ну, в частном случае может быть и так. Я и не говорил про общий случай. Человеку, который едва вникает в идею, нужно продемонстрировать на простом примере. Тонскости понятия веса и т.п. не особо важны.Да, это обучение в процессе балансировки. Пользователь получает уже обученную НС, причем обучающий модуль вообще в комплект поставки не входит, а остается в списке утилит разработчика, а не пользователя. Да хоть горшком назови . andriano, отвлекись немного от своей работы)). Речь идет не о поставке готового коммерческого продукта, а о демонстрации принципа (и, ябы сказал, самой возможности) самообучения. Так что "комплектом поставки" тут следует считать удовлетворение от того, что оно работает)). А бета-тестирование оставь для разработок, выполненых по конкретному техзаданию)). ... А это - обучение в процессе бетатестирования. База весов, опять же, остается у разработчика. RathaR, ты следишь за темой? И как дела с твоей программой? P.S. Я не спец в этой терминологии, но трудно согласиться, что обучение в реальных условиях можно называть бета-тестированием. Если это действительно так - это явная логическая ошибка. Я предполагаю выкладывание программы на сайт после окончания ее отладки (включая тестирование). Тогда, позвольте, что мы тестируем? принцип?.. скорость обучения?.. уровень публики?.. Продукт (в идеальном случае) больше не подвергается изменениям. И главная цель его - не играть, а именно обучаться. База данных - результат этого процесса. Это не есть альфа-бетта-гамма-..-омега-тестирование. Это его основной режим работы. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
RathaR |
16.09.2009 19:03
Сообщение
#6
|
Знаток Группа: Пользователи Сообщений: 346 Пол: Мужской Реальное имя: Иван Репутация: 7 |
RathaR, ты следишь за темой? И как дела с твоей программой? Конечно слежу, и очень рад что речь зашла о самообучающихся системах вообще, мне это очень интересно, andriano внёс много конкретики в моё понимание процеса обучения А по поводу моей программы, то только позавчера вернулся к ней, начало нового учебного года немного отвлекло, но руки не опустились, правда... насчет реализации самообучения както наверно позновато, но пришло понимание того что нереально это... с самого начала я хотел показать то, что игра, после нескольких , а может и десятка партий с человеком, могла бы играть сама з собой любое кол-во партий, обучаясь по ходу процеса, тоесть игра с человеком даёт ей минимальное кол-во образцов сделок (Базу Данных), а потом основываясь на ней ИИ мог бы розвиваться дальше, а в конце, мы могли бы посмотреть чтото типа статистики, списка всех сделок которые ИИ предлагал бы самому себе, ну и соответственно список его решений, и в идеале сделки в этом списке должны были становиться менее глупыми, более рациональными, по мере его наростания. НО, по ходу написания пришли ко мне следующие мысли: 1) - заставлять ИИ учиться просто делать покупки(тоесть покупать недвижимость или нет, участвовать в аукционе или нет) - глупость и пустая трата времени, поэтому самообучение планировал реализовать только на сделки; 2) - научить его предлагать сделки так как я думал просто невозможно: "ждем некоторое время (обычно не ранее окончания ответного хода оппонента и не позднее конца игры), когда будет ясно, "хорош" или "плох" оказался сделанный ход." "(то есть все ходы, сделанные в возникших в игре ситуациях) победителя считаются хорошими, и их вес увеличивается на единицу." Я з самого начала неправильно интерпритировал принцип "робота из 300 коробков" в идею ИИ для монополии Цитата 1. Под обучением обычно понимается совсем не тот процесс, что описан в первом сообщении. Там было "Запомнить, как поступил оппонент, и делать так же, как он". Я буду очень рад, если тема продолжиться не как коректировка моих бредовых идей , а как тема о самообучающихся системах. Цитата об самообучении ИИ в общем, и об монополии в частности. З.Ы. Но игра всёрамно будет интересной я нехочу лишать её практического смысла, тоесть нехочу чтобы это была просто игра, сейчас думаю над тем чтобы вот эту статистику показывать в конце игры, и сравнивать те сделки которые предлогал игрок с теми что предлагал ИИ. Тоесть предложения ИИ розсматриваем как "взаимовыгодная сделка", он будет предлагать только такие сделки( алгоритм ИИ примерно набросал), и сравниваем их с предложениями игрока, тоесть не "кто рациональней предложил", а "насколько рациональную сделку предложил, или отказался игрок". По поводу самой программы, то почти закончил графику, получилось вроде красиво, анимация, гл. меню, поле.. Сообщение отредактировано: RathaR - 16.09.2009 19:04 -------------------- Считающий себя единственым здравомыслящим человеком сумасшедший? Если да, возможно я псих...
Пусть умолкнет всякий критик! Я - системный аналитик! |
Текстовая версия | 4.06.2024 2:01 |