Binary Integer Programming

388 Views Asked by At

I need to form teams. There are 8 projects and 60 students. Each project has different requirements. For example, out of 5 total requirements, project 1 has 2 requirements: must have a programmer and must have an analyst

Project 2 has 1 requirement: must have a programmer

Project 3 has 5 requirements: must have programmer, analyst, DB admin, manager, accountant

All the way to project 8.

Each student has a personality and skills. Each student has 5 possible skills: Students 1 has 2 skills: programmer, accountant Student 2 has 4 skills: programmer, accountant, analyst, DB admin

All the way to student 60

Each student also has a personality from 5 possible traits: Student 1 has: 1/10 score on organization, 9/10 on creative thinking, 6/10 on creativity, 4/10 on teamwork, 5/10 on helpfulness

Student 2 has: 3/10 score on organization, 2/10 on creative thinking, 7/10 on creativity, 10/10 on teamwork, 9/10 on helpfulness

All the way to student 60

Putting a student with high creativity with a student high in teamwork is desired. Student with high level of helpfulness with a student low in creativity is desired.

How do I choose my teams?

1

There are 1 best solutions below

10
On BEST ANSWER

You will need 480 variables of the form $P01S01$ to $P08S60$.

These variables must be integer variables equal to 0 or 1.

$P03S40=1$ means that student 40 is allocated to project 40.

$P03S40=0$ means that student 40 is not allocated to project 40.

You will need up to 5 constraints for each project.

So if project 14 needs at least one programmer you need to set $P14S01+P14S08+P14S45+... \geq 1$ where students 1, 8, 45 etc are programmers.

That's the easy bit. The harder bit is in defining your objective function.

To encourage high creativity and high teamwork you might want to multiply together the creativity and teamwork scores for all the students in each project and add these to the objective function.

If the creativity score (value from 1 to 10 - zero causes problems) for students 01 to 60 is given by the variable $C01$ to $C60$ and the teamwork score is given by the variable $T01$ to $T60$ then the product can be found by evaluating: $C01^{P01S01} \times C02^{P01S02} \times ... C60^{P01S60} \times T01^{P01S01} \times T02^{P01S02} \times ... T60^{P01S60}$

To encourage the combination of low creativity and high helpfulness you might want to multiply together the "uncreativity" = 11-creativity and the helpfulness scores for all the students in each project and add these to the objective function.

If the creativity score (value from 1 to 10 - zero causes problems) for students 01 to 60 is given by the variable $C01$ to $C60$ and the helpfulness score is given by the variable $H01$ to $H60$ then the product can be found by evaluating: $(11-C01)^{P01S01} \times (11-C02)^{P01S02} \times ... (11-C60)^{P01S60} \times H01^{P01S01} \times H02^{P01S02} \times ... H60^{P01S60}$