今天和同事聊数学建模的事儿,他提出了一个数模题(跟我们实际工作有些关系),可能是和组合有些关系(希望@月城公寓寓公 别挠头哈),我初步试了试,感觉这个题有点儿意思,简单的编程竟然做不到。
题面:(具体为什么要这么做,涉及专业知识,我就不解释了,总之,我在这里已经把这个实际问题抽象为一个数学问题了。)
有一个方箱,假设它的高是2m,上方开口,俯视图如下:

分成4个区,如“田”字形。现在向里面放“饼”,饼的直径与田字格中每个小格子的边长是相等的,也就是说上图中4个区域中,各能够放一摞饼。填充完毕后的俯视图如下:

每个饼的厚度不一样,最小约为20cm,最大约为40cm,而且在这个范围内不是正态分布的,可近似看成均匀分布的。
现在我们有一个大转盘,大转盘分批提供这些饼,每一批提供8个。这里分批的意思是:将8个完全放置于桶中后,转盘再提供8个新的饼。
限制条件:
(1)使用饼以上图的方式填充箱子,填充完毕后,最高的一摞饼的高度不能超出箱子的上沿,也即不能大于2m。
(2)因为在实际中你不知道下一次转盘会提供8个什么样的饼,所以在此程序中禁止使用一次生成24或32个饼之后,再统一进行排布计算。必须一次生成8个,填充完毕后,再生成8个!
如此填充完之后,到最上一层,各摞饼的高度肯定是不一样的,有的高一些,有的低一些。
问:如何编写一个程序,能够满足以上要求,并使填充后各摞饼之间的高差最小,即Max(饼层)-Min(饼层)的值最小。
提示:一次转盘提供的饼的数量请使用runif(8,0.2,0.4)生成,产生的随机数精确到mm,也就是0.001即可。
这道题最后需要给出的结果是这种形式的:

其中的0..7为转盘上的8个饼的序号,子矩阵中的每1列对应着题面中田字格的4个象限。这个向量的总行数(元素数)对应着在桶中摆放多少层,比如上面给出的这例子中,就是摆放了4层,每一层中的每个象限中分别摆放了2个饼。
当然,也可以出现以下的情况,也就一个象限中摆放1个厚饼,另有一个象限中摆放3个薄饼,那么就如下图的方法表示,矩阵中空白的地方使用NaN填充。

因为这道题我还没有找到最终解,也就是最灵活可靠的计算程序,所以有可能会分为几种情况考虑,不知道呢,如果各位感觉需要分为几种情况考虑的话,请把所有可能的情况的程序都给出来吧。
这题有些难度,各位做好心理准备。
题面:(具体为什么要这么做,涉及专业知识,我就不解释了,总之,我在这里已经把这个实际问题抽象为一个数学问题了。)
有一个方箱,假设它的高是2m,上方开口,俯视图如下:

分成4个区,如“田”字形。现在向里面放“饼”,饼的直径与田字格中每个小格子的边长是相等的,也就是说上图中4个区域中,各能够放一摞饼。填充完毕后的俯视图如下:

每个饼的厚度不一样,最小约为20cm,最大约为40cm,而且在这个范围内不是正态分布的,可近似看成均匀分布的。
现在我们有一个大转盘,大转盘分批提供这些饼,每一批提供8个。这里分批的意思是:将8个完全放置于桶中后,转盘再提供8个新的饼。
限制条件:
(1)使用饼以上图的方式填充箱子,填充完毕后,最高的一摞饼的高度不能超出箱子的上沿,也即不能大于2m。
(2)因为在实际中你不知道下一次转盘会提供8个什么样的饼,所以在此程序中禁止使用一次生成24或32个饼之后,再统一进行排布计算。必须一次生成8个,填充完毕后,再生成8个!
如此填充完之后,到最上一层,各摞饼的高度肯定是不一样的,有的高一些,有的低一些。
问:如何编写一个程序,能够满足以上要求,并使填充后各摞饼之间的高差最小,即Max(饼层)-Min(饼层)的值最小。
提示:一次转盘提供的饼的数量请使用runif(8,0.2,0.4)生成,产生的随机数精确到mm,也就是0.001即可。
这道题最后需要给出的结果是这种形式的:

其中的0..7为转盘上的8个饼的序号,子矩阵中的每1列对应着题面中田字格的4个象限。这个向量的总行数(元素数)对应着在桶中摆放多少层,比如上面给出的这例子中,就是摆放了4层,每一层中的每个象限中分别摆放了2个饼。
当然,也可以出现以下的情况,也就一个象限中摆放1个厚饼,另有一个象限中摆放3个薄饼,那么就如下图的方法表示,矩阵中空白的地方使用NaN填充。

因为这道题我还没有找到最终解,也就是最灵活可靠的计算程序,所以有可能会分为几种情况考虑,不知道呢,如果各位感觉需要分为几种情况考虑的话,请把所有可能的情况的程序都给出来吧。
这题有些难度,各位做好心理准备。