Определение того, какие входы взвешивать в эволюционном алгоритме

StackOverflow https://stackoverflow.com/questions/1638981

Вопрос

Однажды я написал AI тетриса, который неплохо играл на тетрисе. Алгоритм, который я использовал (, описанный в этом документе ), состоит из двух этапов процесс.

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

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

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

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

Это было полезно?

Решение

В нейронных сетях вы можете выбрать «интересные» потенциальные входные данные, найдя те, которые имеют наиболее сильную корреляцию, положительную или отрицательную, с классификациями, для которых вы готовитесь. Я думаю, вы можете сделать то же самое в других контекстах.

Другие советы

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

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

Да, есть способ.

Если вы выберете M для выбранных объектов, то будет 2 ^ M подмножества, поэтому есть на что посмотреть. Я бы к следующему:

For each subset S
   run your code to optimize the weights W
   save S and the corresponding W

Затем для каждой пары S-W вы можете запустить G игр для каждой пары и сохранить счет L для каждой. Теперь у вас есть такая таблица:

feature1    feature2    feature3    featureM   subset_code game_number    scoreL
1           0           1           1           S1         1              10500
1           0           1           1           S1         2              6230
...
0           1           1           0           S2         G + 1          30120
0           1           1           0           S2         G + 2          25900

Теперь вы можете запустить алгоритм выбора компонентов (например, PCA) и решить, какие функции стоит объяснить ScoreL.

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

Надеюсь, это чем-то поможет!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top