CSE 491

Logo

CSE 491 - Fall 2023 @ MSU

Home

Tentative Schedule

Blog Entries

Projects

Quizzes

Weekly Updates

Additional Resources

Project Overview

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:

1. Functionality (15 points)

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.

2. Code Quality (15 points)

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.

3. Individual Contributions (15 points)

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.

Additionally, we have two other categories that will be given out quite sparingly.

Project Groups

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.

Project Topics

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:

  1. A World, which implements the environment where the agents will be interactions.
  2. One or more Autonomous Agent classes, which define the types of agents in the system and their capabilities, and
  3. An Interface, which can either be a mechanism for a human to interact with the system or data collection tools to merely output the results of a simulation.

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

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.

Autonomous Agent Modules

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

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.