您在实际应用中使用过遗传算法吗?
我想知道在商业代码中找到遗传算法方法有多常见。
在我看来,某些类型的调度程序可以从 GA 引擎中受益,作为主要算法的补充。
I was wondering how common it is to find genetic algorithm approaches in commercial code.
It always seemed to me that some kinds of schedulers could benefit from a GA engine, as a supplement to the main algorithm.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
遗传算法已在商业上得到广泛应用。 优化火车路线是一个早期的应用。 最近,战斗机已使用 GA 来优化机翼设计。 我在工作中广泛使用 GA 来生成具有极大搜索空间的问题的解决方案。
许多问题不太可能从 GA 中受益。 我不同意托马斯的观点,认为它们太难理解了。 GA实际上非常简单。 我们发现,通过针对可能很困难的特定问题优化 GA 可以获得大量知识,并且管理大量并行计算始终是许多程序员的一个问题。
受益于 GA 的问题将具有以下特征:
有许多问题可能会从 GA 中受益,并且将来它们可能会得到更广泛的部署。 我相信 GA 在尖端工程中的应用比人们想象的要多,但大多数人(就像我的公司一样)都非常严格地保护这些秘密。 直到很久之后,人们才发现使用了 GA。
大多数处理“普通”应用程序的人可能对它们没有太多用处。
Genetic Algorithms have been widely used commercially. Optimizing train routing was an early application. More recently fighter planes have used GAs to optimize wing designs. I have used GAs extensively at work to generate solutions to problems that have an extremely large search space.
Many problems are unlikely to benefit from GAs. I disagree with Thomas that they are too hard to understand. A GA is actually very simple. We found that there is a huge amount of knowledge to be gained from optimizing the GA to a particular problem that might be difficult and as always managing large amounts of parallel computation continue to be a problem for many programmers.
A problem that would benefit from a GA is going to have the following characteristics:
There are many problems that could probably benefit from GAs and in the future they will probably be more widely deployed. I believe that GAs are used in cutting edge engineering more than people think however most people (like my company does) guards those secrets extremely closely. It is only long after the fact that it is revealed that GAs were used.
Most people that deal with "normal" applications probably don't have much use for them though.
如果您想查找示例,请查看 Postgres 的查询规划器。 它使用了多种技术,其中一种恰好是遗传的。
http://developer.postgresql.org/pgdocs/postgres/geqo-pg -intro.html
If you want to find an example, look at Postgres's Query Planner. It uses many techniques, and one just so happens to be genetic.
http://developer.postgresql.org/pgdocs/postgres/geqo-pg-intro.html
我在硕士论文中使用了遗传算法,但之后我在日常工作中没有发现任何其他算法无法更快解决的问题,而遗传算法可以解决。
I used GA in my Master's thesis, but after that I haven't found anything in my daily work a GA could solve that I couldn't solve faster with some other Algorithm.
我认为在日常商业代码中发现遗传算法并不特别常见。 它们更常见于学术/研究代码中,其中找到“最佳算法”的需要不如找到问题的良好解决方案的需要重要。
尽管如此,我还是咨询了几个确实使用 GA 的商业项目(主要是由于我参与了 GAUL)。 我认为最有趣的例子是在一家生物技术公司。 他们使用 GA 来优化用于虚拟筛选的评分函数,作为药物发现应用的一部分。
今年早些时候,我在我的当前公司中,为我们的一款产品添加了一项新功能,该功能使用另一个GA。 我想我们可能会从下个月开始营销这个产品。 基本上,GA 用于探索有可能与蛋白质结合的分子,因此可以作为针对该蛋白质的药物进行进一步研究。 同样使用 GA 的竞争产品是 EA inventory。
I don't think it is particularly common to find genetic algorithms in everyday-commercial code. They are more commonly found in academic/research code where the need to find the "best algorithm" is less important than the need to just find a good solution to a problem.
Nonetheless, I have consulted on a couple of commercial projects that do use GAs (chiefly as a result of my involvement with GAUL). I think the most interesting example was at a Biotech company. They used the GA to optimise scoring functions that were used for virtual screening, as part of their drug discovery application.
Earlier this year, with my current company, I added a new feature to one of our products that uses another GA. I think we might be marketing this from next month. Basically, the GA is used to explore molecules that have the potential for binding to a protein, and could therefore be further investigated as drugs targeting that protein. A competing product that also uses a GA is EA inventor.
作为我论文的一部分,我为多目标优化算法 mPOEMS(具有进化改进步骤的多目标原型优化)编写了一个通用的 java 框架,这是一个使用进化概念的 GA。 它的通用性在于,所有与问题无关的部分都已与问题相关的部分分离,并且提供了一个接口来仅添加与问题相关的部分来使用该框架。 这样想使用该算法就不必从零开始,工作起来也方便很多。
您可以在此处找到代码。
使用该算法找到的解决方案已在科学著作中与最先进的算法 SPEA-2 和 NSGA 进行了比较,并且已证明:
该算法的性能相当甚至更好,具体取决于您用来衡量性能的指标,特别是取决于您正在寻找的优化问题。
您可以找到它此处。
另外,作为我的论文和工作证明的一部分,我将该框架应用于项目组合管理中发现的项目选择问题。 它是关于选择为公司增加最大价值、最支持公司战略或支持任何其他任意目标的项目。 例如,从特定类别中选择一定数量的项目,或最大化项目协同效应,......
我的论文将该框架应用于项目选择问题:
http://www.ub.tuwien.ac.at/dipl/2008 /AC05038968.pdf
之后,我在财富 500 强之一的投资组合管理部门工作,他们使用商业软件,该软件也将遗传算法应用于项目选择问题/投资组合优化。
更多资源:
框架的文档:
http://thomaskremmel.com/mpoems/mpoems_in_java_documentation.pdf
mPOEMS 演示文稿:
http://portal.acm.org/itation.cfm?id=1792634.1792653
实际上,只要有一点热情,每个人都可以轻松地将通用框架的代码应用于任意多目标优化问题。
As part of my thesis I wrote a generic java framework for the multi-objective optimisation algorithm mPOEMS (Multiobjective prototype optimization with evolved improvement steps), which is a GA using evolutionary concepts. It is generic in a way that all problem-independent parts have been separated from the problem-dependent parts, and an interface is povided to use the framework with only adding the problem-dependent parts. Thus one who wants to use the algorithm does not have to begin from zero, and it facilitates work a lot.
You can find the code here.
The solutions which you can find with this algorithm have been compared in a scientific work with state-of-the-art algorithms SPEA-2 and NSGA, and it has been proven that
the algorithm performes comparable or even better, depending on the metrics you take to measure the performance, and especially depending on the optimization-problem you are looking on.
You can find it here.
Also as part of my thesis and proof of work I applied this framework to the project selection problem found in portfolio management. It is about selecting the projects which add the most value to the company, support most the strategy of the company or support any other arbitrary goal. E.g. selection of a certain number of projects from a specific category, or maximization of project synergies, ...
My thesis which applies this framework to the project selection problem:
http://www.ub.tuwien.ac.at/dipl/2008/AC05038968.pdf
After that I worked in a portfolio management department in one of the fortune 500, where they used a commercial software which also applied a GA to the project selection problem / portfolio optimization.
Further resources:
The documentation of the framework:
http://thomaskremmel.com/mpoems/mpoems_in_java_documentation.pdf
mPOEMS presentation paper:
http://portal.acm.org/citation.cfm?id=1792634.1792653
Actually with a bit of enthusiasm everybody could easily adapt the code of the generic framework to an arbitrary multi-objective optimisation problem.
我没有,但我从我的一个朋友那里听说过这家公司(不记得他们的名字了),它使用变异遗传算法来计算天线(或其他东西)的位置和长度。 他们应该(据我的朋友说)在这方面取得了巨大的成功。 我认为 GA 对于“普通开发人员”来说太复杂了,无法成为主流。 有点像 MapReduce——非常酷,但是太先进了,无法进入“主流”......
I haven't but I've heard of this company (can't remember their name) which uses mutating, genetic algos to calculate placements and lengths of antennas (or something) from a friend of mine. And they're supposed to (according to my friend) have huge success with this. I guess GA is just too complex for "average Joe developer" to become mainstream. Kind of like Map Reduce - spectacularly cool, but WAY too advanced to hit the "mainstream"...
LibreOffice Calc 在其 Solver 模块中使用它。
LibreOffice Calc uses it in its Solver module.