所以我最近对算法非常着迷。我最近实施了一个蚁群优化算法来解决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个)。
答案 0 :(得分:1)
你的颜色问题对我来说似乎很微不足道,即使蛮力也会很快,我想..所以你的蚁群很可能也能解决它:)
答案 1 :(得分:1)
我在ACO的代表处看到的唯一问题是+/- X%。
每种颜色的固定百分比,您可以按照说法继续操作:
蓝色黄色和红色是位置 不同的子类型代表道路,其重量取决于成本和所需的资源。
然后你就像TSP一样应用你的AOC方法,但改变一下蚂蚁的移动方式:
如果您想添加浮动百分比约束,请执行以下操作:
让我们说你最好的代价是:
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算法的实现?