我有一个优化问题,我正在尝试使用遗传算法来解决。基本上,有一个包含 10 个绑定实值变量的列表(-1 <= x <= 1),我需要最大化该列表的某些功能。问题是列表中最多只有 4 个变量可能是 != 0 (子集条件)。
从数学上讲:对于某些函数 f: [-1, 1]^10 -> R min f(X) st |{var in X with var != 0}| <= 4
f 的一些背景知识:该函数与任何类型的背包目标函数(如 Sum x*weight 或类似的函数)都不相似。
到目前为止我已经尝试过:
只是基因组 [-1, 1]^10 的基本遗传算法,具有 1 点交叉和变量的一些高斯突变。我试图通过仅使用前 4 个非零(零足够接近 0)值来对适应度函数中的子集条件进行编码。这种方法效果不佳,算法停留在前 4 个变量上,并且从不使用超出该变量的值。我看到了 01-knapsack 问题的某种 GA,这种方法效果很好,但显然这只适用于二进制变量。
你会推荐我接下来尝试什么?