📄 efloys.java
字号:
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 + -