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

📄 efloys.java

📁 一个swarm的小程序
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
			for (i=0;i<Efloys.length;i++) {
				CurrentNum = i;
				st = EncodeChrom(params);
				fx = EncodeChrom(fixpars);
				ev = EncodeChrom(envpars);
				Efloys[i] = new Efloy(params, st, fixpars, fx, envpars, ev);
				Efloys[i].id = i;
			}
			ResetPopulation = false;
		}

	}


	public void ResizeFrame(Frame frame) {

		Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
		int w = d.width;
		int h = d.height;
		//frame.hide();
		frame.reshape(0,0,w,h);

		frame.show();

		/*
		int fw = 640;
		int fh = 480;
		int dw = (int) (w - fw)/2;
		int dh = (int) (h - fh)/2;
		frame.reshape(dw,dh,fw,fh);
		*/

	}


	public void CenterFrame(Frame frame) {

		Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
		int w = d.width;
		int h = d.height;
		int fw = 640;
		int fh = 480;
		int dw = (int) (w - fw)/2;
		int dh = (int) (h - fh)/1;
		frame.move(dw,dh);

	}


	void UpdateFloysParams() {

		//更新群体的参数值
		int i;
		String st, fx, ev;

		int size = Efloys[0].PopulationSize;

		for (i=0;i<size;i++) {
			Efloys[i].params = params;
			Efloys[i].fixpars = fixpars;
			Efloys[i].envpars = envpars;
			st = EncodeChrom(params);
			fx = EncodeChrom(fixpars);
			ev = EncodeChrom(envpars);
			Efloys[i] = new Efloy(params, st, fixpars, fx, envpars, ev);
			Efloys[i].id = i;
		}
	}


	public boolean mouseExit(Event evt, int x, int y) {

		showStatus("");
		return true;

	}

	public boolean keyDown(Event evt, int key) {

		char c = (char) key;

		if (c == Event.F1) {
			helpwin.toFront();
			return true;
		}
		else
		if (c == Event.F2) {
			deb.toFront();
			return true;
		}
		else
		if (c == Event.F3) {
			deb.clear();
			return true;
		}
		else
		if (c == Event.F4) {
			InLog = false;
			return true;
		}
		else
		if (c == Event.F5) {
			InLog = true;;
			return true;
		}
		else
		if (c == Event.F6) {
			KickAll();
			return true;
		}
		else
			return false;

	}


	public boolean action(Event evt, Object o) {

		int i,j;
		Efloy Efloy;
		boolean rt = true;
		String s1, s2, s3, s4;
		long oldtime, newtime, timediff;

		if(evt.target == Quit) {
			showStatus("Quit");
			//destroy();
			//System.exit(0);
			try {
				MainPage = new URL("Javafloys.html");
				appcontext.showDocument(MainPage);
			}
			catch (MalformedURLException e){
			}
			rt=true;
		}

		else if (evt.target == Pause) {

			if (running) {
				runner.suspend();
				running = false;
				Pause.setLabel("Continue");
			}
			else {
				runner.resume();
				running = true;
				Pause.setLabel("Pause");
			}
			rt = true;
		}

		else if (evt.target == Evolution) {

			if (InEvolution) {
				Evolution.setLabel("Start Evolution");
				InEvolution = false;
				NewGeneration = false;
				showStatus("");
			}
			else {
				Evolution.setLabel("Stop Evolution");
				InEvolution = true;
				NewGeneration = true;
				showStatus("");
			}
			rt = true;

		}


		else if (evt.target == Info) {
			
			MainTitle.setForeground(Color.blue);
			String OldTitle = MainTitle.getText();
			MainTitle.setText("Loading Info Screen, please wait..");
			MainTitle.resize(MainTitle.preferredSize());

			showStatus("Loading Info Screen, please wait..");
			finfo = new EfloyInfo(Efloys);
			ResizeFrame(finfo);
			MainTitle.setText(OldTitle);
			MainTitle.setForeground(Color.black);


		}

		else if (evt.target == Control) {
			
			MainTitle.setForeground(Color.blue);
			String OldTitle = MainTitle.getText();
			MainTitle.setText("Loading Properties Screen, please wait..");
			MainTitle.resize(MainTitle.preferredSize());

			showStatus("Loading Control Screen, please wait..");
			fcommand = new EfloyCommand(Efloys);
			ResizeFrame(fcommand);
			MainTitle.setText(OldTitle);
			MainTitle.setForeground(Color.black);



		}

		else if (evt.target == Stranger) {
			
			ReleaseStranger();

		}

		else if (evt.target == Start) {
			
			if (!running) {
				runner.resume();
				running = true;
				Pause.setLabel("Pause");
			}

			deb.clear();
			deb.start();
			InitParamsExtended();
			InEvolution = false;
			NewGeneration = false;
			CurrentStep = 0;
			CurrentTotalStep = 0;
			CurrentGeneration = 0;

			ResetPopulation = true;
			Restart(true);

		}

		else if (evt.target == Scramble) {
			
			if (WithSound)
				beep.play();
			scramble();

		}


		else if (evt.target == Breed) {

			if (WithSound)
				beep.play();
			CreateNewGeneration();

		}


		else if (evt.target == Slower) {
			
			if (SLEEP < 10)
				SLEEP++;
			else if (SLEEP < 150)
				SLEEP += 10;


		}

		else if (evt.target == Faster) {
			if (SLEEP > 10)
				SLEEP -= 10;
			else if (SLEEP > 1)
				SLEEP--;
		}

		else if (evt.target == Help) {
			//helpwin.toFront();
			helpwin.show();
			rt = true;
		}

		else if (evt.target == Rules) {
			//rulewin.toFront();
			rulewin.show();
			rt = true;
		}
		
		else if (evt.target == Log) {
			//deb.toFront();
			deb.show();
			rt = true;
		}

		else if (evt.target == Predefined) {

			fpredefined = new EfloyPredefined();
			ResizeFrame(fpredefined);
			rt = true;

		}

		else if (evt.target == Numbers) {
			if (DrawNumbers) {
				Numbers.setLabel("Show Numbers");
				DrawNumbers = false;
			}
			else {
				Numbers.setLabel("Show Shapes");
				DrawNumbers = true;
			}
			//DrawNumbers = !DrawNumbers;
			rt = true;
		}

		else if (evt.target == Sound) {
			if (WithSound) {
				Sound.setLabel("Turn Sound On");
			}
			else {
				Sound.setLabel("Turn Sound Off");
			}
			WithSound = !WithSound;
			rt = true;
		}

		else if (evt.target == Ranges) {

			if (LimitedRanges) {
				Ranges.setLabel("Limited Ranges");
				InitParamsExtended();
				UpdateFloysParams();
				LimitedRanges = false;
			}
			else {
				Ranges.setLabel("Normal Ranges");
				InitParamsLimited();
				UpdateFloysParams();
				LimitedRanges = true;
			}
			rt = true;

			/*
			remove(canvas);
			add("Center",center);
			center.repaint();
			repaint();
			showStatus("Center");
			*/
		}

		else {
			rt = true;
		}


		//showStatus("evt.target= "+evt.target.toString());
		return rt;
	}


	public boolean handleEvent(Event evt) {

		if(evt.id == Event.WINDOW_DESTROY) {
			showStatus("Window Distroy");
			destroy();
			System.exit(0);
		}
		else
		if (evt.id == Event.MOUSE_DOWN) {
			//deb.toBack();
			deb.hide();
		}


		return super.handleEvent(evt);
	}




	void SortFloys() {
		//对个体按照适应度进行排序
		int i,j;
		boolean swap;
		int e;
		Efloy etemp;

		for (i=0;i < Efloys.length-1;i++) {
			swap = false;
			for (j=Efloys.length-2;j>=i;j--) {
				Efloys[j].GetFitness();
				Efloys[j+1].GetFitness();
				e = Efloys[j].fitness - Efloys[j+1].fitness;
				if (e < 0) {
					etemp = Efloys[j];
					Efloys[j] = Efloys[j+1];
					Efloys[j+1] = etemp;
					swap = true;
				}
			}
			if (swap == false) {
				break;
			}
		}

	}


	void SortFloys(Efloy[] floys) {

		int i,j;
		boolean swap;
		int e;
		Efloy etemp;

		for (i=0;i < floys.length-1;i++) {
			swap = false;
			for (j=floys.length-2;j>=i;j--) {
				Efloys[j].GetFitness();
				Efloys[j+1].GetFitness();
				e = floys[j].fitness - floys[j+1].fitness;
				if (e < 0) {
					etemp = floys[j];
					floys[j] = floys[j+1];
					floys[j+1] = etemp;
					swap = true;
				}
			}
			if (swap == false) {
				break;
			}
		}

	}


	private long GetSumFitness() {
		//的到总体的适应度
		int i;
		long sum;
		float eng, saf, avg;
		float facavg, facsaf;;

		eng = 0;
		saf = 0;
		sum = 0;

		for (i=0;i < Efloys.length;i++) {
			eng = eng + (float) Efloys[i].energy;
			saf = saf + (float) Efloys[i].safety;
		}

		avg = 100;
		facavg = eng/Efloys.length/avg;
		facsaf =  saf/eng;

		for (i=0;i < Efloys.length;i++) {
			Efloys[i].energy = (int) (Efloys[i].energy/facavg);
			Efloys[i].safety = (int) (Efloys[i].safety/facavg/facsaf);
			Efloys[i].GetFitness();
			sum = sum + Efloys[i].fitness;
		}

		return sum;

	}

		

⌨️ 快捷键说明

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