我是神经网络的新手,我从头开始编写了一些代码。
如果运行以下代码,即使运行了几个小时,也可以看到它不起作用。
我正在使用处理语言API 作为JavaScript库,称为processing.js
。
神经网络似乎没有改善。
过一会儿它不会改变。
<!DOCTYPE html>
<html>
<head>
<title>Evolution Simulator</title>
<style>
body {
margin: 0px;
padding: 0px;
overflow: hidden;
}
canvas {
margin: 0px;
padding: 0px;
position: absolute;
top: 0px;
left: 0px;
}
</style>
</head>
<body>
<script src="https://cdn.jsdelivr.net/processing.js/1.4.8/processing.min.js">
</script>
<script data-processing-target="processing-canvas" type="text/processing">
//localStorage.setItem("data", 0);
var mouseIsPressed=mousePressed;
var keyIsPressed=keyPressed;
void setup() {
// /embedded?author=no&width=1366&height=770
size(650, 400);
frameRate(140);
};
noStroke();
const max_creatures = 150;
const mutation_rate = 5;
var creatures = [[100, 100, 0, 100]];
var food = [[300, 100]];
var bad = [[200, 200]];
var boost = [];
var f;
var neural = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]];
/**
* Represents a synapse
* i array
* w weight
* [1.244, 18.16732, 23.4243]
**/
var synapse = function(i, w) {
f = 0;
for(var g in i) {
f += i[g];
}
return f*w;
};
var score = [0];
var death = [false];
var final = [false];
var massdeath = false;
var generation = 0;
var store_neural = 0;
creatures = [];
score = [];
final = [];
boost = [];
death = [];
food = [];
bad = [];
neural = [];
var derug = function(d) {
for(var i in d) {
return d[i];
}
};
for(var i = 0; i < max_creatures;i++) {
creatures.push([100, 100, 0, 100]);
score.push(0);
death.push(false);
final.push(false);
food.push([300, 100]);
bad.push([200, 200]);
neural.push([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
}
var boost = [];
var max_boost = [];
var store = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
var great = false;
var sorts = function(a) {
for(var i in a) {
great = true;
for(var j in a) {
if(a[i]<a[j]) {
great = false;
}
}
if(great) {
return a[i];
}
}
};
var limits = function(a, b) {
if(a>b) {
return b;
} else if(a<-b) {
return -b;
} else {
return a;
}
};
var highscore = [0, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]];
draw = function() {
background(0, 255, 0);
fill(0);
text("Generation: " + generation, 20, 20);
massdeath = true;
for(var i in creatures) {
if(death[i]===false) {
massdeath = false;
}
if(boost[i]===undefined) {
boost.push([dist(creatures[i][0], creatures[i][1], food[i][0], food[i][1])]);
}
if(creatures[i][0]===0) {
death[i]=true;
}
fill(255, 0, 255);
if(!death[i]) {
ellipse(creatures[i][0], creatures[i][1], 20, 20);
}
fill(0, 0, 255);
ellipse(food[i][0], food[i][1], 20, 20);
fill(0, 0, 0);
ellipse(bad[i][0], bad[i][1], 20, 20);
var l_1 = synapse([creatures[i][2], creatures[i][0], creatures[i][1], food[i][0], food[i][1], bad[i][0], bad[i][1]], neural[i][0]);
var l_2 = synapse([creatures[i][2], creatures[i][0], creatures[i][1], food[i][0], food[i][1], bad[i][0], bad[i][1]], neural[i][1]);
var l_3 = synapse([creatures[i][2], creatures[i][0], creatures[i][1], food[i][0], food[i][1], bad[i][0], bad[i][1]], neural[i][2]);
var l_4 = synapse([creatures[i][2], creatures[i][0], creatures[i][1], food[i][0], food[i][1], bad[i][0], bad[i][1]], neural[i][3]);
var l_5 = synapse([creatures[i][2], creatures[i][0], creatures[i][1], food[i][0], food[i][1], bad[i][0], bad[i][1]], neural[i][4]);
var l_6 = synapse([creatures[i][2], creatures[i][0], creatures[i][1], food[i][0], food[i][1], bad[i][0], bad[i][1]], neural[i][5]);
var l2_1 = synapse([l_1, l_2, l_3, l_4, l_5, l_6], neural[i][6]);
var l2_2 = synapse([l_1, l_2, l_3, l_4, l_5, l_6], neural[i][7]);
var l2_3 = synapse([l_1, l_2, l_3, l_4, l_5, l_6], neural[i][8]);
var l2_4 = synapse([l_1, l_2, l_3, l_4, l_5, l_6], neural[i][9]);
var l2_5 = synapse([l_1, l_2, l_3, l_4, l_5, l_6], neural[i][10]);
var l3_1 = synapse([l2_1, l2_2, l2_3, l2_4, l2_5], neural[i][11]);
var l3_2 = synapse([l2_1, l2_2, l2_3, l2_4, l2_5], neural[i][12]);
var l3_3 = synapse([l2_1, l2_2, l2_3, l2_4, l2_5], neural[i][13]);
var l3_4 = synapse([l2_1, l2_2, l2_3, l2_4, l2_5], neural[i][14]);
var l_12 = synapse([creatures[i][2], creatures[i][0], creatures[i][1], food[i][0], food[i][1], bad[i][0], bad[i][1]], neural[i][17]);
var l_22 = synapse([creatures[i][2], creatures[i][0], creatures[i][1], food[i][0], food[i][1], bad[i][0], bad[i][1]], neural[i][18]);
var l_32 = synapse([creatures[i][2], creatures[i][0], creatures[i][1], food[i][0], food[i][1], bad[i][0], bad[i][1]], neural[i][19]);
var l_42 = synapse([creatures[i][2], creatures[i][0], creatures[i][1], food[i][0], food[i][1], bad[i][0], bad[i][1]], neural[i][20]);
var l_52 = synapse([creatures[i][2], creatures[i][0], creatures[i][1], food[i][0], food[i][1], bad[i][0], bad[i][1]], neural[i][21]);
var l_62 = synapse([creatures[i][2], creatures[i][0], creatures[i][1], food[i][0], food[i][1], bad[i][0], bad[i][1]], neural[i][22]);
var l2_12 = synapse([l_12, l_22, l_32, l_42, l_52, l_62], neural[i][23]);
var l2_22 = synapse([l_12, l_22, l_32, l_42, l_52, l_62], neural[i][24]);
var l2_32 = synapse([l_12, l_22, l_32, l_42, l_52, l_62], neural[i][25]);
var l2_42 = synapse([l_12, l_22, l_32, l_42, l_52, l_62], neural[i][26]);
var l2_52 = synapse([l_12, l_22, l_32, l_42, l_52, l_62], neural[i][27]);
var l3_12 = synapse([l2_12, l2_22, l2_32, l2_42, l2_52], neural[i][28]);
var l3_22 = synapse([l2_12, l2_22, l2_32, l2_42, l2_52], neural[i][29]);
var l3_32 = synapse([l2_12, l2_22, l2_32, l2_42, l2_52], neural[i][30]);
var l3_42 = synapse([l2_12, l2_22, l2_32, l2_42, l2_52], neural[i][31]);
creatures[i][2] += limits(synapse([l3_1, l3_2, l3_3, l3_4], neural[i][15]), 10);
if(synapse([l3_12, l3_22, l3_32, l3_42], neural[i][16])>0) {
creatures[i][0] += sin((PI/180)*creatures[i][2])*5;
creatures[i][1] += cos((PI/180)*creatures[i][2])*5;
}
//creatures[i][2] += synapse(synapse(synapse(creatures[i][0], creatures[i][1], neural[i][8], neural[i][9]), creatures[i][2], neural[i][10], neural[i][11]), synapse(synapse(bad[i][0], bad[i][1], neural[i][2], neural[i][3]), synapse(food[i][0], food[i][1], neural[i][4], neural[i][5]), neural[i][0], neural[i][1]), neural[i][6], neural[i][7]);
//output1:
if(dist(creatures[i][0], creatures[i][1], food[i][0], food[i][1]) <20&&!death[i]) {
score[i]++;
boost[i] = dist(creatures[i][0], creatures[i][1], food[i][0], food[i][1]);
max_boost[i] = 0;
creatures[i][3]+=175;
if(score[i]===1) {
food[i][0] = 500;
}
if(score[i]===2) {
food[i][1] = 300;
}
if(score[i]>2) {
food[i][0] = random(0, width);
food[i][1] = random(0, height);
bad[i][0] = random(0, width);
bad[i][1] = random(0, height);
}
}
if(dist(creatures[i][0], creatures[i][1], bad[i][0], bad[i][1]) <20) {
creatures[i][3]-=300;
}
if(max_boost[i]===undefined) {
max_boost.push(0);
}
if(1-dist(creatures[i][0], creatures[i][1], food[i][0], food[i][1])/boost[i]>max_boost[i]) {
max_boost[i] = 1-dist(creatures[i][0], creatures[i][1], food[i][0], food[i][1])/boost[i];
}
if(!final[i]) {
creatures[i][3]-=0.5;
}
if(creatures[i][3]<0) {
death[i] = true;
}
if(death[i]&&!final[i]) {
score[i] += max_boost[i];
final[i] = true;
}
if(score[i]>highscore[0]) {
highscore[1] = neural[i];
}
}
text(neural[sorts(score)],10, 400-5);
text(store[0],10, 400-65);
text(store.length,10, 400-45);
text(store,10, 400-25);
text(max_boost[0], 10, 400-85);
text(highscore[1], 10, 400-105);
if(massdeath) {
//implement sort function and neural modification
generation++;
//store = neural[sorts(score)];
for(var i in score) {
great = true;
for(var j in score) {
if(score[i]<score[j]) {
great = false;
}
}
if(great) {
store = neural[i];
}
}
massdeath = false;
creatures = [];
score = [];
boost = [];
final = [];
max_boost = [];
boost = [];
neural = [];
death = [];
food = [];
bad = [];
for(var i = 0; i < max_creatures;i++) {
creatures.push([100, 100, 0, 100]);
score.push(0);
death.push(false);
final.push(false);
food.push([300, 100]);
bad.push([300, 200]);
neural.push([store[0], store[1], store[2], store[3], store[4], store[5], store[6], store[7], store[8], store[9], store[10], store[11], store[12], store[13], store[14], store[15], store[16], store[17], store[18], store[19], store[20], store[21], store[22], store[23], store[24], store[25], store[26], store[27], store[28], store[29], store[30], store[31]]);
}
for(var i in neural) {
for(var j in neural[i]) {
if(random(0, 50)<mutation_rate) {
neural[i][j] = random(-i/705, i/705);
}
neural[i][j] = limits(neural[i][j], 2);
}
}
//println(neural);
}
};
void keyPressed() {
};
</script>
<p align="left">
<canvas id="processing-canvas"></canvas>
</p>
</body>
</html>
如果由于任何原因上述小提琴没有显示任何内容,则有一个可汗学院页面:https://www.khanacademy.org/computer-programming/evolution-simulator/6424038986973184