Aurelien Derouineau wrote:
> It does look very very interesting and promising as well! Really a
> well thought-out project.
>
tnx :)
> Perhaps you could give us more details about the neural network. What
> library (project) are you using? How are you sampling the data (is it
> the aa command?) I would guess that data is then fed to the network
> through the cpp in the "train" folder...
>
the neural net uses two hidden layers with 5 and 3 nodes. bias node is
included in every layer. there are 4 input nodes and 1 output node. nn
code is home made (ann.cpp and ann.h files). it uses backpropagation
with gradient descent alg. momentum for training is also used.
data is collected through the "aa record <file>" command and it's in raw
format meaning the values are a direct outputs of the calculactions.
this data is then fed to to train/cstrike program which converts them to
something suitable for the neural net. the reason for doing so is that i
didn't know how to represent the data at first so i experimented. net's
configuration and log(x) functions are the results of this and are by no
means fixed ;) thus log() function makes sense because abs moves are
analysed and difference in numericaly big values tend to have lesser
significanse.
first value in the data set is the distance between enemy's abs head
position and the aim vector of the player (ie, lesser value = more
precise). second value is the mere distance between the player and the
enemy (not used in this instance due to the lack of training data thus
the 4 input nodes and not 5). third value repesents the distance of the
aim vector between two time slices. forth and fifth values reperesent
the distance player and the enemy traveled (differenece in positions on
the map). sixth value is the player's name so one can differentiate the
data and should be replaced with a numerical value representing an ideal
output for the given data set (ie. 0 for no cheating data, 1 for
cheating data; train/cstrike program assumes this was done).
the train/cstrike program trains the nn by loading the data from the
'data' file. it should contain both cheating and non-cheating data. it
first splits the data using 90%-10% ratio for training and for checking
the nn. it loops over the training data until the correct hit factor
(for non-cheating data output should be less then 0.5 but greater then
or equal to 0.5 otherwise) for the training data and the check data hits
95% (this is very optimistic and it's never reached). it saves the
trained nn to a 'aa_cstrikexxxx.nn' files first as correct hit factor
reaches 80%, then for 80.5%, then for 81% and so on where xxxx
represents the loop count needed to reach the specific hit factor. one
of these files can then be used by the antiaim plugin for identifying
cheating/non-cheating moves.
> Perhaps there could be a way to collect data from "professional"
> gamers during serious LAN parties or tournaments... (is it possible to
> use it with demos?)
>
yes... that was my first thought and this should be done if this project
is to see the light of the day ;) i used my brothers for this purpose.
you would have to be shure which of the players are using a cheat and
which of them are not (and when, if they turn them on/off at some
point). then enter the 'aa record some_file.dat' in the server's console
and wait :)
the basis for this project is the fact that aim bots are correcting
(more or less) the aim vector of the player to aim straight for the head
(hopefully). this makes the player's moves (in terms of aim vector
movement) more precise but jerky. the players that are not using the aim
bot tend to have less precise and softer moves so one could ultimately
tell which are which. there is no fine line between the two but this can
be made more clear when you throw some more information in the mix (like
above). ie, one would be an uber pro if he could run&jump (described by
the player's position difference) and fire several hits directly into
the moving enemy's head while finishing a can of beer ;)
this code/project can be relatively easy ported to other games. i chose
counter strike because i play it more often than any other fps :)
has anyone tried this yet? i'm really interested in the results :)
--
I doubt, therefore I might be.