Ich programmiere gerade ein neurales netz für gamemaker, bin mir aber nicht sicher ob das so funktioniert:
CREATE
Alles anzeigen
STEP
Alles anzeigen
bei Berührung eines food_good wird der energy wert erhöht, umgekehrt beim food_bad.
Wenn die Energie auf 0 sinkt, wird das objekt zerstört.
Ein Control object erstellt immer wieder food_good und food_bad und neue entity objekte, wenn eines zerstört wird.
CREATE
GML-Quellcode
- energy = 1000
- speed = 0
- direction = random(360)
- input_c = 2 //direction of next good food //direction of next bad food
- lay1_c = 15
- lay2_c = 10
- out_c = 3
- lay1 = ds_grid_create(input_c,lay1_c)
- for (i=0;i<input_c;i++){
- for (j=0;j<lay1_c;j++){
- ds_grid_add(lay1,i,j,random(1))
- }
- }
- lay2 = ds_grid_create(lay1_c,lay2_c)
- for (i=0;i<lay1_c;i++){
- for (j=0;j<lay2_c;j++){
- ds_grid_add(lay2,i,j,random(1))
- }
- }
- out = ds_grid_create(lay2_c,out_c)
- for (i=0;i<lay2_c;i++){
- for (j=0;j<out_c;j++){
- ds_grid_add(out,i,j,random(1))
- }
- }
STEP
GML-Quellcode
- in[0] = -1
- in[1] = -1
- if (instance_number(food_good)!=0){
- good = instance_nearest(x,y,food_good)
- in[0] = point_direction(x,y,good.x,good.y)
- }
- if (instance_number(food_bad)!=0){
- bad = instance_nearest(x,y,food_bad)
- in[1] = point_direction(x,y,bad.x,bad.y)
- }
- lay1L = ds_list_create()
- ds_list_add(lay1L,0)
- for (i=0;i<lay1_c;i++)
- ds_list_add(lay1L,0)
- lay2L = ds_list_create()
- for (i=0;i<lay2_c;i++)
- ds_list_add(lay2L,0)
- outL = ds_list_create()
- ds_list_add(outL,0)
- for (i=0;i<out_c;i++)
- ds_list_add(outL,0)
- for (i=0;i<input_c;i++){
- for (j=0;j<lay1_c;j++){
- ds_list_replace(lay1L,j,in[i]*ds_grid_get(lay1,i,j))
- }
- }
- for (i=0;i<lay1_c;i++){
- for (j=0;j<lay2_c;j++){
- ds_list_replace(lay2L,j, ds_list_find_value(lay1L,i)*ds_grid_get(lay2,i,j))
- }
- }
- for (i=0;i<lay2_c;i++){
- for (j=0;j<out_c;j++){
- ds_list_replace(outL,j,ds_list_find_value(lay2L,i)*ds_grid_get(out,i,j))
- }
- }
- //for (i=0;i<out_c;i++){
- // show_debug_message(string(ds_list_find_value(outL,i)))
- //}
- direction += ds_list_find_value(outL,0)
- direction -= ds_list_find_value(outL,1)
- speed = ds_list_find_value(outL,2)*(room_speed/60)
- energy -= speed*(room_speed/60)/2
- energy -= 1.8
bei Berührung eines food_good wird der energy wert erhöht, umgekehrt beim food_bad.
Wenn die Energie auf 0 sinkt, wird das objekt zerstört.
Ein Control object erstellt immer wieder food_good und food_bad und neue entity objekte, wenn eines zerstört wird.
Ich bin Aaron. 
