假设我有一个分配问题,需要为乘客分配座位。我需要强制约束,即任何给定的座位最多只能分配一个乘客,每个乘客只能分配一个座位。
线性规划提供了一种阐明这些约束的方法;然而,对于非线性目标函数,启发式算法,如遗传算法,是潜在的合适的优化模型选择。
如果有25个座位,我需要一种机制来采样这些座位,而不需要在基因初始化时更换。此外,我需要突变和交叉来观察这个约束。
gene_space = [
{"low": 1, "high": 25, "step": 25},
]
我的问题是:
- PyGAD是否支持这个没有替换功能的集合采样?
- 如果没有,是否有一种算法可以适应随机抽样的整数并强制执行此约束?
关于2,部分解决方案可能包括使用给定的随机抽样整数的累积分布函数,并以某种方式使用CDF从可用的座位中检索没有替换的样本。(这种方法可能效率低下,可能会阻碍使用PyGAD的一些好处。)
可以设置allow_duplicate_genes=False
防止重复基因。这样,给予一个基因的值将不会被另一个基因使用。
import pygad
...
ga_instance = pygad.GA(...,
allow_duplicate_genes=False,
...)
ga_instance.run()
...