代码之家  ›  专栏  ›  技术社区  ›  Boris Gorelik

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

  •  1
  • Boris Gorelik  · 技术社区  · 16 年前

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

    问题是,在这些稀疏条件下,遗传算法很难改善种群。无论是平均健身成本,还是“最差”个体的健身水平,都不会随着世代而提高。我所看到的只是最佳个人得分的轻微(甚至微小)提高,我想这是随机抽样的结果。

    你会建议什么问题?

    如果这很重要,我用 PyEvolve .

    2 回复  |  直到 15 年前
        1
  •  2
  •   leif    16 年前

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

    1. 绒毛膜体评估(你可能已经弄清楚了)
    2. 染色体初始化
    3. 染色体突变

    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。以1/2的概率从{n_1,n_2}中选择n_3。现在将C_1和C_2的参数放在一个列表中(并使它们唯一,因此如果 C_1和C_2包含参数1,它只在列表中出现一次)。从关节列表中提取n_3参数并将其放入染色体C_3。

    现在,有很多方法可以解决这个问题,所以做对你的问题最有意义的事情。

        2
  •  0
  •   Dave    16 年前

    http://en.wikipedia.org/wiki/Singular_value_decomposition )考虑到参数数量的限制,这里可能更合适。