CSE 491 - Fall 2023 @ MSU
The largest chunk of the work for this course will be developing your semester project. It will be worth a total of 45 points, plus an additional 12 points associated with turning in your weekly updates.
Your final grade on the project will be based on three factors:
Early in the semester we will develop a set of ambitious goals for your project. You will earn points based on how well you meet these goals, with a series of milestones over the course of the semester. In some circumstances these goals may be adjusted based on revised information and any changes that we may need to introduce to your project. The instructors will be in regular communication about your progress and you will be heavily involved in any such changes.
While the ultimate functionality of your code is clearly important, being able to write code that is reliable, reusable and easy to understand by other programmers is also a high level goal for this course. Code quality will be judged based on:
You will be getting regular in-class advice and feedback on these topics throughout the semester.
It is important that each group member provides a meaningful contribution to the overall group effort and to the course-level project as a whole. Based on ratings by your teammates and your role on the team (and audited by the instructors, if needed, using progress reports, git logs, and the work agreement) you will receive a qualification for how effective of a contributor you were to the project.
Proficient Contributor: You have met all of the expectations and delivered your portion of the project. You worked diligently on the project throughout the semester and were a reliable member of the team. You will receive full points for this section.
Inconsistent Contributor: While you participated and contributed to the project, you have done so inconsistently or otherwise have failed to meet the group’s expectations (as put forth in your project agreement). You might have missed some tasks or not been substantially involved in the discussions or implementation. Reduced (or no) points will be giving for individual contributions, but you will still receive all other earned project points.
Minimal Contributor: You did not actively participate in the project. Your contribution was negligible or missing, and your lack of involvement hampered the group’s overall success. Not only will no points be given out for individual contributions, but the overall project grade may be substantially reduced.
Additionally, we have two other categories that will be given out quite sparingly.
Resilient Contributor: You have showcased exceptional efforts, going above and beyond base expectations to enure that your group turns in a working project. You will receive full points for your contributions AND may recoup some points back (typically 5) from the previous two grading factors, replacing lost points in other areas of the project. This rating will typically be given to a student who put forth significant extra effort to make up for another group member’s failure to meet expectations.
Exemplary Contributor: You went substantially beyond project requirements, turning in code that is impressive on all levels. You will receive the full 45 points on the project, but this qualification also recognizes the incredible effort that you put forth with an “Exemplary Contributor” award that can be added to a resume. We are unlikely to give more than one of these per semester.
You will be in a group of three to four people to work on one of the above modules as a semester-long project. Students will have the opportunity to discuss potential project ideas with each other and propose groups to the instructors. The instructors will also help students form groups as needed, trying to match appropriate skill combinations and interests.
Once groups are formed, members will devise a working agreement with a plan for how they will all contribute to the project and support one another. Here is an example agreement.
In order to provide a real-world experience for your project, we will collaboratively produce a single, over-arching software framework. Specifically, each group will work on a single module within a larger, agent-based system. Each component you build will serve as a piece of a larger puzzle. Sets of modules will interact through an API that we establish as a group, allowing for some very different executables, depending one which modules are chosen for use. By the end of our course, our goal is to have a functioning system where each module, be it a world, agent, or interface, seamlessly integrates with the others. Picture a bustling digital city where agents go about their tasks, influenced by the world they reside in and controlled or observed via diverse interfaces.
Depending on which components are chosen by teams, we will be producing either games, scientific simulations, or both. Individual components will require different sets of skills and ideally provide students with an experience that lines up with their skill set and interests.
Each executable will be composed of at least three modules:
Each of the eight groups will work on one Module. Ideally we will aim have at least two groups working on modules from each category. Each module should have features about it that make it challenging to implement. We will also build a simple version of each module type live in class, as well as talking about how to deal with the specific challenges.
World modules must implement the mechanisms of interactions between agents and the world or agents and each other, as well as any background activity of the world. Some possible types of world modules include:
The above examples illustrate types of challenges groups could tackle, but you should theme them however you want. A D&D-style dungeon? A puzzle game? A military tactics simulator? Space exploration? Any style is okay, although it must be agent-based. We also recommend that you do not make the world overly convoluted given the relatively short duration of this project.
The above worlds all have agents moving through them. These can be in the form of players (see next section) or those agents can be autonomous. Some groups will be building capabilities for autonomous agents. Some possible modules for autonomous agents include:
Interface modules provide mechanisms for the system user to interact with or at least observe the results of the world and agents. Some interfaces may give the user control over an agent, while others would simply collect data and either display it to the screen or at least save it to file. More specific options might include:
Other types of user-interfaces could also be available and can be proposed by students.