Project 4: Work the Room

You're planning to attend a big party. Some of your friends will be there, but many people will be strangers. Among the strangers is your unknown soulmate. Your goal is to have beneficial conversations with as many people as you can for three simulated hours. Friends are interesting to talk to, strangers less so, but your soulmate is particularly interesting. Also, you need to move around in order to find people and chat with them. The party takes place in a large square room measuring 20 meters on each side.

Each turn of the simulator corresponds to a 6-second chunk of real-world time. During any turn your player may attempt to do one of the following:

All players submit their orders together, and the outcome is resolved by the simulator using the following rules in sequence:

  1. If two players were previously chatting, and both wish to continue the conversation, then the conversation continues.
  2. If two players, who were not previously chatting to anybody, simultaneously try to initiate a conversation with each other, then a conversation between them is begun.
  3. For each remaining player who tries to initiate a conversation, figure out how close each is to their conversation target, and do the following in increasing distance order (with ties broken randomly):
    1. If the target is not already engaged in conversation on the current turn, then begin a new conversation between the two players. The target cannot refuse (you have to be polite!) but can terminate the conversation on the next turn. The target's action for the current turn (whatever the action was) is cancelled and the target stays put.
    2. If the target is already engaged in conversation on the current turn, then the player stays put and does not begin a conversation.
  4. Players who try to continue a conversation with a partner who chooses to move away just stay put, and the conversation is ended.
  5. Any remaining players must be attempting to move. All of those moves succeed. This includes players who terminate a conversation by moving: no other player would have been allowed to start a new conversation with them.
Illegal moves (e.g., moving more than 6 meters in a turn, trying to start a conversation with somebody too close or too far away, etc.) will be treated by the simulator as a ``stay put'' directive.

The purpose of a conversation is to accumulate gossip/wisdom/life-lessons, that come conveniently packaged in 6-second units. The wisdom that players can offer each other is captured in a two-dimensional array W. There are N players in the game, where N is a parameter, so W is an N by N array where W[i,j] represents the total wisdom that player i has to offer player j. (W[i,i] is not meaningful.) It is not always the case that W[i,j]=W[j,i].

On a turn when players i and j are chatting, each has the opportunity to collect a unit of wisdom from their partner. However, they will only obtain this wisdom if there is no other ``interfering'' player closer to them than their conversation partner (too hard to hear otherwise!). It therefore pays to try to start your conversations away from other players. Note that it is possible for one partner in the conversation to gain wisdom, while the other does not due to interference. If W[i,j] is nonzero and nobody is closer to j than i then the score of player j is incremented by one and W[i,j] is decremented by one. A symmetric outcome happens for player i. Once W[i,j] reaches zero, j has no further incentive to chat with i.

Players have special relationships with other players. Each player has f friends, s strangers, and one soulmate among the other players, where f+1+s = N. Players know who their friends are, but do not know who their soulmate is. Friendship is symmetric. If i is a friend of j then j is a friend of i and W[i,j]=W[j,i]=50. In other words, friends can chat productively for up to 5 minutes.

Soulmates are also symmetric, but with W[i,j]=W[j,i]=200. If i and j are neither friends nor soulmates, then W[i,j] is chosen at random from { 0, 10, 20 }. To balance the game, the simulator will make sure that each player has the same number of 0, 10 and 20 values among all strangers. For nonfriends, when player i chats with player j, player j learns W[i,j] and player i learns W[j,i]. Prior to that initial conversation, W[i,j] is unknown. Player i is unaware of the values of W[i,j] for strangers j.

Finally, your player can see only a radius of 6m around its current position. The simulator will tell you the positions of all players within that radius. (Your player is free to remember previous locations of players that have gone outside the 6m radius if that information would be helpful later.) If two players who are both within 6m are having a conversation, the simulator will make your player aware of this conversation. (How could that information be helpful?) The values of N, f, and s are known to each player at the start of the game.

We'll run several tournaments at the end of class using various parameter settings for N, f, and s. Large values of N are possible, in which case we'll use multiple instances of players from each group.

Ken Ross 2015-09-21