Naik
Turun
1
mengumpulkan
Laporkan
membagikan

基于蒙特卡罗方法的一维意见传播模型
注:我学习数模时候写的捏
参数设定:n——持意见A的个体;
M——持意见B的个体;
其他说明:编写演化过程源程序时对于程序调试不熟悉,故加入了大量printf语句
来观察程序运行步骤。
源程序编写完成后在vs2010上始终无法正常运行,运行过程中常常在第四次循环开始出现-1075052543 858993461等数字。当程序在devc++上运行时则可正常运行。程序这个问题我始终无法解决。(据csdn所说,这是因为程序中出现了未定义行为,导致不同编译器运行结果不同,我尝试更改源程序代码但始终无法解决。)
一、设计思路(包括规则说明 参数设定)
演化规则:
参数设定:n——持意见A的个体;
M——持意见B的个体;
其他说明:编写演化过程源程序时对于程序调试不熟悉,故加入了大量printf语句
来观察程序运行步骤。
源程序编写完成后在vs2010上始终无法正常运行,运行过程中常常在第四次循环开始出现-1075052543 858993461等数字。当程序在devc++上运行时则可正常运行。程序这个问题我始终无法解决。(据csdn所说,这是因为程序中出现了未定义行为,导致不同编译器运行结果不同,我尝试更改源程序代码但始终无法解决。)
二、代码(关键部分加注释)
#include<stdio.h>
#include<time.h>
#include <stdlib.h>
int main()
{
double N=0,p=5;//意见比例
int a[100]={0},i=0,I=0;
int h=0,j=0,k=0;
int n=0,m=0;//意见人数
int b[100]={0};//暂存
int t=1,TIME=1000;
int x=0;//随机数
FILE *fp=fopen("yijian.txt","w+");
srand((unsigned)time(0));
for(i=0;i<100;i++)//初始值
{
x=rand()%10;
if(x<p)
{
a[i]=1;
}
else
{
a[i]=0;
}
b[i]=a[i];
//fprintf(fp,"%d ",b[i]);
}
fprintf(fp,"\n ");
while(t<TIME)
{
i=rand()%10;
for(I=i;i<I+100;i=i+1)//元胞机循环规则
{
h=(i+99)%100;
j=(i+101)%100;
k=(i+102)%100;
if(a[i]==a[j])
{
b[h]=a[i];
b[k]=a[i];
}
else
{
b[h]=a[j];
b[k]=a[i];
}
}
n=0;
for(i=0;i<100;i++)
{
a[i]=b[i];
if(a[i]==1)
{
n=n+1;
}
else
{
m=m+1;
}
printf("%d ",a[i]);
//fprintf(fp,"%d ",a[i]);
}
//fprintf(fp,"\n");
N=(double)n/100;
fprintf(fp,"%.2f ",N);//输出频率
t=t+1;
}
fclose(fp);
return 0;
}
三、参考文献
[1] —涵涵—,关于相同代码在vs2017和Dev-c++中结果不同的原因初探索:UB(undefined behaviour)(Z) Tautan web(blog.csdn.net)PernyataanSemua artikel di situs ini, kecuali dinyatakan lain atau ditandai khusus, adalah publikasi asli situs ini. Individu atau organisasi manapun dilarang menyalin, mencuri, mengumpulkan, atau menerbitkan konten situs ini ke situs web, buku, atau platform media lainnya tanpa persetujuan dari UP master. Jika konten situs ini melanggar hak dan kepentingan yang sah dari penulis asli, silakan hubungi kami untuk pemrosesan: Laporan DMCA













这个人确实想隐藏自己(大概