Instances#
Please refer to the module instance
for more information.
A participatory budgeting instance encapsulates all the elements defining the elections. It includes the projects up for voting, along with the budget limit.
The central class is Instance
.
This class inherits from the Python set class, behaving as a set of projects,
augmented with additional information. Projects are instances of the class
Project
, which stores a project’s name, cost,
and any potential additional information. Here’s an example:
from pabutools.election import Instance, Project
instance = Instance() # It accepts several optional parameters
p1 = Project("p1", 1) # The constructor requires the name and cost of the project
instance.add(p1) ## Set methods are used to add/remove projects from an instance
p2 = Project("p2", 1)
instance.add(p2)
p3 = Project("p3", 3)
instance.add(p3)
Notably, any Python comparison between two projects (equality, etc.) is based on the name of the projects. Since an instance is a set, adding a project Project(“p”, 1) and another project Project(“p”, 3) will result in an instance with a single project.
An instance also stores additional information such as the budget limit of the election and additional metadata.
instance.budget_limit = 3 # The budget limit
instance.meta # dict storing metadata on the instance
instance.project_meta # dict of (project, dict) storing metadata on the projects
An instance can invoke several methods to iterate through all the budget allocations, test the feasibility of a set of projects, and so on.
for b in instance.budget_allocations():
print(str(b) + " is a feasible budget allocation")
instance.is_feasible([p1, p2, p3]) # Returns False
instance.is_exhaustive([p1, p2]) # Returns True