Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 求解二次方程的遗传算法_Algorithm_Genetic Algorithm_Quadratic_Fitness - Fatal编程技术网

Algorithm 求解二次方程的遗传算法

Algorithm 求解二次方程的遗传算法,algorithm,genetic-algorithm,quadratic,fitness,Algorithm,Genetic Algorithm,Quadratic,Fitness,我在理解遗传算法的过程时遇到了一个问题。我找到了在一个区间内使函数最大化的例子,我想我理解它们,但是遗传算法怎么能用来求解,比如,一个二次方程 假设我们想找到一个最多4位数的解决方案,那么编码数字的正确表示是什么?什么可以用作评估每个数字的适应度函数 如果你想解一个二次方程,任何帮助都将不胜感激 a * x^2 + b * x + c = 0 那么您只需要一个变量x作为表示。你可以用 f(x) = abs(a * x^2 + b * x + c) 作为适应度函数,它与当时的精度相同,因此需要

我在理解遗传算法的过程时遇到了一个问题。我找到了在一个区间内使函数最大化的例子,我想我理解它们,但是遗传算法怎么能用来求解,比如,一个二次方程

假设我们想找到一个最多4位数的解决方案,那么编码数字的正确表示是什么?什么可以用作评估每个数字的适应度函数


如果你想解一个二次方程,任何帮助都将不胜感激

a * x^2 + b * x + c = 0
那么您只需要一个变量
x
作为表示。你可以用

f(x) = abs(a * x^2 + b * x + c)
作为适应度函数,它与当时的精度相同,因此需要最小化


但是只有一个变量很难进行交叉,你可以每个人使用10个数字,然后取平均值得到x,或者在进行交叉时取两个数字的平均值。同样,对于突变而不是完全覆盖x,你可以用0.5到2之间的随机数乘以它。如果你想解一个二次方程

a * x^2 + b * x + c = 0
那么您只需要一个变量
x
作为表示。你可以用

f(x) = abs(a * x^2 + b * x + c)
作为适应度函数,它与当时的精度相同,因此需要最小化


但是只有一个变量很难进行交叉,你可以每个人使用10个数字,然后取平均值得到x,或者在进行交叉时取两个数字的平均值。同样,对于突变而不是完全覆盖x,您可以将其乘以0.5到2之间的随机数。第一步是选择解决方案的表示形式。最广泛使用的是二进制编码。例如,您的x可能看起来:

10110110 | 00101

前8位编码数字的整数部分,剩余13位编码点后数字的部分。在本例中,二进制字符串编码为158.0007

五月的容貌

1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1-158.0007

1 1 0 0 0 0 1 0 0 0 0 0 0 0 0-225.0008

最简单的交叉算子是一个分割点。从1到字符串长度-1生成一个数字。从这一点上,你们可以从一个字符串中得到一个比特,从这一点上,你们可以从第二个字符串中得到一个比特。在本例中,我们选择“分割点4位置”。后代将看起来像:

1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0-145.0008

突变以选择的概率改变某些位

适应度函数可以是x中二次方程的函数值(如果您尝试找到最大值),x作为位字符串的解码而获得


最后是一些理论。你有两套。一组是搜索空间(包含二进制字符串的空间),第二组是包含解决方案的空间。搜索空间中的个体被解码到解空间中的解中(在我们的例子中,x值由二进制字符串编码)。搜索空间表示基因型,解码解为表型。遗传学操作符使用解码的解处理搜索空间个体(本例中为二进制字符串)和适应度函数。

第一步是选择解的表示形式。最广泛使用的是二进制编码。例如,您的x可能看起来:

10110110 | 00101

前8位编码数字的整数部分,剩余13位编码点后数字的部分。在本例中,二进制字符串编码为158.0007

五月的容貌

1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1-158.0007

1 1 0 0 0 0 1 0 0 0 0 0 0 0 0-225.0008

最简单的交叉算子是一个分割点。从1到字符串长度-1生成一个数字。从这一点上,你们可以从一个字符串中得到一个比特,从这一点上,你们可以从第二个字符串中得到一个比特。在本例中,我们选择“分割点4位置”。后代将看起来像:

1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0-145.0008

突变以选择的概率改变某些位

适应度函数可以是x中二次方程的函数值(如果您尝试找到最大值),x作为位字符串的解码而获得


最后是一些理论。你有两套。一组是搜索空间(包含二进制字符串的空间),第二组是包含解决方案的空间。搜索空间中的个体被解码到解空间中的解中(在我们的例子中,x值由二进制字符串编码)。搜索空间表示基因型,解码解为表型。遗传学操作员使用解码的解决方案处理搜索空间个体(本例中为二进制字符串)和适应度函数。

谢谢您的回答,那么我们需要找到一个4位数的解决方案的要求会发生什么呢?我如何将其整合到问题中?@Farzad你可以使用浮点数,如果f(x)<0.0001*x,那么你可以四舍五入到4位数。谢谢你的回答,那么我们需要找到一个4位数的解决方案的要求会发生什么呢?我怎样才能将其整合到问题中?@Farzad你可以使用浮点数,如果f(x)<0.0001*x,那么你可以四舍五入到4位。谢谢你的详细解释。在我们的例子中,你能更详细地阐述一下适应度函数吗?它是寻找二次方程的一个解。例如,你可以尝试在区间0-256.xxxx上找到一个二次函数的最大值。二次方程可能看起来像:2*x^2-5x+3。你解码一个二进制字符串,得到例如5。二进制字符串的适合度=2*5^2-25+3=28。所以这根弦的适合度是43。对另一个字符串进行解码,得到值10。所以这个字符串的适合度是2*10^2-50+3=153。解码值为10的字符串具有更大的适用性:)对不起,第一个字符串的适用性将为28。感谢您的详细解释。在我们的例子中,你能更详细地阐述一下适应度函数吗?它是寻找二次方程的解,好的,你来检查一下