24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1274  |  回复: 14
当前主题已经存档。
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

liao6417

新虫 (初入文坛)

[交流] 【求助】求一段monte carlo 程序已有1人参与

求一段monte carlo 程序,不管是实现什么的,我主要是想看看这个运算法则的样子,以及写法

[ Last edited by wuli8 on 2009-11-13 at 21:40 ]
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zhiping780

木虫 (著名写手)

天鹰帮帮主


小木虫(金币+0.5):给个红包,谢谢回帖交流
哥们   你搞monte carlo咋学的?我想搞    却一直不懂这东西杂用
目云天外,志在九霄中。。。。。
5楼2009-11-22 19:25:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 15 个回答

pfzhangphy

金虫 (小有名气)


lei0736(金币+1):谢谢 2010-03-15 11:07
建议找本MC的书看吧!看程序不如看书好!
2楼2009-11-16 14:28:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

bay__gulf

金虫 (著名写手)

刘苏州

★ ★ ★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
zeoliters(金币+4,VIP+0):多谢回帖交流! 11-17 15:04
MC方法很好,只是形式复杂的力场不好加进去

当初学习MC时候写一个例子
用于逃离曲线上 local minimum, 找到的global minimum
实验函数y = cos (x) + cos (3x), 图像见图top
最低点-2.0, 收敛目标-1.99999
代码
CODE:
#include
#include
#include
int main()
{
  float a, d, t;
  float x0, x, y0, y;
  scanf("%f %f %f", &a, &d, &t);
  srand(0);
  x0=a;
  do {
    y0= cos(x0)+cos(3*x0);
    x= x0 + d*(rand()%10000/10000.0-0.5);
    y= cos(x) + cos(3*x);
    printf("%f\t%f\n", x, y);
    if (exp((y0-y)/t) > rand()%10000/10000.0) x0= x;
  } while (y > -1.99999);

  return 0;
}

需要手工输入三个参数,
a: x初值, d:尝试移动的最大范围, t: 相当于kT
图middle 和buttom 分别在(a,d,t)=(0.2, 0.1, 0.8) 时候, x 和y 随运行步数的演化
可见在有限的时间内, 通过简单的算法可以逃离曲线上 local minimum, 找到的global minimum
适合分子复杂, 不能一一列举的各个构象时候的构象分析
3楼2009-11-16 14:58:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wuchenwf

荣誉版主 (职业作家)

引用回帖:
Originally posted by bay__gulf at 2009-11-16 14:58:
MC方法很好,只是形式复杂的力场不好加进去

当初学习MC时候写一个例子
用于逃离曲线上 local minimum, 找到的global minimum
实验函数y = cos (x) + cos (3x), 图像见图top
最低点-2.0, 收敛目标-1.99999
代 ...

好资源!
4楼2009-11-16 21:52:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 高级回复(可上传附件)
信息提示
请填处理意见