我试图在一个大图上找到一个看似复杂且耗时的多目标优化。
问题是:我想要找到一个n个顶点的图(n是常数的,例如100),而m边(m可以改变),其中一组度量被优化:
我最好的猜测是和GA一起去。我不太熟悉遗传算法,但我可以花一点时间来学习基础知识。从我目前所读到的,我需要这样做:
如果是的话,很好。若否,则:
现在,我通常使用Python进行我的小实验。DEAP (https://code.google.com/p/deap/)能帮我解决这个问题吗?如果是这样的话,我还有更多的问题(特别是关于交叉和变异步骤),但简而言之:这些步骤(在Python中,使用DEAP)是否很容易在这里进行解释或总结?
如果需要的话,我可以试着详细说明。干杯。
发布于 2013-12-06 19:04:06
免责声明:我是DEAP的主要开发人员之一。
您的个人可以用二进制字符串表示。每一位将指示两个顶点之间是否有一条边。因此,您的个人将由n*(n-1)/2位组成,其中n是顶点的数目。要评估你的个人,你只需要建立一个邻接矩阵从个人基因型。有关计算函数示例,请参见下面的gist https://gist.github.com/cmd-ntrf/7816665。
您的健身将由4个目标组成,根据您所说的关于最小化和最大化每个目标的内容,健身类将被创建如下:
creator.create("Fitness", base.Fitness, weights=(1.0, -1.0, 1.0, -1.0)
交叉和变异操作符可以与OneMax示例中的操作相同。short.html
然而,由于您想要做多目标,您将需要一个多目标选择操作符,或者NSGA2或SPEA2。最后,算法必须是mu + lambda。对于多目标选择和mu + lambda算法的使用,请参见GA背包示例。knapsack.html
因此,从本质上说,要启动和运行,您只需将onemax示例的一部分与背包合并,同时使用建议的评估函数。
发布于 2013-12-05 22:15:10
我建议最好的化脓性库https://github.com/perone/Pyevolve。这将为您完成大部分工作,您只需定义适应度函数和表示节点/函数。您也可以指定交叉和变异率。
https://stackoverflow.com/questions/20411847
复制相似问题