【发布时间】:2016-12-20 11:52:35
【问题描述】:
这是我在这些论坛上的第一篇文章,提前感谢所有回复。
我正在开发一个 java 应用程序,我在其中遇到了我认为被称为“组合优化问题”的问题。我只有基本的数学技能,所以到目前为止,试图研究这样一个问题的设置还没有取得成果。
基本上,我想做的是编写最有效的方法来找到具有变量 v1、v2、v3 等的较大集合 N 的最佳子集 n。这些变量除了具有确定的值/分数之外取决于某些其他变量的值/分数,这些变量可能包含在子集中,也可能不包含在子集中。
我有兴趣选择总价值/得分最高的子集。
因此,例如,完整集 N 由以下变量组成,并具有以下确定的值以及与其他变量的关系:
v1 8 { v2 ; v8 }
v2 6 { v1 ; v4 }
v3 9 { }
v4 7 { v2 ; v5 ; v8 }
v5 6 { v4 ; v10 }
v6 8 { v7 }
v7 5 { v6 }
v8 9 { v1 ; v4 }
v9 6 { }
v10 7 { v5 }
与一个或多个其他选定变量有关系意味着总值将有一定的“起飞”——为了这个例子,我们假设每个关系都有一个。 因此,选择前五个变量作为子集将得到 30 的总值:
v1 8 { v2 ; v8 } = 8 - 1 = 7
v2 6 { v1 ; v4 } = 6 - 2 = 4
v3 9 { } = 9 - 0 = 9
v4 7 { v2 ; v5 ; v8 } = 7 - 2 = 5
v5 6 { v4 ; v10 } = 6 - 1 = 5
对于这么小的集合当然不是问题,但我目前面临 100K 的集合和 10K 的子集——使用当前算法,我的计算机在 3 天内计算出解决方案!
我不一定需要解决此问题的代码,而是需要最佳的数学方法(如果有的话!)。请记住,虽然我很难理解基本水平以上的数学符号。
再次感谢所有回复!
【问题讨论】:
标签: java algorithm mathematical-optimization combinatorics