team lovelace group formation project. objective our project is designed to take a large group of...
TRANSCRIPT
TEAM LOVELACEGROUP FORMATION PROJECT
OBJECTIVE
Our project is designed to take a large group of people and divided them into teams based on
Time Availability Skills Grades Gender
SOLUTION
Best way to account for all four of those criteria?
SOLUTION
Best way to account for all four of those criteria?
Genetic Algorithm
SOLUTION
Randomly assign every student to a team
Score each team
Switch two members between the worst team and any other team
Done!
Are they all good enough?
Did their scores improve?
Yes
No
Yes
No
MODULAR LAYOUT
Driver
FormulasRNG
AVL Tree
Input file
Output file
DRIVER
Main Module :
- Receives input file and name of output file.
- Parses input into usable data
- Outputs the calculated groups to the output file.
- Signature: team-creator
- team-creator is the function the user will call to initiate the program.
AVL - TREE
Data Structure :
- AVL-Tree ( AVL-Tree) we use an inner and outer tree
- Uses the Formula module to score the teams
- Uses the RNG module to generate random numbers to switch members
-Signature: form-initial-tree
- forms initial tree and begins the process of scoring and switching
FORMULAS
- Contains functions which calculate scores of each team
- Functions:
- Gender- GPA- Schedule - Skill sets
- Signature: calculate-team-score
- Takes the flatten AVL tree of an individual team and calculates it score
Score = gender-score + grade-score + schedule-score + skill-set-score
RNG
- Contains a linear congruential generator
- Is used primarily to pick a non-worst team to switch with
- Signature: get-random-number-mod-max
- Returns a random number less than a given maximum
PROBE ESTIMATE - Driver
I/O: 290 lines
Calc: 439 lines
Total = 729 lines
- Randomizer
I/O: 0 lines
Calc: 298 lines
Total = 298 lines
- AVL Tree
I/O: 0 lines
Calc: 175 lines
Total = 175 lines
- Formulas
I/O: 0 lines
Calc: 357 lines
Total = 357 lines
TOTAL LINES OF CODE = 1559
ACTUAL LINES OF CODE = 2342
INPUT FILESD wg | wa | wr | ws | , S1: , , ... , ; , S2: , , ... , ; …; , Sm: , ... ,
where D: number of teams
wg: weight of grade criterion wg 0
wa: weight of schedule criterion wa 0
wr: weight of gender criterion wr 0
ws: “skill set total weight” ws 0
Si : name of skill set i (e.g. Programming skills)
Sij: skill j of skill set i
m: number of skill sets
wi: weight of skill set i i [1, n]
Example of the specification line:
5 | 30 | 20 | 20 | 30 | 50, Programming Skills: C/C++, Java, Haskell, Python, ACL2; 50, Team Interaction Skills: Communication and Negotiation, Analytic and Creative, Organization
INPUT FILES
Student Input format
ID# | FirstName LastName | Gender | GPA | Skills in skillset1; Skills in skillset2 | Schedule
Ex.
111111117 | Christina DeMont | F | 4.00 | Java, C/C++; Analytic and Creative, Communication and Negotiation | M 7:00pm~9:00 pm; F 6:00pm~9:00 pm
111111111 | Alex Bond | M | 3.25 | C/C++, ACL2; Communication and Negotiation, Organization | U 5:00am~7:00 pm; M 10:00am~11:00 am, 3:30pm~5:00 pm
OUTPUT FILES Team Set Criteria:
Criteria i (wi)
Suggested Team Set:
Team i: Team member i | Common time availability
E.g.
Team Set Criteria:
Grade (0.2)
Skill sets (0.4)
Time availability (0.2)
Gender (0.2)
Suggested Team Set:
Team 1: 1 Calvin Nelms, 3 Matt Rainwater
Team 2: 2 Ashley Nanni, 4 Nha Hoang
IMPLEMENTATION PROBLEMS & SOLUTIONS
Hyphens and dashes
‐ ‒ – — ―
Needed to parse:7:30am-8:30am
4:30pm-7:00pm
etc.
IMPLEMENTATION PROBLEMS & SOLUTIONS
Hyphens and dashes
‐ ‒ – — ―
Tilde
~
Now we parse:7:30am~8:30am
4:30pm~7:00pm
etc.
IMPLEMENTATION PROBLEMS & SOLUTIONSProblem:
Set default sub-weights of considered skill sets for “Skill Sets” criterion when user does not input any sub-weights, or inputs only some sub-weight
Example:Input:", java, c/c++, haskell, acl2; team interaction skills: communication and negotiation, analytic and creative, organization“
Output:(("SKILL SET" 1/2 ("java" "c/c++" "haskell" "acl2"))("team interaction skills“ 1/2 ("communication and negotiation" "analytic and creative" "organization")))
Input:"java, c/c++, haskell, acl2;30, team interaction skills: communication and negotiation, analytic and creative, organization“
Output:((" team interaction skills " 1 (" communication and negotiation " " analytic and creative " "organization")))
IMPLEMENTATION PROBLEMS & SOLUTIONSSolution:
Divided input into 4 cases:• With sub-weight and with name• With sub-weight and without name• Without sub-weight and with name• Without sub-weight and without name
IMPLEMENTATION PROBLEMS & SOLUTIONSProblem:
Convert student’s skills to lists of 0’s and 1’s according to which skill set they belong to
Example:
Considered skill sets:(("java" "c/c++" "haskell" "acl2")("communication and negotiation" "analytic and creative“
"organization"))
Student skills", organization, ddfaa, communication and negotiation;
gaad, acl2, java"Output:((1 0 0 1) (1 0 1))
IMPLEMENTATION PROBLEMS & SOLUTIONSSolution:
tough ACL2
DEFECT PREVENTION
Used Google Code as our issue repository
Followed a simple bug report format:
What you were doing
What happened
What should have happened
DEFECT PREVENTION
Used Google Code as our issue repository
Design change reports were similar:
What the new design says
What the old design said
Why we needed the change
PROJECTED SCHEDULE Jan31
Feb7
Feb14
Feb21
Feb28
Mar6
Mar13
Mar20
Mar27
Apr3
Apr10
Design
Code
Code Review
Testing
Re-Design
Re- Test
Final Design
ACTUAL SCHEDULE
REMAINING IMPLEMENTATION PROBLEMS
Input errors aren’t dealt with very well
If the user puts in information incorrectly, currently it just crashes for the most part
POTENTIAL ENHANCEMENTS
Output “meeting times” for each group
Est LoC – 200, based on LoC required to input schedules
Currently the schedule of each student is stored as a bit array. (Length is 48 * 7 = 336, representing each 30 minute block of time in a week) A 0 means the person is free and a 1 means they are busy.
Essentially this would require a function that maps several bit arrays to a string output representing the best time for that team to meet up.
POTENTIAL ENHANCEMENTSAdd a feature that would disallow two people from being in the same group
Est LoC – 300, based on size of current formulas and file input functions
Could add a new heuristic to judge a team by that severely punishes a team for having two disallowed people on it.
Or could use some manual manipulation to switch disallowed people.
Either way, functions in the driver module would have to be added to deal with new the input.