单位的会计请求协助解决一个这样的问题:从49个细项(26839,35612.2,…,287722.74)找到和为1819889.83的细项。

要凑出这个数,人工能够完成的概率和中×××一等奖差不多,必须用计算机来自动求解。因为之前没有遇到过这类问题,所以,我首先对问题进行数学建模,问题可表示为:

已知(X1,X22,,Xn)=(26839,35612.2,…,287722.74)b=1819889.83n=49求满足方程

C1X1+C2X2++C3X3=b, Cn{0,1}的一个解(C1,C22,,Cn)

由此可见,这是一个线性方程求解问题,可通过线性规划求解的方法进行求解。尽管用递归算法编程求解不难,但这种普通问题求解,一定有很多工具可用。百度“线性规划求解”,有不少使用EXCEL规划求解的经验介绍,也有一些用MATLAB求解的方法。我选择EXCEL进行求解。下面是求解的过程:

1、 将(26839,35612.2,…,287722.74)放在A列;

2、 设置B列初始值为0;

3、 设置C列为A列和B列的乘积,如单元格C1,公式为“=A1*B1”;

4、 设置单元格C50为“=SUM(C1:C49)”;

5、 规划求解参数设置,设置目标为“$C$50”,目标值为“1819889.83”,可变单元格为“$B$1:$B$49”,遵守约束为“$B$1:$B$49 = 二进制”,约束精确度为“0.00000001”,如下图:

wKioL1XQBOviZ0XLAAKNORTZspc255.jpg

 6、 求解,运行了一段时间,计算了几百万个结果,运气还不错,找到了一个满足问题的解,如下图:


wKiom1XQBBehf8R8AAHC5jpawA4590.jpg

wKiom1XQBBeBRdYrAAJapz22hlo085.jpg


最后,整理结果,完成任务。

EXCEL规划求解配置可参考:

http://jingyan.baidu.com/article/6fb756ecbffc74241858fb23.html