All Projects → Hackathonners → vania

Hackathonners / vania

Licence: MIT License
A module which fairly distributes a list of arbitrary objects among a set of targets, considering weights.

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to vania

All school 42
| SCHOOL_42_UPDATE 2020 | This repository contains ALL PROJECTS, TASKS AND SUBJECTS OF THE MAIN PROGRAM OF LEARNING AT SCHOOL 42 ( Program | Course | Programing | Coding | School 42 | Ecole 42 | School 21 | Школа 42 | Школа 21 ). Этот репозиторий содержит все проекты и задания основной программы обучения Школы 42 и Школы 21
Stars: ✭ 87 (+16%)
Mutual labels:  task, programming
think-model
Default model for ThinkJS 3.x
Stars: ✭ 16 (-78.67%)
Mutual labels:  model
dotobj
.obj/.mtl loader, written in native GML, for GameMaker Studio 2.3
Stars: ✭ 27 (-64%)
Mutual labels:  model
laravel-boolean-dates
Automatically convert Eloquent model boolean attributes to dates (and back).
Stars: ✭ 31 (-58.67%)
Mutual labels:  model
AppCenter-Github-Action
This action uploads artifacts (.apk or .ipa) to Visual Studio App Center.
Stars: ✭ 46 (-38.67%)
Mutual labels:  distribution
SubmiBot
Plugin do Eclipse para automatização do processo de submissão de tarefas na disciplina de LP2 - Computação@UFCG
Stars: ✭ 16 (-78.67%)
Mutual labels:  programming
technical-articles
Just a place where I can store demo projects for my technical articles.
Stars: ✭ 28 (-62.67%)
Mutual labels:  programming
programmingforpsych
A textbook for programming techniques for experiment creation and data-analysis
Stars: ✭ 18 (-76%)
Mutual labels:  programming
karan36k.github.io
These are all the articles and pages I have in my data science website. I try to transcribe all I learn and post regularly. Please visit and feel free to email me for suggestions.
Stars: ✭ 22 (-70.67%)
Mutual labels:  programming
DebugPx
PowerShell Debugging Toolkit (feat. the breakpoint and ifdebug commands)
Stars: ✭ 41 (-45.33%)
Mutual labels:  module
lets
CLI task runner for developers - a better alternative to make
Stars: ✭ 50 (-33.33%)
Mutual labels:  task
openrestaurant
Everything you need for your restaurant website.
Stars: ✭ 25 (-66.67%)
Mutual labels:  distribution
ismek-cybersecurity1-lessons
Learn Cyber Security-1 in 30 Days!
Stars: ✭ 26 (-65.33%)
Mutual labels:  programming
Ted2Go
Ted2Go IDE is a leading IDE for Monkey2 programming language. Written on Monkey2! Based on original Ted2.
Stars: ✭ 16 (-78.67%)
Mutual labels:  programming
programa101
💻 🎓 Curso de programação para iniciantes
Stars: ✭ 21 (-72%)
Mutual labels:  programming
easyFL
An experimental platform to quickly realize and compare with popular centralized federated learning algorithms. A realization of federated learning algorithm on fairness (FedFV, Federated Learning with Fair Averaging, https://fanxlxmu.github.io/publication/ijcai2021/) was accepted by IJCAI-21 (https://www.ijcai.org/proceedings/2021/223).
Stars: ✭ 104 (+38.67%)
Mutual labels:  fairness
Starter-Module-PrestaShop-1.6
A boilerplate that will get you started with your module for PrestaShop v1.6
Stars: ✭ 24 (-68%)
Mutual labels:  module
core
augejs is a progressive Node.js framework for building applications. https://github.com/augejs/augejs.github.io
Stars: ✭ 18 (-76%)
Mutual labels:  module
java-core
learning tests -- os, network, mysql, programming, design pattern, java tech, kafka etc
Stars: ✭ 14 (-81.33%)
Mutual labels:  programming
Python-in-Mac-App-Store
Barebones Python app that can be submitted to the Mac App Store.
Stars: ✭ 81 (+8%)
Mutual labels:  distribution

Project Vania - A Fair Distributor

Fair Distributor is a module which fairly distributes a list of arbitrary objects through a set of targets.

To be more explicit, this module considers 3 key components:

  • object: some kind of entity that can be assigned to something.
  • target: the entity that will have one (or more) objects assigned to it.
  • weight: represents the cost of assigning a given object to a target.

A collection of each of these components is given as input to the module. Using linear programming, the weights of the targets relative to the objects are taken into consideration and used to build the constraints of an Integer Linear Programming (ILP) model. An ILP solver is then used, in order to distribute the objects through the targets, in the fairest way possible.

For instance, this module can be used to fairly distribute:

  • A set of tasks (objects) among a group of people (targets) according to their preferences to do each task (weights).
  • A set of projects (objects) among development teams (targets) according to their skill-level (weights) on the required skills for each project.

Our Meaning of Fairness

We define Fairness as:

  • The total weight of distributing all objects through the targets should be minimal. This enforces that the least amount of shared effort is made.

Optionally, the following rule can be applied (enabled by default):

  • The difference between the individual weight of each target is minimal. This enforces the least amount of individual effort.

Documentation

You can find all the documentation in the following link: https://hackathonners.github.io/vania

Download and Install

Install the latest stable version of this module:

$ pip install vania

To work with the source code, clone this repository:

$ git clone git://github.com/hackathonners/vania.git

Usage

To start using the Fair Distributor, you need first to import it, by doing this:

from vania.fair_distributor import FairDistributor

Now, just feed it with your problem variables, and ask for the solution. To better explain how you can do it, lets consider a specific example.

Suppose that you are managing a project, which contains 4 tasks: Front-end Development, Back-end Development, Testing, and Documentation. There is a need to assign these 4 tasks through a set of 3 teams: A, B and C. You have the expected number of hours each team needs to finish each task:

Front-end Development Back-end Development Testing Documentation
Team A 1h 2h 3h 2h
Team B 3h 1h 4h 2h
Team C 3h 4h 1h 1h

Here, we consider tasks as objects, teams as targets and the hours expressed in each cell are the weights.

It is necessary to create a data structure for each component. Objects and targets are lists, while weights is a collection, which contains for each target the cost of assigning every object to it, and is represented as a matrix. The structures for this example would be as follow:

targets = ['Team A', 'Team B', 'Team C']
objects = ['Front-end Development', 'Back-end Development', 'Testing', 'Documentation']
weights = [
    [1, 2, 3, 2],		# hours for Team A to complete each task
    [3, 1, 4, 2],		# hours for Team B to complete each task
    [3, 4, 1, 1]		# hours for Team C to complete each task
]

Now, just feed the Fair Distributor with all the components, and ask for the solution:

distributor = FairDistributor(targets, objects, weights)
print(distributor.distribute())

And here is the solution!

# Output
{
    'Team A': ['Front-end Development'],        # Team A does the Front-end Development
    'Team B': ['Back-end Development'],         # Team B does the Back-end Development
    'Team C': ['Testing', 'Documentation']      # Team C does the Testing and Documentation
}

Here is the final code of this example:

from vania.fair_distributor import FairDistributor

targets = ['Team A', 'Team B', 'Team C']
objects = ['Front-end Development', 'Back-end Development', 'Testing', 'Documentation']
weights = [
    [1, 2, 3, 2],		# hours for Team A to complete each task
    [3, 1, 4, 2],		# hours for Team B to complete each task
    [3, 4, 1, 1]		# hours for Team C to complete each task
]

distributor = FairDistributor(targets, objects, weights)
print(distributor.distribute())

Contributions and Bugs

Found a bug and wish to report it? You can do so here: https://github.com/Hackathonners/vania/issues. If you'd rather contribute to this project with the bugfix, awesome! Simply Fork the project on Github and make a Pull Request.

Please tell us if you are unfamiliar with Git or Github and we'll definitely help you make your contribution.

Authors

Hackathonners is a group of people who build things.

You can check us out at http://hackathonners.org.

License

The Fair Distributor is licensed under the MIT License.

Copyright (C) 2017 Hackathonners

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].