Table Talk Tuning

ibobev1 pts0 comments

Table Talk Tuning - zayenz.seMenu

← Back to all blog posts← Newer<br>Older →

Table Talk TuningDRAFT<br>2026-07-16•4 min read•Cite<br>•researchconstraint programmingMiniZincGecodeoptimization

Part of the papers collection. Introductions to papers I have worked on, with some context for the research question and links to the paper and supporting material. See all 9 posts in the collection

_p]:my-0<br>[&_li_>_ul]:my-2<br>[&_li_>_ol]:my-2<br>[&_a]:text-primary [&_a]:hover:underline [&_a]:font-medium<br>[&_blockquote]:border-l-4 [&_blockquote]:border-accent [&_blockquote]:pl-4 [&_blockquote]:italic [&_blockquote]:text-muted-foreground [&_blockquote]:my-4<br>[&_pre]:bg-muted [&_pre]:p-4 [&_pre]:rounded-lg [&_pre]:overflow-x-auto [&_pre]:my-4<br>[&_pre_code]:bg-transparent [&_pre_code]:p-0<br>[&_code]:bg-muted [&_code]:text-foreground [&_code]:px-1.5 [&_code]:py-1 [&_code]:rounded<br>[&_hr]:border-t [&_hr]:border-accent [&_hr]:my-8<br>[&_section[data-footnotes]]:mt-12 [&_section[data-footnotes]]:pt-0<br>[&_section[data-footnotes]]:border-t [&_section[data-footnotes]]:border-accent/60<br>[&_section[data-footnotes]]:text-sm [&_section[data-footnotes]_ol]:mt-1<br>[&_section[data-footnotes]_p]:my-2<br>[&_strong]:font-bold<br>[&_em]:italic<br>[&_table]:w-full [&_table]:my-4 [&_table]:border-collapse<br>[&_th]:border [&_th]:border-accent [&_th]:p-2 [&_th]:text-left [&_th]:font-semibold<br>[&_td]:border [&_td]:border-accent [&_td]:p-2<br>[&_img]:rounded-lg [&_img]:my-4<br>">We needed to arrange the tables for a real wedding. That practical problem became the MiniZinc model in No More Awkward Silences with Table Talk Tuning, a paper by Martin Butler and me to be presented at ModRef 2026.

A seating plan can satisfy every capacity and grouping request and still leave someone with little to talk about. That gap was visible in the actual planning problem, so the model treats conversational fit as part of the assignment rather than something to inspect afterwards.

The input records the available tables, their capacities, groups that should sit together or apart, and each guest’s interest in a set of conversation topics. The model assigns guests to tables; the exact seat order around each table is left for a later step.

The MiniZinc model#

The main artefact is a portable MiniZinc model of the complete problem. Its central decision is deliberately simple: one variable records the table assigned to each guest. A global cardinality constraint connects those assignments to table occupancy, while direct constraints handle groups that must sit together or apart.

The table-assignment variables and structural constraints% Table assignment for each guest

array[Guests] of var Tables: table_of;

% Number of guests at each table

array[Tables] of var 0..max(table_capacities): occupancy;

constraint global_cardinality_closed(

table_of,

[table | table in Tables],

occupancy

);

constraint forall (table in Tables) (

occupancy[table] table_capacities[table]

);

constraint forall (group in same_table) (

forall (g1, g2 in group where g1 g2) (

table_of[g1] = table_of[g2]

);

constraint forall (group in different_tables) (

forall (g1, g2 in group where g1 g2) (

table_of[g1] != table_of[g2]

);

Once the hard constraints are satisfied, the model still has to choose between many feasible plans. It first prefers plans with fewer empty seats, less slack at the emptiest table, and a lower total imbalance under the model’s simple gender-balance measure. It then considers the weakest and total conversational scores. The last two terms need a way to decide whether a topic has enough support at a table.

Finding a supported topic for each guest#

For each guest, the model asks whether there is a topic they care about that is also supported by a strict majority of their table. It protects the guest with the weakest conversational connection before improving the total interest across all guests.

The complete interest table from the paper provides the input for the running example. The first five guests are currently assigned to table 19. Farah, Niko, and Sana sit elsewhere, which helps show that these are individual interest scores rather than fixed guest clusters.

Guest interests in the running example<br>The highlighted row gives the strict-majority topic floor for the five guests at table 19.

GuestTableJazzHikingFoodGardenTravelGamesMinaTable 19935412TheoTable 19865421LeilaTable 19754312OskarTable 19149221PetraTable 19221811Topic floorTable 19745411FarahTable X623289NikoTable Y234276SanaTable Z332297

The figure pulls out the three topics that work best for someone at table 19. At a table of five, the topic floor is the third-highest guest score: the highest level supported by a strict majority. Mina, Theo, and Leila get 7 from jazz. Oskar instead gets 5 from food, while Petra gets 4 from gardening. The model does not require one topic to work for everybody; it looks for one supported topic from each guest’s perspective.

In the MiniZinc model, base_interest contains the majority-supported score for...

table border model guest _section data

Related Articles