Ocaml进程只能使用一个核心,为了使用多个核心,我必须运行多个进程.
是否有任何Ocaml框架可用于并行化蒙特卡罗模拟?
我需要为我的宠物射线追踪器生成随机值的算法进行澄清.
我从一个点发射光线.我有这些光线分布的问题:我需要分布均匀,但它不是......
我现在面临的问题是,在我对结果空间的扭曲之后,最初的均匀分布是不均匀的.
因此,例如,如果极坐标系我生成r和t角.分布不均匀且不均匀:靠近每个极点的空间比靠近赤道的结果密度大得多.原因很清楚:我将均匀分布的点从圆柱空间转换为球形.而且我扭曲了结果.同样的问题是如果我规范化立方体中随机生成的点.
我现在的想法是这样的:我想创建一个四面体,对其顶点进行标准化,将每个面(三角形)与中间的点分开,对其进行标准化并递归重复,直到我有足够的点.然后我稍微"扭曲"这些点.然后我再次将它们标准化.而已.
据我所知,这种方法本身并不是纯粹的数学蒙特卡罗方法,因为除了最后一步之外,我不会在任何步骤中使用随机分布.我不喜欢这种复杂性的解决方案.
任何人都可以建议更简单但仍然
谢谢!
编辑:
我需要一个快速的方法,而不仅仅是正确的方法.这就是我问蒙特卡罗的原因.提供的答案是正确的,但不是很快.四面体的方法很快,但不是很"随机"=>不正确.
我真的需要一些更合适的东西.
我一直在尝试使用Python创建一个脚本,让我生成大量的点,用于蒙特卡罗方法,以计算对Pi的估计.我到目前为止的脚本是这样的:
import math
import random
random.seed()
n = 10000
for i in range(n):
x = random.random()
y = random.random()
z = (x,y)
if x**2+y**2 <= 1:
print z
else:
del z
Run Code Online (Sandbox Code Playgroud)
到目前为止,我能够生成我需要的所有点,但我想得到的是运行脚本以便在以后的计算中使用时产生的点数.我不是在寻找令人难以置信的精确结果,只是一个足够好的估计.任何建议将不胜感激.
我已经在这里和那里读了一段时间,关于使用"蚁群"模型作为优化各种类型算法的启发式方法.但是,我还没有找到一篇文章或书籍,以介绍的方式讨论蚁群优化,甚至还有很多细节.任何人都可以指点我可以了解更多关于这个想法的资源吗?
algorithm computer-science graph-theory montecarlo ant-colony
我目前的任务是优化蒙特卡罗模拟,该模拟根据一组Obligors计算资本充足率数据.
它运行大约10倍太慢,无法生产,需要数量或每日运行.此外,结果数字的粒度需要在某个阶段提升到桌面可能的书本水平,我给出的代码基本上是一个原型,由半生产能力的业务部门使用.
该应用程序目前是单线程的,所以我需要使它多线程,可能看看System.Threading.ThreadPool
或Microsoft Parallel Extensions库但我在这家银行的服务器上受限于.NET 2所以我可能不得不考虑这个人的端口,http://www.codeproject.com/KB/cs/aforge_parallel.aspx.
我正在尽力让他们升级到.NET 3.5 SP1,但这是在这种规模的组织中的一项重要练习,在合同时间框架内可能无法实现.
我使用dotTrace的试用版(http://www.jetbrains.com/profiler)描述了该应用程序.还有哪些好的剖析器?免费的?
大量的执行时间用于生成均匀的随机数,然后将其转换为正态分布的随机数.他们正在使用C#Mersenne twister实现.我不确定他们在哪里获得它,或者它是最好的方法来实现这个(或最佳实现)来生成统一的随机数.然后将其转换为正态分布版本以供计算使用(我还没有深入研究过翻译代码).
使用以下内容的经验是什么?
http://www.qlnet.org(Quantlib的C#端口)或
您知道的任何替代方案?我是C#开发人员,所以更喜欢C#,但C++的包装应该不是问题,是吗?
也许更快地利用C++实现.我认为这些库中的一些库将具有最快的方法来直接生成正态分布的随机数,而无需转换步骤.此外,他们可能还有一些其他功能,将有助于后续计算.
此外,它所使用的计算机是四核Opteron 275,8 GB内存,但Windows Server 2003 Enterprise 32位.我应该建议他们升级到64位操作系统吗?任何支持这一决定的文章的链接都将非常感激.
无论如何,任何建议和帮助你都非常感激.
我正在寻找一个实现蚁群优化的.NET类库或.NET-Framework.你能给我一些关于这个主题的链接,资源等吗?
.net algorithm mathematical-optimization montecarlo ant-colony
这是MWE
我正在使用的更大的代码.基本上,它针对位于特定阈值以下的所有值对KDE(内核密度估计)执行蒙特卡洛积分(在该问题上建议积分方法BTW:积分2D核密度估计).
import numpy as np
from scipy import stats
import time
# Generate some random two-dimensional data:
def measure(n):
"Measurement model, return two coupled measurements."
m1 = np.random.normal(size=n)
m2 = np.random.normal(scale=0.5, size=n)
return m1+m2, m1-m2
# Get data.
m1, m2 = measure(20000)
# Define limits.
xmin = m1.min()
xmax = m1.max()
ymin = m2.min()
ymax = m2.max()
# Perform a kernel density estimate on the data.
x, y = np.mgrid[xmin:xmax:100j, ymin:ymax:100j]
values = np.vstack([m1, …
Run Code Online (Sandbox Code Playgroud) 考虑一个非常基本的蒙特卡罗模拟直线y = m * x + b
,例如,可视化参数m
和不确定性的影响b
.m
并且b
都是从正态分布中采样的.来自MATLAB背景,我会写这个
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(start=0, stop=5, step=0.1)
n_data = len(x)
n_rnd = 1000
m = np.random.normal(loc=1, scale=0.3, size=n_rnd)
b = np.random.normal(loc=5, scale=0.3, size=n_rnd)
y = np.zeros((n_data, n_rnd)) # pre-allocate y
for realization in xrange(n_rnd):
y[:,realization] = m[realization] * x + b[realization]
plt.plot(x, y, "k", alpha=0.05);
Run Code Online (Sandbox Code Playgroud)
这确实产生了所需的输出,但我觉得必须有一个更"Pythonic"的方式来做到这一点.我错了吗?如果没有,是否有人可以提供一些代码示例来说明如何更有效地执行此操作?
举一个例子我在寻找:在MATLAB中,这可以很容易地编写,而无需使用循环bsxfun()
.在Python中是否有类似的东西,或者甚至包含类似这些东西的包?
我想评估他们总和的密度:
为了计算第一个积分,我在单形中生成均匀分布的点,然后检查它们是否属于上述积分中的所需区域,并取得点的分数来评估上述密度.
一旦我计算出上述密度,我就按照类似的程序计算上面的对数积分来计算它的值.然而,这是非常低效的,并花了很多时间这样3-4个小时.任何人都可以建议我在Python中解决这个问题的有效方法吗?我正在使用Numpy包.
这是代码
import numpy as np
import math
import random
import numpy.random as nprnd
import matplotlib.pyplot as plt
from matplotlib.backends.backend_pdf import PdfPages
#This function checks if the point x lies the simplex and the negative simplex shifted by z
def InreqSumSimplex(x,z):
dim=len(x)
testShiftSimpl= all(z[i]-1 <= x[i] <= z[i] for i in range(0,dim)) and (sum(x) >= sum(z)-1)
return int(testShiftSimpl)
def InreqDiffSimplex(x,z):
dim=len(x)
testShiftSimpl= all(z[i] <= x[i] <= z[i]+1 for i in range(0,dim)) and (sum(x) <= sum(z)+1)
return …
Run Code Online (Sandbox Code Playgroud) 数据集中有两列,分别是user_id和site_name.它记录每个用户浏览的每个站点名称.
toy_dict = {'site_name': {0: u'\u4eac\u4e1c\u7f51\u4e0a\u5546\u57ce',
1: u'\u963f\u91cc\u4e91',
2: u'\u6dd8\u5b9d\u7f51',
3: u'\u624b\u673a\u6dd8\u5b9d\u7f51',
4: u'\u6211\u4eec\u7684\u70b9\u5fc3\u7f51',
5: u'\u8c46\u74e3\u7f51',
6: u'\u9ad8\u5fb7\u5730\u56fe',
7: u'\u817e\u8baf\u7f51',
8: u'\u70b9\u5fc3',
9: u'\u767e\u5ea6',
10: u'\u641c\u72d7',
11: u'\u8c37\u6b4c',
12: u'AccuWeather\u6c14\u8c61\u9884\u62a5',
13: u'\u79fb\u52a8\u68a6\u7f51',
14: u'\u817e\u8baf\u7f51',
15: u'\u641c\u72d7\u7f51',
16: u'360\u624b\u673a\u52a9\u624b',
17: u'\u641c\u72d0',
18: u'\u767e\u5ea6'},
'user_id': {0: 37924550,
1: 37924550,
2: 37924550,
3: 37924550,
4: 37924550,
5: 37924550,
6: 37924550,
7: 37924550,
8: 37924551,
9: 37924551,
10: 37924551,
11: 37924551,
12: 37924551,
13: 37924552,
14: 45285152,
15: 45285153,
16: 45285153,
17: 45285153,
18: …
Run Code Online (Sandbox Code Playgroud) montecarlo ×10
python ×4
random ×4
numpy ×3
algorithm ×2
ant-colony ×2
.net ×1
3d ×1
c# ×1
distribution ×1
graph-theory ×1
multicore ×1
networking ×1
ocaml ×1
performance ×1
pymc ×1
python-3.x ×1
simulation ×1
statistics ×1