通过改变网络计算最优路径?
Calculate optimal path through changing network?
如果这个问题不适合这个论坛,我们深表歉意。这个问题超出了我的数学和编程知识范围,我很难理解它,更不用说用语言表达了。
我正在寻找一个类似的既定问题,我可以从中构建一个 acceptable 解决方案。问题如下
从实际操作的角度来看,该问题看起来类似于旅行商问题,一组相互连接的节点(网络)以及从一个节点移动到另一个节点的相关可量化成本。主要区别在于任意两条路径之间的实现可能会改变所有后续步骤的成本,删除可能的路径,或者在某些情况下从网络中完全删除节点。
我想在合理的时间内找到从任何节点开始接近最佳路径的路径或小路径集合,最佳路径被定义为从等式中产生最低值的路径 [成本/旅行的总节点数。
显而易见的答案是在所有路径上排列,但是考虑到节点的潜在数量和网络的性质,这是不现实的。
对于那些想知道现实世界问题的人来说,情况如下。
我有基数为 8 的集合,集合中的每个项目的值为 0-15。这些集合以 8 个为一组进行分组。它们已被分组,以便在所有 8 个集合之间使用最小数量的可能值 0-15(通常 8 个集合将使用 6-8 个可能的 0-15 数字每种方式都有一些异常值)。
这些组中的每一个都有一个转换 table,它允许我用对值的引用替换集合中的实际值,这些转换 table 有 16 个条目长。
这创造了用一个集合表示具有相同方差模式的多个集合的机会,并允许转换 tables 实现它们各自的真实值。
[ 7, 7, 9, 9]
[ 4, 4, 5, 5]
变成
[ 1, 1, 2, 2] 具有相应的转换 (1=7, 2=9) (1=4, 2=5).
当然,当一个组中的集合被转换时,它们会吃掉转换中的条目table,从而降低进一步转换发生的能力。在网络问题中,成本与实现转换所需的额外条目数有关,而删除是在不再可能进行转换时。
需要考虑的其他因素...
- 如果两个集合中的值都可以使用现有的转换条目表示(它们需要对应于 table 中的相同条目(7=集合 1 中的值,7=值在第 2 组中,那么这些值的成本是免费的。
- 转换 table 中超出一组集合中使用的个体总数的条目可以用作通配符(基本上转换 table 可以多次引用相同的值只要它们仍然有足够的条目来为所有值创建至少一个引用)。
- 每个可能的原始值必须在转换中至少被引用一次table(显然我们需要能够引用它来重现原始集)。
我知道计算复杂性理论以及我正在寻求近似或启发式解决方案的事实。理想情况下,根据我对节点之间成本的了解以及对可能连接的了解,我想创建一小部分路径,我可以从中进行测试并取得最佳效果。
我通过改变焦点解决了这个问题。我没有关注集合的收敛,而是关注集合中单个项目的收敛。
该过程需要完成数百万次才能识别和处理最好的,然后最终从结构中删除,以便找到下一个最好的。因此,我采取了一些捷径,但它有效。
我创建了一个可能收敛的缓存,8 个可能的索引,16 个可能的值。对于每个组合,存储符合此收敛的集合的哈希集。如果没有集合符合收敛,则没有创建哈希集。
然后我通过组合处理了所有可能的收敛。如果当前收敛的交集不能达到比当前存储的该整体收敛最好的结果更好的结果,则算法停止组合过程。缓存最佳结果。
每次迭代缓存的收敛结果只有在底层第二组发生改变并且有可能超过当前最佳值时才会重新计算。计算收敛可能性的顺序按最大权重排序,因此当它遇到无法击败最佳的收敛可能性时,它终止本次迭代,取当前最佳并重新开始。
如果这个问题不适合这个论坛,我们深表歉意。这个问题超出了我的数学和编程知识范围,我很难理解它,更不用说用语言表达了。
我正在寻找一个类似的既定问题,我可以从中构建一个 acceptable 解决方案。问题如下
从实际操作的角度来看,该问题看起来类似于旅行商问题,一组相互连接的节点(网络)以及从一个节点移动到另一个节点的相关可量化成本。主要区别在于任意两条路径之间的实现可能会改变所有后续步骤的成本,删除可能的路径,或者在某些情况下从网络中完全删除节点。
我想在合理的时间内找到从任何节点开始接近最佳路径的路径或小路径集合,最佳路径被定义为从等式中产生最低值的路径 [成本/旅行的总节点数。
显而易见的答案是在所有路径上排列,但是考虑到节点的潜在数量和网络的性质,这是不现实的。
对于那些想知道现实世界问题的人来说,情况如下。
我有基数为 8 的集合,集合中的每个项目的值为 0-15。这些集合以 8 个为一组进行分组。它们已被分组,以便在所有 8 个集合之间使用最小数量的可能值 0-15(通常 8 个集合将使用 6-8 个可能的 0-15 数字每种方式都有一些异常值)。
这些组中的每一个都有一个转换 table,它允许我用对值的引用替换集合中的实际值,这些转换 table 有 16 个条目长。
这创造了用一个集合表示具有相同方差模式的多个集合的机会,并允许转换 tables 实现它们各自的真实值。
[ 7, 7, 9, 9] [ 4, 4, 5, 5]
变成
[ 1, 1, 2, 2] 具有相应的转换 (1=7, 2=9) (1=4, 2=5).
当然,当一个组中的集合被转换时,它们会吃掉转换中的条目table,从而降低进一步转换发生的能力。在网络问题中,成本与实现转换所需的额外条目数有关,而删除是在不再可能进行转换时。
需要考虑的其他因素...
- 如果两个集合中的值都可以使用现有的转换条目表示(它们需要对应于 table 中的相同条目(7=集合 1 中的值,7=值在第 2 组中,那么这些值的成本是免费的。
- 转换 table 中超出一组集合中使用的个体总数的条目可以用作通配符(基本上转换 table 可以多次引用相同的值只要它们仍然有足够的条目来为所有值创建至少一个引用)。
- 每个可能的原始值必须在转换中至少被引用一次table(显然我们需要能够引用它来重现原始集)。
我知道计算复杂性理论以及我正在寻求近似或启发式解决方案的事实。理想情况下,根据我对节点之间成本的了解以及对可能连接的了解,我想创建一小部分路径,我可以从中进行测试并取得最佳效果。
我通过改变焦点解决了这个问题。我没有关注集合的收敛,而是关注集合中单个项目的收敛。
该过程需要完成数百万次才能识别和处理最好的,然后最终从结构中删除,以便找到下一个最好的。因此,我采取了一些捷径,但它有效。
我创建了一个可能收敛的缓存,8 个可能的索引,16 个可能的值。对于每个组合,存储符合此收敛的集合的哈希集。如果没有集合符合收敛,则没有创建哈希集。
然后我通过组合处理了所有可能的收敛。如果当前收敛的交集不能达到比当前存储的该整体收敛最好的结果更好的结果,则算法停止组合过程。缓存最佳结果。
每次迭代缓存的收敛结果只有在底层第二组发生改变并且有可能超过当前最佳值时才会重新计算。计算收敛可能性的顺序按最大权重排序,因此当它遇到无法击败最佳的收敛可能性时,它终止本次迭代,取当前最佳并重新开始。