DCS 440 -- Ideas for Projects

Fall 2000


Contents
Overview
Write Stories
Compose Poems
Play Characters
Make Music
Design Modern Art

Overview

This page describes a number of ideas for possible term projects for AI this semester. Of course, you are not limited to this list. I'd like nothing more than for you to find some neat class of problems to work on that you're very interested in and that I've never thought of. Still, you're welcome to investigate these suggestions; they're interesting, open-ended challenging problems that will reward the effort that you put into them. And even if you wind up choosing something else, the suggestions here may help you get a sense of what a project problem looks like and what you should think about when you choose one.

Here's what you'll find for each possible project below. I begin with a sentence or two describing the problem informally. What it is that a successful project program will do? Then I explain briefly the features of this problem that exercise the material that we will cover in class. What about this problem requires representing knowledge about the world? What about it suggests looking for solutions with the mechanisms for search, planning or explanation that we will study? These aspects of the problem are the important ones to concentrate on in your project work.

Now, it may seem at first that you have to do a lot of preliminary work in a problem domain before you even get to these key aspects of the problem. Where possible, I suggest tricks - shortcuts in representation, in reasoning, or in other computational infrastructure - that will allow you to concentrate on these aspects. All of these projects let you get very quickly into questions of real ``intelligence''. Making sure that you can do this is also an important feature of a project you choose yourself.

Finally, it's a good idea to have a sense of the breadth of a problem domain. What extensions can you look forward to once you get the basics working? How can you carve out a larger project that allows more people to contribute to the final implementation? With these project suggestions, I point to some further developments and related problems that you can continue to work on to get a more exciting and fun implementation.

Write Stories

Design a program that automatically produces a range of paragraph-length English narratives (or in the natural language of your choice). In a sample story, you might introduce the main character and a problematic situation, describe a goal that the main character adopts to resolve the situation. An event could provide an obstacle that prevents the character from fulfilling the goal. Finally, the main character comes up with a new plan and circumvents the obstacle to achieve the goal.

Your stories should detail a number of interesting and interrelated events. You should represent events both for how they follow one another in the world, and how they impact an agent's plans. A good story will describe a sequence of events that follow one another in a plausible way and that create a dramatic structure because of their relationships to the main character and their plans. This means that a good story will exhibit multiple relationships among all the events in it.

Stories are in English, but you need not appeal to any real knowledge of English to create these stories. You can link representations of events directly with sentences or with predicates (just prefix them with the name of a character to make a sentence), and string the sentences together into a story. This trick will allow you to focus on representations of events and relationships among events.

Here are some ideas you could explore once you get the basic stories down:

  • Add more characters. Have them interact with one another, or pursue multiple or conflicting goals.
  • Add some style or sophistication to the form of the narrative. Look for surprises, describe the events in an unusual order for effect, or use indirect sentences to hint at the agent's plans, goals or reactions.
  • Make a fable. Choose goals and behavior that illustrate the identity of the main character, and describe events that suggest some lesson for this kind of person.

Compose Poems

Design a program that automatically composes a range of short poems in English (or the language of your choice). You can assign a typical structure to the poems. For example, you might choose to write four-line verses that illustrate distinctive content with a distinctive meter. Thus, poems could consist of two contrasting descriptions from constrained ranges, like the nature scenes and emotional reactions; they could have four syllables in each line, with the rhyme scheme ABAB.

The important things about such poems is that they combine two (or more) levels of organization. To fit your pattern, the poem will have to be made up of descriptions with the right kind of meaning, but those descriptions will have to be realized with the right form, too. This means there may be an interesting search problem where you look ahead to find a solution that satisfies all your poetic criteria.

Don't get swamped by describing the vocabulary of the poem. For example, you can just stipulate the properties of each word that interest you - like what rhythm a word has or what rhyme class the word belongs to. In fact, there are rules for English that constrain rhythm and rhyme based on the sounds in a word but you don't have to worry about that. Also, you can also take advantage of the fact that poems don't have to make that much sense. To put it another way, a completely random juxtaposition of ideas may be the source of surreal but worthwhile associations in a poem.

Once you have some poems that you're satisfied with, try making them longer, or giving them more varied syntax. You could also try giving your poems more of the elements of a story - or otherwise ensuring interesting and sensible relations among the parts of the poem.

Create an Interactive Fictional Persona

Design a program that can engage in a simple English dialogue with a human partner, and that displays some character. The character might have some overall goal and use a variety of conversational strategies to pursue the goal with the people it talks to - through a handful of exchanges.

The interesting work here will be to classify the kinds of answers that your character might get, to model the relationships between those responses and the character's goals and projects, and write rules in these terms that determine potentially useful responses that the character could give.

The good thing is that simple pattern matching operations are often enough to make a reasonable assumption about the kind of answers a person gives to your character. For example, you might check for the presence of a particular word, pair of words or sequence of words in the response. That means that you can go surprisingly far without doing any really linguistic analysis of the input that your character gets.

Another thing to remember is that the ``personality'' and goals of your character can be suited to the kinds of statements that you can easily generate or recognize. Your character can be bossy - they can ask a lot of yes/no questions and get belligerent when the user doesn't answer these questions in plain language. Or your character can be very passive, like the original fictional persona ``Eliza'', which just used vague questions to elicit extended personal responses from its users.

Then what? Extend the patterns that you work with so that your character becomes more and more likely to have a sensible response to give when a stranger (or a friend) sits down to interact with it. Or create multiple characters - sick them on one another or have them gang up on a human user. Or give characters more interesting or more varied personality - think of the disgruntled student who's perfectly pleasant unless somebody mentions Rutgers to them, at which point they get peevish and annoyed. Or give the characters more complicated goals to pursue - things that require more thought or more cooperation with somebody.

Make Music

Design a program that composes short musical pieces in a simple but interesting style.

Music - like poems and stories - unites multiple levels of structure. The patterns and durations of notes can be organized into phrases; these groupings are a natural level of structure. But relations of pitches to one another also provides a sense of anticipation and closure that contributes to the interpretation of a piece. Your program should aim to combine rhythm and melody together to good effect.

Fortunately, music doesn't mean anything and naturally comes in a compact, digital representation (based on notes and duration). This makes it very convenient to work with representations of music.

Then what? Add multiple voices and look at issues of harmony, counterpoint or instrumentation. Or try developing multiple styles and investigate the similarities and contrasts among them.

Design Modern Art

Artists like Kandinsky, Mondrian and others sought to create works that exhibit a balance - or some other interesting relationship - among abstract formal elements of color and shape. Design a program to make such abstract art.

Your program should use geometrical rules to describe two-dimensional forms and the relationships among them. The designs your program comes up with should be described by these geometrical rules. Your geometrical rules will need to describe the kinds of objects that appear in a design symbolically, and it will also need to describe parameters of these objects like position and orientation in numerical terms.

You don't need to build a painting robot to solve this problem. In fact, a design can be represented entirely as text using a ``programming language'' like the postscript language used to drive laser printers. Many programs exist for translating expressions in such languages into patterns you can see and judge for yourself. You may find it easier to design your program so that it deals with designs as text and then outputs its creation for another program to display.

A number of projects can be pursued along the same lines, such as automatic architectural design - using geometrical rules to describe country villas, medieval fortifications, or even plans for whole neighborhoods and cities. There is also automatic design of decorative patterns - squiggly wallpaper, backgrounds for computer screens, doilies for blank spaces in books, you name it.