http://blog.sina.com.cn/s/blog_6f194ed3010114vt.html
最近建模看到作业这个题,一开始想了很久。在网上发现竟然没有完备的算法。不过最后想到一个可以Lingo实现的线性规划模型。
严格说,这不是一个算法,Lingo是如何实现0-1规划的我并不清楚。有可能也是枚举法,不过对于具体问题至少可以解决。因为是TeX编译的,重新打一遍太麻烦,所以正文用截图。最后提一个不成熟的算法。
问题重述:有2n个整数,试将其平均分为两组(每组n个),使两组元素和的差值最小。
(这里有一点打错了。“从另一个角度看”后的等式要加绝对值号。另外这里要注意需要限定S1较大,之所以如此是因为带绝对值号的min显然是比较难实现的。不过我并不清楚Lingo能不能实现绝对值的min...我接触Lingo才几天。)
这个问题可以扩展到多维变量,并可扩展到分为多组。下面就多元、多组的情况讨论一个想法。
一开始我设想了一个算法,但是感觉问题多多,只能有时间再深入想:
多元统计分析中有一个动态算法:K均值聚类。其基本思想是,假定目标是聚为k类,任意划分为k组,并分别计算其均值。然后任选一个样本点,计算其到所有k类中心的距离。寻找最小距离,若对应的中心不是自身所在组,则将其调至改组,再重新计算各组中心,并重复本步骤;如果其对自身所在组中心的距离为最小,则保持不变,继续寻找下一个点,直到所有的点都不需要调整。
类似这个想法,是否可以反其道行之,每次都将较远的元素与组调在一起。假设存在一个调整,可以使组内均值向量更靠近总体均值向量,则进行该调整,直到不存在调整空间,则停止算法。
这个问题看起来好像没什么实际意义,纯粹是一个数字游戏,其实可以很广泛的加以应用。比如给定你一队人马,每个人能力不同,如何分配才能保证每组实力相近以求得公平?或者一些施工人员,你想要他们产生竞争激励,分组时就不应该偏心而应尽可能保证每组实力接近。该问题就是这些实际问题的抽象。