|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
多步骤规划求解
请教各位大佬一个类似于背包问题的题目,问题描述如下:
现有27个数据,称之为原始值,最小是24万,最大是2.2亿,总和是4.0亿,分布在A1-A27。
另有16个数据,称之为目标值,最小是20万,最大是1亿。
原始值 目标值
220,553,262 100,000,000
32,891,651 100,000,000
30,181,894 50,000,000
26,177,374 20,000,000
22,146,155 11,238,000
14,298,221 8,426,000
13,162,524 6,616,900
7,565,448 5,008,000
7,555,948 4,055,700
6,024,198 3,203,900
3,836,060 2,452,500
3,344,881 1,801,800
3,326,535 1,251,300
2,524,299 800,680
2,256,824 450,310
1,504,079 200,110
1,503,074
1,503,059
1,016,024
886,096
886,096
886,091
886,091
886,091
590,727
590,727
240,111
由小到大,对每一个目标值,从原始值中挑选出任意个数据的组合,使其和满足:大于目标值,且与目标值的差值最小,且每个原始值只能使用一次。
对每一个目标值,我都能够采用规划求解的方法来寻找最优的组会,但是一共就需要进行16次规划求解的操作。
例如:
第一个目标值200,110,应使用原始值240,111;
第二个目标值450,310,应使用原始值590,727;
第三个目标值800,680,应使用原始值886,091;
第四个目标值1,251,300,应使用原始值886,091和590,727,其和为1,476,818。由于240,111这个原始值已经用过了,所以此处不能使用1,016,024和240,111;
…………
现在的情况是:原始值会发生变化,目标值不会变化。每当原始值发生变化的时候,我就又需要重复进行上述16次规划求解的操作。
所以想请教各位大佬:是否有更简便的方法,不需要进行16次规划求解,例如只需要一次操作就能够产生针对这16个目标值的16个原始值组合?
备注1:在完成了前15个目标值之后,最后一个目标值100,000,000是无法达到的,这个暂时就这样了。
备注2:目前的16次规划求解的方法,是每一步都是局部最优解,但是未必是整体的最优解。若能实现整体最优解,即差值总和最小,最好。暂时不能实现整体最优解,只能实现局部最优解也可以。
|
|