PyGAD:如何将基因限制在不重复的样本集中进行抽样?

3
假设我有一个分配问题,需要将骑手分配到座位上。我需要强制执行的约束条件是,每个座位最多只能分配一个骑手,每个骑手必须分配一个座位。
线性规划提供了表达这些约束条件的方法;然而,由于目标函数是非线性的,启发式算法(例如遗传算法)可能是一个合适的优化模型选择。
如果有25个座位可用,我需要一种在初始化基因时无需重复抽样这些座位的机制。此外,我需要突变和交叉来满足这个约束条件。
gene_space = [
    {"low": 1, "high": 25, "step": 25},
]

我的问题是:

  1. PyGAD是否支持无重复采样的功能?
  2. 如果不支持,是否有可用的算法可以自适应地随机采样整数并强制执行此约束条件?

关于第2个问题,部分解决方案可能包括使用累积分布函数,给出带替换的随机抽样整数,并以某种方式使用CDF从可用座位中检索无重复样本。(这种方法可能效率较低,可能会阻碍使用PyGAD的一些优点。)

1个回答

1
您可以设置allow_duplicate_genes=False来防止重复基因。这样,给定一个基因的值将不会被另一个基因使用。
import pygad
...
ga_instance = pygad.GA(...,
                       allow_duplicate_genes=False,
                       ...)
ga_instance.run()
...

1
嗯,我不确定。考虑旅行商问题。有N个站点,每个站点需要被访问一次。一个基因的长度为N,gene[i]代表分配给给定站点的停靠编号。因此,每个基因必须包含1…N,基因之间唯一的区别在于每个值在哪个基因索引中找到。换句话说,每个基因必须有第一个停靠点;但是有些基因在最小化总行程方面比其他基因更好。我不确定allow_duplicates=False是否支持这种用例。 - jbuddy_13

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接