我目前正在阅读“人工智能:一种现代方法”(Russell+Norvig)和“机器学习”(Mitchell),并尝试学习 AINN 的基础知识。
为了理解一些基本的东西,我有两个“新手”问题:
Q1:在遗传算法中,给定两个父代 A 和 B,染色体分别为 001110 和 101101,以下哪个后代可能是单点交叉的结果?
a: 001101
b: 001110
Q2:以上哪个后代可能是两点交叉的结果?为什么?
请指教。
回答:
如果你不知道反向交叉函数,就不可能找到父代(所以 AxB => (a,b) & (any a) => (A,B))。
通常,单点交叉函数是:
a = A1 + B2
b = B1 + A2
即使你知道a和b,你也无法解这个系统(包含4个变量的2个方程组)。
如果你知道任何 A 或/和 B 的任何 2 部分,那么它可以被解(包含2个变量的2个方程组)。你的问题就是这种情况,因为你提供了 A 和 B。
一般来说,交叉函数没有反函数,你只需要通过逻辑找到解决方案,或者,如果你知道父代,则执行交叉并比较。
因此,为了为你制定一个通用公式,我们应该知道两件事:
- 交叉函数。
- 反向交叉函数。
第二个通常不在 GA 中使用,因为它不是必需的。
现在,我将直接回答你的问题。
Q1:在遗传算法中,给定两个父代 A 和 B,染色体分别为 001110 和 101101,以下哪个后代可能是单点交叉的结果?
看着a和b,我可以看到交叉点在这里:
1 2
A: 00 | 1110
B: 10 | 1101
通常,交叉使用这个公式完成:
a = A1 + B2
b = B1 + A2
所以可能的子代是:
a: 00 | 1101
b: 10 | 1110
这排除了问题中的选项 b。
所以 Q1 的答案是,假设给定的交叉函数,结果子代是 a:001101
Q2:以上哪个后代可能是两点交叉的结果?为什么?
看着 a 和 b,我可以看到交叉点可能在这里:
1 2 3
A: 00 | 11 | 10
B: 10 | 11 | 01
两点交叉的常用公式是:
a = A1 + B2 + A3
b = B1 + A2 + B3
所以子代将是:
a = 00 | 11 | 10
b = 10 | 11 | 01
将它们与你提出的选项(小a和b)进行比较,我们可以说答案:
Q2. A: 根据给定的交叉函数,a或b都不可能是AxB的两点交叉的结果。
再次强调,在不知道交叉函数的情况下,不可能回答你的问题。
我提供的函数在 GA 中很常见,但你可以发明很多,以便它们能够回答问题(请参阅下面的评论):