基于百分比问题的蚁群优化算法或遗传算法

时间:2011-08-09 14:54:23

标签: algorithm genetic-algorithm ant-colony

所以我最近对算法非常着迷。我最近实施了一个蚁群优化算法来解决TSP(非常有趣)。现在我一直在关注其他问题"解决。现在我想实现一个算法来解决涉及满足百分比要求的问题,并且低于任意限制。

例如:

用户输入:

1)限制 -i.e.可用的能量。

2)"染色体"类型 -i.e.蓝色(亚型 - 靛蓝等),红色(亚型 - 栗色等),黄色(亚型 - 浅黄色等) - 像blue这样的主要属性有一个" pool"选择哪种不同的亚型,如靛蓝,浅蓝,海蓝等。 - 每种子类型的颜色都有不同的成本。

3)"理想"所需类型的百分比。解决方案(可以引入+/-%以允许更多种类)。 -i.e. 10%红色,30%蓝色,60%黄色。

输出:

1)可能的最终解决方案满足两个要求,低于 - 但接近 - 所需成本并满足超类型的百分比要求。

所以举个例子。

这是一个非常简单的例子,显然它在现实中比这更复杂。

用户指定的费用应如下 95< = cost< = 105。

用户选择25%蓝色,25%黄色,50%红色。 偏差+/- 5%

每种颜色的可用池

蓝: 靛蓝:成本= 25; 海蓝:成本= 30; 海军蓝:成本= 75;

黄色: 浅黄色:成本= 20; 深黄色:成本= 30; 超级深黄色(lol):成本= 75;

红色: 栗色:成本= 20; 血红色:成本= 45; 鲜红色:成本= 55;

因此算法将运行并返回不同的组合。

组合1:靛蓝,深黄色,血红色:成本= 100:蓝色= 25%,黄色= 30%,红色= 55%。

组合2:海蓝色,浅黄色,血红色:成本= 105:蓝色= ~30%,黄色= ~20%,红色= ~50%

组合3:等等。

编辑:第二次修改

输出将包含多组不同的组合。

例如,一个解决方案可能包含以下组合:

一个解决方案将由此表示:

组合1:成本= 20; 50%蓝色,25%黄色,25%红色;

组合2:成本= 30; 10%蓝色,50%黄色,40%红色;

组合3:成本= 50; 25%蓝色,25%黄色,50%红色;

解决方案:=(组合1,组合2,组合3)总成本= 100,它由x%蓝色,y%黄色,z%红色组成;

将解决方案与需求进行比较,如果关闭则保留它,如果不丢弃它。

结束编辑

所以我的问题是。我知道遗传算法会起作用。但ACO的实施也会起作用吗?例如,蓝色,黄色和红色等于"位置",那么它们的子类型将代表不同的"道路"。

只是想知道什么是更有效的解决方案,或者可能完全是一些不同的算法。我对这些东西很陌生,并且在一周前开始阅读它。

编辑:首先修改

我想指明我想拥有5个不错的独特解决方案(5个是任意数字,可能是3个,可能是20个)。

3 个答案:

答案 0 :(得分:1)

你的颜色问题对我来说似乎很微不足道,即使蛮力也会很快,我想..所以你的蚁群很可能也能解决它:)

答案 1 :(得分:1)

我在ACO的代表处看到的唯一问题是+/- X%。

每种颜色的固定百分比,您可以按照说法继续操作:

蓝色黄色和红色是位置 不同的子类型代表道路,其重量取决于成本和所需的资源。

然后你就像TSP一样应用你的AOC方法,但改变一下蚂蚁的移动方式:

  1. 仅当信息素满足约束条件时才将信息素添加到一条路径中 成本
  2. 选择最接近“最佳长度”的路径长度= N% 最优的成本(在上面的例子中,对于黄色路径,一个 最接近25%* 95)
  3. 如果您想添加浮动百分比约束,请执行以下操作:

    让我们说你最好的代价是:

    Cost = X1*light yellow +X2*sea blue+X3*blood red for example.
    

    如果此成本不是最优的,您可以使用X1 X2和X3上的一些小尺寸,以优化您的成本:

    例如X1-e和X2 + e会将您的费用更改为e*(costseablue-costLightYellow)

    例如,给定一个小epsilon,对于每对Xi,Xj使得costi<costj(与i和j链接的颜色的成本)你可以尝试将epsilon添加到Xi并从Xj中删除它直到你不能提高Xi,Xj所有夫妇的费用。

答案 2 :(得分:1)

如果您的图表满足三角不等式,我建议您尝试使用最小生成树和完美权重非二分匹配算法。 Christofides等。保证您在最佳状态的3/2范围内获得解决方案。 AOC可以为您提供良好而快速的结果,但您必须针对许多问题对其进行优化。我在php(phpclasses.org)中写了一个Christofides算法。欢迎您试用。我不确定它是否正常工作。它有时会产生奇怪的结果。这可能是我对Fleury算法的实现?