careerfairsystems / gasque-algorithm

A simple algorithm for the placement of the ARKAD gasque

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Gasque-Algorithm

A simple algorithm for the placement of the ARKAD gasque

Note från ARKAD 2019

Var en del som inte var löst som nu borde fungera. Programmet skriver ut två filer för olika format / ändåmål. Den ena var till för att vara en lätt lista, gjord i csv så den kan läsas av Excel. Den andre är på JSON format med några attribut som gjorde det lättare att mejla ut folks placering i Jexpo.

I/O files

The program takes to inputs. One csv with the students and one with the company representatives.

input/students.csv input/company_reps.csv

The output will be produced into the "output" folder, which as of yet still is not automatically created.

Input structure

Input expects a csv file with the columns, Name, Gender, Guild, Drinking package and Food pref for students and Name, Gender, Desired Programe, Company, Allergies and Drinking package for companies

The code for mapping the input csv to variables that are used in the program can currently be found in the function parse_input on row 195-260.

attending_students = csv.DictReader(attending_students_csv)
for row in attending_students:
  student_params={
    'name': row['Name'],
    'gender': row['Gender'],
    'affiliation': row['Guild'],
    'mail': row['Mail'],
    'type': 'student',
    'drinking_package': row['Alcohol']
  }

comany_reps = csv.DictReader(company_reps_csv)
for row in comany_reps:
  company_rep_params = {
    'name': name,
    'gender': row['Gender'],
    'affiliation': guilds,
    'type': 'company_rep',
    'mail': row['Mail'],
    'company': row['Company'],
    'drinking_package': drinking_package
  }

The name of the rows can be changed, but make sure the parameter mapping above is correct, or the algorithm will not work.

Output structure

There are two outputs from the program. From the methods print_result_to_file (row 269) and print_result_to_email (row 316)

print_result_to_file

The first one is a csv formatted list with all seats.

Name,Table Name,Seat number,Alcohol,Student/Company
Alfa Alfasson,Summer 1,7,yes,Student
Beta Betasson,Summer 4,1,yes,Company

print_result_to_email

The second output is a list in JSON format made specifically to help with automatic mailing in Jexpo.

{"toAddress":"alfa.alfasson@test.com", "namn":"Alfa Alfasson", "bord":"Summer 1", "plats":"7"}
{"toAddress":"beta.betasson@test.com", "namn":"Beta Betasson", "bord":"Summer 4", "plats":"1"}

Specify some table informtion in the follow structure found in the main method. Right before calling the output methods.

tables = [
  { name: "Summer", seats: 30, tables: 6, priority: 2 },
  { name: "Autumn", seats: 30, tables: 5, priority: 1 },
  { name: "Spring", seats: 30, tables: 5, priority: 2 },
  { name: "Winter", seats: 30, tables: 3, priority: 1 }
];

Algoritm

Algoritmen körs i två steg.

Slumpmässig placering

Först organiserar den upp all personer i två listor, en för killar och en för tjejer. Detta så vi sedan kan placera ut alla personer slumpmässigt men i en struktur av varannan kille varannan tjej. Dvs enligt bordsdam / bordsherre principen.

Många iterationer av byte

Sedan körs en loop där varje iteration så väljs två slumpmässiga personer ut. Och sedan om det anses göra fördelningen bättre så byts deras plats.

Det används flera metoder för att avgöra om ett byte är gynsamt eller ej.

Bland annat tittas på fördelning mellan killar och tjejer, vilket program studenter pluggar / företag är intresserade av att träffa och en balans funktion mellan studenter och företagsrepresentanter.

Alla dessa metoder börjar med evaluate_ prefixen.

Contribution

Programmet skriven av Martin Johansson 2018

Fortsatt utveckling av Viktor Claesson 2019

About

A simple algorithm for the placement of the ARKAD gasque


Languages

Language:Python 100.0%