<p>对于python,<a href="https://code.google.com/p/deap/" rel="nofollow">DEAP</a>可能就是您要查找的对象。大量的<a href="http://deap.gel.ulaval.ca/doc/default/index.html" rel="nofollow">documentation</a>有很多真实的例子,还有一个非常有用的googlegroups论坛。它实现了两个健壮的MO算法:NSGA-II和SPEA-II。在</p>
<p><strong>编辑(按要求)</strong></p>
<p>我在硕士论文中使用了DEAP,所以我会告诉你我们是如何使用Pareto最优性的。设置DEAP非常简单,正如您将在示例中看到的那样。以<a href="http://deap.gel.ulaval.ca/doc/dev/examples/ga_onemax.html" rel="nofollow">this one</a>为起点。这是<a href="https://code.google.com/p/deap/source/browse/examples/ga/onemax_short.py?name=dev" rel="nofollow">short version</a>,它使用内置的算法和运算符。阅读这两个,然后遵循这些指导原则。在</p>
<p>由于OneMax的例子是单目标的,所以它没有使用MO算法。但是,它们很容易实现:</p>
<ul>
<li>更改求值函数,使其返回一个具有所需分数的n元组。如果您还想最小化标准偏差,类似<code>return sum(individual), numpy.std(individual)</code>的方法就可以了。在</li>
<li>另外,修改<a href="http://deap.gel.ulaval.ca/doc/dev/api/base.html#fitness" rel="nofollow">^{<cd3>}</a>对象的<code>weights</code>参数,使其与返回的n元组相匹配。正浮动意味着最大化,负浮动意味着最小化。您可以使用任何实数,但为了简单起见,我将坚持使用<code>1.0</code>和{<cd5>}。在</li>
<li>将你的遗传算子改为<a href="http://deap.gel.ulaval.ca/doc/dev/api/tools.html#deap.tools.cxSimulatedBinaryBounded" rel="nofollow">^{<cd6>}</a>,<a href="http://deap.gel.ulaval.ca/doc/dev/api/tools.html#deap.tools.mutPolynomialBounded" rel="nofollow">^{<cd7>}</a>和{a8},分别用于交叉、突变和选择操作。这些是建议的方法,因为它们是由NSGA-II的作者开发的。在</li>
<li>如果您想在DEAP中使用一种嵌入的现成算法,请选择<a href="http://deap.gel.ulaval.ca/doc/dev/api/algo.html#deap.algorithms.eaMuPlusLambda" rel="nofollow">^{<cd9>}</a>。在</li>
<li>调用算法时,请记住将<code>halloffame</code>参数从<a href="http://deap.gel.ulaval.ca/doc/dev/api/tools.html#hall-of-fame" rel="nofollow">^{<cd11>}</a>更改为<a href="http://deap.gel.ulaval.ca/doc/dev/api/tools.html#deap.tools.ParetoFront" rel="nofollow">^{<cd12>}</a>。这将返回所有非支配个体,而不是按词典排序的“各代最佳个体”。然后您可以根据需要解析Pareto前沿:加权和、自定义词典排序等</li>
</ul>
<p>我希望这有帮助。考虑到还有一个完整的、更高级的NSGA2示例可用<a href="https://code.google.com/p/deap/source/browse/examples/ga/nsga2.py?name=dev" rel="nofollow">here</a>。在</p>