A Optimizing Grouping of People for Teamwork

AI Thread Summary
The discussion revolves around optimizing group formations for teamwork based on a compatibility matrix of 56 individuals. A proposed solution involves using genetic algorithms to create groups of 8-10 people, maximizing total compatibility within each group. Challenges include difficulties in the existing code to find feasible solutions and a need for guidance on implementing crossover and mutation in the genetic algorithm. Participants suggest refining the existing Stack Overflow query instead of starting a new discussion, as it may yield better results. The conversation highlights the importance of effective algorithm design for group optimization tasks.
Frank Einstein
Messages
166
Reaction score
1
TL;DR Summary
I wan to group some people based on a compatibility score. Each group has a maximum size. I must maximize the compatibility within each group
I have a matrix of dimension 56*56, each row and column represent the compatibility of one person with the rest of the people.

A sample matrix could be

[CODE title="Compatibility sample"]
Alejandro Ana Beatriz Jose Juan Luz Maria Ruben
Alejandro 0.0 0.0 1000.0 0.0 1037.0 1014.0 100.0 0.0
Ana 0.0 0.0 15.0 0.0 100.0 0.0 16.0 1100.0
Beatriz 1000.0 15.0 0.0 100.0 1000.0 1100.0 15.0 0.0
Jose 0.0 0.0 100.0 0.0 0.0 100.0 1000.0 14.0
Juan 1037.0 100.0 1000.0 0.0 0.0 1014.0 0.0 100.0
Luz 1014.0 0.0 1100.0 100.0 1014.0 0.0 0.0 0.0
Maria 100.0 16.0 15.0 1000.0 0.0 0.0 0.0 0.0
Ruben 0.0 1100.0 0.0 14.0 100.0 0.0 0.0 0.0[/CODE]

Represented in python as

[CODE lang="python" title="Data as dataframe"]data = {
'Alejandro': [0.0, 0.0, 1000.0, 0.0, 1037.0, 1014.0, 100.0, 0.0],
'Ana': [0.0, 0.0, 15.0, 0.0, 100.0, 0.0, 16.0, 1100.0],
'Beatriz': [1000.0, 15.0, 0.0, 100.0, 1000.0, 1100.0, 15.0, 0.0],
'Jose': [0.0, 0.0, 100.0, 0.0, 0.0, 100.0, 1000.0, 14.0],
'Juan': [1037.0, 100.0, 1000.0, 0.0, 0.0, 1014.0, 0.0, 100.0],
'Luz': [1014.0, 0.0, 1100.0, 100.0, 1014.0, 0.0, 0.0, 0.0],
'Maria': [100.0, 16.0, 15.0, 1000.0, 0.0, 0.0, 0.0, 0.0],
'Ruben': [0.0, 1100.0, 0.0, 14.0, 100.0, 0.0, 0.0, 0.0]
}
df = pd.DataFrame(
data,
index=['Alejandro', 'Ana', 'Beatriz', 'Jose', 'Juan', 'Luz', 'Maria', 'Ruben']
)[/CODE]

I want to group the people in groups of two or three people and I want to maximize the total compatibility within each group since I want them to do some teamwork.

One solution could be [Alejandro-Juan], [Ana-Ruben], [Beatriz-Luz] and [Maria-Jose]. The punctuation would be the sum of the element of the matrix corresponding to each pair. If I had chosen [Alejandro-Juan-Ana], [Ruben-Beatriz-Luz], [Maria-Jose], I would sum the scores of Alejandro-Juan, Alejandro-Ana, Juan-Ana and so on.

I have already asked this question in Stack Overflow, but the code doesn't find clusters for the real data. In reality, I must group people in groups of 8-10 people.

I have tough on using a genetic algorithm, where chromosomes are the groups of people, as an example,

AlejandroJuanAnaRubenBeatrizLuzMariaJose
11122233
12312312

However, I am clueless about how to do the crossing and the mutation.

Can someone please help me obtain a solution to this problem?
Any answer is appreciated.

Best regards and thanks for reading.
 
Physics news on Phys.org
The edited stack overflow solution is supposed to nature groups of 2-3, all you need to do is edit those numbers to be 8 and 10? If the code as written doesn't work I feel like you should keep up the discussion there rather than have more Internet strangers do the same work again.
 
Office_Shredder said:
The edited stack overflow solution is supposed to nature groups of 2-3, all you need to do is edit those numbers to be 8 and 10? If the code as written doesn't work I feel like you should keep up the discussion there rather than have more Internet strangers do the same work again.
The code doesn't seem to work since it never returns a feasible solution, it doesn't matter hoy much extra iterations I add. That is why I came here to ask if someone could propose an alternative method.

Shoul I delete the post?
 
Back
Top