我决定更深入地了解回溯的概念,我有以下任务:
鉴于N个投资者,M个城市,N个M矩阵P的投资者偏好(P [i,j] = 1,当第i个投资者希望该池建在第j个城市时; P [i, j] = 0然后他是中立的,当P [i,j] = -1时他是否持怀疑态度)和接受程度L(如果对于给定的地点选择,投资者偏好的总和大于或等于到L然后我们认为他确信)。找到可以说服的最大数量的投资者以及应该建造游泳池的城市。
我尝试过使用回溯,但我想知道是否有可能对其进行更优化。目前,在每个递归级别上,我都会跟踪可能被说服的人数。如果这个数字小于或等于我当前的最大值,那么我会返回(没有更好的答案)。
答案 0 :(得分:1)
我不确定这是否是您正在寻找的,但通过一个小技巧,您可以将问题表达为整数线性程序(ILP)。然后,您可以使用整数线性编程求解器(例如,GLPK)来找到最佳解决方案。
令 files: [
'bower_components/jquery/dist/jquery.js',
'bower_components/angular/angular.js',
'bower_components/angular-mocks/angular-mocks.js',
...
]
为0-1整数变量(<beans profile="cloud">
<context:property-placeholder
location="classpath*:META-INF/spring/${ENV}.properties" />
</beans>
范围超过投资者),s[i]
0-1整数变量在城市范围内,i
为大数(c[j]
会这样做。)
然后,您的问题是最小化K
,使L + the number of investors
,sum(s[i])
。最优解决方案中i
的值是不满意投资者的数量,sum(P[i, j]*c[j]) + s[i] * K >= L
表示是否在城市sum(s[i])
建立资源池。
这个问题的表述是ILP的标准形式,所以你很高兴。