Authors: Svetlana Sodol, Alena Synkova, Robert Desjardins
What is the problem?
Casting actors for a show is a time-consuming task which is error-prone due to the human factor when the cast includes a large number of actors, characters, special circumstances for the assignments and multiple show dates. Since this task is based on logical rules and satisfying multiple constraints, logic programming and Prolog might prove beneficial to serve as a solution to this task. We will build a sample program that a director can use for their theatre troupe when casting and scheduling shows. The original knowledge base will include basic information about the actors and their availability, and an original set of shows currently in the works - with general details on characters, performance dates and special rules to be followed when assignining actors to certain characters on certain dates. The product of the program will be a list for each of the performance dates with the assigned actor for each character role.
What is the something extra?
The basic part of the program will be to assign the actor's characters to the certain dates, such that every role is covered on each performance. However, since in the real world, after a show closes, work for another one starts, the extra part of this program will assist the director on casting for the next show, based on previous castings of the actors. Already having the information on actors and previous castings (with character details) the program will have to learn some things about the actors that will help it assign which characters the actor should play in the next show. We also decided to base the choice on variety of parameters, such as gender, romantic attraction, archetypes the actors are good at, languages they speak, which allows for a more diverse and inclusive casting. The implementation also makes it easy to create other criteria to add into the list to make the casting more precise.
What did we learn from doing this?
We learnt that prolog can be used to build more complicated knowledge and rule bases, and it is pretty flexible when it comes to working with something that requires step-by-step implementation. However, it can also be bothersome when you have a lot of variables to consider as constant parsing create very long and confusing relations. We had to rework some of them to simplify the final result. We also looked at some strategies for debugging in addition to tracing the program: trying out shorter inputs, testing the relations which seemed to be causing the problem individually and going through different cases to help us identify a weird and not intended behaviour.