我是遗传算法的新手,这是我正在研究的一小部分内容
有工厂(1,2,3),可以为以下任何一个客户(ABC)服务,运输成本如下表所示。 A,B,C(2,4,1)有一些固定成本
A B C
1 5 2 3
2 2 4 6
3 8 5 5
如何使用遗传算法解决运输问题以最小化成本
答案 0 :(得分:1)
首先,您应该了解什么是遗传算法以及为什么我们这样称呼它。因为我们的行为像一个单一的细胞生物,并且进行交叉和突变以达到更好的状态。
因此,您需要首先实现染色体。根据您的情况,让我们站在客户或工厂的一边。让我们来吸引客户。您的解决方案看起来像
1-> A
2-> B
3-> C
因此,您的示例染色体为"ABC"
。然后创建另一个染色体(例如“ BCA”)
现在,您需要一个拟合函数,希望将其最小化/最大化。
此功能将计算您的染色体的繁殖机会。根据您的情况,这就是总费用。
编写一个计算给定工厂和给定客户成本的函数。
现在,您要做的就是
"ABA"
),请进行固定移动(例如,使“ A”中的一个成为“ C”)。我们称之为“变异”。您将对此进行一些迭代。您可能有数千条染色体。当您认为“足够”时,请停止该过程并按升序/降序对染色体组进行排序。第一条染色体将是您的结果。
我知道这使得处理时间/染色体依赖。我知道,如果运行不充分,可能会找到最佳染色体(根据生物学情况最合适)。但这就是遗传算法。甚至您的第一轮和第二轮也可能会或可能不会产生相同的结果,这很好。
根据您的情况,可能的染色体集非常小,因此,我保证您会在一两秒钟内找到最佳染色体。因为整个染色体对您来说是["ABC", "BCA", "CAB", "BAC", "CBA", "ACB"]
。
总而言之,您需要3条信息来应用遗传算法:
还有其他一些事情可以解决这个问题:
答案 1 :(得分:1)
如nejdetckenobi的答案中所述,在这种情况下,解决方案搜索空间太小,即只有8个可行解决方案["ABC", "BCA", "CAB", "BAC", "CBA", "ACB"]
。我认为这只是您问题的简化版本,并且您的问题实际上包含更多的工厂和客户(但是工厂和客户的数量相等)。在这种情况下,您可以利用特殊的变异和交叉来避免回头客的不可行解决方案,例如["ABA", 'CCB', etc.]
。
对于突变,我建议使用交换突变,即随机选择两个客户,交换其相应的工厂(职位):
A BC 突变为A CB
A B C 突变为 C B A