In this assignment, you’ll implement an agent that will learn a definition of a particular monster species from a list of positive and negative samples, and then make a determination about whether a newly-provided sample is an instance of that monster species or not. You will submit the code for identifying these monsters to the autograder. You will also submit a report describing your agent.
For the purposes of this project, every monster has a value for each of twelve parameters. The possible values are all known. The parameters and their possible values are:
size: tiny, small, medium, large, huge
color: black, white, brown, gray, red, yellow, blue, green, orange, purple
covering: fur, feathers, scales, skin
foot-type: paw, hoof, talon, foot, none
A single monster will be defined as a dictionary with those 12 keys. Each value will be one of the values from the corresponding list. The values associated with size, color, covering, and foot-type will be strings; with leg-count, arm-count, eye-count, and horn-count will be integers; and with lays-eggs, has-wings, has-gills, and has-tail will be booleans.
You will be given a list of monsters in the form of a list of dictionaries, each of which has those twelve keys and one of the listed values. Each monster will be labeled as either True (an instance of the species of monster we are currently looking at) or False (not an instance of the species of monster we are currently looking at). You will also be given a single unlabeled monster; your goal is to return a prediction—True or False—of whether the unlabeled monster is an instance of the species of monster defined by the labeled list.
To write your agent, download the starter code and complete the solve() method, then upload it to test it against the autograder.
1. The starter code contains two files: MonsterClassificationAgent.py and main.py. You will write your agent in.
2. MonsterClassificationAgent.py. You may test your agent by running main.py. You will only submit
3. MonsterClassificationAgent.py; you may modify main.py to test your agent with different inputs.
Your solve() method will have two parameters. The first will be a list of 2-tuples. The first item in each 2-tuple will be a dictionary representing a single monster. The second item in each 2-tuple will be a boolean representing whether that particular monster is an example of this new monster species. The second parameter to solve() will be a dictionary representing the unlabeled monster.
Each monster species might have multiple possible values for each of the above parameters. One monster species, for instance, include monsters with either 1 or 2 horns, but never 0. Another species might include monsters that can be red, blue, and yellow, but no other colors. Another species might include both monsters with and without wings. So, while each monster is defined by a single value for each parameter, the species as a whole may have more variation.
Returning Your Solution
Your solve() method should return True or False based on whether your function believes this new monster (the second parameter) to be an example of the species defined by the labeled list of monsters (the first parameters).
Not every list will be fully exhaustive. Your second parameter could, for example, feature a monster that is a color that never appeared as positive or negative in the list of samples. Your agent’s task is to make an educated guess. For example, you might determine, “The only difference between this monster and the positive examples is its color, and its color never appeared in the negative examples, therefore there is a good likelihood that this is still a positive example.”
You may assume that the parameters are independent; for example, you will not have any species that has one horn when yellow and two horns when blue, but never one horn when blue. You may assume that all parameters are equally likely to occur; for example, you will not have any species that is yellow 90% of the time and blue only 10% of the time. Those ratios may appear in the list of samples you receive, but the underlying distribution of possibilities will be even. You may assume that these parameters are all that there is: if two monsters have the exact same parameters, they are guaranteed to be the same species. Finally, you should assume that each list is independent: you should not use knowledge from a prior test case to inform the current one.
How You Will Be Graded
Your agent will run against 20 test cases. The first four of these will always be the same; these are those contained in the original main.py. The last 16 will be randomly generated.
You can earn up to 40 points. Because the list of labeled monsters is non-exhaustive, it is highly unlikely you can write an agent that classifies every single monster correctly; there will always be some uncertainty. For that reason, you will receive full credit if your agent correctly classifies 17 or more of the monsters. Similarly, because every label is a simple true/false, even a randomly performing agent can likely get 50% correct with no intelligence under the hood. For that reason, you will receive no credit if your agent correctly classifies 7 or fewer monsters.
Between 7 and 17, you will receive 4 points for each correct classification: 4 points for 8/20, 8 for 9/20; 12 for 10/20; and so on, up to 40 points for correctly classifying 17 out of 20 or better.
In addition to submitting your agent to the autograder, you should also write up a short report describing your agent’s design and performance. Your report may be up to 4 pages, and should answer the following questions:
1. How does your agent work? Does it use some concepts covered in our course? Or some other approach?
2. How well does your agent perform? Does it struggle on any particular cases?
3. How efficient is your agent (O notation)? How does its performance change as the number of labeled monsters grows?
4. Does your agent do anything particularly clever to try to arrive at an answer more efficiently?
5. How does your agent compare to a human? Do you feel people approach the problem similarly?
6. You are encouraged but not required to include visuals and diagrams in your four page report?