$25
B.Sc. Software Development – Artificial Intelligence
MAIN ASSIGNMENT
Overview
You are required to use fuzzy logic, neural networks AI technologies to control a set of characters that are moving randomly through a game model. The AI controlled characters should be able to interact both with each other and the single instance of a user-controlled player. A suite of stubs is provided on Moodle that already implements a JavaFX game window with a model, view and controller. A thread pool containing a set of runnable autonomous characters has also been implemented already.
The purpose of this assignment is for you not to programme a game, but to design and implement fuzzy logic and neural network controllers for the autonomous game characters. Therefore, much of the programming will be declarative, e.g. fuzzy control language or involve secondary AI design considerations such as developing a neural network topology or preparing, transforming and processing training data. You have been given an open brief regarding the function and nature of interaction of the different game characters and you are free to implement any reasonable behaviour that you see fit. This extends to the actual goal of the game and how the game should terminate. Consequently, will have to carefully document your rationale for each of the design decisions that you make and justify the various approaches that you have employed.
Minimum Requirements
• Clearly document in a README file the overall goal for the game and your rationale for the set of controllers that you have implemented. You must document all aspects of the fuzzy controller(s) that you design, as well as the architecture, activation functions and input vectors to your neural network. Any hyperparameters should be clearly reasoned and presented.
• Only use the JFuzzyLogic and Encog 3.4 libraries. Do not use any other 3rd party software. You can asset-strip, repackage and re-use any of the code from the AI labs, including the 3-layer neural network.
• Each character should be controlled by some intelligence, either fuzzy logic, a neural network, a heuristically informed search algorithm or even a cocktail of all three.
• The fuzzy logic should be encapsulated in one of more FCL files and placed in a ./resources/fuzzy directory. You should consider carefully the following when designing the fuzzy logic components of the system:
• Linguistic variables and Universe of Discourse
• Fuzzy Sets and Membership Functions
• Defuzzifiers, e.g. COG, COGS, LM, MM, RM.
• Membership Functions for output variables, e.g. Mamdani or Suegno.
• Fuzzy Rules. All fuzzy sets must be covered by at least one fuzzy rule.
You must comment the FCL with your rationale for each of the design decisions that you make. Note that you can include more than one function block per FCL file.
• The neural network should be trained, in a reasonable amount of time (< 1 minute), when the game starts up and have a fully documented topology presented in the README. Do not use any other 3rd party implementation. All the training and validation resources for the neural network should be placed in the ./resources/neural directory.
• You can assume that the JavaFX library and the dependencies for Encog 3.4 and the JFuzzyLogic libraries are already available on the module-path. These have already been added to the module-info.java module descriptor. Do not include any of these dependencies with your submission or change how they are declared in the module descriptor