基于遗传算法的稀疏参数选择

时间:2009-05-25 13:37:41

标签: algorithm genetic-algorithm data-mining

我正面临参数选择问题,我想用遗传算法(GA)来解决。我应该从3000个可能的参数中选择不超过4个参数。使用二进制染色体表示似乎是一种自然的选择。评估函数惩罚太多“选定”属性,如果属性数量可接受,则评估选择。

问题在于,在这些稀疏的条件下,遗传算法难以改善人口。几代人的平均健身成本和“最差”个体的适应性都没有提高。我所看到的只是最佳个体得分的微小(甚至微小)改善,我认为这是随机抽样的结果。

使用参数索引编码问题也不起作用。这很可能是因为染色体是定向的,而选择问题不是(即染色体[1,2,3,4]; [4,3,2,1]; [3,2, 4,1]等是相同的)

您建议使用什么问题?

如果这很重要,我会使用PyEvolve

2 个答案:

答案 0 :(得分:2)

我对PyEvolve并不熟悉,但是从我记忆中的遗传算法来看,你关注的是4个步骤,

  1. Chormosome Evalutation(你可能已经弄明白了)
  2. 染色体初始化
  3. 染色体交叉
  4. 染色体突变
  5. 我认为你可以用列表做到这一点。你需要重载一些运算符,但它看起来像PyEvolve lets you do this一个简单的事情就是保持列表表示,只需在返回染色体之前对它们进行数字排序。

    我需要更多地了解您的问题,但这是我的建议。由于您具有可变数量的参数,因此需要为染色体中的参数数量提供某种概率分布。我会假设在1,2,3,4上有一个统一的随机,但如果你更喜欢那么你可以尝试别的东西。我要打电话给这个发行版P_n。

    1. 初始化。用(至少)3000条染色体为您的种群播种。将这些称为c_1,...,c_3000。从P_n中绘制n_j。将j放入c_j。从剩余参数中选择具有均匀随机分布的剩余n_j - 1参数。
    2. 交叉。让我们假设我们有两条染色体。 C_1和C_2。我们将创建(并返回)染色体C_3。从{n_1,n_2}中选择n_3,概率为1/2。现在将C_1和C_2的参数放入一个列表中(并且将它们唯一,因此如果两者 C_1和C_2包含参数1,则它只在列表中一次)。从联合列表中绘制n_3个参数并将它们放入染色体C_3。
    3. 突变。给定染色体C_1,从P_n中抽取n_1 *。如果n_1 *是< n_1,从C_1中随机删除元素,直到有n_1 *个元素。如果n_1 * = n_1从C_1中随机选择1个元素,则将其替换为从不在C_1中的参数中随机选择的参数。如果n_1 *> n_1将元素随机添加到C_1,直到大小为n_1 *。
    4. 现在,有很多方法可以解决这个问题,那么对你的问题最有意义的是什么。

答案 1 :(得分:0)

我认为,由于参数数量的限制,奇异值分解(http://en.wikipedia.org/wiki/Singular_value_decomposition)可能更合适。