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

📄 dynenvs.java

📁 Autolife模型是一个能够进行“开放式进化”的人工生命系统。每个Agent模型采用可以变化规则表长度的有限自动机模型建模。一方面Agent可以进行自我繁殖
💻 JAVA
字号:
package lifetest;
import java.awt.*;
import lifetest.World;
public class dynEnvs {
	int rule[][][][][][][][][];

	double rule0[][]=new double[6][4];
	double p[]=new double[4];
	double pp[]=new double[5];
	double interX,interY;
	int type;
	World localwd;
	public dynEnvs (int t,World wd){
		localwd=wd;
		type=t;
		switch(type){
			case 0:
				
				rule  = new int [2][2][2][2][2][2][2][2][2];
				//自动生成规则
					  for(int i1=0;i1<2;i1++){
					    for(int i2=0;i2<2;i2++){
					      for(int i3=0;i3<2;i3++){
					        for(int i4=0;i4<2;i4++){
					          for(int i5=0;i5<2;i5++){
					            for(int i6=0;i6<2;i6++){
					              for(int i7=0;i7<2;i7++){
					                for(int i8=0;i8<2;i8++){
					                 /* rule[0][i1][i2][i3][i4][i5][i6][i7][i8]=0;
					                  rule[1][i1][i2][i3][i4][i5][i6][i7][i8]=0;
					                  int addition=i1+i2+i3+i4+i5+i6+i7+i8;
					                  if(addition<=4){
					                    rule[1][i1][i2][i3][i4][i5][i6][i7][i8]=1;
					                  }
					                  if(addition==2){
					                    rule[0][i1][i2][i3][i4][i5][i6][i7][i8]=1;
					                    rule[1][i1][i2][i3][i4][i5][i6][i7][i8]=1;
					                  }*/
					                  
									  rule[0][i1][i2][i3][i4][i5][i6][i7][i8]=0;
									   rule[1][i1][i2][i3][i4][i5][i6][i7][i8]=0;
									   int addition=i1+i2+i3+i4+i5+i6+i7+i8;
									   if(addition==2){
										 rule[1][i1][i2][i3][i4][i5][i6][i7][i8]=1;
									   }
									   else if(addition==3){
										 rule[0][i1][i2][i3][i4][i5][i6][i7][i8]=1;
										 rule[1][i1][i2][i3][i4][i5][i6][i7][i8]=1;
									   }
					                }
					              }
					            }
					          }
					        }
					      }
					    }
					  }
				break;
			case 1:
				pp[0]=0;
				p[0]=0.01; p[1]=0.85; p[2]=0.07; p[3]=0.07;
				 for (int i=1;i<5;i++){
				   pp[i]=pp[i-1]+p[i-1];
				 }
				 rule0[4][0]=0.16;
				 rule0[0][1]=0.85; rule0[1][1]=0.04; rule0[3][1]=-0.04; rule0[4][1]=0.85; rule0[5][1]=1.6;
				 rule0[0][2]=0.2; rule0[1][2]=-0.26; rule0[3][2]=0.23; rule0[4][2]=0.22; rule0[5][2]=1.6;
				 rule0[0][3]=-0.15; rule0[1][3]=0.28; rule0[3][3]=0.26; rule0[4][3]=0.24; rule0[5][3]=0.44;
			break;
		}
	}
	public int read(int i,int j,int r,int width,int height,int world[][]){
		int s=0;
		for(int i1=0;i1<r;i1++){
			for(int j1=0;j1<r;j1++){
				int t1=world[(r*i+i1+width)%width][(r*j+j1+height)%height];
				if(t1==1){
					s++;	
				}
			}
		}
		int out=0;
		if(s>(float)(r*r)/(float)(5)){
			out=1;
		}
		return out;
	}
	public void write(int i,int j,int r,int width,int height,int smallwd[][],int world[][]){
				for(int i1=0;i1<r;i1++){
					for(int j1=0;j1<r;j1++){
						world[(r*i+i1+width)%width][(r*j+j1+height)%height]=smallwd[i][j];		
					}
				}
	}
	public int[][] evolve(int world[][],int width,int height){
		int newwd[][];
		newwd=new int[width][height];
		switch(type){
			case 0:
				int r=5;
				for(int i=0;i<width;i++){
					  for(int j=0;j<height;j++){
					    int x1=((i-1)+width)%width,x3=((i+1)+width)%width,y1=((j-1)+width)%height,y3=((j+1)+width)%height;
						int v[]=new int[9];
						if(world[i][j]==1)v[0]=1;
						else v[0]=0;
						if(world[x1][y1]==1)v[1]=1;
						else v[1]=0;
						if(world[i][y1]==1)v[2]=1;
						else v[2]=0;
						if(world[x3][y1]==1)v[3]=1;
						else v[3]=0;
						if(world[x1][j]==1)v[4]=1;
						else v[4]=0;
						if(world[x3][j]==1)v[5]=1;
						else v[5]=0;
						if(world[x1][y3]==1)v[6]=1;
						else v[6]=0;
						if(world[i][y3]==1)v[7]=1;
						else v[7]=0;
						if(world[x3][y3]==1)v[8]=1;
						else v[8]=0;
					   	newwd[i][j]=rule[v[0]][v[1]][v[2]][v[3]][v[4]][v[5]][v[6]][v[7]][v[8]];
					}
				}
				/*
				int w=(int)(width/5);
				int h=(int)(height/5);
				int smallwd[][]=new int[w][h];
				for(int i=0;i<w;i++){
			      for(int j=0;j<h;j++){
					int x1=((i-1)+width)%width,x3=((i+1)+width)%width,y1=((j-1)+width)%height,y3=((j+1)+width)%height;
					int v[]=new int[9];
				   v[0]=read(i,j,r,width,height,world);
				   v[1]=read(x1,y1,r,width,height,world);
				   v[2]=read(i,y1,r,width,height,world);
				   v[3]=read(x3,y1,r,width,height,world);
				   v[4]=read(x1,j,r,width,height,world);
				   v[5]=read(x3,j,r,width,height,world);
				   v[6]=read(x1,y3,r,width,height,world);
				   v[7]=read(i,y3,r,width,height,world);
				   v[8]=read(x3,y3,r,width,height,world);
				   smallwd[i][j]=rule[v[0]][v[1]][v[2]][v[3]][v[4]][v[5]][v[6]][v[7]][v[8]];
				   write(i,j,r,width,height,smallwd,newwd);
			      }
				}*/
				break;
			case 1:
			double u=0;
			for(int j=0;j<localwd.FoodAddNum;j++){
				 double E = Math.random();
				  for(int i=0;i<4;i++){
					if(E >= pp[i] && E< pp[i+1]){
					  u=rule0[0][i]*interX+rule0[1][i]*interY+rule0[2][i];
					  interY=rule0[3][i]*interX+rule0[4][i]*interY+rule0[5][i];
					  interX=u;
					  break;
					}
				  }
				  int xx=width/2+(int)(width*interX/7);
				  int yy=height-1-(int)(height*interY/11);
				  world[xx][yy]=1;
				  localwd.g.setColor(localwd.controlEnv.COLOR_GRASS);
				  localwd.g.drawRect(xx,yy,1,1);
			}
			newwd=world;
			break;
		}
		return newwd;
	}
}

⌨️ 快捷键说明

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