蒙特卡洛法-随机行走

  • 一、模型介绍
  • 二、具体代码
    • (一)算法流程图
    • (二)代码
  • 三、结果分析
  • 四、写在最后

一、模型介绍

  • 蒙特卡洛方法
    当所求问题的解是某个事件的概率,或者是某个随机变量的数学期望,或者是与之有关的量时,通过某种试验的方法,得出该事件发生的频率,再通过它得到问题的解。这就是蒙特卡罗方法的基本思想。蒙特卡罗方法的关键步骤在于随机数的产生,计算机产生的随机数都不是真正的随机数(由算法确定的缘故),如果伪随机数能够通过一系列统计检验,我们也可以将其当作真正的随机数使用。
  • 基于蒙特卡洛法的随机行走
    随机游走(random walk)也称随机漫步,随机行走等是指基于过去的表现,无法预测将来的发展步骤和方向。核心概念是指任何无规则行走者所带的守恒量都各自对应着一个扩散运输定律 ,接近于布朗运动,是布朗运动理想的数学状态,现阶段主要应用于互联网链接分析及金融股票市场中。

二、具体代码

(一)算法流程图

(二)代码

#include <stdio.h>
#include <math.h>
#include <stdlib.h>#define big 200void put(FILE *outstream, double data1, double data2)
{fprintf(outstream, "%f,%f\n,", data1, data2);
}
void init(int *p, long size)
{int *q = p;while(q<(p+size)){*q = 0;q++;}*(q-size/2+big/2) = 1;
}
//随机行走
void walk(int *x, int *y, int s)
{int step = rand() % 8;int p1 = *x-1;int p2 = *x+1;int s1 = *y-1;int s2 = *y+1;if(*x==0)p1 = s-1; else if(*x==s-1)p2 = 0;if(*y==0)s1 = s-1; else if(*y==s-1)s2 = 0;switch(step){case 0:*x = p2;//+break;case 1:*x = p1;//-break;case 2:*y = s2;//+break;case 3:*y = s1;//-break;case 4:*x = p2; *y = s2;//++break;case 5:*x = p1; *y = s1;//--break;case 6:*x = p2; *y = s1;//+-break;case 7:*x = p1; *y = s2;//-+break;default:printf("运行错误!");break;}
}
//判断是否靠近
bool judge(int x, int y, int space[][big], int s)
{int p1 = x-1;int p2 = x+1;int s1 = y-1;int s2 = y+1;if(x==0)p1 = s-1; //19else if(x==s-1)p2 = 0;if(y==0)s1 = s-1; else if(y==s-1)s2 = 0;if(space[p2][y]==1) return true;if(space[p1][y]==1) return true;if(space[x][s2]==1) return true;if(space[x][s1]==1) return true;if(space[p2][s2]==1) return true;if(space[p2][s1]==1) return true;if(space[p1][s2]==1) return true;if(space[p1][s1]==1) return true;return false;
}
void DLA(int width, int space[][big])
{int i;for(i=0; i<3000; i++){//生成随机点int x = rand()% width;//0-19int y = rand()% width;if(space[x][y]==1) continue;while(!judge(x,y,space,width)){walk(&x, &y, width);}space[x][y] = 1;}
}
int main(int argc, char *argv[])
{int space[big][big];long size = sizeof(space)/4;//元素个数 int width = sqrt(size);init(*space,size);DLA(width,space);//***********************************FILE *outstream;if((outstream=fopen("hahaha.dat", "ab")) == NULL){printf("Cannot open file, press any key to exit!\n");exit(1);}//************************************/int m, n;for(m=0; m<width; m++){for(n=0; n<width; n++){if(space[m][n]==1) put(outstream,m*1.0,n*1.0);printf("%d\t",space[m][n]);}}fclose(outstream);return 0;
}

三、结果分析

四、写在最后

  • 编程过程中点阵的数目不宜过大或过小,过大计算时间长,过短无法体现明显现象。
  • 关于DLA的一些其他扩散和聚集领域应用。本次测试只是为了体现随机行走的基本思想,该思想在其他领域的研究应用也非常广泛。例如:P2P 搜索中Random Walk 搜索方法搜索信息的扩散;在高分子中,高分子的形状类似于无规则行走,以及在金融等其他领域。

蒙特卡洛法-随机行走相关推荐

  1. R金融统计:收益、随机行走和模拟

    收益 随机行走 (1)(高斯)随机行走 (2) 几何随机行走 随机行走的模拟 (1)简单随机行走 (2)高斯随机行走

  2. 使用R的金融统计:收益、随机行走和模拟

    转载自:http://site.douban.com/182577/widget/notes/10568316/note/267358020/ #本文为系列读书笔记:David Ruppert:Sta ...

  3. Random Walk(随机行走)

    Random Walk(随机行走) 前言 本人对随机行走算法理解并不是非常透彻(甚至可以说是不理解),仅仅根据定义用python将随机行走进行实现出来,因此本文章一定漏洞百出,仅仅只能参考. 该程序是 ...

  4. 随机行走(random walk)

    第4章基于图的特征选择 我们研究的目的是寻找更高效.更能帮助分类器.能更好理解数据集的特征选择技术.我们提出一种新的基于图的过滤型特征选择算法:基于图的多类别特征结合算法(GMS, Graph-bas ...

  5. Unity 3d 实现AI随机行走

    Unity 3d 实现AI随机行走 通过自己的思路实现的 AI 随机行走,转向,新手上路如有写的不好的地方欢迎讨论. 效果图 下面是代码 using System.Collections; using ...

  6. 自回避随机行走问题 c语言,醉汉随机行走/随机漫步问题(Random Walk Randomized Algorithm Python)...

    世界上有些问题看似是随机的(stochastic),没有规律可循,但很可能是人类还未发现和掌握这类事件的规律,所以说它们是随机发生的. 随机漫步(Random  Walk)是一种解决随机问题的方法,它 ...

  7. python画轨迹曲线-matplotlib绘制随机行走轨迹图

    # _*_ coding: utf-8 _*_ __author__ = 'pythonwu' __date__ = "2018/6/15 16:09" from random i ...

  8. 强化学习(七) - 函数近似方法 - 随机梯度下降, 半梯度下降,及瓦片编码(Tile Coding)实例

    函数近似方法 7.1 目标预测(VE‾\overline{VE}VE) 7.2 随机梯度下降和半梯度下降 例7.1: 1000态随机行走的状态收敛 7.3 线性近似 7.4 线性方法的特征构造 7.4 ...

  9. 随机邻域嵌入_图嵌入(Graph embedding)综述

    最近在学习Embedding相关的知识的时候看到了一篇关于图嵌入的综述,觉得写的不错便把文章中的一部分翻译了出来.因自身水平有限,文中难免存在一些纰漏,欢迎发现的知友在评论区中指正. 目录 一.图嵌入 ...

最新文章

  1. RenderMonkey基本使用方法
  2. zemax图像模拟_zemax2014免费版
  3. 使用Git向GitHub上传代码
  4. 7月份计划-----dream
  5. PHP多条件模糊查询
  6. 有趣程序和让人捧腹大笑的注释,你的注释还不够骚
  7. Qt中QTableWidget用法总结
  8. 如何使用HTML,CSS和JavaScript构建技巧计算器
  9. xamarin android上传图片到服务器,从图片库中选取照片
  10. SQL Server整合–在单个SQL Server实例上托管多个数据库
  11. Go语言struct{}类型的channel
  12. CTF-bugku-crypto-[简单加密]-凯撒密码的base64形式
  13. 字体如何设计,这几点很重要
  14. 将压缩包变成图片的小技巧
  15. 西门子官网下载Eplan部件库
  16. os.path.dirname()用法
  17. RDKit分子的3D结构
  18. 基于Tempo大数据分析平台的智慧博物馆大数据中心
  19. bzoj4407 于神之怒加强版(莫比乌斯反演+线性筛)
  20. Matlab绘制各种小波函数及尺度函数图

热门文章

  1. 字符集与字符编码(ASCII、GBK、UNICODE)
  2. 2018-06-10 笑话15则
  3. servlet过滤器原理及使用
  4. 呼和浩特民族学院计算机系宿舍,【呼和浩特民族学院宿舍】呼和浩特民族学院有专科吗...
  5. C++ Primer Plus(第六版)--学习杂记(第四章)
  6. 怎么用计算机弄出饺子,如何用英文写包饺子的步骤?
  7. html5 verify js,jQuery验证码插件verify
  8. Yolov5m可视化网络结构图
  9. mod运算的实现以及相关算法
  10. 用visio画UML序列图