首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >论文中的概率密度函数,使用C++实现,不能按预期工作

论文中的概率密度函数,使用C++实现,不能按预期工作
EN

Stack Overflow用户
提问于 2010-11-05 11:51:53
回答 3查看 1.2K关注 0票数 6

所以我正在实现一个启发式算法,我遇到了这个函数。

我有一个从1到n的数组( C上的0到n-1,w/e)。我想选择一些要复制到另一个数组中的元素。给定一个参数y (0

根据作者的说法,"l“是一个随机数:0

所以我编写了函数的第一部分,对于y <= 0.5,我将y设置为0.2,n设置为100。这意味着它必须返回一个介于0和99之间的数字,平均值为20。并且结果不是介于0和n之间,而是一些浮点数。N越大,这个浮点数就越小。

这是C测试代码。"x“是"l”参数。

代码语言:javascript
运行
复制
//hate how code tag works, it's not even working now  
int n = 100;  
float y = 0.2;  
float n_copy;  

for(int i = 0 ; i < 20 ; i++)  
{  
    float x = (float) (rand()/(float)RAND_MAX);  // 0 <= x <= 1  
    x = x * n;                                // 0 <= x <= n  
    float p1 = (1 - y) / (n*y);  
    float p2 = (1 - ( x / n ));  
    float exp = (1 - (2*y)) / y;  
    p2 = pow(p2, exp);  
    n_copy = p1 * p2;  
    printf("%.5f\n", n_copy);  
}  

下面是一些结果(5个小数截断):

代码语言:javascript
运行
复制
0.03354  
0.00484  
0.00003  
0.00029  
0.00020  
0.00028  
0.00263  
0.01619  
0.00032  
0.00000  
0.03598  
0.03975    
0.00704  
0.00176  
0.00001  
0.01333  
0.03396   
0.02795  
0.00005  
0.00860 

文章是:

http://www.scribd.com/doc/3097936/cAS-The-Cunning-Ant-System

第6和7页。

或者在谷歌上搜索"cAS: cunning ant system“。

那么我到底做错了什么呢?我不相信作者是错的,因为有超过5篇论文描述了这个函数。

把我所有的互联网都交给帮助我的人。这对我的工作很重要。

谢谢:)

EN

Stack Overflow用户

发布于 2010-11-05 12:14:38

你可能会误解别人对你的期望。

给定一个(适当标准化的) PDF,并希望抛出与其一致的随机分布,您可以通过集成PDF来形成累积概率分布(CDF),然后反转CDF,并使用统一的随机谓词作为反转函数的参数。

更多细节。

f_s(l)就是PDF,并且已经在[0,n)上进行了标准化。

现在集成它以形成CDF

代码语言:javascript
运行
复制
g_s(l') = \int_0^{l'} dl f_s(l)

请注意,这是对未指定端点的定积分,我称之为l'。因此,CDF是l'的函数。假设我们有标准化的权利,g_s(N) = 1.0。如果不是这样,我们应用一个简单的系数来修复它。

接下来,反转CDF并调用结果G^{-1}(x)。为此,您可能希望选择一个特定的gamma值。

然后在[0,n)上抛出均匀随机数,并将这些随机数用作G^{-1}的参数x。结果应该在[0,1)之间,并且应该根据f_s分布。

就像贾斯汀说的,你可以使用计算机代数系统来计算数学。

票数 6
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4103477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档