找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 806|回复: 6

[研讨] 随机函数的“好与坏”

[复制链接]

已领礼包: 1862个

财富等级: 堆金积玉

发表于 2016-12-21 10:35:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
编个随机函数,使得1出现的几率为80%,0出现的几率为20%。
;;;程序1
(setq lst '((0 8 1)(8 10 0)) vlst nil)
(repeat 100000
        (setq num (fix (rem (getvar "CPUTICKS") 11)))
        (setq vlst (cons (car (vl-remove nil (mapcar '(lambda (x) (if (<= (car x) num (cadr x)) (last x) nil)) lst))) vlst))
)
(setq sum (apply '+ vlst))
;;;运行结果约在8200左右

;;;;程序2
(setq *ScriptControl (vlax-get-or-create-object "MSScriptControl.ScriptControl"))
        (if *ScriptControl
                (progn
                        (vlax-put *ScriptControl 'Language "VBS")
                        (vlax-invoke *ScriptControl 'ExecuteStatement "Randomize\nFunction Rand(x,y)\nRand=x+Rnd*(y-x)\nEnd Function")
                )
        )
(setq lst '((0 8 1)(8 10 0)) vlst nil)
(repeat 100000
        (setq num (fix (vlax-invoke *ScriptControl 'run "Rand" 0 10)))
        (setq vlst (cons (car (vl-remove nil (mapcar '(lambda (x) (if (<= (car x) num (cadr x)) (last x) nil)) lst))) vlst))
)
(setq sum (apply '+ vlst))
;;;运行结果约在9100左右

所以相对来说,程序1的随机函数好于程序2的随机函数。
那么问题来了,比程序1“好”的随机函数呢?更好的呢?





论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 1862个

财富等级: 堆金积玉

 楼主| 发表于 2016-12-21 10:40:55 | 显示全部楼层
把程序1范围调大些,效果更好。
;;;程序1
(setq lst '((0 800 1)(800 1000 0)) vlst nil)
(repeat 100000
        (setq num (fix (rem (getvar "CPUTICKS") 1001)))
        (setq vlst (cons (car (vl-remove nil (mapcar '(lambda (x) (if (<= (car x) num (cadr x)) (last x) nil)) lst))) vlst))
)
(setq sum (apply '+ vlst))
;;;运行结果约在8000左右
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6056个

财富等级: 富甲天下

发表于 2016-12-21 11:39:28 | 显示全部楼层
支持楼主。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 1862个

财富等级: 堆金积玉

 楼主| 发表于 2016-12-21 15:47:36 | 显示全部楼层
;;;梅森旋转随机算法
  • #include <iostream>  
  • #include <string.h>  
  • #include <stdio.h>  
  • #include <time.h>  
  •    
  • using namespace std;  
  •    
  • bool isInit;  
  • int index;  
  • int MT[624];  //624 * 32 - 31 = 19937  
  •    
  • void srand(int seed)  
  • {  
  •     index = 0;  
  •     isInit = 1;  
  •     MT[0] = seed;  
  •     //对数组的其它元素进行初始化  
  •     for(int i = 1; i < 624; i++)  
  •     {  
  •         int t = 1812433253 * (MT[i - 1] ^ (MT[i - 1] >> 30)) + i;  
  •         MT = t & 0xffffffff;   //取最后的32位赋给MT  
  •     }  
  • }  
  •    
  • void generate()  
  • {  
  •     for(int i = 0; i < 624; i++)  
  •     {  
  •         // 2^31 = 0x80000000  
  •         // 2^31-1 = 0x7fffffff  
  •         int y = (MT & 0x80000000) + (MT[(i + 1) % 624] & 0x7fffffff);  
  •         MT = MT[(i + 397) % 624] ^ (y >> 1);  
  •         if (y & 1)  
  •             MT ^= 2567483615;  
  •     }  
  • }  
  •    
  • int rand()  
  • {  
  •     if(!isInit)  
  •         srand((int)time(NULL));  
  •     if(index == 0)  
  •         generate();  
  •     int y = MT[index];  
  •     y = y ^ (y >> 11);                 //y右移11个bit  
  •     y = y ^ ((y << 7) & 2636928640);   //y左移7个bit与2636928640相与,再与y进行异或  
  •     y = y ^ ((y << 15) & 4022730752);  //y左移15个bit与4022730752相与,再与y进行异或  
  •     y = y ^ (y >> 18);                 //y右移18个bit再与y进行异或  
  •     index = (index + 1) % 624;  
  •     return y;  
  • }  
  •    
  • int main()  
  • {  
  •     srand(0);  //设置随机种子  
  •     int cnt = 0;  
  •     for(int i = 0; i < 1000000; i++)  
  •     {  
  •         if(rand() & 1)  
  •             cnt++;  
  •     }  
  •     cout<<cnt / 10000.0<<"%"<<endl;  
  •     return 0;  
  • }

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 13个

财富等级: 恭喜发财

发表于 2016-12-21 17:35:24 | 显示全部楼层
有评价随机数算法好坏的 算法,比如正态分布

还有楼主要测试下,循环10次,是否真的“随机”,因为时间隔的非常短,有些“种子”算法,10次循环,你可能得到的值是大多数相同的值。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1862个

财富等级: 堆金积玉

 楼主| 发表于 2019-8-5 10:45:56 | 显示全部楼层
;;;随机函数
(defun rnd ()
  (*(rem (getvar "cputicks") 1e4) 1e-4)
)
(defun gs_rnd (m n tol)
  (setq lst nil)
  (repeat tol  
   (setq lst (cons (+ m (* n (* (cos (* 2.0 pi (rnd))) (sqrt (* -2.0 (log (rnd)))))))lst))
   )
)
_$ (gs_rnd 10 2 1000)
(9.10567 9.72827 11.8114 7.91599 10.8273 12.5959 11.2053 6.31007 7.54701 9.16875 10.867 12.5551 11.2168 13.5017 12.5515 9.7539 9.6857 9.14227 9.13266 9.25536 9.45934 11.6494 12.4399 8.56793 12.6043 11.196 10.6314 12.3088 11.3921 11.1228 12.6229 10.4619 4.55906 9.13305 8.35021 9.33566 9.42988 11.6388 12.3751 10.3633 12.4323 11.58 7.11444 9.12735 7.62239 10.7277 12.5649 10.9058 6.01164 12.5378 9.23924 9.60636 9.1987 11.1334 9.12363 9.91675 12.1671 12.2416 8.38312 12.6143 10.8037 6.26598 11.0336 12.1941 10.4176 12.4606 11.5131 6.9951 9.08179 10.1991 4.28199 9.09774 10.9717 12.6017 9.23272 11.704 12.4095 9.26509 9.52937 10.6474 5.50607 9.3713 11.3928 12.6196 9.77844 12.0149 12.359 9.19322 9.54831 9.36519 7.30491 9.13286 9.74227 11.8856 12.1692 10.7675 12.5371 11.1782 10.3627 12.4167 9.37625 11.2137 12.621 9.88489 9.6439 11.1389 6.25779 9.04769 8.3184 9.09938 8.54969 9.3801 9.28001 11.1963 12.5853 10.0715 12.2521 9.12084 9.72102 11.9942 9.04402 10.4092 12.4444 11.5223 7.14566 12.6123 10.6122 5.6551 9.05327 10.4776 7.52238 9.76757 11.9549 12.329 8.44718 7.90119 9.06753 10.5375 12.4697 11.5536 12.9419 12.6214 10.404 5.42426 9.11503 9.14087 9.26803 9.49516 11.7142 12.4982 8.87598 12.4844 11.2558 10.1206 12.2489 11.8665 10.7677 12.5422 11.4399 7.02846 9.09448 10.167 4.92605 9.09148 10.5169 12.5169 9.48064 11.6505 12.5148 9.82967 9.76294 9.14551 9.74866 11.9102 12.3941 9.03282 12.4193 11.7749 7.69758 9.15276 9.66 5.77471 9.05659 10.4044 12.383 11.7924 11.394 12.6071 9.99556 11.3941 12.572 9.93392 12.0043 12.1907 8.59491 9.37139 10.6177 6.53147 9.04776 10.1617 12.2783 8.09357 11.0772 12.6138 10.3718 4.93648 10.5334 10.6746 12.5634 11.1488 6.64704 10.9467 9.41197 9.70587 9.10221 10.816 12.5422 9.62166 11.7725 12.3005 9.09705 9.43048 11.082 6.31243 9.08141 11.4317 6.38274 12.52 9.82835 3.94704 9.15867 11.3518 9.08298 9.81902 11.956 12.196 8.20011 12.6165 10.8832 5.09504 9.08594 10.7054 9.48427 12.5726 10.3108 3.24581 9.6464 9.30433 6.22151 9.05809 10.0196 12.2261 9.08037 10.581 12.4532 11.7301 7.66852 12.5694 10.1943 4.99578 9.05307 11.3873 13.7893 12.5336 9.78382 9.76524 9.50808 10.5049 11.845 7.70491 9.22843 9.67627 8.12772 9.01902 9.95452 11.9878 12.3902 8.65293 12.5886 7.06332 10.212 12.2665 11.6659 11.0694 12.6078 10.8214 6.05416 9.09321 9.75358 9.81228 9.07138 10.5937 12.5027 9.43663 11.6254 12.5367 9.94055 10.1451 9.39303 9.29127 11.095 12.599 10.5957 11.7842 12.487 9.46574 9.71476 9.22902 7.40802 9.11242 9.87256 12.1135 12.009 11.2415 12.6068 7.83338 11.082 12.6074 9.55931 11.7121 12.5471 9.82945 3.55857 10.7083 7.42167 9.16525 9.72533 11.7741 7.59839 10.4543 12.4193 11.3532 6.98103 8.82718 9.47942 11.4445 12.5287 10.1758 15.6175 12.2086 8.56997 9.40532 9.23956 11.2698 9.1839 9.57201 11.651 12.5736 9.45086 12.4599 11.6768 9.52089 11.9885 12.0894 10.3906 12.3694 11.9405 7.88712 9.19103 10.616 5.63676 9.02799 10.3415 12.4322 9.40163 11.4493 12.5223 10.0589 2.89341 12.0591 9.18147 9.5739 11.6046 12.4523 10.365 12.3722 11.753 7.48703 9.15157 10.6783 6.07253 9.03487 10.0108 12.2073 9.18409 11.0949 12.5956 10.3692 10.7865 7.37674 9.50972 11.6857 12.4265 9.50613 10.4463 12.0978 8.5286 9.3988 9.3354 8.57085 9.05844 9.89177 11.9785 12.2666 12.2735 12.5678 9.10848 10.8052 12.5578 11.0718 11.3972 12.588 10.2464 5.31755 9.07359 9.38564 9.61141 9.19487 11.0982 12.586 9.69811 11.8553 12.3598 8.57988 11.7336 9.04447 10.2523 12.3931 11.8307 7.51992 12.6231 10.5032 5.53231 9.13383 10.7586 9.3099 9.44034 11.4885 12.6027 10.2119 12.3325 11.5961 10.353 12.4789 11.4341 11.1534 12.5812 10.6726 5.91025 9.06382 9.30472 9.30007 9.47629 11.6816 12.488 12.1334 12.6162 9.89779 9.15315 9.77359 11.041 12.4381 11.7894 7.88603 9.21371 10.2693 5.05128 9.14506 11.0081 12.5653 9.59963 12.0821 12.0512 8.12028 9.1849 10.0786 9.77501 9.20415 9.4798 9.62957 9.39946 7.65841 9.19766 9.6191 11.9525 11.956 11.101 12.5715 10.1911 4.93938 9.22131 7.08278 9.06366 9.93334 12.231 10.7508 11.9527 12.0445 8.16661 9.2338 9.14845 9.04166 10.1892 12.2576 12.025 8.05604 12.5998 10.7137 5.63074 9.03955 10.4139 9.04551 10.3181 12.443 9.91735 12.086 7.70866 10.4658 12.451 11.7205 7.79087 10.8889 10.7828 5.93051 9.0465 10.3719 7.51282 9.28742 11.3197 12.6078 10.3402 15.9383 7.06279 9.85507 12.0118 12.215 8.36173 12.4285 11.6304 7.42354 9.11059 10.0147 4.9328 9.07916 10.6677 12.5136 11.1579 11.4736 12.5209 9.79637 10.2534 12.5219 9.92272 12.033 12.3209 8.9218 9.31019 11.3085 6.83457 9.09889 9.89438 12.0638 9.04964 10.5376 12.4946 11.4927 7.28079 12.5186 7.94225 11.2098 12.6007 10.1381 12.1105 11.8895 7.7196 9.14219 9.89115 4.75645 9.11262 10.8913 12.575 10.6627 14.7072 12.1734 8.6001 9.28359 11.1008 11.6078 12.5273 11.1909 5.98889 9.05929 9.56971 9.46445 9.23404 10.9691 12.6072 10.0317 11.9962 12.2924 8.85589 9.46618 9.44829 7.07696 10.9944 11.6571 7.01524 9.0867 9.81943 9.73847 9.12627 11.1768 12.3735 11.0392 6.14705 9.05259 10.2202 12.3899 9.3025 11.3363 12.5694 9.33036 9.52531 9.04776 10.0634 12.1794 11.8099 7.46278 12.6158 10.9135 6.32052 9.06522 10.6533 9.3601 9.72582 12.0156 12.0445 7.99404 12.5992 10.0137 9.59836 12.4739 9.06546 10.6553 11.4029 7.28808 9.12217 9.76951 7.88128 9.07503 10.5607 12.4851 11.6387 13.1524 12.5895 9.76333 9.96257 9.14169 8.81938 9.41692 11.5995 12.5076 9.74528 9.55929 11.8737 7.86973 9.16139 9.67571 12.0349 9.08632 10.7391 12.576 11.0771 6.0045 12.4417 9.68618 9.66068 12.622 10.6864 11.847 12.4945 9.5342 9.58437 9.26868 7.85473 9.23431 9.66047 11.9067 12.2713 10.3498 12.4405 11.5938 7.46503 9.10336 9.70003 11.1327 12.6385 10.669 5.7895 12.2007 9.01172 9.41388 9.35045 11.5325 9.0693 9.92938 11.9906 12.238 8.5241 10.796 10.7322 5.34732 9.09814 10.6082 14.3848 12.4259 9.51548 9.64477 9.19675 8.77703 9.1484 9.62825 11.7389 12.3387 11.8782 12.5886 10.2841 5.26319 9.11743 10.9594 9.1642 11.7613 7.55207 9.0975 10.2651 9.69371 9.17707 11.2945 12.6077 9.78839 12.2679 11.8737 7.77076 9.205 10.0101 9.09526 10.0531 12.3242 11.3601 12.3688 8.5213 9.29266 10.0185 11.8408 10.7798 12.6219 11.0122 6.84757 9.04196 9.93715 5.05906 9.0363 10.3019 12.3157 11.8671 11.1283 12.5957 9.01045 10.12 12.1474 7.91973 10.5419 12.3487 12.0615 8.21046 10.8229 11.4539 7.37298 9.10138 9.71347 7.72504 9.11783 10.9876 12.5856 11.1754 10.0134 4.82971 9.03084 10.1378 12.2258 11.8393 10.6644 12.5444 11.6691 7.81627 9.19242 11.003 6.8943 9.1004 9.60154 11.8088 9.03048 10.0918 7.67102 9.48625 11.6801 9.04145 9.85548 11.8721 12.5545 8.95343 12.4896 11.6496 7.82902 9.27027 9.42115 6.1356 9.07263 9.89719 11.9325 12.4071 10.7078 6.80071 9.08432 9.54354 11.6376 9.04395 9.73123 11.8517 12.6038 9.98157 11.9876 12.5014 9.95379 9.43834 9.25055 8.40615 9.03772 9.90538 12.0717 9.30381 10.6327 7.21916 9.1513 9.59311 11.6632 7.49785 10.0 12.1197 12.4019 9.54538 10.4193 12.1215 9.05094 9.73357 9.09075 10.8897 9.17851 11.4641 7.31653 9.16289 9.82905 4.95285 9.02363 10.0796 12.2157 11.5468 11.0507 12.5867 11.3985 6.57467 9.11901 8.96856 9.59967 9.12038 11.0092 9.60688 9.58395 9.19413 10.8652 12.5236 10.7384 12.5773 10.0624 4.48299 9.20146 11.6816 12.5176 10.1846 4.29837 9.24925 12.0915 8.17116 9.23026 10.0775 5.05584 9.17182 9.67337 10.5774 12.4919 11.6715 6.63141 9.44325 11.9211 10.7504 4.5735 11.6415 8.83919 10.9446 10.0076 7.54003 9.076 9.07648 11.511 12.5035 13.2928 12.4334 9.18824 12.2949 12.1458 8.93458 9.58411 9.26211 8.48192 9.40702 9.22698 11.0063 12.5884 9.60433 11.6889 9.85636 9.08407 10.786 9.24884 9.29088 11.1308 12.601 11.0933 11.1991 12.6259 11.2231 7.11456 9.11026 10.7021 6.32538 9.04684 9.7024 11.8541 9.66444 11.629 12.6249 9.96003 4.65128 12.3137 9.46927 9.82206 9.03539 10.4291 9.59965 9.06743 10.457 12.4483 11.9657 13.0519 12.6404 10.2251 10.9371 12.5541 9.67178 12.219 11.1045 7.28032 9.16343 10.2016 5.99033 9.02288 9.80052 11.7994 7.49872 10.3324 12.2373 11.7397 7.72349 9.17042 13.3268 12.622 9.81743 9.54532 9.71225 5.35922 9.15035 11.1271 12.4279 8.3274 10.4532 9.64451 9.58217 12.3456 5.98113 10.7593)
_$
456.png
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1862个

财富等级: 堆金积玉

 楼主| 发表于 2019-8-5 10:50:24 | 显示全部楼层
图像离高斯正态分布偏差有些大,说明“随机”函数的均匀随机性不是很好。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-26 13:37 , Processed in 0.195784 second(s), 43 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表