我是遗传算法的新手,下面是我正在进行的工作中的一个简单部分
有工厂(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如何使用遗传算法来解决运输问题以最小化成本
发布于 2018-12-03 20:16:23
首先,你应该了解什么是遗传算法,以及为什么我们这么叫它。因为我们的行为就像一个单细胞有机体,进行交叉和突变以达到更好的状态。
所以,你需要首先实现你的染色体。在你的情况下,让我们站在一边,客户或工厂。让我们以客户为例。您的解决方案将如下所示
1个-> A
2个-> B
3 -> C
因此,您的示例染色体是"ABC"。然后创建另一个染色体(例如“BCA”),现在您需要一个想要最小化/最大化的拟合函数。此函数将计算您的染色体的繁殖机会。在你的情况下,这将是总成本。编写一个函数来计算给定工厂和给定客户的成本。
现在,你要做的是,
"ABA" ),请进行修复移动(例如,使“A”之一,"C“)。如果之前没有新的染色体,我们称它为"mutation".您将在一些迭代中执行此操作。你可能有上千条染色体。当你认为“足够了”时,停止这个过程,并对染色体集进行升序/降序排序。第一条染色体就是你的结果。
我意识到这使得这个过程依赖于时间/染色体。我知道,如果你运行得不够充分,你可能会也可能找不到最优的(生物学上认为是最合适的)染色体。这就是所谓的遗传算法。即使你的第一次运行和第二次运行也可能会产生或不会产生相同的结果,这很好。
就你的情况而言,可能的染色体集非常小,所以我保证你会在一两秒内找到最优的。因为整个染色体组对你来说都是["ABC", "BCA", "CAB", "BAC", "CBA", "ACB"]。
总而言之,应用遗传算法需要3个信息:
中进行交叉时,我的合适function?
这个问题还有其他一些需要关心的事情:
发布于 2018-12-14 13:16:52
正如nejdetckenobi的答案中所提到的,在这种情况下,解决方案搜索空间太小,即只有8个可行解决方案["ABC", "BCA", "CAB", "BAC", "CBA", "ACB"]。我假设这只是您的问题的简化版本,并且您的问题实际上包含更多的工厂和客户(但工厂和客户的数量是相等的)。在这种情况下,你可以利用特殊的变异和交叉来避免重复客户的不可行解,例如["ABA", 'CCB', etc.]。
对于突变,我建议使用交换突变,即随机选择两个客户,交换他们对应的工厂(位置):
ABC突变为ACB
ABC变异为CBA
https://stackoverflow.com/questions/53592339
复制相似问题