Basic Concepts and Principles

What is GAM
There are three essential elements for either a hunman or a machine to learn something. The first one is the necessary effectors. If you want to fly you need to have robust wings, if you want to run you need to have flexible legs. The second one is the necessary sensors. If you want to fly you need to know what's your current height and what's the angles and strength putting on your wings all the time. For the same reason, if you want to run, you need to know your current speed, angles and strenght you put on your legs constantly. The third one is the preference or desire. you won't learn to fly or run if you don't crave for it.

Let's first take an example. Suppose you want to build a robot that could learn and climb up a tree to the top all by itself. How to design such a robot? It may be designed to look like a ball or a box, it doesn't matter what the shape is. What really matters is that, you have to install several claws or something alike on your robot, otherwise it will never learn to climb a tree even if it has a human brain. This is the first element we talked above. What's next then, is that all? Now assume that you turn on the power and wake up your robot, it buzzes around and waves its claws without actually knowing what itself is doing. Even if by some accidents, it climbs up a bit, however without any perception, it will never know that, and will never make any progress in learning to climb the tree. So the next thing you need to do is to install some corresponding sensors on you robot, like height sensor, steering angle sensors etc. This will let it know what it's doing, and build up its memory. This is the second element we talked about. Now the robot has claws that is capable of climbing trees, and has sensors that will tell itself what it's doing. Will it now climb the tree? Let's turn the tables for a moment, why should it climb the tree? It could just use it's claws to cut the trees or pick the teeth. If you want it to climb tree, you need to give it the reason to do this. To make it crave for climbing tree in some ways (for example, put a sexual robot girl on top of the tree). This is exactly the last element. As you can see, none of them are dispensable in autonomous learning.

In the other hand, as long as the three elements above meet the requirements, for either a human or a machine to learn anything, it should just be a matter of time. There should exist an algorithm that could make this true. Generialized Agent Model(GAM) is such the algorithm we are looking for. GAM is an evolutionary algorithm, corresponding to the scale of the problem to be solved, it may take a long or short time to find the solution. But it guarantees you that no matter how long it will take, it can eventually find the solution in a finite time if the problem is deterministic and closed or it will constantly approach the solution if the problem is non-deterministric and open.

What is GAMCS
GAM itself is an abstrat and fundamental model that could be implemented by any possible media in principle (like Computer, Neron Network...). With an explosive growth of storage capacity and computing power, computer is a feasible and convienent media to implement GAM. As a result, GAMCS was created.

After understanding the above concepts, it is straightforward to use GAMCS. There are almost nothing else to be concerned other than the three elements we already have talked above, each one of the elements are mapped to 1 or 2 functions in GAMCS directly. And that is all you have to provide to GAMCS usually.

The functions that correspond to the first element are OSpace avaliableActions(State st); and void performAction(Action act);

The first one tells GAMCS what's the effectors that your "robot" has by returning a space of actions that your "robot" can perform. The other function do the acutal job when GAMCS tells your "robot" to perform a specific action in the action space. The actions are just signed integers in GAMCS's eyes and it's not hard for you to encode any action to an integer.

The function that corresponds to the second element is State percieveState;

With this function, you can fetch the data from various sensors on your "robot", encode it to an signed integer and provide it to GAMCS.

The last function that corresponds to the third element is float originalPayoff(State st);

This is the way that GAMCS provided you to stimulate your robot and set its preference. Using this function you can set the like-dislike degree to a specific state of your "robot" precisely. Your "robot" will crave for the state with a bigger payoff.

After implementing the four functions, it's time to turn on your "robot". It should be behaving intelligently and progressively find the way to get to its favorite states.