LuckPicker

A Wedding Seating Plan With Keep-Aparts

The constraints are the plan. Randomness only fills the gaps they leave.

A wedding table plan inverts the usual ratio between rules and randomness: the keep-apart list does almost all of the work, and the random element only settles the handful of seats no constraint has an opinion about.

A wedding table plan is almost entirely constraints with a small randomised remainder. That is the opposite of the usual balance, and it changes what a tool is for here.

The keep-apart list does the work. The random element only settles the seats that no rule has an opinion about.

Write the constraint list first

Before opening any tool, write down three lists: people who must sit together, people who must not sit near each other, and people whose position is fixed for a practical reason — access, a speech, a child who needs a parent adjacent.

The must-sit-together list is usually the longest and is best handled by treating each group as a single unit rather than as individuals. A couple, a family, four friends who arrived together — place the unit, and the individuals within it are not a randomisation problem.

That collapses the problem considerably. A hundred and twenty guests is often forty units, and forty units across ten tables is a much smaller and much more tractable arrangement than a hundred and twenty individual seats.

  • Must sit together: treat each group as one unit and place the unit.
  • Must not sit near: this is the keep-apart list the tool takes.
  • Fixed position: place by hand before any randomisation.
  • Everyone else: the randomised remainder, which is usually smaller than expected.

What the tool can and cannot express

The seating chart randomizer takes a grid and a keep-apart list, and checks adjacency in all eight directions. That maps onto rows of seats well and onto round tables imperfectly — a round table of ten has different adjacency from a grid row, and the tool does not model it.

The workable approximation for round tables is to run the tool once per table with the table's own guest list, treating the row as the seating order round the table and remembering that the two ends are adjacent in reality and not in the grid.

It cannot pin anyone, which is why the fixed positions have to be handled first. And it cannot express a must-sit-together rule at all, which is why those become units before the tool sees them.

When there is no valid plan

A refusal after three thousand attempts usually means the room is too tight for the rules rather than that the rules conflict. Adding an empty seat at each table, or an extra table, gives the constraints somewhere to go and typically resolves it immediately.

Where the rules genuinely conflict — three people who each must not sit near the other two, at a table of six — no amount of space fixes it, and the answer is to separate them across tables rather than to solve the table.

The failure worth avoiding is quietly dropping a rule to get a plan out. A keep-apart list exists because somebody told you something, and a plan that violates it looks exactly like a plan that satisfies it until the day.

A table of eight with three keep-apart pairs

  • Eight seats, no gaps: the search frequently fails.
  • Ten seats with two empty: the same rules are satisfied almost immediately.
  • Space is the reliable fix; removing a rule is the last resort.

The part no tool helps with

The hardest table is the one nobody wants to be at, and the plan cannot fix it. Every wedding has a table of people who do not know each other and were not placed together for a positive reason, and the honest approach is to seed it deliberately with one or two people who are good with strangers.

That is a manual decision, made before the randomisation, and it is worth more to the evening than any property of the draw.

Similarly, the plan should be checked by someone who knows the guests rather than only by the person who built it. A generated plan will cheerfully seat two people who have a history that was never written on any list.

Frequently asked questions

How do I handle people who must sit together?

Treat each group as one unit and place the unit. The tool has no must-sit-together rule, and it does not need one if the groups are collapsed first.

Does it work for round tables?

Imperfectly. Run it per table with the row as the seating order, and remember the two ends are adjacent in reality and not in the grid.

Can I fix someone in a particular seat?

Not in the tool. Place fixed positions by hand first, then randomise the remainder.

Why did it fail to find a plan?

Usually the room is too tight. Adding an empty seat per table or an extra table typically resolves it immediately.

What if the rules genuinely conflict?

Separate the people across tables rather than trying to solve one table. Three mutually-excluded people cannot share a table of six.

Should I ever drop a keep-apart rule to get a plan?

No. That rule exists because somebody told you something, and a plan that violates it looks identical to one that does not until the day.

How much of the plan is actually random?

Less than people expect. After grouping, fixed positions and keep-apart rules, the randomised remainder is often a minority of the seats.

Who should check the plan?

Someone who knows the guests. A generated plan will happily seat two people whose history was never written on any list.

Tools for this job

Background reading

← All use cases