在遗传算法中,编码染色体是否可以使某些位比同一染色体中的其他位更重要?例如,(index%2 == 0)/(2,4,6,..)位比(index%2!= 0)/(1,3,5,..)位更重要。例如,如果位2的值在范围[1,5]中,则我们考虑位3的值,如果位2的值为0,则位3的值不起作用。
例如,如果问题是我们有多个课程要由学校提供,我们想知道在下学期应该提供哪个课程,哪个不应该提供,以及是否应该提供应该教授的课程那个课程,当他/她应该教它。因此,表示问题的一种方法是使用长度为2n的向量,其中n是课程数。每个课程都由一个2元组(谁,何时)表示,何时何时应该教授课程以及谁应该教授它。第i个位置的元组保存第i个课程的分配。现在,教师的ids [1-10]的可能值以及时间的可能值是所有可能的时间加0,其中0表示在任何时候都不意味着不应该提供课程。
现在可以拥有两个具有相同健身状态的不同元组吗?例如,(3,0)和(2,0)是第i个课程的不同值,但它们的意思相同,不应该提供这个课程,因为我们不关心谁当= 0 。或者我应该向谁添加0,以便0表示没有人教,而元组表示当且仅当其值为(0,0)时才应提供相应的课程。但是(0,v)和(v,0)如何,其中v> 0?我是否应该认为这些意味着不应该提供课程?我需要帮助。
答案 0 :(得分:0)
我不确定我是否完全理解你的问题,但我会尽力回答。
使用遗传算法解决问题时,您可以在编码方式上拥有很大的灵活性。从广义上讲,有两个地方某些位可以更突出:在适应度函数或算法的实现(即选择,交叉和变异)。如果你想改变健身功能中某些位的突出性,我就可以继续。这将鼓励您想要的行为,并且通常会导致某些位更为突出的解决方案。
我使用了很多遗传算法,其中适应度函数给出了一些比特(或比特分组)比其他比特更重要。这是相当标准的。
在遗传算法实现中使某些位比其他位更突出时,我会更加小心。我使用的算法只允许某些位变异,或者只能在某些点交叉。有时他们可以很好地工作(有时候他们在问题上是必要的)但是在大多数情况下他们更难以做到正确,而且更容易出现过早收敛等问题。
编辑: 在回答问题的第二部分和您的意见时:
处理不应该提供课程的情况的最佳方法可能是健身功能。只需给予这些低分(或无分数)。这同样适用于染色体中的重复序列。从理论上讲,这应该阻止它们成为人口中的普遍部分。或者,您可以申请一种"剔除"每一代,它完全去除了人群中不可行的染色体。您可以通过完全排除染色体来混合两者,而不选择健康评分。
从你所说的关于这个问题的话来看,听起来像无活力的染色体可能会很常见。这不一定是个问题。如果您的适应度函数编码良好,并且您使用正确的选择和交叉方法,那么它不应成为问题。只要更可行的解决方案更合适,您就应该能够发展出一个好的解决方案。
在某些情况下,在染色体的某些点停止交叉是一个好主意。听起来可能就是这种情况,但同样,在不了解您的实施情况的情况下,很难说。
在不了解您计划如何实施算法的情况下,我无法提供更详细的答案。我也不是很熟悉这个问题。这不是我做过的事情。如果您添加一些关于如何编码问题和适应度函数的详细信息,我可以提供更具体的建议。