差分进化可以解决需要依赖参数变异的问题吗?
Can Differential Evolution solve problems that require mutation of dependent parameters?
差分进化 (DE) 和遗传算法 (GA) 之间的一个区别是,DE 会丢弃一个新候选者,除非它比派生它的旧候选者更合适,而 GA 允许 "less fit" 个候选者以一定的概率生存。最初 DE 的方法听起来是个好主意,但我认为这会阻止它解决以下类别的问题。
假设我们正在尝试最大化以下的健身分数:
A - [max(0, A - 50) * B] + [max(0, A - 75) * 2 * B]
其中参数范围从 0
到 100
。
- 最初增加
A
是有益的,直到达到 50
。
- 接下来,将
B
设置为零是有好处的。
- 接下来,将
A
增加到75是有好处的。
- 接下来,有利于同时增加
B
和A
。
最后一点很重要:如果 A
或 B
中的任何一个独立增加,则健康分数将会下降。
回到差分进化算法,我看不出它是如何解决上述问题的,因为最初我们希望每一代只改变一个参数,但最终我们希望每一代改变多个参数。如果我们过早地改变每一代的多个参数,我们就会降低生存的可能性,进而降低进化速度。但是,如果我们一次改变一个参数,我们将永远找不到全局最大值。
我的问题如下:
- 这是差异进化算法的已知问题吗?
- 是否有已知的解决方案?
- 通用算法是否遇到同样的问题?
我不是在要求解决上述特定功能。我问的是差分进化是否有可能解决你事先不知道在任何给定时间需要改变多少参数并且你希望最终尽可能接近全局最大值的问题。
DE is a popular optimization metaheuristics with a significant number of variants (some examples here).
第一个 DE 归功于 R. Storn 和 K. Price (1997)。从那时起,许多主要运营商的变化,杂交,自动参数调整,自适应方案,结构化种群......已被提出。
因此,要准确回答该问题,需要提供有关您所指的 DE 风格的更多详细信息。
无论如何,DE 的典型方案是:
g = 0 // Generation 0
P(g) = {x_1(g), ... , x_n(g)} // Population initialization
while (!stop()) // Some stop condition
for i = 1 to n
y_i = new_mutant(X(g))
z_i = crossover(x_i(g), y_i)
if f(z_i) < f(x_i(g))
x_i(g + 1) = z_i
else
x_i(g + 1) = x_i(g)
++g
crossover()
函数的一个常见选择是二项式交叉(类似于 GA uniform crossover):
if (random(0,1) < CR || j == 0)
z_i[j] = y_i[j]
else
z_i[j] = x_i[j]
(描述的策略常被称为rand1bin)
通常从突变向量中提取不止一个(至少一个)成分。
从进化开始到结束,DE产生一个或两个参数A
/ B
突变的后代(这是通过[控制的] =15=]).
这不是问题,因为 DE 是一种基于人口的算法:对一个人来说 "eventual" 对另一个人来说是 "initial"。
rand1bin,特别是,是一个很好的探索策略和初始种群利用全数值范围的参数(即[=示例中的 16=])避免了所描述的问题。
在我看来,修改顺序可能只对少数群体或初始多样性受到不必要限制的群体是个问题。
使用 rand1bin / best1bin 和少量人口(20 个人,即 10 x number of parameters
)的各种模拟证实了特定功能不是 "hard" 并且全局最大值经常在 120 代内找到。
差分进化 (DE) 和遗传算法 (GA) 之间的一个区别是,DE 会丢弃一个新候选者,除非它比派生它的旧候选者更合适,而 GA 允许 "less fit" 个候选者以一定的概率生存。最初 DE 的方法听起来是个好主意,但我认为这会阻止它解决以下类别的问题。
假设我们正在尝试最大化以下的健身分数:
A - [max(0, A - 50) * B] + [max(0, A - 75) * 2 * B]
其中参数范围从 0
到 100
。
- 最初增加
A
是有益的,直到达到50
。 - 接下来,将
B
设置为零是有好处的。 - 接下来,将
A
增加到75是有好处的。 - 接下来,有利于同时增加
B
和A
。
最后一点很重要:如果 A
或 B
中的任何一个独立增加,则健康分数将会下降。
回到差分进化算法,我看不出它是如何解决上述问题的,因为最初我们希望每一代只改变一个参数,但最终我们希望每一代改变多个参数。如果我们过早地改变每一代的多个参数,我们就会降低生存的可能性,进而降低进化速度。但是,如果我们一次改变一个参数,我们将永远找不到全局最大值。
我的问题如下:
- 这是差异进化算法的已知问题吗?
- 是否有已知的解决方案?
- 通用算法是否遇到同样的问题?
我不是在要求解决上述特定功能。我问的是差分进化是否有可能解决你事先不知道在任何给定时间需要改变多少参数并且你希望最终尽可能接近全局最大值的问题。
DE is a popular optimization metaheuristics with a significant number of variants (some examples here).
第一个 DE 归功于 R. Storn 和 K. Price (1997)。从那时起,许多主要运营商的变化,杂交,自动参数调整,自适应方案,结构化种群......已被提出。
因此,要准确回答该问题,需要提供有关您所指的 DE 风格的更多详细信息。
无论如何,DE 的典型方案是:
g = 0 // Generation 0
P(g) = {x_1(g), ... , x_n(g)} // Population initialization
while (!stop()) // Some stop condition
for i = 1 to n
y_i = new_mutant(X(g))
z_i = crossover(x_i(g), y_i)
if f(z_i) < f(x_i(g))
x_i(g + 1) = z_i
else
x_i(g + 1) = x_i(g)
++g
crossover()
函数的一个常见选择是二项式交叉(类似于 GA uniform crossover):
if (random(0,1) < CR || j == 0)
z_i[j] = y_i[j]
else
z_i[j] = x_i[j]
(描述的策略常被称为rand1bin)
通常从突变向量中提取不止一个(至少一个)成分。
从进化开始到结束,DE产生一个或两个参数A
/ B
突变的后代(这是通过[控制的] =15=]).
这不是问题,因为 DE 是一种基于人口的算法:对一个人来说 "eventual" 对另一个人来说是 "initial"。
rand1bin,特别是,是一个很好的探索策略和初始种群利用全数值范围的参数(即[=示例中的 16=])避免了所描述的问题。
在我看来,修改顺序可能只对少数群体或初始多样性受到不必要限制的群体是个问题。
使用 rand1bin / best1bin 和少量人口(20 个人,即 10 x number of parameters
)的各种模拟证实了特定功能不是 "hard" 并且全局最大值经常在 120 代内找到。