我使用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 */
答案 0 :(得分:1)
我先得到一些参数组合的统计数据
(实际上似乎可以尝试所有组合 - 或者你有
更多参数?)
然后直接的方法是从中构建某种映射
这些统计数据,如
{a,b,c} - > {最小值,最大值,平均值,偏差}
(度量值统计的参数)
然后找到与所需度量值对应的参数集。
如果参数空间太大会更复杂 完整的枚举是不可能的。然后你必须建立一个更小的 在收集足够的样本后,首先近似参数空间 在随机点。
更新:
可以使用一些现有工具。基本上,它是一样的
统计数据压缩器必须做的任务。所以它有可能做好准备
一个(二进制)表,用N {metric; params}行来构建模型,然后{metric; ...}
部分排。然后,在处理完所需的度量值后,我们必须随机提供
数据到解码器(而不是有效的算术代码),它将根据累积的统计数据解码“最可能的”参数组合。
最好的工具可能是paq8 - http://www.mattmahoney.net/dc/#paq
建议的想法的简单演示是用paq8压缩文本,然后
在末尾附近修改档案(引入错误)。从存档中解压缩的(损坏的)文件通常包含错误后生成的句子
Paq8通常可以检测表格中的行大小,但其预测可能会有所改善
这种情况通过向表中添加.bmp标题,具有特定的表维度。