{"id":202,"date":"2019-04-28T00:38:33","date_gmt":"2019-04-28T00:38:33","guid":{"rendered":"http:\/\/lucylabs.gatech.edu\/kbai\/?page_id=202"},"modified":"2019-04-28T00:38:33","modified_gmt":"2019-04-28T00:38:33","slug":"project-overview","status":"publish","type":"page","link":"https:\/\/lucylabs.gatech.edu\/kbai\/summer-2019\/project-overview\/","title":{"rendered":"Project Overview"},"content":{"rendered":"<p>[et_pb_section bb_built=&#8221;1&#8243;][et_pb_row][et_pb_column type=&#8221;4_4&#8243;][et_pb_text _builder_version=&#8221;3.12.1&#8243;]<\/p>\n<h1>Project Overview (Summer 2019)<\/h1>\n<p>The class project in CS7637: Knowledge-Based AI involves constructing an AI agent to address a human intelligence test.\u00a0 The overall process is the same across all three projects; what differs is the complexity of the problems (and their representations) that your agent will address. So, this document is long, but it is effectively the directions for all three projects of this semester.<\/p>\n<h2>In a (Large) Nutshell<\/h2>\n<p>The CS7637 class project is to create an AI agent that can pass a human intelligence test. You\u2019ll download a code package that contains the boilerplate necessary to run an agent you design against a set of problems inspired by the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Raven%27s_Progressive_Matrices\">Raven\u2019s Progressive Matrices<\/a> test of intelligence. Within it, you\u2019ll implement the Agent.java or Agent.py file to take in a problem and return an answer.<\/p>\n<p>There are four sets of problems for your agent to answer: B, C, D, and E. Each set contains four types of problems: <a href=\"https:\/\/drive.google.com\/open?id=1ReB1hABAugPYgS-TtquqqnjZr7dw65t2\">Basic<\/a>, Test, <a href=\"https:\/\/drive.google.com\/open?id=1UskSD3Z46tzlKI66QpXD029o73hEMT_5\">Challenge<\/a>, and Raven\u2019s. You\u2019ll be able to see the Basic and Challenge problems while designing your agent, and your grade will be based on your agent\u2019s answers to the Basic and Test problems. Each project will add a problem set or two: on Project 1, your agent will answer set B; on Project 2, your agent will answer sets B and C; and on Project 3, your agent will answer sets B, C, D, and E. Thus, Projects 1 and 2 build toward Project 3, the ultimate deliverable. Your grade will be based on three components: how well your agent performs on the problems, how your agent is implemented and revised, and a project reflection you turn in along with your agent.<\/p>\n<p>Different problems will also give your agent different amounts of information. Certain problems in problem sets B and C (specifically, the Basic and Test problems) will provide \u201cverbal\u201d representations. Verbal representations are structured representations that verbally describe what\u2019s inside \u00a0a figure in a problem. For example, in the first problem below, a verbal representation would describe figure A as \u201ca large, unfilled circle inside a very large, unfilled circle\u201d, and figure B as \u201ca small, unfilled square inside a very large, unfilled circle\u201d, using a more structure representation. Your agent would take those descriptions and produce an answer from the eight choices. In all the other problem sets, however, your agent will <i>only<\/i> be given the images themselves &#8212; what we call a \u201cvisual\u201d representation &#8212; in .png format. It will have to take in the image of the figures themselves and do its reasoning based on those.<\/p>\n<p>Every problem set provides visual representations, so you can try approaching these problems using visual representations (instead of or in addition to using verbal representations) as early as you want. Project 3\u2019s problem sets (D and E) <i>only<\/i> provide visual representations, so you\u2019ll have to try a visual approach eventually. However, verbal approaches tend to be somewhat easier because a human has already interpreted the figure, so you may find it best to rely mostly on the verbal representations for the first two projects. Note that <i>all<\/i> the optional problems (the Challenge and Raven\u2019s problems) only provide visual representations, so if you want to try those problems during Projects 1 and 2, you\u2019ll want to try a visual approach then. Your agent will run against every problem on Project 3, though, so you\u2019ll never miss out on the chance to give those a try.<\/p>\n<p>Don\u2019t worry if the above doesn\u2019t make sense quite yet &#8212; the projects are a bit complex when you\u2019re getting started. The goal of this section is just to provide you with a high-level view so that the rest of this document makes a bit more sense.<\/p>\n<h2>Background and Goals<\/h2>\n<p>This section covers the learning goals and background information necessary to understand the projects.<\/p>\n<h3>Learning Goals<\/h3>\n<p>One goal of Knowledge-Based Artificial Intelligence is to create human-like, human-level intelligence. If this is the goal of the field, then what better way to evaluate intelligence of an agent than by having it take the same intelligence tests that humans take?<\/p>\n<p>There are numerous tests of human intelligence, but one of the most reliable and commonly-used is Raven\u2019s Progressive Matrices. Raven\u2019s Progressive Matrices, or RPM, are visual analogy problems where the test-taker is given a matrix of figures and asked to select the figure that completes the matrix. Examples of 2&#215;2 and 3&#215;3 RPM-style problems are shown below.<\/p>\n<p>In these projects, you will design agents that will address RPM-inspired problems such as the ones above. The goal of this project is to authentically experience the overall goals of knowledge-based AI: to design an agent with human-like, human-level intelligence; to test that agent against a set of authentic problems; and to use that agent\u2019s performance to reflect on what we believe about human cognition. As such, you might not use every topic covered in KBAI on the projects; the topics covered give a bottom-up view of the topics and principles KBAI, while the project gives a top-down view of the goals and concepts of KBAI.<\/p>\n<h3>About the Test<\/h3>\n<p>The full Raven\u2019s Progressive Matrices test consists of 60 visual analogy problems divided into five sets: A, B, C, D, and E. Set A is comprised of 12 <a href=\"http:\/\/us.talentlens.com\/wp-content\/uploads\/s-APM.jpg\">simple pattern-matching problems<\/a> which we won\u2019t cover in these projects. Set B is comprised of 12 2&#215;2 matrix problems, such as the first image shown above. Sets C, D, and E are each comprised of 12 3&#215;3 matrix problems, such as the second image shown above. Problems are named with their set followed by their number, such as problem B-05 or C-11. The sets are of roughly ascending difficulty.<\/p>\n<p>For copyright reasons, we cannot provide the real Raven\u2019s Progressive Matrices test to everyone. Instead, we\u2019ll be giving you sets of problems &#8212; which we call \u201cBasic\u201d problems &#8212; inspired by the real RPM to use to develop your agent. Your agent will be evaluated based on how well it performs on these \u201cBasic\u201d problems, as well as a parallel set of \u201cTest\u201d problems that you will not see while designing your agent. These Test problems are directly analogous to the Basic problems; running against the two sets provides a check for generality and overfitting. Your agents will also run against the real RPM as well as a set of Challenge problems, but neither of these will be factored into your grade.<\/p>\n<p>Overall, by Project 3, your agent will answer 192 problems. More on the specific problems that your agent will complete are in the sections that follow.<\/p>\n<h3>Verbal vs. Visual<\/h3>\n<p>Historically in the community, there have been two broad categories of approaches to RPM: verbal and visual. Verbal approaches attempt to solve RPM based on verbal representations of the problems. In these representations, a human initially describes the contents of the figures of a problem using a formal vocabulary, and an AI agent then reasons over those representations. Visual approaches, on the other hand, attempt to solve RPM based strictly on the images themselves: they take as input the raw image data and perform their analysis from there. Examples of verbal approaches include <a href=\"http:\/\/www.dtic.mil\/cgi-bin\/GetTRDoc?AD=ADA221448\">Carpenter, Just &amp; Shell 1990<\/a> and <a href=\"http:\/\/onlinelibrary.wiley.com\/doi\/10.1111\/j.1551-6709.2009.01052.x\/full\">Lovett, Forbus &amp; Usher 2009<\/a>. Examples of visual approaches include <a href=\"https:\/\/mindmodeling.org\/cogsci2012\/papers\/0321\/paper0321.pdf\">Kunda, McGreggor &amp; Goel 2013<\/a> and <a href=\"http:\/\/dilab.gatech.edu\/test\/wp-content\/uploads\/2014\/11\/ConfidentReasoningRavensAAAI2014Final.pdf\">McGreggor &amp; Goel 2014<\/a>.<\/p>\n<p>Much research has been done examining the differences between these approaches in humans (e.g. <a href=\"http:\/\/iapsych.com\/iqmr\/fe\/LinkedDocuments\/brouwers2009.pdf\">Brouwers, Vijver &amp; Hemert 2009<\/a>). Within artificial intelligence, visual approaches are generally more robust in that an initial phase of human reasoning is not necessary. Thus, the ultimate goal for these projects will be to solve RPM-inspired problems visually. However, visual problem-solving tends to be significantly more difficult. Thus, you will start by having the option to use both verbal and visual approaches (using verbal representations we have produced for you), and by the last project you will use only visual methods.<\/p>\n<h2>Details &amp; Deliverables<\/h2>\n<p>This section covers the more specific details of the projects: what you will deliver, what problems your agents will solve, and what representations will be given to you.<\/p>\n<h3>Project Progression<\/h3>\n<p>In this offering of CS7637, you will complete three projects:<\/p>\n<ul>\n<li><b>Project 1: Problem set B<\/b><\/li>\n<li><b>Project 2: Problem set C<\/b><\/li>\n<li><b>Project 3: Problem sets D and E<\/b><\/li>\n<\/ul>\n<p>Each problem set consists of 48 problems: 12 <a href=\"https:\/\/drive.google.com\/open?id=1ReB1hABAugPYgS-TtquqqnjZr7dw65t2\">Basic<\/a>, 12 Test, 12 Raven\u2019s, and 12 <a href=\"https:\/\/drive.google.com\/open?id=1UskSD3Z46tzlKI66QpXD029o73hEMT_5\">Challenge<\/a>. Only Basic and Test problems will be used in determining your grade. The Raven\u2019s problems are run for authenticity and analysis, but are not used in calculating your grade. Note that each project will also be run on the previous projects&#8217; problem sets, but <em>not<\/em> for a grade: this is just for you to see how your agent improves over time. So, Project 3 will run on all 192 problems (48 Basic, 48 Test, 48 Raven&#8217;s, and 48 Challenge), but only the 48 problems in sets D and E will be used for your grade.<\/p>\n<p>On each project, you will have access to the Basic and Challenge problems while designing and testing your agent; you will not have access to the Test or Raven\u2019s problems while designing and testing your agent. Challenge and Raven\u2019s problems are not part of your grade, though note that the Challenge problems will often be used to expose your agent to extra properties and shapes seen on the real Raven\u2019s problems that are not covered in the Basic and Test problems.<\/p>\n<p>As mentioned previously, the problems themselves ascend in difficulty from set to set. Additionally, only visual representations will be given for problem sets D and E, so for project 3 you\u2019ll be required to do some visual reasoning.<\/p>\n<p>For each project, your code must be submitted to the autograder by the deadline. However, it is okay if your project is still running after the deadline. You are only permitted 10 submissions per project.<\/p>\n<p>On each project, you will also complete a project reflection describing your process of constructing your agent, your agent&#8217;s performance and limitations, and your agent&#8217;s connection to human cognition.<\/p>\n<h3>Grading<\/h3>\n<p>Your grade on the project is based on three criteria: your agent\u2019s performance on the Basic and Test problems (30%), your agent&#8217;s implementation and revision (20%), and the project reflection you submit along with your agent (50%).<\/p>\n<h4>Performance<\/h4>\n<p>For performance, your agent will be graded on whether it meets minimum performance goals. The minimum performance goal is: 7 or more problems correct on each set of 12 problems. The Basic and Test sets are each worth 15%: meeting the minimum goal on both earns the full 30%, while meeting the goal on only one earns 15%. Meeting the goal on neither earns 0%. (For Project 3, where there are four sets instead of two, each is worth 7.5%.)<\/p>\n<p>Note that we will use your best submissions to calculate these scores. Your best scores on each set do not need to come on the same submission. For example, if you reached 7\/12 on the Basic B set on your third submission and 7\/12 on the Test B set on your fifth submission, but never reached 7\/12 on either set on any other submission, you would still receive full credit.<\/p>\n<h4>Revise &amp; Reflect<\/h4>\n<p>For implementation and revision, we will look at the implementation of your agent as well as your patterns of revision. <strong>We expect you to run your code on the server relatively often<\/strong><strong>: <\/strong>this is how we will judge your revision process. This area is more subjective, but generally, you will receive credit as long as (a) your agent reaches perfect performance on Basic and Test problems, (b) your agent gets better over a series of a few submissions, even if it never reaches perfection, <strong>or<\/strong> (c) you keep trying and making non-trivial revisions, even if your agent&#8217;s performance is not getting better. In other words, you&#8217;ll receive credit for a successful agent <em>or<\/em> continued attempts to build a successful agent.<\/p>\n<p>You should notice that between Performance and Revise &amp; Reflect, there is no heavy incentive to design a near-perfect agent at all costs. This is intentional: we want you to design agents that are somewhat successful, but beyond that, we care more about novel and interesting approaches than about success-at-all-costs approaches.<\/p>\n<h4>Journal<\/h4>\n<p>For the journal, you will write a personal reflection on your process of constructing the agent. It will include an introduction and conclusion, as well as a journal entry for each individual submission to the autograder. In each journal entry, you should include the submission to which the entry corresponds, a description of what has changed, a reflection on the relationship between your latest agent and human cognition, and a reflection on the agent&#8217;s performance.<\/p>\n<p>Revise &amp; Reflect and Journal credit are deeply intertwined: you&#8217;ll know that you&#8217;re fulfilling our goals for implementation if you find you have plenty to write about in your journal.<\/p>\n<h4>Top Performers<\/h4>\n<p>As noted, project grading specifically encourages either having a great agent or continually trying to improve your agent. Someone whose agent works perfectly on their first submission will receive the same implementation score as someone whose agent slowly gets better over a series of several submissions, even if they never come close to perfect performance.<\/p>\n<p>However, we do want to have some incentive for doing well. Thus, on each of the three projects, the top 10 performers in the class will receive 5 extra points on their final average. This effectively means they can skip a test (or a couple questions on a homework, or some participation), or just let the extra points compensate for lost points elsewhere in the class.<\/p>\n<p>Note that a single student can only receive this once; students who already received this bonus on an earlier project will be skipped in finding the top 10 on a later project. Top 10 will be calculated by total score on the problems graded for that project (e.g. Basic B and Test B for Project 1; Basic C and Test C for Project 2). If necessary, ties will be broken first by performance on the Raven&#8217;s problems, then on the Challenge problems.<\/p>\n<h2>Getting Started<\/h2>\n<p>To make it easier to start the project and focus on the concepts involved (rather than the nuts and bolts of reading in problems and writing out answers), you\u2019ll be working from an agent framework in your choice of Python or Java. \u00a0You can get the framework in one of two ways:<\/p>\n<ul>\n<li>Clone it from the master repository with \u2018git clone &#8211;recurse-submodules <a href=\"https:\/\/github.gatech.edu\/Dilab\/KBAI-package-java.git\">https:\/\/github.gatech.edu\/Dilab\/KBAI-package-java.git<\/a>\u2019 (Java) or \u2018git clone &#8212;-recurse-submodules <a href=\"https:\/\/github.gatech.edu\/Dilab\/KBAI-package-python.git\">https:\/\/github.gatech.edu\/Dilab\/KBAI-package-python.git<\/a>\u2019 (Python). \u00a0This makes it easier to \u2018git pull\u2019 any (rare) framework changes or fixes that must be made after the project is released.<\/li>\n<li>Download Project-Code-Java or Project-Code-Python as a zip file from <a href=\"https:\/\/drive.google.com\/open?id=1Hkw3I6UziVyt5IMt4p7J4jeG1IFNeP42\">this folder<\/a>. \u00a0This method allows you to obtain the code if you are having trouble accessing the Georgia Tech Github site.<\/li>\n<\/ul>\n<p>You will place your code into the Solve method of the Agent class supplied. \u00a0You can also create any additional methods, classes, and files needed to organize your code; Solve is simply the entry point into your agent.<\/p>\n<h3>The Problem Sets<\/h3>\n<p>As mentioned previously, in project 3, your agent will run against 192 problems: 4 sets of 48 problems, with each set further broken down into 4 categories with 12 problems each. The table below gives a rundown of the 16 smaller sets, what will be provided for each, and when your agent will approach each.<\/p>\n<p>Key:<\/p>\n<ul>\n<li>P1?, P2?, and P3?: Whether that set will be used on that project.<\/li>\n<li>Graded?: Whether your agent\u2019s performance on that set will be used in determining your grade for the project (Basic and Test are used for grading, Challenge and Raven\u2019s are just used for authenticity and curiosity).<\/li>\n<li>Provided?: Whether you\u2019ll be given a copy of those problems to use in designing your agent (you\u2019ll see Basic and Challenge problems, but Test and Raven\u2019s will remain hidden).<\/li>\n<li>Visual?: Whether your agent will have access to visual representations of the set (which it will for all problems).<\/li>\n<li>Verbal?: Whether your agent will have access to verbal representations of the set (you\u2019ll have verbal representations for sets B and C, but not for sets D and E).<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-64 size-full\" src=\"http:\/\/lucylabs.gatech.edu\/kbai\/wp-content\/uploads\/2018\/08\/ravens.png\" alt=\"\" width=\"658\" height=\"588\" srcset=\"https:\/\/lucylabs.gatech.edu\/kbai\/wp-content\/uploads\/2018\/08\/ravens.png 658w, https:\/\/lucylabs.gatech.edu\/kbai\/wp-content\/uploads\/2018\/08\/ravens-300x268.png 300w\" sizes=\"auto, (max-width: 658px) 100vw, 658px\" \/><\/p>\n<p>Thus, for the first two projects, you\u2019ll be addressing the easier two sets of problems using visual and\/or verbal representations. For the final project, you\u2019ll address the final two sets of problems using their visual representations only. It might, therefore, be prudent to get an early start on the visual methods!<\/p>\n<p>Within each set, the Basic, Test, and Raven\u2019s problems are constructed to be roughly analogous to one another. The Basic problem is constructed to mimic the relationships and transformations in the corresponding Raven\u2019s problem, and the Test problem is constructed to mimic the Basic problem very, very closely. So, if you see that your agent gets Basic problem B-05 correct but Test and Raven\u2019s problems B-05 wrong, you know that might be a place where your agent is either overfitting or getting lucky. This also means you can anticipate your agent\u2019s performance on the Test problems relatively well: each Test problem uses a near-identical principle to the corresponding Basic problem. In the past, agents have averaged getting 85% as many Test problems right as Basic problems, so there\u2019s a pretty good correlation there <i>if<\/i> you\u2019re using a robust, general method.<\/p>\n<h3>The Problems<\/h3>\n<p>You are provided with the <a href=\"https:\/\/drive.google.com\/open?id=1ReB1hABAugPYgS-TtquqqnjZr7dw65t2\">Basic<\/a> and <a href=\"https:\/\/drive.google.com\/open?id=1UskSD3Z46tzlKI66QpXD029o73hEMT_5\">Challenge <\/a>problems to use in designing your agent. The Test and Raven\u2019s problems are hidden and will only be used when grading your project. This is to test your agents for generality: it isn\u2019t hard to design an agent that can answer questions it has already seen, just as it would not be hard to score well on a test you have already taken before. However, performing well on problems you and your agent <i>haven\u2019t<\/i> seen before is a more reliable test of intelligence. Your grade is based solely on your agent\u2019s performance on the Basic and Test problems.<\/p>\n<p>All problems are contained within the Problems folder of the downloadable. Problems are divided into sets, and then into individual problems. Each problem\u2019s folder has three things:<\/p>\n<ul>\n<li>The problem itself, for your benefit.<\/li>\n<li>A ProblemData.txt file, containing information about the problem, including its correct answer, its type, and its verbal representation (if applicable).<\/li>\n<li>Visual representations of each figure, named A.png, B. png, etc.<\/li>\n<\/ul>\n<p>You should not attempt to access ProblemData.txt directly; its filename will be changed when we grade projects. Generally, you need not worry about this directory structure; all problem data will be loaded into the RavensProblem object passed to your agent\u2019s Solve method, and the filenames for the different visual representations will be included in their corresponding RavensFigures.<\/p>\n<h3>Working with the Code<\/h3>\n<p>The framework code is available <a href=\"https:\/\/drive.google.com\/open?id=1Hkw3I6UziVyt5IMt4p7J4jeG1IFNeP42\">here<\/a> as Project-Code-Java.zip or Project-Code-Python.zip. \u00a0Both are also available from git via \u2018git clone &#8211;recursive <a href=\"https:\/\/github.gatech.edu\/Dilab\/KBAI-package-java.git\">https:\/\/github.gatech.edu\/Dilab\/KBAI-package-java.git<\/a>\u2019 (Java) or \u2018git clone &#8211;recursive <a href=\"https:\/\/github.gatech.edu\/Dilab\/KBAI-package-python.git\">https:\/\/github.gatech.edu\/Dilab\/KBAI-package-python.git<\/a>\u2019 respectively. \u00a0Note that these code packages contain a file instructing your agent to only look at those problems relevant for Project 1; updated versions of this file will be supplied for Project 2 and Project 3.<\/p>\n<h4>The Code<\/h4>\n<p>The downloadable package has a number of either Java or Python files: RavensProject, ProblemSet, RavensProblem, RavensFigure, RavensObject, and Agent. Of these, you should only modify the Agent class. You may make changes to the other classes to test your agent, write debug statements, etc. However, when we test your code, we will use the original versions of these files as downloaded here. Do not rely on changes to any class except for Agent to run your code. In addition to Agent, you may also write your own additional files and classes for inclusion in your project.<\/p>\n<p>In Agent, you will find two methods: a constructor and a Solve method. The constructor will be called at the beginning of the program, so you may use this method to initialize any information necessary before your agent begins solving problems. After that, Solve will be called on each problem. You should write the Solve method to return its answer to the given question:<\/p>\n<ul>\n<li>2&#215;2 questions have six answer options, so to answer the question, your agent should return an integer from 1 to 6.<\/li>\n<li>3&#215;3 questions have eight answer options, so your agent should return an integer from 1 to 8.<\/li>\n<li>If your agent wants to skip a question, it should return a negative number. Any negative number will be treated as your agent skipping the problem.<\/li>\n<\/ul>\n<p>You may do all the processing within Solve, or you may write other methods and classes to help your agent solve the problems.<\/p>\n<p>When running, the program will load questions from the Problems folder. It will then ask your agent to solve each problem one by one and write the results to ProblemResults.csv. You may check ProblemResults.csv to see how well your agent performed. You may also check SetResults.csv to view a summary of your agent\u2019s performance at the set level.<\/p>\n<h4>The Documentation<\/h4>\n<p>Included in the downloadable is the documentation for interacting with the code (API\/index.html in the downloadable). You may use this and the in-line comments to understand the structure of the problems. Briefly, however:<\/p>\n<ul>\n<li>RavensProject: The main driver of the project. This file will load the list of problem sets, initialize your agent, then pass the problems to your agent one by one.<\/li>\n<li>RavensGrader: The grading file for the project. After your agent generates its answers, this file will check the answers and assign a score.<\/li>\n<li>Agent: The class in which you will define your agent. When you run the project, your Agent will be constructed, and then its Solve method will be called on each RavensProblem. At the end of Solve, your agent should return an integer as the answer for that problem (or a negative number to skip that problem).<\/li>\n<li>ProblemSet: A list of RavensProblems within a particular set.<\/li>\n<li>RavensProblem: A single problem, such as the one shown earlier in this document. This is the most complicated and important class in the project, so let\u2019s break it into parts. RavensProblem includes:\n<ul>\n<li>A HashMap (Java) or Dictionary (Python) of the individual Figures (that is, the squares labeled &#8220;A&#8221;, &#8220;B&#8221;, &#8220;C&#8221;, &#8220;1&#8221;, &#8220;2&#8221;, etc.) from the problem. The RavensFigures associated with keys &#8220;A&#8221;, &#8220;B&#8221;, and &#8220;C&#8221; are the problem itself, and those associated with the keys &#8220;1&#8221;, &#8220;2&#8221;, &#8220;3&#8221;, &#8220;4&#8221;, &#8220;5&#8221;, and &#8220;6&#8221; are the potential answer choices.<\/li>\n<li>A String representing the name of the problem and a String representing the type of problem (&#8220;2&#215;2&#8221; or &#8220;3&#215;3&#8221;).<\/li>\n<li>Variables hasVisual and hasVerbal indicating whether that problem has a visual or verbal representation (all problems this semester have visual representations, only some have verbal representations).<\/li>\n<\/ul>\n<\/li>\n<li>RavensFigure: A single square from the problem, labeled either &#8220;A&#8221;, &#8220;B&#8221;, &#8220;C&#8221;, &#8220;1&#8221;, &#8220;2&#8221;, etc. All RavensFigures have a filename referring to the visual representation (in PNG form) of the figure\u2019s contents. Problems with verbal representations also contain dictionaries of RavensObjects. In the example above, the squares labeled &#8220;A&#8221;, &#8220;B&#8221;, &#8220;C&#8221;, &#8220;1&#8221;, &#8220;2&#8221;, &#8220;3&#8221;, &#8220;4&#8221;, &#8220;5&#8221;, and &#8220;6&#8221; would each be separate instances of RavensFigure, each with a list of RavensObject.<\/li>\n<li>RavensObject: A single object, typically a shape such as a circle or square, within a RavensFigure. For example, in the problem above, the Figure &#8220;C&#8221; would have one RavensObject, representing the square in the figure. RavensObjects contain a name and a dictionary of attributes. Attributes are key-value pairs, where the key is the name of some general attribute (such as \u2018size\u2019, \u2018shape\u2019, and \u2018fill\u2019) and the value is the particular characteristic for that object (such as \u2018large\u2019, \u2018circle\u2019, and \u2018yes). For example, the square in figure &#8220;C&#8221; could have three RavensAttributes: shape:square, fill:no, and size:very large. Generally, but not always, the representation will provide the shape, size, and fill attributes for all objects, as well as any other relevant information for the particular problem.<\/li>\n<\/ul>\n<p>The documentation is ultimately somewhat straightforward, but it can be complicated when you\u2019re initially getting used to it. The most important things to remember are:<\/p>\n<ul>\n<li>Every time Solve is called, your agent is given a single problem. By the end of Solve, it should return an answer as an integer. You don\u2019t need to worry about how the problems are loaded from the files, how the problem sets are organized, or how the results are printed. You need only worry about writing the Solve method, which solves one question as a time.<\/li>\n<li>RavensProblems have a dictionary of RavensFigures, with each Figure representing one of the image squares in the problem and each key representing its letter (squares in the problem matrix) or number (answer choices). All RavensFigures have filenames so your agent can load the PNG with the visual representation. If the problem has a verbal representation as well (hasVerbal or hasVerbal() is true), then each RavensFigure has a dictionary of RavensObjects, each representing one shape in the Figure (such as a single circle, square, or triangle). Each RavensObject has a dictionary of attributes, such as \u201csize\u201d:\u201clarge\u201d, \u201cshape\u201d:\u201ctriangle\u201d, and \u201cfill\u201d:\u201cyes\u201d.<\/li>\n<\/ul>\n<h4>Libraries<\/h4>\n<p><b>No<\/b> external libraries are permitted in Java. In Python, the <b>only<\/b> permitted libraries are the latest version of the Python image processing library Pillow and the latest version of numpy. For installation instructions on Pillow, see <a href=\"https:\/\/pillow.readthedocs.org\/en\/latest\/installation.html\">this page<\/a>. For installation instructions on numpy, see <a href=\"https:\/\/docs.scipy.org\/doc\/numpy-1.10.1\/user\/install.html\">this page<\/a>. No other libraries are permitted.<\/p>\n<h4>Image Processing<\/h4>\n<p>Generally, we do not allow external libraries. For Java, you may use anything contained within the default Java 8 installation. Java 8 has plenty of image processing options. We recommend using BufferedImage, and we have included a bit of sample code below for loading images into BufferedImage. If you have other suggestions, please bring them up on Piazza!<\/p>\n<p>Python has no native support for image processing, so an external library must be used. The <b>only<\/b> external library we support for image processing for Python is Pillow. You can install pillow simply by running easy_install pillow. More comprehensive information on installing Pillow can be found <a href=\"https:\/\/pillow.readthedocs.org\/en\/latest\/installation.html\">here<\/a>. We have included a code segment below on loading an image from a file with Pillow.<\/p>\n<h2>Submitting Your Code<\/h2>\n<p>This class uses a server-side autograder to evaluate your submission. This means you can see how your code is performing against the Test problems even without seeing the problems themselves. Note that we <strong>will<\/strong> look at your submission history when evaluating your implementation: we want to see that you modified your agent over time, either to try to improve its performance or to experiment with different approaches. So, you should submit early and often. However, <strong>you are limited to 10 submissions per project<\/strong> to avoid over-stressing the autograder and to disincentivize &#8220;brute force&#8221; methods for solving the problems.<\/p>\n<p>Below are the step-by-step submission instructions for submitting your agent to the autograder.<\/p>\n<h4>Getting Started with the Autograder<\/h4>\n<p>First, make sure your agent is built using the official framework. Follow the instructions under Working with the Code.<\/p>\n<p>Then, install a couple of packages required for running the submit script by running:<\/p>\n<pre>pip install requests future<\/pre>\n<p>If you are using Python 3, please update the language.txt file to say \u2018python3\u2019 instead of \u2018python\u2019.<\/p>\n<p>In your project directory (for either language) you will find a Python script called submit.py.\u00a0 When running it, two parameters must be provided: provider and assignment. provider should always be gt: `&#8211;provider gt`. For assignment, the available parameters are P1, P2, P3, error-check, error-check-2, and error-check-3. P1, P2, and P3 submit your code against the corresponding project. error-check, error-check-2 (for P2) and error-check-3 (for P3) submit your code just for a preemptive check to make sure it is properly formatted and runnable by the autograder. We strongly recommend you first run the error check:<\/p>\n<pre>python submit.py --provider gt --assignment error-check<\/pre>\n<p>Note that this does not count as a project submission and will not be graded. It only ensures that your code is properly formatted and ready for grading prior to real submission so that you don&#8217;t waste a submission on broken code.<\/p>\n<h4>Submitting a Project<\/h4>\n<p>To submit project 1 for credit, run:<\/p>\n<pre>python submit.py --provider gt --assignment P1<\/pre>\n<p>Note that running this command will count against your submission limit for P1.<\/p>\n<p>If you have created additional files, make sure to include them with the &#8211;files parameter. For example, if you are submitting project 1 built in Java and your agent uses two extra classes called RavensTransform and RavensNetwork, you would run:<\/p>\n<pre>python submit.py --provider gt --assignment P1 --files RavensTransform.java RavensNetwork.java<\/pre>\n<p>Note that it is not necessary to explicitly list all the files included in the project framework.<\/p>\n<h4>Logging In<\/h4>\n<p>The script will prompt you for your login information. \u00a0Make sure to use your Georgia Tech login credentials so that we can credit you for your submission! \u00a0Optionally, you can save your login information when the script prompts you to \u201csave jwt\u201d &#8212; this will avoid the need to re-enter it on future runs.<\/p>\n<p>Note: if you are using two-factor authentication, an additional step is required to allow the submit script to log in on your behalf &#8212; please see the instructions at <a href=\"https:\/\/bonnie.udacity.com\/auth_tokens\/two_factor\">https:\/\/bonnie.udacity.com\/auth_tokens\/two_factor<\/a>.<\/p>\n<h4>Getting Your Results<\/h4>\n<p>The script will run for a while and then return a set of results which looks something like this:<\/p>\n<pre>Problem,Correct?,Correct Answer,Agent's Answer\r\n\"Challenge Problem B-04\",0,4,1\r\n\"Basic Problem B-12\",1,1,1\r\n...<\/pre>\n<p>It will also display some summary information per problem set in the console. You may find it convenient to open the CSV-formatted results in a spreadsheet program like Excel for easy browsing and reference. The autograder will not provide you your code&#8217;s own output or access to any files your code generates in order to prevent leaking information.<\/p>\n<p>You can check the number of submissions you have remaining (as well as some other fun statistics about your agent) at <a href=\"https:\/\/bonnie.udacity.com\/\">https:\/\/bonnie.udacity.com\/<\/a>.<\/p>\n<h4>Submission Errors<\/h4>\n<p>If your submission errors out, you\u2019ll see a result indicating what kind of error the code encountered. \u00a0(For Java, this will be either a build or an execution error; since Python is an interpreted language, only execution errors are possible.)<\/p>\n<p>Here are some debugging steps you can try:<\/p>\n<ul>\n<li>If you have a build error in Java, try running \u2018cd workspace\/ravensproject; javac @sources.txt\u2019 to build at the command line. \u00a0This is the same command we use to build your code, and running it should give you an exact file\/line where the build error occurs.<\/li>\n<li>If you have an execution error in Python, make sure that your language.txt file reflects the actual Python version you are running locally. \u00a0If you\u2019re using an IDE like IntelliJ, your project settings should tell you what interpreter you\u2019re using. If you\u2019re running at the command line, you can find the interpreter version with \u2018python &#8211;version\u2019. \u00a0Usually, if you\u2019re running \u2018python\u2019 it\u2019s Python 2, and if you\u2019re running \u2018python3\u2019 it\u2019s Python 3. Similarly, you should update language.txt to say \u2018python\u2019 for Python 2 and \u2018python3\u2019 for Python 3.<\/li>\n<li>If your agent results are different than expected (e.g., you get a different score on Basic and Challenge sets when you run locally), double-check the language.txt again! \u00a0If that\u2019s correct, check to see if your local library versions match the ones on the autograder; those are:\n<ul>\n<li>Java: JDK 8u73<\/li>\n<li>Python 3: Python 3.4.3<\/li>\n<li>Python 2: Python 2.7.11<\/li>\n<li>Pillow: Pillow 3.1.1<\/li>\n<li>Numpy: 1.10<\/li>\n<\/ul>\n<\/li>\n<li>If you get a message containing the text \u201cThe total output length exceeded the limit of 65536 bytes.\u201d, your agent is dumping too much output to stdout. \u00a0Try removing print\/log statements before you resubmit.<\/li>\n<li>If you include a class named RavensSolver and get an error about it, rename it to something else and resubmit &#8211; this class name is used by the autograder.<\/li>\n<li>If the submission script hangs without asking you for credentials, or after asking you for your username but before asking you for your password, check what shell you\u2019re using. \u00a0We have seen this issue occasionally with Windows users who are attempting to submit from the git shell or Cygwin. If you are using one of these, try resubmitting from the standard command prompt.<\/li>\n<\/ul>\n<p>If you encounter any problems at all when running the autograder, please post to Piazza in the autograder folder. \u00a0This helps make sure we\u2019ll see your issue and respond promptly!<\/p>\n<h1>Relevant Resources<\/h1>\n<p>Goel, A. (2015). <a href=\"http:\/\/dilab.gatech.edu\/test\/wp-content\/uploads\/2015\/04\/Goel-AAAI2015-VisualTuringTest-PubInfo.pdf\">Geometry, Drawings, Visual Thinking, and Imagery: Towards a Visual Turing Test of Machine Intelligence<\/a>. In <i>Proceedings of the 29th Association for the Advancement of Artificial Intelligence Conference Workshop on Beyond the Turing Test.<\/i> Austin, Texas.<\/p>\n<p>McGreggor, K., &amp; Goel, A. (2014). <a href=\"http:\/\/dilab.gatech.edu\/test\/wp-content\/uploads\/2014\/11\/ConfidentReasoningRavensAAAI2014Final.pdf\">Confident Reasoning on Raven\u2019s Progressive Matrices Tests<\/a>. In <i>Proceedings of the 28th Association for the Advancement of Artificial Intelligence Conference. <\/i>Qu\u00e9bec City, Qu\u00e9bec.<\/p>\n<p>Kunda, M. (2013). <a href=\"https:\/\/smartech.gatech.edu\/bitstream\/handle\/1853\/47639\/kunda_maithilee_201305_phd.pdf\">Visual problem solving in autism, psychometrics, and AI: the case of the Raven&#8217;s Progressive Matrices intelligence test<\/a>. Doctoral dissertation.<\/p>\n<p>Emruli, B., Gayler, R. W., &amp; Sandin, F. (2013). <a href=\"http:\/\/pure.ltu.se\/portal\/files\/43047876\/BlerimEmruli_2013b.pdf\">Analogical mapping and inference with binary spatter codes and sparse distributed memory<\/a>. In <i>Neural Networks (IJCNN), The 2013 International Joint Conference on<\/i>. IEEE.<\/p>\n<p>Little, D., Lewandowsky, S., &amp; Griffiths, T. (2012). <a href=\"https:\/\/cocosci.berkeley.edu\/tom\/papers\/Little_WMCRavens.pdf\">A Bayesian model of rule induction in Raven\u2019s progressive matrices<\/a>. In <i>Proceedings of the 34th Annual Conference of the Cognitive Science Society<\/i>. Sapporo, Japan.<\/p>\n<p>Kunda, M., McGreggor, K., &amp; Goel, A. K. (2012). <a href=\"https:\/\/mindmodeling.org\/cogsci2012\/papers\/0321\/paper0321.pdf\">Reasoning on the Raven\u2019s advanced progressive matrices test with iconic visual representations<\/a>. In <i>34th Annual Conference of the Cognitive Science Society<\/i>. Sapporo, Japan.<\/p>\n<p>Lovett, A., &amp; Forbus, K. (2012). <a href=\"http:\/\/www.andrewlovett.net\/Papers\/CogSci12_GeoAnalogy_Final.pdf\">Modeling multiple strategies for solving geometric analogy problems<\/a>. In <i>34th Annual Conference of the Cognitive Science Society<\/i>. Sapporo, Japan.<\/p>\n<p>Schwering, A., Gust, H., K\u00fchnberger, K. U., &amp; Krumnack, U. (2009). <a href=\"http:\/\/cogsci.uni-osnabrueck.de\/~krumnack\/publications\/COGSCI-2009.pdf\">Solving geometric proportional analogies with the analogy model HDTP<\/a>. In <i>31st Annual Conference of the Cognitive Science Society<\/i>. Amsterdam, Netherlands.<\/p>\n<p>Joyner, D., Bedwell, D., Graham, C., Lemmon, W., Martinez, O., &amp; Goel, A. (2015). Using Human Computation to Acquire Novel Methods for Addressing Visual Analogy Problems on Intelligence Tests. In <i>Proceedings of the Sixth International Conference on Computational Creativity<\/i>. Provo, Utah.<\/p>\n<p>&#8230;and <a href=\"http:\/\/scholar.google.com\/scholar?q=%22raven%27s+progressive+matrices%22+%22artificial+intelligence%22&amp;hl=en&amp;as_sdt=0,11\">many more<\/a>!<\/p>\n<div class=\"SnapLinksContainer\">\n<div class=\"SL_SelectionRect\">\n<div class=\"SL_SelectionLabel\"><\/div>\n<\/div>\n<p><!-- Used for easily cloning the properly namespaced rect --><\/p>\n<\/div>\n<p>&nbsp;<\/p>\n<p><!-- Used for easily cloning the properly namespaced rect --><\/p>\n<p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][\/et_pb_section]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>[et_pb_section bb_built=&#8221;1&#8243;][et_pb_row][et_pb_column type=&#8221;4_4&#8243;][et_pb_text _builder_version=&#8221;3.12.1&#8243;] Project Overview (Summer 2019) The class project in CS7637: Knowledge-Based AI involves constructing an AI agent to address a human intelligence test.\u00a0 The overall process is the same across all three projects; what differs is the complexity of the problems (and their representations) that your agent will address. So, this document [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":191,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-202","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/lucylabs.gatech.edu\/kbai\/wp-json\/wp\/v2\/pages\/202","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lucylabs.gatech.edu\/kbai\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/lucylabs.gatech.edu\/kbai\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/lucylabs.gatech.edu\/kbai\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/lucylabs.gatech.edu\/kbai\/wp-json\/wp\/v2\/comments?post=202"}],"version-history":[{"count":1,"href":"https:\/\/lucylabs.gatech.edu\/kbai\/wp-json\/wp\/v2\/pages\/202\/revisions"}],"predecessor-version":[{"id":219,"href":"https:\/\/lucylabs.gatech.edu\/kbai\/wp-json\/wp\/v2\/pages\/202\/revisions\/219"}],"up":[{"embeddable":true,"href":"https:\/\/lucylabs.gatech.edu\/kbai\/wp-json\/wp\/v2\/pages\/191"}],"wp:attachment":[{"href":"https:\/\/lucylabs.gatech.edu\/kbai\/wp-json\/wp\/v2\/media?parent=202"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}