我是在EXCEL里用规划求解做的。需要在EXCEL里用加载宏。其实这是一个整数规划的问题,需要在EXCEL里建立相应的模型,建好后,用EXCEL的规划求解会逐次逼近,求出一个最优解。 
痛苦的是,EXCEL 的规划求解一次只能算出一个最优解。所以我算了几个出来,就用这几个来做测试了。
因为值的范围不大,其实用穷举法很好做。所以没有在这上面花时间。

解决方案 »

  1.   

    再补充一下,如果每次对权重都是同样的条件,只需要用穷举法算一次就行了,算完将所有满足条件的记录放入一个表里,实际应用时只需select 出一条就行了,会非常之快,这个时间几乎可以忽略不计。如果不用穷举法,实际上也是可以用线性规划的算法算出最优解的。但是一般来说,用线性规划一般只是会求出部分解或是次优解。在随机取数上,可能不是很严谨。这里用穷举法并不复杂,所以其实用穷举法是最好的方法。
      

  2.   

    继续努力吧,SELECT TOP 1 .。ORDER BY NEWID()
    很快了。
    如果用这种方法,优化快不了那去。
    是不是要加一句WHERE ID NOT IN (SELECT ID FROM #TEMP)?
    (虽然这种可能性很小!)
      

  3.   

    我试过,不带WHERE的全表用order by newid()是很慢的。因为要生成newid(),且还要全部排序。50万条记录的排序可不是小事。
    但如果有 where子句,并且f1,f2,f3,f4上有索引,还是很快的。
    题目中这几个字段怎么看怎么觉得都是会被拿来做索引的字段,因此我觉得效率上应该没有太大的问题。我是想不出来更好的解决办法了。只是可惜想学学比较有趣的统计分析方法也学不到了:(自己郁闷一会吧、、、、、、、、
      

  4.   

    对,我试了一下,用WHERE 时间是0