Intelligent machines can function and interact autonomously within unstructured, dynamic and sometimes partially observable environments. These machines employ intelligent techniques to mimic human intelligence in decision making, problem solving, learning from the environment and adapting to its changes. The course provides a comprehensive introduction to the key machine intelligence concepts and techniques involved in the development of intelligent machines. These techniques can be used to endow the machines with low-level and high-level cognitive faculties such as ability to handle data imperfection aspects such as uncertainty and vagueness, ability to solve problems via metaheuristics, ability to take a decision under uncertainty and ability to learn from examples and from observation. Team-based projects are integrated as an essential part of the course. These projects help students to get hands-on experience in applying different techniques studied in this course in the development of intelligent algorithms/systems. Topics to be covered include: Bayesian framework, fuzzy logic, trajectory-based and population-based metaheuristics, decision trees, neural networks and reinforcement learning.