Skip to content

Commit 8c5b112

Browse files
Courssumm02Courssumm02
authored andcommitted
M6
1 parent e50f27a commit 8c5b112

File tree

6 files changed

+736
-72
lines changed

6 files changed

+736
-72
lines changed

Module 5 v2/app.js

Lines changed: 40 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
function main(){
22

3-
const N_CLONES = 3000
4-
const a1_prob = 0.2
3+
const N_CLONES = 40**2
4+
const a1_prob = 0.5
55
const a2_prob = 1 - a1_prob
6-
const N_GEN = 500
6+
const N_GEN = 150000
77
const D = 1
88
const gridx = Math.round(Math.sqrt(N_CLONES)) * Math.round(Math.sqrt(N_CLONES))==N_CLONES?Math.round(Math.sqrt(N_CLONES)) : Math.round(Math.sqrt(N_CLONES))+1
99
const gridy = Math.round(Math.sqrt(N_CLONES)) * Math.round(Math.sqrt(N_CLONES))==N_CLONES?Math.round(Math.sqrt(N_CLONES)) : Math.round(Math.sqrt(N_CLONES))+1
@@ -35,99 +35,67 @@ function main(){
3535
}
3636
}
3737
}
38-
39-
//INIT Done
40-
4138
function getRandomInt(min, max) {
4239
min = Math.ceil(min);
4340
max = Math.floor(max);
4441
return Math.floor(Math.random() * (max - min + 1)) + min;
4542
}
4643

47-
function move(x,y){
44+
function random_position(x,y){
4845
return [x + getRandomInt(-D,D), y + getRandomInt(-D,D)]
4946
}
50-
51-
52-
var a1a1 = grid.filter((el)=>{
53-
return el.v1 == 1 && el.v2 == 1
54-
})
55-
var a1a2 = grid.filter((el)=>{
56-
return (el.v1 == 1 && el.v2 == 2) || (el.v1 == 2 && el.v2 == 1)
57-
})
58-
var a2a2 = grid.filter((el)=>{
59-
return el.v1 == 2 && el.v2 == 2
60-
})
6147
draw_grid(new Array(gridx).fill(new Array(gridy)))
6248

63-
var a1a1_data = []
64-
var a1a2_data = []
65-
var a2a2_data = []
66-
var g;
67-
68-
for (let i = 0; i < N_GEN; i++){
49+
//INIT Done
50+
for (let i = 0; i <N_GEN; i++){
6951
setTimeout(()=>{
70-
7152
var visual = []
72-
g = grid.map((item)=>{
73-
const [x,y]=move(item.x, item.y)
74-
item.x = x
75-
item.y = y
76-
return item
77-
})
78-
var new_grid = []
79-
for (let j = 0; j < N_CLONES; j++){
80-
var {x,y,v1,v2}=g[j]
81-
var possible_mates = g.filter((el)=>{
82-
return Math.abs(el.x - x)<=D && Math.abs(el.y - y)<=D
83-
})
84-
var the_mate = possible_mates[Math.floor(Math.random() * possible_mates.length)];
85-
var combinations = [[v1,the_mate.v1],[v1, the_mate.v2],[v2,the_mate.v1],[v2,the_mate.v2]][Math.floor(Math.random() * [[v1,the_mate.v1],[v1, the_mate.v2],[v2,the_mate.v1],[v2,the_mate.v2]].length)];
86-
var offspring = {x:x,y:y,v1: combinations[0], v2: combinations[1]}
53+
var new_grid=[]
54+
for (let j = 0; j < grid.length; j++){
55+
while (true) {
56+
var [x,y]=random_position(grid[j].x, grid[j].y)
57+
var your_mate = grid.filter((el)=>{
58+
return el.x == x && el.y == y;
59+
})
60+
if (your_mate[0]){
61+
break
62+
}
63+
}
64+
65+
var {v1,v2}=grid[j]
66+
var pos=[[v1,your_mate[0].v1],[v1, your_mate[0].v2],[v2,your_mate[0].v1],[v2,your_mate[0].v2]]
67+
var combinations = pos[Math.floor(Math.random() * pos.length)]
68+
var offspring = {x:grid[j].x,y:grid[j].y,v1: combinations[0], v2: combinations[1]}
8769
new_grid.push(offspring)
8870
}
89-
grid = new_grid
90-
var a1a1 = g.filter((el)=>{
91-
return el.v1 == 1 && el.v2 == 1
92-
})
93-
var a1a2 = g.filter((el)=>{
94-
return (el.v1 == 1 && el.v2 == 2) || (el.v1 == 2 && el.v2 == 1)
95-
})
96-
var a2a2 = g.filter((el)=>{
97-
return el.v1 == 2 && el.v2 == 2
98-
})
99-
a1a1_data.push(a1a1.length)
100-
a1a2_data.push(a1a2.length)
101-
a2a2_data.push(a2a2.length)
71+
grid=new_grid
72+
var visual = []
10273
for (let i = 0; i < gridx; i++){
10374
var row = []
10475
for (let j = 0; j < gridy; j++){
105-
var el = g.filter((el)=>{
76+
var el = grid.filter((el)=>{
10677
return el.x == i && el.y == j
107-
})
108-
if (el[0]){
109-
el.forEach((n)=>{
110-
if (n.v1 == 1 && n.v2 == 1){
111-
row.push("A1A1")
112-
}
113-
if((n.v1 == 1 && n.v2 == 2) || (n.v1 == 2 && n.v2 == 1)){
114-
row.push("A1A2")
115-
}
116-
if (n.v1 == 2 && n.v2 == 2){
117-
row.push("A2A2")
118-
}
119-
})}
120-
121-
else{
122-
row.push("N1")
78+
})[0]
79+
80+
81+
if (el.v1 == 1 && el.v2 == 1){
82+
row.push("A1A1")
12383
}
84+
if((el.v1 == 1 && el.v2 == 2) || (el.v1 == 2 && el.v2 == 1)){
85+
row.push("A1A2")
86+
}
87+
if (el.v1 == 2 && el.v2 == 2){
88+
row.push("A2A2")
89+
}
90+
12491
}
12592
visual.push(row)
12693
};
127-
12894
update_grid(visual)
129-
},20)
95+
}, 10)
13096
}
97+
98+
13199
}
132100
main()
133101
// console.log(JSON.stringify(visual));

Module 5 v2/function main(){.js

Lines changed: 202 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,202 @@
1+
function main(){
2+
3+
const N_CLONES = 100
4+
const a1_prob = 0.5
5+
const a2_prob = 1 - a1_prob
6+
const N_GEN = 1
7+
const D = 1
8+
const gridx = Math.round(Math.sqrt(N_CLONES)) * Math.round(Math.sqrt(N_CLONES))==N_CLONES?Math.round(Math.sqrt(N_CLONES)) : Math.round(Math.sqrt(N_CLONES))+1
9+
const gridy = Math.round(Math.sqrt(N_CLONES)) * Math.round(Math.sqrt(N_CLONES))==N_CLONES?Math.round(Math.sqrt(N_CLONES)) : Math.round(Math.sqrt(N_CLONES))+1
10+
11+
var grid = [...Array(gridx*gridy).keys()]
12+
13+
let count = 0
14+
for (let i = 0; i < gridx; i++){
15+
for (let j = 0; j < gridy; j++){
16+
grid[count] = {x: i, y: j}
17+
count++
18+
}
19+
}
20+
21+
for (let i = 0; i < N_CLONES; i++){
22+
if (Math.random() < a1_prob){
23+
grid[i].v1 = 1
24+
if (Math.random() < a1_prob){
25+
grid[i].v2 = 1
26+
}else{
27+
grid[i].v2 = 2
28+
}
29+
}else{
30+
grid[i].v1 = 2
31+
if (Math.random() < a1_prob){
32+
grid[i].v2 = 1
33+
}else{
34+
grid[i].v2 = 2
35+
}
36+
}
37+
}
38+
console.log(JSON.stringify(grid));
39+
function getRandomInt(min, max) {
40+
min = Math.ceil(min);
41+
max = Math.floor(max);
42+
return Math.floor(Math.random() * (max - min + 1)) + min;
43+
}
44+
45+
function random_position(x,y){
46+
return [x + getRandomInt(-D,D), y + getRandomInt(-D,D)]
47+
}
48+
draw_grid(new Array(gridx).fill(new Array(gridy)))
49+
50+
//INIT Done
51+
for (let i = 0; i <N_GEN; i++){
52+
var visual = []
53+
var new_grid=[]
54+
for (let j = 0; j < grid.length; j++){
55+
var [x,y]=random_position(grid[j].x, grid[j].y)
56+
var your_mate = grid.filter((el)=>{
57+
return el.x == x && el.y == y;
58+
})
59+
var {v1,v2}=grid[j]
60+
var pos=[[v1,your_mate[0].v1],[v1, your_mate[0].v2],[v2,your_mate[0].v1],[v2,your_mate[0].v2]]
61+
var combinations = pos[Math.floor(Math.random() * pos.length)]
62+
var offspring = {x:grid[j].x,y:grid[j].y,v1: combinations[0], v2: combinations[1]}
63+
new_grid.push(offspring)
64+
}
65+
grid=new_grid
66+
67+
}
68+
69+
70+
}
71+
main()
72+
// console.log(JSON.stringify(visual));
73+
// draw_grid(visual)
74+
75+
76+
// const ctx = document.getElementById('myChart').getContext('2d');
77+
78+
// const chart = new Chart(ctx, {
79+
// type: 'line',
80+
// data: {
81+
// labels: [...Array(N_GEN).keys()],
82+
// datasets: [{
83+
// label: 'Number of a1a1',
84+
// data: a1a1_data,
85+
// borderWidth: 1,
86+
// fill: false,
87+
// borderColor: 'red'
88+
// },
89+
// {
90+
// label: 'Number of a1a2',
91+
// data: a1a2_data,
92+
// borderWidth: 1,
93+
// fill: false,
94+
// borderColor: 'green'
95+
// },
96+
// {
97+
// label: 'Number of a2a2',
98+
// data: a2a2_data,
99+
// borderWidth: 1,
100+
// fill: false,
101+
// borderColor: 'blue'
102+
// },
103+
104+
// ]
105+
// },
106+
// options: {
107+
// scales: {
108+
// yAxes: [{
109+
// ticks: {
110+
// beginAtZero: true
111+
// }
112+
// }],
113+
// y: {
114+
// display: true,
115+
// type: 'logarithmic',
116+
// }
117+
// }
118+
// }
119+
// });
120+
121+
122+
123+
124+
125+
126+
127+
128+
129+
130+
131+
132+
133+
134+
135+
136+
137+
138+
139+
140+
141+
142+
143+
144+
145+
146+
147+
148+
149+
150+
151+
152+
153+
154+
155+
156+
157+
158+
159+
160+
161+
162+
163+
// var ctx = document.getElementById('myChart').getContext('2d');
164+
165+
166+
// var a1_data = {
167+
// label: "A1",
168+
// data: arr_a1,
169+
// lineTension: 0.5,
170+
// fill: false,
171+
// borderColor: 'red',
172+
// borderWidth: 0.8
173+
// }
174+
// var a2_data = {
175+
// label: "A2",
176+
// data: arr_a2,
177+
// lineTension: 0.5,
178+
// fill: false,
179+
// borderColor: 'blue',
180+
// borderWidth: 1.5
181+
// }
182+
183+
// const data = {
184+
// labels: [...Array(gen).keys()],
185+
// datasets: [a1_data, a2_data]
186+
// };
187+
188+
189+
// var myChart = new Chart(ctx, {
190+
// type: 'line',
191+
// data: data,
192+
// options: {
193+
// scales: {
194+
// y: {
195+
// beginAtZero: true
196+
// }
197+
// },
198+
// bezierCurve: true
199+
// }
200+
// });
201+
// myChart.update()
202+
// }

0 commit comments

Comments
 (0)