Однажды я написал AI тетриса, который неплохо играл на тетрисе. Алгоритм, который я использовал (, описанный в этой статье ), состоит из двух этапов.
На первом этапе программист решает отследить входные данные, которые «интересны» для проблемы. В Tetris нам может быть интересно отслеживать количество пробелов в ряду, потому что минимизация пробелов поможет легче размещать будущие фигуры. Другой может быть средняя высота столбца, потому что может быть плохой идеей рисковать, если вы собираетесь проиграть.
Второй шаг - определение весов, связанных с каждым входом. Это та часть, где я использовал генетический алгоритм. Здесь подойдет любой алгоритм обучения, если веса корректируются с течением времени на основе результатов. Идея состоит в том, чтобы позволить компьютеру решить, как входные данные связаны с решением.
Используя эти входные данные и их вес, мы можем определить ценность любого действия. Например, если указание формы прямой линии в правом столбце полностью устранит пробелы в 4 различных рядах, то это действие может получить очень высокий балл, если его вес велик. Точно так же, если положить его сверху, это может привести к пробелам, и поэтому действие получит низкий балл.
Мне всегда было интересно, есть ли способ применить алгоритм обучения на первом этапе, где мы находим «интересные» потенциальные входные данные. Кажется возможным написать алгоритм, в котором компьютер сначала узнает, какие входные данные могут быть полезны, а затем применяет обучение для взвешивания этих входных данных. Что-нибудь было сделано раньше? Он уже используется в каких-либо AI-приложениях?