Алгоритмы нейронных сетей или что-то в этом роде, чтобы найти подходящие параметры для приложения, которое использует генетические алгоритмы для его запуска меньше времени - PullRequest
2 голосов
/ 18 марта 2011

Я разработал приложение с Java, которое использует генетические алгоритмы.Моему приложению нужны такие параметры как:

 How many genes will be populate at first?
 How many genes will be killed after crossover and mutation?
 What will be the mutation rate?

Я могу проверить что-то вроде:

How long(milliseconds) does it take to find a solution.

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

Genes to populate |  Genes to kill   |   Mutation rate   |   Result(milliseconds)
---------------------------------------------------------------------------------
50                        5                 16/1000                 146
50                        5                 16/1000                 208
50                        5                 16/1000                 1000
50                        5                 16/1000                 216
100                       5                 16/1000                 178
100                       5                 16/1000                 546
100                       5                 16/1000                 646
100                       5                 16/1000                 46
100                       5                 16/1000                 186
50                        10                16/1000                 346
50                        10                16/1000                 246
50                        10                16/1000                 546
50                        5                 34/1000                 746
50                        5                 34/1000                 186
50                        5                 34/1000                 196
50                        10                34/1000                 496
50                        10                34/1000                 23
50                        10                34/1000                 169

Это случайные результаты.Я не тестировал свою программу.

После запуска этого алгоритма (думаю, я дам результат, который мне подходит, например, 78 миллисекунд), он скажет что-то вроде этого:

You should use that parameters to get a result that takes 78 milliseconds:
Genes to populate |  Genes to kill   |   Mutation rate   
--------------------------------------------------------
34                        7                  24/1000        

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

PS2 Я могу использовать API или программу для поискаэто тоже.

РЕДАКТИРОВАТЬ: Это мои переменные, которые я использую сейчас со своими значениями:

MAX_POPULATION_SIZE = 50;
HARD_WEIGHTS = {1,20,1,1,1,20,1};/* It means that I have 7 variables for this */
NUMBER_OF_GENES_TO_KILL = 5;
MUTATION_RATE = 100;
MAX_MUTATION_NUMBER = 1000;
/* Mutation rate is MUTATION_RATE/MAX_MUTATION_NUMBER */

1 Ответ

1 голос
/ 18 марта 2011

Сначала я получу некоторую статистику для комбинаций параметров
(на самом деле кажется возможным попробовать все комбинации - или у вас есть больше параметров?)
Тогда прямым способом было бы построить какое-то отображение изэти статистические данные, например
{a, b, c} -> {min, max, avg, dev}
(параметры для статистики значений метрик)
, а затем находят наборы параметров, соответствующие желаемому значению метрики.

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

Обновление:
Возможно, будет возможно использовать некоторые существующие инструменты.По сути, это та же задача, что и для статистических компрессоров.Таким образом, для построения модели можно подготовить (двоичную) таблицу с N {metric; params} строками, а затем {metric; ...} частичную строку.Затем, после обработки требуемого значения метрики, мы должны будем подавать случайные данные в декодер (вместо действительного арифметического кода), и он будет декодировать «наиболее вероятную» комбинацию параметров на основе накопленной статистики.
Лучший инструментвероятно, это будет paq8 - http://www.mattmahoney.net/dc/#paq
Простая демонстрация предлагаемой идеи - сжать текст с помощью paq8, а затем изменить архив ближе к концу (ввести ошибку).(Неработающий) файл, распакованный из архива, обычно будет содержать сгенерированное предложение после ошибки.
Paq8 обычно может определять размер строки в таблице, но его прогноз может быть улучшен в таком случае путем добавления заголовка .bmp кстол, с конкретными размерами стола.

...