⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 totalisticca.java

📁 一维元胞自动机源代码
💻 JAVA
字号:
package ca;// Simple Java class for visualization of cellular automata.// Juha Haataja, CSC, Finland.// E-mail: Juha.Haataja@csc.fi.import java.util.Random;// Java class for implementing 1D cellular automatapublic class TotalisticCA {  private int state_nr = 2;  private int radius = 1;  private long rule_nr = 18;  private int rule_type=0;  private int[] ruletable = ca_rule(state_nr, radius, rule_nr,rule_type);  // Initialization  public TotalisticCA(int k, int r, long nr,int type) {    if (state_nr != k || radius != r || rule_nr != nr||type!=rule_type) {      if (k > 1) state_nr = k;      if (r >= 0) radius = r;      if (nr >= 0) rule_nr = nr;      if(type>=0)rule_type=type;      ruletable = ca_rule(state_nr, radius, rule_nr,rule_type);    }  }  // Construction of the rule table  private int[] ca_rule(int k, int r, long nr,int type) {    int n;    if(type==0){      n = (int)(Math.pow(k,2*r+1));    }else{      n=(k-1)*(2*r+1)+1;    }    int[] table = new int[n];    for (int i = 1; i <= n; i++)      table[i-1] = rule_value(i, nr, k);    return table;  }  // Help routine for making rule tables  private int rule_value(int b, long n, int k) {    if (b == 1)      return (int)(n % k);    else      return rule_value(b-1, n/k, k);  }  // Generation of an initial configuration  public int[] config_init(int n) {    Random random_number = new Random();    int[] array = new int[n];    for (int i = 0; i < n; i++) {      array[i] = (int)(state_nr*random_number.nextDouble());      if (array[i] > state_nr-1)	array[i] = state_nr-1;    }    return array;  }  // Computing the next configuration  public int[] ca_next(int[] config,int type) {    int len = config.length;    int[] res = new int[len];    for (int i = 0; i < len; i++) {      res[i] = 0;      for (int j = -radius; j <= radius; j++) {	if (i+j >= 0 && i+j < len){	  if(type==0)res[i] =res[i]*state_nr + config[i+j];          else res[i] +=config[i+j];        }else if (i+j < 0){	  if(type==0)res[i] =res[i]*state_nr + config[len-i+j];          else res[i] += config[len-i+j];	}else{	  if(type==0)res[i] =res[i]*state_nr + config[i+j-len];          else res[i] += config[i+j-len];        }      }      res[i] = ruletable[res[i]];    }    return res;  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -