天问

随机数生成

昨天接触一个问题,订单状态id从1-9随机生成291个数字;门店id筛选1,5,7,22等随机生成219个数字;营业额告诉了,每月订单量也大概固定,在这两个条件下随机生成订单金额。这些都用到随机数,简而言之为如下问题:

(1)问题一:随机制造291个正整数,总和为31万。

(2)后面有扩展的想到了其他几个随机数问题,在1-10里面,随机制造正整数。

(3)在1,3,7,19,22...等数中,随机选择291个数。

样本数据最开始在excel里面,所以最开始想到的是excel里面随机函数可否实现。考虑了一下比较麻烦,后面想到数据需要存入mysql数据库,便开始使用mysql提供的随机函数,这个解决了我的第二个问题。

若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1))。

例如, 若要在7 到 12 的范围(包括7和12)内得到一个随机整数, 可使用以下语句:

SELECT FLOOR(7 + (RAND() * 6));

第一个问题解决方案:

首先分析问题,291个数分别定义为a1,a2,a3.....,a291。那么转为数学问题就是:

在约束条件a1+a2+a3+....+a291=310000下,求解a1,a2....a291。约束条件少于未知数个数,很明显有无数解。excel/mysql/java等随机函数都有过想法尝试解决。接着想到matalb是最佳的矩阵计算工具。问题就是sum(A)=310000求A向量的问题。随机生成291个0-1之间的数,通过数学计算,将其每一个值放大x倍,使得放大后总和为310000.这样问题就转变为求x了。那么使用matlab三句话解决问题:

 

 

博客地址:http://blog.yoqi.me/?p=142
扫我捐助哦
喜欢 0

这篇文章还没有评论

发表评论