Automated management of inconsistent problems: ---------------------------------------------- * Brief description and AI targeted area: Many real-world problems can be expressed in terms conditions that need to be met so that the problem is solved: e.g., this train should reach the station in time; or you have to determine the angle upon which you throw a ball to make sure it will hit a given target (sometimes, a moving target); etc. This conditions are called constraints. And Constraint Programming is a programming paradigm that enables users to set their constraints, and without any more hassle, get back solutions. In order to find solutions, researchers work on solving algorithms. ---- Constraint solving is about designing algorithms that take a list of requirements (called constraints) involving objects (variables), and return appropriate values (then called solutions) of these objects that meet the requirements. A condition to find such solutions is for the constraints to be consistent. This generally requires a certain level of expertise, and/or (if constraints come from observation) a way to get perfect measurements/observations. Unfortunately, expertise and/or perfect measurements are very rare. In case constraints are inconsistent, the traditional solving algorithms are of no help. They will just return "no solution". What we would like to be able to do in such situation, where reformulating the problem (i.e., the constraints) is of no use, is to return weaker (but still) solutions. The idea is to determine solutions that are not too far* from meeting the original requirements, solutions to relaxations of the original requirements. The problem is that, among the many ways to understand the relaxations, it would be convenient to make the choice of the relaxation automatic. What you are expected to do in this project, is to develop a system that will be able to determine what kind of flexibility is most appropriate depending on the kind of constraint problem given in first place. Your team will have to investigate methods to automate the choice of flexibility. This project involves understanding very thoroughly problem solving, constraint solving, and real applications of constraints in order to be able to determine appropriate flexible models. ---------- * Description of the objectives and tasks: To help you during this project, you will have the possibility to use a constraint solving library, written in C++, running on linux, called Cacao. By the end of the project, you will have: - written a short tutorial on constraints and flexible constraints: this tutorial will be handed out to all students in the class; * this tutorial should be ready by the end of week 4 of the project timeline; - proposed and implemented (at least a prototype of) an expert-system-like system enabling the automatic choice of a flexible model for given constraint problems. You will, this way, describe and motivate strategies of choice. You will run comparative experiments. You will also have to write a report in which you will include: - an introduction: presenting the problem you plan to address, and explain how you will tackle it; explain how it is related to AI and what specific area it is related to; description of constraints and flexible constraints (in particular, the possible frameworks that you can use and among which you have to choose); - the description of your team: names of the students, tasks assignment (contribution of each one), timeline of your work; - the description of your system: * which method(s) you used and how you implemented it (justify your choice and make your descriptions clear) * what strategy(ies) you used to determine what kind of flexible framework is the most appropriate given the constraints that are input; - the report of your testing your system: * description of a sample of significant and representative inconsistent constraint problems; report of the results; * does your system meet your expectations? why? - a discussion of what went wrong and why: self-criticism; - a conclusion: synthesis of your work, future work directions (what you would do if you were given more time on your project). ---------- *far: the definition of "far" may be interpreted in many different ways. Learning about different understandings of "far" will be part of this project. ----------