【问题标题】:Solve multi-objectives optimization of a graph in Python在 Python 中解决图的多目标优化
【发布时间】:2013-12-23 02:13:48
【问题描述】:

我正在尝试在大型图上找到似乎复杂且耗时的多目标优化。

问题是:我想找到一个包含 n 个顶点(n 是常数,比如 100)和 m 个边(m 可以改变)的图,其中一组指标得到了优化:

  • 指标 A 需要尽可能高
  • 指标 B 需要尽可能低
  • 指标 C 需要尽可能高
  • 指标 D 需要尽可能低

我最好的猜测是选择 GA。我对遗传算法不是很熟悉,但我可以花一点时间学习基础知识。从我目前阅读的内容来看,我需要这样做:

  1. 生成一组随机连接到的 n 个节点的图 彼此通过 m = random[1,2000](例如)边
  2. 在每个图表上运行指标 A、B、C、D
  3. 是否找到了最佳解决方案(如问题中定义的那样)?

如果是,那就完美了。如果没有:

  1. 选择最佳图表
  2. 跨界
  3. 变异(随机添加或删除边缘?)
  4. 转到 3。

现在,我通常使用 Python 进行小实验。 DEAP (https://code.google.com/p/deap/) 可以帮我解决这个问题吗? 如果是这样,我还有很多问题(尤其是关于交叉和变异步骤),但简而言之:这些步骤(在 Python 中,使用 DEAP)是否容易在此处解释或总结?

如果需要,我可以尝试并详细说明。干杯。

【问题讨论】:

    标签: python genetic-algorithm


    【解决方案1】:

    免责声明:我是 DEAP 首席开发人员之一。

    您的个人可以用二进制字符串表示。每个位将指示两个顶点之间是否存在边。因此,您的个人将由 n * (n - 1) / 2 位组成,其中 n 是顶点数。要评估您的个体,您只需从个体基因型构建邻接矩阵。有关评估函数示例,请参阅以下要点https://gist.github.com/cmd-ntrf/7816665

    您的健身将由 4 个目标组成,根据您所说的关于每个目标的最小化和最大化,健身类将创建如下:

    creator.create("Fitness", base.Fitness, weights=(1.0, -1.0, 1.0, -1.0)

    交叉和变异运算符可能与 OneMax 示例中的相同。 http://deap.gel.ulaval.ca/doc/default/examples/ga_onemax_short.html

    但是,由于您想做多目标,您需要一个多目标选择算子,NSGA2 或 SPEA2。最后,算法必须是 mu + lambda。对于多目标选择和 mu + lambda 算法的使用,请参阅 GA 背包示例。 http://deap.gel.ulaval.ca/doc/default/examples/ga_knapsack.html

    因此,基本上,要启动并运行,您只需在使用建议的评估函数时将 onemax 示例的一部分与背包合并。

    【讨论】:

    【解决方案2】:

    我推荐优秀的 pyevolve 库 https://github.com/perone/Pyevolve。这将为您完成大部分工作,您只需定义适应度函数和表示节点/函数。您也可以指定交叉和突变率。

    【讨论】:

    • 特别是,查看示例部分以了解如何使用该库。无需在那里重新发明轮子。
    • 您并没有完全回答这个问题,即遗传算法如何解决这个图优化问题。此外,Rodolphe 想要使用 PyEvolve 不支持的多目标方法。您能否详细说明解决手头问题的提示?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 2022-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多