多背包问题的改进遗传算法
Posted
技术标签:
【中文标题】多背包问题的改进遗传算法【英文标题】:Improved Genetic algorithm for multiknapsack problem 【发布时间】:2010-06-01 16:51:09 【问题描述】:最近我一直在改进多背包问题的传统遗传算法。所以我改进的遗传算法比传统的遗传算法效果更好。我测试过。 (我使用从 OR-Library (http://people.brunel.ac.uk/~mastjjb/jeb/orlib/mknapinfo.html) 公开提供的用于测试 GA。)有人知道其他改进的 GA。我想与其他改进的遗传算法进行比较。其实我在互联网上搜索。但是找不到比较好的算法。
【问题讨论】:
我不确定您所说的“传统遗传算法”是什么意思。您可以在一个简单的遗传算法中使用许多不同的设置(例如种群大小、突变率、交叉方法、选择方法、在基因型中编码解决方案的方法)。很难找到一种算法可以为您提供遗传算法的明确代表。 【参考方案1】:应该有任意数量的体面 GA 方法可供您比较。但是,您应该首先尝试清楚地确定您已经测试过哪种“传统” GA 方法。
我可以推荐的一个好方法是NSGA-II algorithm,它是为多目标优化而开发的。
看看下面的其他想法:
Genetic Algorithm - Wikipedia Carlos A. Coello Coello (1999)。 “A Comprehensive Survey of Evolutionary-Based Multiobjective Optimization Techniques”,知识与信息系统,卷。 1,第 269-308 页。 Carlos A. Coello Coello 等人 (2005)。 “Current and Future Research Trends in Evolutionary Multiobjective Optimization”,使用进化算法进行信息处理,Springer。【讨论】:
【参考方案2】:您只能将您的解决方案与具有完全相同编码和适应度函数的问题进行比较(这意味着它们是等效的问题)。如果问题不同,随着问题的变化,任何比较都会很快变得无关紧要,因为适应度函数几乎总是针对您要解决的任何问题。事实上,如果您使用遗传算法工具包,您只需编写适应度函数即可,因为其他所有内容通常都是开箱即用的。
另一方面,如果适应度函数相同,那么在给定不同参数的情况下比较结果是有意义的,例如不同的突变率、不同的交叉实现,甚至完全不同的进化范式,例如协同进化、基因表达式,与标准 GA 相比,等等。
【讨论】:
是的,你的真正仪式,我完全接受。当我在有问题的情况下使用健身功能时。它真的很有效。所以现在我正在改变一些参数,比如交叉率、突变率。但实际上这些东西已经被研究过了。我的意思是已经几乎像突变一样恒定取决于问题1 / n,类似的东西。现在我在做什么,我正在修改交叉运算符。很明显,它可以提高 GA 性能。目前我的算法无论如何都比许多算法工作得更好(我刚刚测试了多背包问题)。但我还不够。 世界太大了,有时候我什么都不懂。当我明白一些东西时,世界有时太小了。仍在努力。【参考方案3】:您是否正在尝试通过使用遗传算法来改进多背包求解器的最新技术?或者您是否试图通过使用 multiknapsack 作为测试平台来推进遗传算法技术? (你能澄清一下吗?)
根据您的目标,您的问题的答案完全不同。由于其他人已经解决了后一个问题,我将假设前者。
在基本遗传算法上几乎没有什么重大飞跃。通过使用遗传算法解决多背包问题的最佳改进是改进对变异和交叉算子的编码,这可以使结果性能产生数量级的差异,并对基本遗传算法进行任何调整.您可以做很多事情来使您的变异和交叉运算符适合多背包。
我会首先调查关于多背包的文献,看看人们在多背包上使用了哪些不同类型的搜索空间和解决方案技术。在他们的最优或次优方法(独立于遗传算法)中,他们使用什么样的搜索算子?它们将什么编码为变量以及它们将什么编码为值?使用了哪些启发式评估函数?他们检查什么约束?然后,您将根据您的变异和交叉运算符调整它们的编码,并查看它们在您的遗传算法中的表现如何。
高效的搜索空间编码或多背包问题的准确启发式评估函数很可能转化为高效的变异和交叉算子。由于多重背包是一个拥有大量研究文献的很好研究的问题,它应该是你的金矿。
【讨论】:
抱歉没有明确的答案。我正在尝试通过使用 multiknapsack 作为测试平台来推进遗传算法技术。我得到了它。我会考虑你所说的一切。以上是关于多背包问题的改进遗传算法的主要内容,如果未能解决你的问题,请参考以下文章
背包问题基于matlab遗传算法结合贪婪算法求解背包问题含Matlab源码 791期