## Blogs, White papers and Case studies

## AI or Complex behavior in machines - An Introduction from a programmer

For a brief period of time, the main motivation for mankind is to develop machines with predictable behavior. Let it be a wheel, a calculator, a car, or even a space rocket, the purpose was always to develop machines to perform a particular task with predictable outcome or behavior.

Now the world is moving towards the next generation of machines which are widely categorized as machines with Artificial intelligence. Let it be a phone that understands the natural language or a car that drives itself, these are going to impact the way we live and experience life in a larger way.

To understand and appreciate this Artificial intelligence, we must first have a better understanding of what is human intelligence.

"Human intelligence is the cognitive ability to learn, form concepts, understand, apply logic, and reason, including the capacities to recognize patterns, comprehend ideas, plan, solve problems, make decisions, retain information, and use language to communicate. Intelligence enables humans to experience and think" - Wikipedia.

This leaves us with a question - Can machines be programmed to have intelligence like humans?

The word ‘Programming' literally means a precise sequence of instructions enabling a computer to perform a task. If the purpose of the machine is to perform a task that it is programmed to, can it ever be an intellectual? With that sense, the statement 'Programming an Artificial Intelligent machine' itself seems to be an oxymoron.

If programmed machines cannot exhibit intellectuality, then what will be the capability of Artificial intelligent machines? Before we imagine a machine which can think and act like humans do, a more practical motivation should be to think of a machine that can exhibit complex behavior. In other words, rather than performing a programmed task which would always produce a predictable outcome, can a machine be designed to perform a task which would produce a more favorable outcome? But how can a machine be programmed to choose a favorable task and how well it can adapt to the changes in its environment. Most importantly, how accurately the machine would be able to solve the problem by performing a series of favorable tasks. This could easily sound like creating inefficient machines. Let's keep that thought aside for a moment and try to understand what are the problems that we solved as a programmer in the past. Starting from our little "Hello World!" applications to a billing software for huge enterprise or even an OS Kernel itself, all these problems has a defined set of rules and steps that were performed to achieve a solution.

As we try to solve more real-world problems like finding the optimal path, processing natural language, identifying objects in a picture or a video, it becomes increasingly difficult if not impossible to program a solution using a precise sequence of instructions. Even if such a solution exists, it needs huge computational power to accomplish the task. To add more complexity, these problems often have multiple solutions and the variation between the perfect and other optimal solutions are very narrow and mostly negligible. So to put it simple rather than trying to find the perfect solution which involves enormous or impossible effort, we can find an optimal or sub-optimal solution which could be improved over a period of time. This approach of problem-solving is often referred to as a heuristic technique.

These techniques are not fancy new ones but in fact, these have influences from some of the oldest mathematical approaches known. Let it be finding the area under the curve using calculus or calculating the stress using tensors in geometry and linear algebra, we have always solved problems by making bold assumptions and approximations.

Artificial Intelligence, as we know, are the implementations of mathematical models which can solve complex real-world problems in a heuristic way. This approach opens up new different ways to solve the problems e.g. A mathematical model can be built with help of previous results with a motivation to predict or classify future results; A mathematical model can be built to remember decisions in relation to the past, current and future environment or state, these models can later be used to make informed decisions on its own. Given the number of mathematical approaches to try, Typically the choice of the mathematical models will be influenced by the type of problem it intends to solve. Hence the clear understanding of the problem is the most tricky and vital part of solving it, once the understanding is clear the mathematical solution would naturally follow.

With this understanding, we can now focus on how to design, measure and
improve such mathematical models.

To be Continued...