1

我想使用遗传算法求解包含 n 个变量的 n 个线性方程组。

我很难定义交叉操作,因为解决方案可能包含浮点值。我该如何进行?这似乎是可能的,但这是我第一次接触遗传算法。

假设我们必须解决

 x + 2y = 1
2x + 8y = 3

答案是 x = 1/2 和 y = 1/4。

我们如何为问题建模?

更新:看看您是否可以从论文http://www.masaumnet.com/archives/mjbas/volume1/issue2/mjbas010205.pdf中破译任何内容。

4

4 回答 4

6

您的染色体可以是 n 个浮点数(双精度数),或者您可以使用联合将它们重新解释为位字符串:

const int n = 100;

union Chromosome {
  double val[n];
  unsigned char bits[n * sizeof(double)];
};

...然后您可以使用双精度值来解释解决方案/适应度值,以及用于繁殖/交叉/突变的位。

祝你好运!

于 2009-11-07T10:59:39.890 回答
5

你根本不知道。您可以应用许多不同的方法来求解线性系统。但是“遗传算法”并不是我想到的。您将使用遗传算法来解决组合问题(从有限集中挑选一个元素)。

您通常使用因式分解(QR、LU)或迭代算法(Gauß-Seidel、CG、...)来求解线性系统

于 2009-11-07T08:29:43.590 回答
1

一种方法是选择你自己的浮点表示,这可以让你自由地使用你想要的值。当然,这使您负责实现算术运算。也许您可以找到一个可以更改的 bignum 库。

frexp您还可以在交叉步骤期间使用例如分解平台原生浮点,然后在剔除期间重新组合它。

于 2009-11-07T12:23:33.027 回答
1

您将需要考虑使用真正的编码遗传算法,而不是您提到的论文中建议的二进制编码遗传算法。实际上,如果您使用二进制编码的遗传算法,那么如果您的“x”、“y”可以取负值,您将无法找到方程的解。

因此,您需要使用真正的编码遗传算法。您可以自己编写整个遗传算法,也可以只使用一个好的现有 RGA 代码来解决您的问题。您只需根据需要自定义健身功能。在这里,您可以使用论文中建议的那个。这很容易!

您可以考虑使用来自http://www.iitk.ac.in/kangal/codes.shtml的 RGA 实现。

于 2009-12-19T14:02:18.663 回答