• Content count

  • Joined

  • Last visited

Community Reputation

864 Good

About Timkin

  • Rank
  1. Suggested Neural Network reading?

    For a good high level coverage of machine learning it's hard to go past Tom Mitchell's book "Maching Learning" (McGraw Hill, 1997). It's aimed at upper undergraduate and beginning post-graduate students, but it does not pre-suppose knowledge of AI or statistics. So rather than getting into the nitty gritty of techniques and mathematics, it gives a higher level exposition of the methodology and importantly, the connections between the techniques.
  2. c++ static vars in a class

    Quote:Original post by pavel989 tried that, but dint work. ima check maybe i did something wrong. i felt that it worked like an extern where i have to declare it. does it matter that i haven't implemented namespaces No. As static data members have class scope then ensuring a valid class definition is sufficient. Static data members must be declared at class scope and defined at file scope (as stated previously). One quick point... static data members are subject to class-member access rules. As you've declared lpPoint to be a private static member only class-methods and friends have access to it. Anyway... because you're dealing with a pointer to a structure I'd personally ensure that it was a well defined pointer type prior to its usage in any data definition. For example: // somewhere.h typedef struct tagPOINT { ... } TAGPOINT, *P_TAGPOINT; //window.h #include "somewhere.h" class Window { private: static P_TAGPOINT lpPoint; }; //window.cpp #include "window.h" P_TAGPOINT Window::lpPoint; The issue you would have would be assigning a valid address to this pointer when it's used as a private static member of Window. You would need to provide a public static interface to do this. Within Window add: public: static void SetTagPoint(const P_TAGPOINT pPt) { lpPoint = pPt; } Cheers, Timkin
  3. Quote:Original post by KulSeran Or for the more general case: Matrix Inverse Rotation matrices have the useful property: R-1=RT. ;)
  4. how to represent infinite inertia tensor ?

    Code first for functionality. When it is working as intended, then AND ONLY THEN profile and optimise. Implement a test for inverseMass==0 and return linear and angular acceleration as appropriate. Once your engine is complete, THEN you can profile it to find its performance hotspots. IF that turns out to be this function, then consider optimising away the mass test.
  5. AI: open question for the community

    Quote:Original post by forty-two I cannot disclose the kind of algorithms, nor their original application I find this highly peculiar. I'm an academic. I've never had an issue with telling someone the name of an algorithm I've implemented, even if it's one I've created and not yet published. Revealing the name does nothing to devalue the implementation, nor does it tell people how the algorithm works, unless they go and look it up (which implies that the knowledge is freely available and there is no basis for obfuscating it). That you refuse to identify which algorithms you have implemented leads me to question your claims that these are "among the most powerful known". This could easily be a claim intended to hide the fact that you've implemented your own algorithms and wish to establish a claim of their value by getting someone else to find problems on which they work, rather than actually evaluate their usefulness over a class of problems. If your looking to evaluate your implementation of these algorithms on a game scenario, then you'll need to be able to learn functions u(t) for arbitrary problems of the form r = arg max[p(f(u(t)))] where f() is an unknown (typically nonlinear) stochastic function, u(t) is an input (control) function (typically in discrete time and finite space) and p() is a chosen performance metric. If you solve this problem with an existing algorithm, or make a significant contribution to it with a new algorithm and you don't rely on pseudo-random search procedures, please let me know (a link to a published paper with experimental results and no algorithmic details would be sufficient). Regards, Timkin
  6. Neural Network - Discussion

    Quote:Original post by Daerax I am not disagreeing that Kolmogorov played an important role, mainly that his role was pivotal. Perhaps I over-stated my original point. I was not trying to suggest Kolmogorov was the only person responsible... but that he was a key link in a chain that, had it not developed and had it not been applied, we would not be where we are today. I was trying to make the original point that Markov's work did not sit idle for 100 years. A particular example of the importance of Kolmogorov in the chain... Shannon (whom we would probably all agree has played a key role in the development of modern information theory and subsequently the modern computer and telecommunications industry) directly indicates that his mathematical theory of communication (published in his pivotal paper of the same name) is directly inspired by the work of Norbert Wiener (check out the acknowledgements in his pivotal 1948 paper). Wiener, of course, is famous for many things, but many will know his name from the Wiener filter and Wiener process (also known as Brownian motion). While a Wiener process is an example of a Levy process, it is actually a simple case of the more general differential Chapman-Kolmogorov equation, which describes the general class of drift-diffusion stochastic processes. The Wiener filter is the generalised filter for Wiener processes. Many would know the specialised solution for linear, discrete time Wiener processes, being the Kalman filter. While it is acknowledged that both Chapman and Kolmogorov developed their solutions independently, both build on Kolmogorov's work on reversible Markov processes, which are recognised as pivotal to the whole field of Markov processes, particularly in our modern usage. Without Kolmogorov's extensions to Markov's original work, we would not be where we are today. I also do not agree that 'someone else' would have developed this understanding simply because there were others working in the field. It is definitely the case that more than one person is responsible for where we are today... but as with many fields of endeavour, they can be traced back to a handful of key discoveries/breakthroughs that were necessary before we could move forward. Cheers, Timkin
  7. The actual application of this technique to pathfinding is known as the "Distance Transform Algorithm".
  8. Neural Network - Discussion

    Some responses to recent comments... Original post by DaeraxQuote: I do not agree with that. Perhaps there would have been stalls and things might have ended up with slightly different notations like in say complexity theory, perhaps a different way of doing probabilities but I am certain that no one man has had so much impact since Aristotle. There were simply too many people approaching the notion of computing from many angles including off the top of my head: Russell, Church, Haskell Curry, McCarthy, Turing, von neuman, John backus... Most of what arose in western engineering (particularly telecommunications and control) and subsequently computing from the 40s onward was based directly on the understanding of stochastic processes developed by the Russian-Germanic alliance of the late 19th and early 20th century. Generally speaking, western scientists and mathematicians were simply no where near the level needed to create this understanding. There is countless evidence of advances in western engineering and computing being directly based on Russian publications, or on Western scientists having spent time with their foreign counterparts, bringing back the knowledge with them. During the latter half of the 19th century and into the 20th, there is a single strong thread of Russian mathematicians, predominantly coming from the same school at Moscow State University. The mathematics group there was pivotal to the developments of the time. Everything that came later in this area can be shown to have grown from the knowledge developed by this one group. Kolmogorov was one of those who stood out from the crowd, hence my selection of him. I could provide examples of the direct links and the basis of my opinion if anyone is particularly interested, but I'd end up waffling on for ages, hence the omission from this post! ;) On the issue of handling time in ANNs... Feed forward networks are very poor at handling time. Even when you provide inputs covering information at previous time, which is essentially an attempt to model the autocorrelation of the process. However, there ARE network architectures that handle time very well... they're just harder to train, because you now have the problem of ensuring that you're seeing all processes passing through a given point at a given time. Recurrent networks can be designed to model the underlying time-space differential of the process. You can even ensure properties such as stable (non-divergent) learning. I've made some particular contributions in this area in the application of recurrent architectures to learning control problems (where you know nothing of the system you are trying to control, only the performance requirements). Having said that, I certainly wouldn't advise anyone to apply these architectures to control problems in games. Cheers, Timkin
  9. Neural Network - Discussion

    Oh, just a quick response to kirkd... if it weren't for Kolmogorov, who built on Markov's work, we wouldn't have our modern information age (including computers, electronic and photonic communications systems, the internet, etc)! So, it's probably a little unreasonable to suggest that Markov's work sat idle for 100 years until applications of Markov chains arose in speech recognition! ;) Cheers, Timkin
  10. Neural Network - Discussion

    *moderator hat on* Everyone take a chill pill please. It's quite okay to have a strong opinion, particularly in the academia vs industry debate, but please try to keep the discussion polite... or at least avoid making directed, personal attacks at each other. Thanks. *moderator hat off* On the original question of researching the use of NNs in games. That's quite valid. Go for it. Just don't expect anyone to actually use ANNs just because you might find a valid application for them. As has been pointed out several times in this thread, there exists, almost always, an alternative solution to a problem that an ANN can solve (and usually *how* it solves it is more easily and more widely understood). Doing research for research sake is not a good use of your time. You should be looking for quantifiably useful results. That is, research must have significance AND importance. Thus, you should be looking at problems and asking "can an ANN solve this better than the existing methods". Significant quantities of previous research though have shown that, generally, the answer is no. Some comments on the parallel, off-topic discussions of game education and industry vs academic innovation... In Australia over the past 5 years many universities have jumped onto the game dev/design education bandwagon... 10 years ago there were only 2 places in Oz you could go to study games. Now it's more like 20. This is a recognition of two things: 1) that there is strong demand for 'cool' courses (and those perceived as vocational) amongst high school graduates; and, 2) there is a demand from industry for graduates who have some basic understanding of the problems that must be overcome in the production of games software. Traditionally though, the role of universities has been to develop scholarship and engender graduates with the skills for life-long learning. These skills can of course be learned outside of the university environment. The role of universities is not (or at least, should not be) to teach people how to do a specific job. These skills should be learned through practice, while on the job. Unfortunately, in this modern, economically focused age, universities have been forced to sacrifice scholarship for 'graduate outcomes' (meaning employment prospects) because industry does not want to bear the expense of training workers. The result is that universities now try to cater to what industry wants and what students want, rather than on what society needs. Hence the rise in games dev programs. (There is also another driver: market growth in the games industry due to the 'leisure lifestyle' of Gen Y... but that's a discussion for another day). We should not though expect universities to churn out people who are job-ready on day one. It simply isn't possible. They have a lot to learn and it's up to industry to choose those most capable of learning and employ them, when they have the need. Having said that, there ARE very good degree programs teaching game development in a computer science/software engineering framework, where students learn fundamental skills applicable across a broad spectrum of IT roles, but also focus heavily on game development. One would expect that graduates from these programs are useful to industry. Sure, they're wet behind the ears and need to learn a lot... but at least they have some basic foundations from which to grow from. As for innovation... I cannot recall the source of the data, nor the exact figures (so please, take this with a grain of salt), but I remember reading that around 95% of innovation in IT was achieved by industry, rather than academia and that this was simply because it was industry trying to solve the day to day problems in software development. In other words, they needed a solution so they went out and developed one. That doesn't mean though that academia is a waste of space and money. The role of academia is NOT to produce commercial applications of knowledge, nor to produce knowledge with immediate commercial value (although this does happen from time to time). Indeed, because there is not an inherent, immediate commercial value in what academics do, many people denounce them as useless. On the contrary though, academics are afforded the luxury of the time and money to investigate problems that *may* have a commercial value in the future (or may lead to an advancement of knowledge). In Australia we have two government funded research streams, provided by the Australian Research Council, to support this: Discovery grants and Linkage grants. These are aimed, respectively, at developing fundamental knowledge (discovery) and developing commercially viable applications of fundamental knowledge (linkage). The latter is always done in partnership with industry. Thus, at least in Australia, the role of academics is to solve the problems, or develop the knowledge, that industry has neither the time nor money to investigate, simply because they cannot guarantee a benefit to their bottom line. We get to look at the big picture, or the fuzzy, distorted picture that no one else can afford to look at, to find new solutions to old (or new) problems. Principally, our aim is to inform industry of what is possible and to provide them with a strong foundation from which they can develop the solutions that they need. Both groups are necessary. Without industry, academia has no funding support (no one paying taxes that fund the research) and without academia, industry has to bear the cost of the research upon which their innovations are often based (and it's been shown time and again that industry cannot afford to do this). In the end, we all need to get along with each other, which, if I recall correctly, was the original comment in this post! ;) Cheers, Timkin
  11. Many-Core processors -- AI application

    One thing to consider is that from next year Intel will no longer be selling single core architectures. The market is moving and we as programmers need to move with it. At a minimum we need to understand the possibilities the technology offers, even if we elect to use only a fraction of it in our applications. I spent an interesting afternoon a few weeks back meeting with Intel to discuss incorporating more multi-threaded and parallel eduction into our degree programs. The simple fact is that we need to be developing these skills now if we're to meet the needs of the market in the years to come. What will that mean for game AI? I agree with WeirdoFu that we still haven't perceptibly changed the industries allocation of resources to AI. We're still going to be lining up for the crumbs in the clock cycle line. What we WILL be able to do though is contemplate the possible efficiency improvements that parallel computations can provide and develop some standard parallel approaches for readily parallelised tasks. This will give us some short term gains (indeed we have been seeing some of these in recent years, but it certainly isn't industry standard practice). I guess my conclusion is a wait and see... let's start turning out more developers that can at least think clearly about the problem and wait to see what they come up with. On a side note: Intel's research figures suggest only 15% of programmers understand and can apply multithreaded programming techniques! I can understand from that perspective why so many people are averse to incorporating these techniques into their applications! Cheers, Timkin
  12. You can re-implement your task stack with any sort of data structure you like, so long as you use it appropriately. You could easily change it to a list, so long as you make sure that either the insertions or the removals are ordered according to the required execution order. Cheers, Timkin
  13. Quote:Original post by Side Winder I don't quite understand what you mean. Do you mean to create an AI that advises the player on what to do? Yes, you did understand what I meant. ;)
  14. Quote:Original post by Kylotan What is important is this line: "Markov chains are often described by a directed graph, where the edges are labeled by the probabilities of going from one state to the other states." More correctly, that should read: there is a one-to-one relationship between a first order Markov chain and a finite state automata. As Kylotan noted, one cannot easily represent a k-th order chain with a finite state automata (and one probably shouldn't try for a non-trivial problem). Cheers, Timkin
  15. Quote:Original post by phi It's quite difficult to find practical information on Markov chains as a lot of it is academic. What would you consider is 'practical information'?