[GameMaker Studio] Neural Network in Game Maker Studio – part 2

Now that our neural net is set up we have to process the input and use the result to control our agent. On this part of the series, we are going to feed the neural net input data and then use the output data to allow our tiny arrow head to move towards a target object.

Feed Forward Script

First, we’ll create a script and name it scr_nn_feedforward. This script will perform the computation for our neural net. Feed forward, is a term describing an element or pathway within a control system that passes a controlling signal from a source to a load (source: Wikipedia).

To get the output value, we are going to pass the weighted sum of each input node to the neurons in the hidden layer. Apply an activation function and then do the same process for the output nodes.

///scr_nn_feedforward()

//Hidden Layer
    for(var i=0; i<array_length_1d(neurons); i++){
        neurons[i] = 0;
        for(var j=0; j<array_length_1d(inputs); j++){
            neurons[i] += inputs[j]*weights[i, j];
        }
        
        //Activation function
        neurons[i] = tanh(neurons[i]);
    }

//Output Nodes   
    for(var i=0; i<array_length_1d(outputs); i++){
        outputs[i] = 0;
        for(var j=0; j<array_length_1d(neurons); j++){
            outputs[i] += neurons[j]*output_weights[i, j];
        }
        
        //Activation function
        outputs[i] = tanh(outputs[i]);
    }
Activation Function

We will also need to create a script tanh()Hyperbolic tangent is an activation function. Activation functions makes our neural net non linear enabling it to solve more complex problems. They basically converts the input signal of a neuron into an output signal which will be used by another layer, in our case, the output layer as an input signal.

Advertisements
 
REPORT THIS AD

There’s a variety of function we can use such as Sigmoid, Rectified Linear Unit, or Leaky ReLU. Which performs differently — each provides different output ranges.

tanh(x) script
///tanh(x)

var _x = argument0;
var _e = 2.718281828459;
var _ans = (power(_e, 2*_x)-1)/(power(_e, 2*_x)+1);

return(_ans);

In the code above, we are using the variable “_e” which hold the value for Euler’s Number. Game Maker has a built-in function for it called “exp()” but the problem is that it does not work properly with negative integers which results in an incorrect return value. So instead, we are going to do it this way.

Because of its range (-1 to 1) it can be also used for the output neuron and to turn the arrow head left or right by multiplying the output to the agent’s turn speed.

Arrow head object

Next, we will create our arrow head object. We’ll name it obj_arrowhead. Create and add a sprite for it. I prefer to make a simple 32px v-shaped arrow.

Make sure it’s tip is is pointing to the right (0 degree) and set the origin at the center.

On create event, we are going to use the scripts we created in part 1 to initialize the neural net:

///Initialize the neural net
   scr_nn_create();

//Initialize weights
   scr_nn_initialize();

On the step event, we are going to set the input values on neural net which is the degree the arrow should turn in order to point towards our target. Then we will execute the feed forward script we created earlier:

var target = obj_target;

//Give input
   inputs[0] = angle_difference(image_angle, point_direction(x, y, target.x, target.y));

//Feed forward
   scr_nn_feedforward();

Next, on the same step event, we’ll make the arrow head turn left or right — rotating it by adding the product of outputs[0] and turn_speed to the image_angle of the arrow head.

var turn_speed = 3; //How fast it turn
var move_speed = 5; //How fast the arrow head move

    //Turn
        var left = 0, right = 0;
        image_angle += turn_speed*(outputs[0]);
    
    //Move
        x += lengthdir_x(move_speed, image_angle);
        y += lengthdir_y(move_speed, image_angle);  
Target Object

For the target object. We’ll create an object obj_target and then add a sprite (set the origin of the sprite to center).

Step Event:

//Move self to mouse pos on click
    if(mouse_check_button_pressed(mb_left)){
        x = mouse_x;
        y = mouse_y;
    }
Main Controller Object

For the main controller object, obj_nn_main, we just want it to create a number of arrow head objects in the room and save the instance id of each one in an array for later use.

Create event:

randomize();

//Create multiple arrow heads
    for(var i=0; i<10; i++){
        nn_obj[i] = instance_create(x, y, obj_arrowhead);
    }
Setting up the Room

• Place obj_nn_main at the middle of a room.
• Place obj_target anywhere.

Run the game. If your arrow heads behave like this, it’s time to celebrate. It’s a success:

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

As you can see, some of the agents are able to follow the target already. The simplicity of the task makes it easy for the neural network to get the correct set of w

 

 

 

 

 

 

 

eights on first try. But hey, we will start simple and then use the neural net for more complicated task later on.

By now, the neural net is complete and it is able to perform an action. But we are not completely done yet. We still haven’t done anything to train it yet.

 

On the next part of this series, we are going to train our neural net using genetic algorithm. See you on the next post!

 

[출처] https://highleapstudios.wordpress.com/2019/10/05/neural-network-in-game-maker-studio-2/

 

 

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
151 [flutter (플루터 앱 개발)] flutter pocketbase 사용법 2탄(회원가입) file 졸리운_곰 2024.06.10 272
150 [flutter (플루터 앱 개발)] flutter pocketbase 사용방법 1탄(초기설정) file 졸리운_곰 2024.06.10 242
149 [게임 일반] 카드 덱 이미지 (트럼프 카드) 졸리운_곰 2024.05.27 224
148 [flutter (플루터 앱 개발)]Flutter - InAppWebview Communication (인앱웹뷰로 웹과 앱 양방향 통신하기, 자바스크립트 커뮤니케이션) file 졸리운_곰 2024.04.13 274
147 [flutter (플루터 앱 개발)] flutter - fvm 적용하기 (Futter Version Management) file 졸리운_곰 2024.04.11 189
146 [flutter (플루터 앱 개발)]Using Flutter FVM in Windows & MacOS file 졸리운_곰 2024.04.10 294
145 [flutter (플루터 앱 개발)] Flutter version management in Visual Studio Code with FVM 졸리운_곰 2024.04.10 231
144 [flutter (플루터 앱 개발)] pHp backend with flutter file 졸리운_곰 2024.03.18 350
143 [flutter (플루터 앱 개발)] [Flutter] fvm으로 Flutter 버전 관리 졸리운_곰 2024.03.17 203
142 [firebase v9] 파이어베이스 버전9 시작하기 - firebase v9 file 졸리운_곰 2023.12.24 309
141 [ Firebase ] v9부터 크게 달라진 사용법들 모아보기 file 졸리운_곰 2023.12.24 268
140 [게임 개발 일반] 콘솔은 어려울수록, 모바일은 쉬울수록 '돈' 쓴다 file 졸리운_곰 2023.10.30 264
139 [Unity] How to Create a Metaverse dApp with Unity : Unity로 Metaverse dApp을 만드는 방법 file 졸리운_곰 2023.09.13 397
138 [게임 개발 일반] 게임 초기 기획서 작성 방법 졸리운_곰 2023.07.16 250
137 [GameMaker Studio] Neural Network in Game Maker Studio – part 4 file 졸리운_곰 2023.07.07 462
136 [GameMaker Studio] Neural Network in Game Maker Studio – part 3 file 졸리운_곰 2023.07.07 413
» [GameMaker Studio] Neural Network in Game Maker Studio – part 2 file 졸리운_곰 2023.07.07 506
134 [GameMaker Studio] Neural Network in Game Maker Studio – part 1 file 졸리운_곰 2023.07.07 378
133 [construct2] HOW TO REMOVE THE SCREEN POWERED BY CONSTRUCT 2? file 졸리운_곰 2023.03.24 266
132 [flutter (플루터 앱 개발)] How to use Flutter’s Rest API file 졸리운_곰 2023.03.21 349
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED