如果此问题不适合此论坛,请道歉。这个问题超出了我对数学和编程的认识,我很难理解它,更不用说把它写进去了。
我正在寻找一个类似的既定问题,我可以从中构建一个可接受的解决方案。问题如下。
从实际操作的角度来看,问题看起来类似于旅行商问题,一组互连的节点(网络),以及从一个节点移动到另一个节点的相关可量化成本。主要区别在于任何两个路径之间的实现可能会改变所有后续步骤的成本,删除可能的路径或在某些情况下完全从网络中删除节点。
我希望在合理的时间内找到路径或小路径集合,这些路径从任何节点开始接近最佳路径,最好定义为从等式中产生最低值的路径[cost /旅行的总节点数。]
显而易见的答案是在所有路径上进行排列,但考虑到潜在的节点数量和网络的性质,这是不可能的。
对于那些对现实世界问题感到疑惑的人,如下所示。
我的基数为8,集合中的每个项目的值都为0-15。这些集合按8组分组。它们已被分组,以便在所有8个集合之间使用最小量的可能值0-15(通常,8个集合的组将使用可能的0-15个数字中的6-8个集合每个方向都有一些异常值。)
这些组中的每一个都有一个转换表,它允许我用一个引用值替换集合中的实际值,这些转换表是16个条目长。
这创造了用单个集合表示具有相同方差模式的多个集合的机会,并允许变换表实现其真实的相应值。
[7,7,9,9] [4,4,5,5]
变为
[1,1,2,2]各自的变换(1 = 7,2 = 9)(1 = 4,2 = 5)。
当然,随着组中的集合被转换,它们会占用转换表中的条目,从而降低了进一步转换的能力。在网络问题中,成本与实现转换所需的附加条目数相关联,而删除是指不再可能进行转换。
需要考虑的其他因素......
我知道计算复杂性理论以及我正在寻求近似或启发式解决方案的事实。理想情况下,根据我对节点之间的成本和可能连接知识的了解,我想创建一小部分路径,我可以从中测试并充分利用它们。
答案 0 :(得分:0)
我通过改变焦点来解决这个问题。而不是专注于集合的收敛,而是集中于集合中各个项目的收敛。
该过程需要完成数百万次才能确定并处理最佳状态,然后最终从结构中移除,以便找到下一个最佳状态。因此我采取了一些捷径,但它确实有效。
我创建了一个可能的收敛缓存,8个可能的索引,16个可能的值。对于每个组合,存储符合该收敛的集合的散列集。如果没有符合收敛的集合,则不会创建任何哈希集。
然后我通过组合处理所有可能的收敛。如果当前收敛的交集不能获得当前存储的最佳结果,则该算法停止组合过程。最好的结果是缓存的。
如果基础第二组被更改并且它有可能击败当前最佳,则仅重新计算每次迭代高速缓存的收敛结果。计算收敛可能性的顺序按最大权重排序,因此当它达到最大可能无法击败的收敛可能性时,它会终止此迭代,使当前最佳并再次开始。