天道酬勤,学无止境

probability

Dice Sum Probability with Different types of Dice(Dice Sum Probability with Different types of Dice)

问题 我目前正在开发一个 java 应用程序,我需要计算滚动各种骰子的每个总和的概率。 我支持的骰子类型是 d4(4 面骰子)、d6(6 面骰子)、d8(8 面骰子)、d10、d12 和 d20。 用户将能够输入他们想要在计算中使用的每种类型的骰子的数量。 例如,用户可以输入 6 d6 和 4 d4。 有了这个给定的信息(每种类型的骰子数量),我正在寻找可以计算每个可能和的概率。 然后,我将使用此信息创建一个图表,显示所提供的选定骰子组合的概率分布。 此应用程序是用 Java 编写的。 我目前所处的位置是我有一个函数可以计算一个特定总和的概率,只使用一种大小的骰子 /* Recursively calculates the probability of rolling a particular number when rolling multiple dice of one type @param dice Number of dice @param seekedValue Value whose probability is being calculated @param sides Number of sides on the type of die */ private double diceProb(int dice, int seekedValue, int sides)

2021-09-20 09:53:18    分类:技术分享    java   probability   dice

rand() 在 OSX 上会返回零吗?(Does rand() ever return zero on OSX?)

问题 我已经在没有爱的情况下运行了近十个小时的代码: while ( true ) { int r = rand(); assert( r != 0 ); } 我希望 rand() 最终滚动零,从而触发断言。 我做错了什么还是 rand() 从不返回零? 还是我等待的时间不够长,期待看到它? 我在 2012-vintage 2GHz i7 上。 回答1 如果此链接是 Mac OS X rand()的定义,则永远不会产生 0。 恕我直言,这不是一个很好的伪随机数生成器。 在它的其他缺陷中,它的状态是先前返回的值,这意味着它是从前一个值到下一个值的严格函数; 它的周期不能大于它的范围,即[1, RAND_MAX-1] 。 (它不能产生 0,因为 0 是算法中的一个定点。) 回答2 该标准要求对rand连续调用形成一个序列,该序列是空间[0; RAND_MAX] [0; RAND_MAX] 。 它不要求所有可能的值都出现在任何可能的序列中。 所以回答你的问题:你不能保证得到零; 这取决于实现(从其他答案来看,BSD libc 的实现确实从不返回0 )。 §7.22.2.2 无法保证所产生的随机序列的质量,并且已知某些实现会产生具有令人不安的非随机低阶位的序列。 回答3 编辑:@rici 所说的。 看起来 FreeBSD rand 永远不会返回 0 该消息链有补丁,但未包含在苹果开源源中。

2021-09-19 16:45:41    分类:技术分享    c   macos   random   probability

如何找出矩阵的多少行满足相当复杂的标准(在 R 中)?(How can I find out how many rows of a matrix satisfy a rather complicated criterion (in R)?)

问题 举个例子,这里有一种方法可以得到一个包含 4 个(公平)骰子的所有可能结果的矩阵。 z <- as.matrix(expand.grid(c(1:6),c(1:6),c(1:6),c(1:6))) 正如您可能已经理解的那样,我正在尝试解决一个已经结束的问题,但在我看来,这是一个具有挑战性的问题。 我使用计数技术来解决它(我的意思是手工),我最终得出了一些结果,子集的总和为 5,等于 1296 中的 1083。该结果与提供给该问题的答案一致,在它关闭之前。 我想知道如何使用 R 生成结果的子集(比如 z1,其中 dim(z1) = [1083,4] )。你有什么想法吗? 谢谢你。 回答1 sum(apply(z, 1, function(x) 5 %in% unlist(sapply(1:4, function(i) combn(x, i, sum))))) 回答2 这对我有用: require(combinat) # Returns the sums of all the possible subsets for a single combination comb <- function(values) { sums <- NULL # Sum each combination of 1,2,... n-1 dice for (i in 1:(length(values)-1

2021-09-18 21:23:30    分类:技术分享    r   indexing   statistics   matrix   probability

模拟加权随机数 - Java(Simulating weighted random number - Java)

问题 我查看了多篇堆栈溢出文章,但找不到合理的回应。 如有重复请注明。 我有一个物品清单。 就像是: String giantRat []={"Bandage", "Healing Potion", "Minor Healing Potion", "Rat Teeth", "Fur", "Rat Tail", ""}; 这表示这个giantRat可能掉落的物品。 有一个具有匹配索引的相关数组,它包含我希望发生的加权概率。 就像是: int giantRatDropRate[]={1,1,1,6,8,3,5}; 这些将被放大到 50(每个乘以 2),然后我理论上会扮演一个 50 面的骰子( Random )。 这似乎是错误的方法,我想不出办法做到这一点。 同样,这个想法是掷骰子并根据权重从列表中选择一项。 也许掷骰子的方式是错误的。 任何帮助表示赞赏。 回答1 一种简单的方法如下。 不需要*2,因为概率是一样的。 String giantRat []={"Bandage", "Healing Potion", "Minor Healing Potion", "Rat Teeth", "Fur", "Rat Tail", ""}; int[] a = {1,1,1,6,8,3,5}; int sum = 0; for(int i: a) sum += i; Random r = new

2021-09-18 17:18:50    分类:技术分享    java   random   probability

使用高斯核估计向量的 pdf(Estimate pdf of a vector using Gaussian Kernel)

问题 我正在使用高斯核来估计基于方程的数据的 pdf 其中 K(.) 是高斯核,数据是给定的向量。 z 是从 1 到 256 的 bin。 bin 的大小是 1。 我是用matlab代码实现的。 但是,结果显示我的 pdf 估计(蓝色)的幅度与数据的真实 pdf 不相似。 你能看到我的代码并给我一些关于我的代码的评论吗? MATLAB 代码 function pdf_est=KDE() close all; %%Random values of 20 pixels, range=[1 256] data=randi([1 256],1,20); %% Estimate histogram%%%%% pdf_est=zeros(1,256); z=256; for i=1:z for j=1:length(data) pdf_est(i)=pdf_est(i)+Gaussian(i-data(j)); end end %% Plot real histogram 1 to 256; binsize=1; hold on plot(imhist(uint8(data))./length(data),'r'); %% Plot histogram estimation plot(pdf_est./length(data),'b'); hold off function K

2021-09-18 15:06:52    分类:技术分享    matlab   statistics   probability   kernel-density   probability-density

具有不同均值和标准差的计算简单伪高斯分布?(Computationally simple pseudo-Gaussian distribution with varying mean and standard deviation?)

问题 来自维基百科的这张图片有一个很好的例子,说明了我最想生成的函数类型: 现在我正在使用 Irwin-Hall 分布,它或多或少是高斯分布的多项式近似......基本上,您使用均匀随机数生成器并对其进行 x 次迭代,然后取平均值。 迭代次数越多,它就越像高斯分布。 这很不错; 但是我希望能够拥有一个可以改变平均值的方法。 例如,假设我想要一个介于 0 和 10 之间的数字,但大约为7。例如,平均值(如果我多次重复此函数)将变成 7,但实际范围是 0-10。 有没有我应该查找的,或者我应该使用标准高斯分布进行一些花哨的数学运算? 回答1 我在你的问题中看到了矛盾。 一方面,您希望正态分布本质上是对称的,另一方面,您希望范围不对称地设置为平均值。 我怀疑您应该尝试查看其他分布密度函数,其类似于钟形曲线但不对称。 像对数分布或 beta 分布。 回答2 研究生成正常的随机变量。 您可以生成成对的正态随机变量 X = N(0,1) 并将其转换为任何正态随机变量 Y = N(m,s) (Y = m + s*X)。 回答3 听起来像截断正态分布正是医生所要求的。 它本身并不“计算简单”,但如果您有正态分布的现有实现,则很容易实现。 您可以生成具有所需均值、所需标准差以及两端任意位置的分布。 您必须事先做一些工作来计算基础(非截断)正态分布的均值和标准差,以获得所需 TN 的均值

2021-09-18 11:17:39    分类:技术分享    random   probability   gaussian   probability-theory

matlab中的泊松点过程(Poisson point process in matlab)

问题 我是泊松点过程的新手。 我做了一个模拟(matlab)如下。 我的强度 lambda = 50 ; clear all; lambda=50; npoints = poissrnd(lambda); pproc = rand(npoints, 2); plot(pproc(:, 1), pproc(:, 2), '.'); 然后我有情节, 然而,链接 http://connor-johnson.com/2014/02/25/spatial-point-processes/ 向我展示了当强度lamuda = 0.2,小于 1 时,他得到了 该链接还显示了 Python 中的代码。请检查它。 这是我的问题,为什么强度小于 1 ,他仍然可以在这里绘制一些东西? 如果我让我的代码的 lamda = 0.2,就没有可绘制的价值。 我想我想念泊松点过程的一些东西? 还是编程问题? 我想在 matlab 中模拟这个 lambda = 0.2。 非常感谢你的帮助。 总 λ = 0.4。 我想要100个单位。 这意味着单位强度 = 0.4 * 100 = 40。非常感谢。 la=0.4; lala=0.4*100; npoints = poissrnd(lala); pproc = rand(npoints, 2); plot(pproc(:, 1).*100, pproc(:, 2)

2021-09-17 17:01:46    分类:技术分享    python   matlab   probability   poisson

随机化两个值之间的矩阵元素,同时保持行和列总和固定 (MATLAB)(Randomize matrix elements between two values while keeping row and column sums fixed (MATLAB))

问题 我有一点技术问题,但我觉得使用 MATLAB 强大的工具集应该可以实现。 我所拥有的是一个由 0 和 w 组成的随机 n × n 矩阵,比如用 A=w*(rand(n,n)<p); w 的典型值为 3000,但这应该没有太大关系。 现在,这个矩阵有两个重要的量,向量 c = sum(A,1); r = sum(A,2)'; 这是两个行向量,第一个表示每列的总和,第二个表示每行的总和。 我接下来要做的是随机化 w 的每个值,例如在 0.5 和 2 之间。我会这样做 rand_M = (0.5-2).*rand(n,n) + 0.5 A_rand = rand_M.*A; 但是,我不想只选择这些随机数:我希望它们对于每一列和每一行,总和仍然等于 c 和 r 的元素。 所以为了稍微清理一下符号,假设我们定义 A_rand_c = sum(A_rand,1); A_rand_r = sum(A_rand,2)'; 我想要所有j = 1:n, A_rand_c(j) = c(j)和A_rand_r(j) = r(j) 。 我正在寻找的是一种以我认为的算法方式重绘 ran​​d_M 元素的方法,以便最终满足这些需求。 当然,除非我有无限的时间,否则这可能不会真正发生。 因此,我接受这些数量属于特定范围: A_rand_c(j)必须是[(1-e)*c(j),(1+e)*c(j)]和A

2021-09-16 09:18:35    分类:技术分享    arrays   matlab   random   probability

从 MySQL 中选择随机行(有概率)(Select random row from MySQL (with probability))

问题 我有一个 MySQL 表,它有一个名为 cur_odds 的行,它是一个百分比数字,该行被选中的概率百分比。 例如,当您运行 100 个查询时,如何进行查询以实际选择大约该频率的行? 我尝试了以下操作,但概率为 0.35 的行最终在 60-70% 的时间内被选中。 SELECT * FROM table ORDER BY RAND()*cur_odds DESC 表中 cur_odds 的所有值加起来正好是 1。 回答1 如果cur_odds很少更改,则可以实现以下算法: 1) 创建另一列prob_sum ,为此 prob_sum[0] := cur_odds[0] 对于 1 <= i <= row_count - 1: prob_sum[i] := prob_sum[i - 1] + cur_odds[i] 2) 生成一个从 0 到 1 的随机数: rnd := rand(0,1) 3) 找到prob_sum > rnd的第一行(如果您在prob_sum上创建 BTREE 索引,则查询应该工作得更快): 创建索引 prob_sum_ind ON <table> (prob_sum); 设置@rnd := 兰德(); SELECT MIN(prob_sum) FROM <table> WHERE prob_sum > @rnd; 回答2 鉴于您的上述 SQL 语句,您在cur

2021-09-16 02:22:52    分类:技术分享    mysql   probability

单场淘汰赛 - 可能的组合数(A single elimination tournament - number of possible combinations)

问题 8人参加单场淘汰赛的组合数是多少? 比赛总数为 7 场,但我还需要这组比赛的组合数 回答1 如果玩家在树中的哪个位置开始并不重要,而只关注他/她与哪些对手战斗以及他/她得到了多长时间,我们可以说左边的玩家总是获胜,然后只需计算创建方法的数量最底部的一排,是 8! 40320。 第一种可能性: a a e a c e g a b c d e f g h 第二种可能: a a e a c e h a b c d e f h g 回答2 有 (8 * 7) / 2 种组合 = 28 [ 换句话说,8!/(2! * (8-2)!) ] 使用 Perl 中的 Set::Partition 我可以写: my $s = Set::Partition->new( list => ['a'..'h'], partition => [2, 6], ); while (my $p = $s->next) { print join( ' ', map { "[@$_]" } @$p ), $/; } 这使 [a b] [c d e f g h] [a c] [b d e f g h] [a d] [b c e f g h] [a e] [b c d f g h] [a f] [b c d e g h] [a g] [b c d e f h] [a h] [b c d e f g] [b c] [a

2021-09-13 11:32:41    分类:技术分享    math   probability   combinatorics