| Title: | Analysis of Cost Allocation for Airport Problems |
|---|---|
| Description: | Airport problems, introduced by Littlechild and Owen (1973) <https://www.jstor.org/stable/2629727>, are cost allocation problems where agents share the cost of a facility (or service) based on their ordered needs. Valid allocations must satisfy no-subsidy constraints, meaning that no group of agents contributes more than the highest cost of its members (i.e., no agent is allowed to subsidize another). A rule is a mechanism that selects an allocation vector for a given problem. This package computes several rules proposed in the literature, including both standard rules and their variants, such as weighted versions, rules for clones, and rules based on the agents’ hierarchy order. These rules can be applied to various problems of interest, including the allocation of liabilities and the maintenance of irrigation systems, among others. Moreover, the package provides functions for graphical representation, enabling users to visually compare the outcomes produced by each rule, or to display the no-subsidy set. In addition, it includes four datasets illustrating different applications and examples of airport problems. For a more detailed explanation of all concepts, see Thomson (2024) <doi:10.1016/j.mathsocsci.2024.03.007>. |
| Authors: | Alejandro Bernárdez Ferradás [aut, cre] (ORCID: <https://orcid.org/0009-0006-0960-3555>, SiDOR. Departamento de Estatística e Investigación Operativa. Universidade de Vigo. CITMAga. Spain), Estela Sánchez Rodríguez [aut] (ORCID: <https://orcid.org/0000-0002-0933-6411>, SiDOR. Departamento de Estatística e Investigación Operativa. Universidade de Vigo. CITMAga. Spain), Miguel Ángel Mirás Calvo [aut] (ORCID: <https://orcid.org/0000-0001-7247-1926>, RGEAF. Departamento de Matemáticas. Universidade de Vigo. Spain), Carmen Quinteiro Sandomingo [aut] (ORCID: <https://orcid.org/0000-0002-2711-1945>, Departamento de Matemáticas. Universidade de Vigo. Spain), MCIN/AEI/10.13039/501100011033 [fnd] (Project PID2021-124030NB-C33. ERDF A way of making Europe/EU) |
| Maintainer: | Alejandro Bernárdez Ferradás <[email protected]> |
| License: | GPL-3 |
| Version: | 0.1.0 |
| Built: | 2026-05-18 07:34:33 UTC |
| Source: | https://github.com/alexbernardez/airportproblems |
airportgame computes the coalitional game for cost-sharing in an airport problem.
airportgame(c, lex = TRUE)airportgame(c, lex = TRUE)
c |
A numeric cost vector. |
lex |
A logical value indicating the output order of the game. By default, |
Let denote the set of agents, and let be the cost vector such that
. The value should be interpreted as the associated cost for each agent in the context of
the problem, i.e., every component represents the cost of the facility required by an agent.
Segmental costs are defined as the difference between a given cost and the first immediately lower cost: for .
Therefore, represents the domain of all problems.
Given an airport problem , the corresponding coalitional game is defined, for each , as:
It is easy to check that this class of games associated with airport problems is always concave, since for any pair of coalitions
, it is verified that:
An efficient way to represent a nonempty coalition is by identifying it with the binary sequence
, where if and otherwise. Consequently, each coalition
is represented by the number associated with its binary representation: .
Then coalitions can be ordered by their associated numbers.
Alternatively, coalitions can be ordered lexicographically, meaning they are first sorted by increasing size, and then by lexicographic order among coalitions of the same size.
A numeric vector representing the associated coalitional game.
Littlechild, S. C. and Owen, G. (1973). A simple expression for the Shapley value in a special case. Management Science, 23, 370-372.
Thomson, W. (2024). Cost allocation and airport problems. Mathematical Social Sciences, 31(C), 17–31.
# 4 agents (c <- c(1, 3, 7, 10)) # Vector of costs airportgame(c, lex = TRUE) # Game in lexicographic order airportgame(c, lex = FALSE) # Game in binary order# 4 agents (c <- c(1, 3, 7, 10)) # Vector of costs airportgame(c, lex = TRUE) # Game in lexicographic order airportgame(c, lex = FALSE) # Game in binary order
airportvector computes the cost vector corresponding to an airport problem.
airportvector(v, lex = TRUE)airportvector(v, lex = TRUE)
v |
A numeric vector that represents the characteristic function of the airport game. |
lex |
A logical value indicating the input order of the game. By default, if |
A cooperative game is considered an airport game provided that its characteristic function satisfies:
where represents the individual cost associated with each agent .
Evidently, this property implies that the cost assigned to a coalition is determined by the most expensive cost for its members. It is for this reason that this class of games is always concave.
The airport game can be given in lexicographic order or binary order. For instance, if
, the characteristic function of the associated airport game in lexicographic order is:
On the other hand, in binary order, it would be:
Anyway, in both cases, we have that and .
Given an airport game , it is possible to extract the corresponding cost vector by setting:
A numeric vector representing the cost for each agent of an airport game.
Littlechild, S. C. and Owen, G. (1973). A simple expression for the Shapley value in a special case. Management Science, 23, 370-372.
Thomson, W. (2024). Cost allocation and airport problems. Mathematical Social Sciences, 31(C), 17–31.
# 4 agents in lexicographic order v <- c(1, 3, 7, 10, 3, 7, 10, 7, 10, 10, 7, 10, 10, 10, 10) airportvector(v, lex = TRUE) # 4 agents in binary order u <- c(1, 3, 3, 7, 7, 7, 7, 10, 10, 10, 10, 10, 10, 10, 10) airportvector(u, lex = FALSE)# 4 agents in lexicographic order v <- c(1, 3, 7, 10, 3, 7, 10, 7, 10, 10, 7, 10, 10, 10, 10) airportvector(v, lex = TRUE) # 4 agents in binary order u <- c(1, 3, 3, 7, 7, 7, 7, 10, 10, 10, 10, 10, 10, 10, 10) airportvector(u, lex = FALSE)
basicrule calculates the contribution vector resulting from the payment allocation among the different agents using one of the various predefined rules.
basicrule(c, rule, a = NULL, order = NULL)basicrule(c, rule, a = NULL, order = NULL)
c |
A numeric cost vector. |
rule |
A character string specifying the rule to apply.The rules that can be selected are:
|
a |
A numeric value in the range [0,1], controlling the parameterization of the rule. It can only be defined when |
order |
A numeric vector indicating the priority order of agents when making contributions. It can only be defined when |
A rule is a mapping which associates with each problem a cost allocation vector
such that . In other words, a rule is a mechanism that selects for each airport problem an allocation vector.
The various proposed rules, despite their differences, share a key characteristic: for any given problem, each rule selects an allocation vector that belongs to its no-subsidy set. Although these rules have been individually characterized in different functions, the one in question encompasses all of them.
A numeric contribution vector, where each element represents the payment of the different agents.
When rule = "CC", the execution time of the function may significantly increase if the number of agents exceeds 150.
Bernárdez Ferradás, A., Mirás Calvo, M. Á., Quinteiro Sandomingo, C., and Sánchez-Rodríguez, E. (2025). Airport problems with cloned agents. [Preprint manuscript].
Potters, J. and Sudhölter, P. (1999). Airport problems and consistent allocation rules. Mathematical Social Sciences, 38, 83–102.
Thomson, W. (2024). Cost allocation and airport problems. Mathematical Social Sciences, 31(C), 17–31.
NSset, weightedrule, clonesrule, hierarchicalrule, multibasicrules
c <- c(1, 3, 7, 10) # Cost vector # SEC rule basicrule(c, rule = "SEC") # PRIOR rule order <- c(1, 3, 2, 4) basicrule(c, "PRIOR", order = order)c <- c(1, 3, 7, 10) # Cost vector # SEC rule basicrule(c, rule = "SEC") # PRIOR rule order <- c(1, 3, 2, 4) basicrule(c, "PRIOR", order = order)
The data includes several variables describing 13,572 aircraft operations — 6,876 take-offs and 6,876 landings — involving 11 different aircraft types at Birmingham Airport during the period 1968–1969.
BirminghamBirmingham
A data frame with 11 rows and 9 columns (variables):
Aircraft type
Aircraft index (subscript)
Number of movements
Average fee per movement (in pounds)
Estimated diversion cost per movement (in pounds)
Average benefit per movement (in pounds)
Runway user index
Maintenance cost per movement (in pounds)
Assumed capital cost (in pounds)
Littlechild, S. C. and Thompson, G. F. (1977). Aircraft landing fees: a game theory approach. The Bell Journal of Economics, 8, 186-204.
# Based on capital cost (g) G <- multiclonesrules(Birmingham$g, Birmingham$eta, c("SEC", "CEC", "SM"), group_contribution = FALSE, agents_names = Birmingham$i, labels = FALSE) (cost_allocation <- round(G, 2)) # Based on capital cost (g) + add maintenance cost per movement (c) sweep(cost_allocation, MARGIN = 2, Birmingham$c, FUN = "+")# Based on capital cost (g) G <- multiclonesrules(Birmingham$g, Birmingham$eta, c("SEC", "CEC", "SM"), group_contribution = FALSE, agents_names = Birmingham$i, labels = FALSE) (cost_allocation <- round(G, 2)) # Based on capital cost (g) + add maintenance cost per movement (c) sweep(cost_allocation, MARGIN = 2, Birmingham$c, FUN = "+")
CCrule calculates the contribution vector selected by the CC rule.
CCrule(c)CCrule(c)
c |
A numeric cost vector. |
The core-center rule, CC, assigns to each the contribution vector given by the mean value of
, that is,
Therefore, this rule is the center of gravity of the set of allocations satisfying the no-subsidy constraints. It
coincides with the core-center of the cooperative game associated with .
A numeric contribution vector, where each element represents the payment of the different agents.
The execution time of the function may significantly increase if the number of agents exceeds 150.
González-Díaz, J. and Sánchez-Rodríguez, E. (2007). A natural selection from the core of a TU game: the core-center. International Journal of Game Theory, 36, 27-26.
González-Díaz, J., Mirás Calvo, M. Á., Quinteiro Sandomingo, C., and Sánchez-Rodríguez (2015). Monotonicity of the core-center of the airport game. TOP, 23, 773-798.
González-Díaz, J., Mirás Calvo, M. Á., Quinteiro Sandomingo, C., and Sánchez-Rodríguez (2016). Airport games: the core and its center. Mathematical Social Sciences, 82, 105-115.
NSset, basicrule, clonesrule hierarchicalrule
c <- c(1, 3, 7, 10) # Cost vector CCrule(c)c <- c(1, 3, 7, 10) # Cost vector CCrule(c)
CEBrule calculates the contribution vector selected by the CEB rule.
CEBrule(c)CEBrule(c)
c |
A numeric cost vector. |
For each and each , the constrained equal benefits rule is defined by
where is chosen so that .
This rule focuses on the benefits each agent receives from not having to fully cover their own needs, aiming to distribute them as equitably as possible, without any agent subsidizing another.
The contribution selected by the CEB rule for a problem coincides with the payoff vector assigned
by the modified nucleolus.
A numeric contribution vector, where each element represents the payment of the different agents.
Hu, C.-C., Tsay, M.-H., and Yeh, C.-H. (2012). Axiomatic and strategic justifications for the constrained equal benefits rule in the airport problem. Games and Economic Behavior, 75, 185-197.
Potters, J. and Sudhölter, P. (1999). Airport problems and consistent allocation rules. Mathematical Social Sciences, 38, 83–102.
Sudhölter, P. (1997). The modified nucleolus: Properties and axiomatizations. International Journal of Game Theory, 26, 146-182.
Thomson, W. (2024). Cost allocation and airport problems. Mathematical Social Sciences, 31(C), 17–31.
basicrule, weightedrule, clonesrule, hierarchicalrule
c <- c(1, 3, 7, 10) # Cost vector CEBrule(c)c <- c(1, 3, 7, 10) # Cost vector CEBrule(c)
CECrule calculates the contribution vector selected by the CEC rule.
CECrule(c)CECrule(c)
c |
A numeric cost vector. |
Let . For each and each , the constrained equal contributions rule is defined by
This rule offers a different approach to achieving equality. Contributions are distributed as evenly as possible while ensuring compliance with the no-subsidy constraints.
The contribution selected by the CEC rule for a problem coincides with the payoff vector assigned
by the Dutta-Ray solution (denoted by ) to the associated airport game , that is, .
A numeric contribution vector, where each element represents the payment of the different agents.
Aadland, D. and Kolpin, V. (1998). Shared irrigation costs: an empirical and axiomatic analysis. Mathematical Social Sciences, 35, 203-218.
Thomson, W. (2024). Cost allocation and airport problems. Mathematical Social Sciences, 31(C), 17–31.
SIGMArule, basicrule, weightedrule, clonesrule, hierarchicalrule
c <- c(1, 3, 7, 10) # Cost vector CECrule(c)c <- c(1, 3, 7, 10) # Cost vector CECrule(c)
clonesgroups determines a new cost vector that excludes cloned agents, and calculates the size
of each clone group that shares the same cost.
clonesgroups(c)clonesgroups(c)
c |
A numeric cost vector. |
In an airport problem, agents are clones if both have the same cost parameter, that is, if .
If a problem has cloned agents, then the agent set can be divided into several non-overlapping groups such that any
pair of agents that belong to the same group are clones, but any two agents from two different groups have different cost parameters.
For each , let and let be the set of pairs such that:
Given and we define the cost problem as:
Given a problem there are unique and such that .
We refer to the problem , formed by the different cost parameters of problem , as the reduced problem without clones
associated with . Clearly, is obtained from by adding, for each , , clones of agent .
Let and . For each , let and, to simplify the notation,
write . Therefore, and if .
Obviously, the family is a partition of and for all . Moreover, all the agents that belong to have
the same cost parameter , i.e., for all and .
So, each agent in the reduced problem can be seen as a representative agent of the corresponding group of clones in the original problem .
A list containing the following items:
cw |
A numeric cost vector, with the same length as eta. |
|||
eta
|
A numeric vector representing the size of each group of cloned agents. |
Bernárdez Ferradás, A., Mirás Calvo, M. Á., Quinteiro Sandomingo, C., and Sánchez-Rodríguez, E. (2025). Airport problems with cloned agents. [Preprint manuscript].
Littlechild, S. C. and Thompson, G. F. (1977). Aircraft landing fees: a game theory approach. The Bell Journal of Economics, 8, 186-204.
# 9 different agents c <- c(2, 2, 2, 5, 5, 7, 7, 7, 12) # Cost vector clonesgroups(c) # 4 groups of cloned agents# 9 different agents c <- c(2, 2, 2, 5, 5, 7, 7, 7, 12) # Cost vector clonesgroups(c) # 4 groups of cloned agents
clonesproblem determines the new cost vector after disaggregating the original groups of clones.
clonesproblem(cw, eta)clonesproblem(cw, eta)
cw |
A numeric cost vector, with the same length as |
eta |
A numeric vector representing the size of each group of cloned agents. All its elements must be positive integers. |
In an airport problem, agents are clones if both have the same cost parameter, that is, if .
If a problem has cloned agents, then the agent set can be divided into several non-overlapping groups such that any
pair of agents that belong to the same group are clones, but any two agents from two different groups have different cost parameters.
For each , let and let be the set of pairs such that:
Given and we define the cost problem as:
Given a problem there are unique and such that .
We refer to the problem , formed by the different cost parameters of problem , as the reduced problem without clones
associated with . Clearly, is obtained from by adding, for each , , clones of agent .
Let and . For each , let and, to simplify the notation,
write . Therefore, and if .
Obviously, the family is a partition of and for all . Moreover, all the agents that belong to have
the same cost parameter , i.e., for all and .
So, each agent in the reduced problem can be seen as a representative agent of the corresponding group of clones in the original problem .
A numeric cost vector, where each element corresponds to a different agent's cost.
Bernárdez Ferradás, A., Mirás Calvo, M. Á., Quinteiro Sandomingo, C., and Sánchez-Rodríguez, E. (2025). Airport problems with cloned agents. [Preprint manuscript].
Littlechild, S. C. and Thompson, G. F. (1977). Aircraft landing fees: a game theory approach. The Bell Journal of Economics, 8, 186-204.
# 4 groups of cloned agents cw <- c(2, 5, 7, 12) # Different costs eta <- c(3, 2, 3, 1) # Size of each group of clones clonesproblem(cw, eta) # General cost vector# 4 groups of cloned agents cw <- c(2, 5, 7, 12) # Different costs eta <- c(3, 2, 3, 1) # Size of each group of clones clonesproblem(cw, eta) # General cost vector
clonesrule calculates the contribution vector resulting from the payment allocation among the different agents using one of the versions for clones of the various predefined rules.
clonesrule(cw, eta, rule, group_contribution = TRUE, a = NULL, order = NULL)clonesrule(cw, eta, rule, group_contribution = TRUE, a = NULL, order = NULL)
cw |
A numeric cost vector, with the same length as |
eta |
A numeric vector representing the size of each group of cloned agents. All its elements must be positive integers. |
rule |
A character string specifying the rule to apply. The rules that can be selected are:
|
group_contribution |
A logical value.
By default, if |
a |
A numeric value in the range [0,1], controlling the parameterization of the rule. It can only be defined when |
order |
A numeric vector indicating the priority order of agents when making contributions. It can only be defined when |
Let be a rule, , and . For each ,
the sum of the contributions requested by from the group of clones is
.
The computation of the cost allocation selected by a rule for a given problem can be substantially simplified where there are cloned agents. Through this function, a direct method is proposed to obtain either the aggregate contribution or the individual contribution of each group of cloned agents, based on the associated reduced problem and the number of clones in each group.
The version for clones of the SFC, SEC, CEC and CP rules is equal to their respective weighted version, so the formulation of these rules will be the same for the weighted version. Only the CEB rule has a weighted version and a clone version that are different.
If a rule satisfies equal treatment of equals (cloned agents pay equal amounts), then
for any . All the rules listed, with the
exception of the PRIOR rule, satisfy equal treatment of equals. Therefore, the contribution demanded by these rules from a group of clones
is divided equally among them.
Finally, we define a -replica of an airport problem as the problem in which every agent is replaced by clones of itself.
If increases, the number of groups of cloned agents does not change, but the number of agents is large. Thus, we say that a rule satisfies
replication invariance if for each , each , and each , we have ;
i.e., if in any -replica of a problem each group of cloned agents contributes an amount independent of .
The SFC, SEC, CEC, CP, and PRIOR rules verify this property, while the others do not.
A numeric contribution vector. By default, if group_contribution = TRUE, each element represents the payment made by each group of cloned agents.
However, if group_contribution = FALSE, each element reflects the individual payment made by a representative agent from each group.
When rule = "CC", the execution time of the function may significantly increase if the number of individual agents exceeds 150.
Bernárdez Ferradás, A., Mirás Calvo, M. Á., Quinteiro Sandomingo, C., and Sánchez-Rodríguez, E. (2025). Airport problems with cloned agents. [Preprint manuscript].
Littlechild, S. C. and Thompson, G. F. (1977). Aircraft landing fees: a game theory approach. The Bell Journal of Economics, 8, 186-204.
clonesgroups, clonesproblem, multiclonesrules, basicrule, weightedrule
# Clones SEC rule cw <- c(1, 3, 7, 10) # Different costs eta <- c(3, 4, 1, 2) # Size of each groups of clones clonesrule(cw, eta, "SEC") # CEC rule satisfies replication invariance cw <- c(1, 5, 12) # Different costs eta <- rep(8, 3) # Size of each groups of clones all.equal(clonesrule(cw, eta, "CEC"), CECrule(cw))# Clones SEC rule cw <- c(1, 3, 7, 10) # Different costs eta <- c(3, 4, 1, 2) # Size of each groups of clones clonesrule(cw, eta, "SEC") # CEC rule satisfies replication invariance cw <- c(1, 5, 12) # Different costs eta <- rep(8, 3) # Size of each groups of clones all.equal(clonesrule(cw, eta, "CEC"), CECrule(cw))
comparisonallocations generates a graphical representation in which, for each agent or group of clones,
both the maximum cost they can bear and their corresponding marginal contribution are displayed.
comparisonallocations( c, contributions, col = NULL, colors = NULL, agents_names = NULL, labels = TRUE, legend = NULL, tol = 1e-06 )comparisonallocations( c, contributions, col = NULL, colors = NULL, agents_names = NULL, labels = TRUE, legend = NULL, tol = 1e-06 )
c |
A numeric cost vector. |
contributions |
A list containing the different cost allocation vectors to be compared. It is required that the sum of the coordinates of each vector equals the total cost to be allocated. |
col |
A character string reflecting the color of the NS constraint for each agent. By default, the color |
colors |
A vector that indicates the colors used to represent each contribution vector. By default, a color palette of different shades is used. |
agents_names |
A vector defining the name assigned to each agent. By default, the names follow a sequence of natural numbers, starting from 1. |
labels |
A logical value indicating whether the labels and the title of the plot should be displayed. By default, |
legend |
A vector or list where each of its elements represents a different contribution vector. By default, the coordinates of each contribution vector are displayed with two decimal places. |
tol |
Tolerance level for evaluating compliance with the NS constraint. |
For each let be the hyperplane of
given by all the vectors whose coordinates add up to . A cost allocation for is a vector
such that . The component is the contribution requested from agent .
Let be the set of cost allocations for .
A basic requirement is that at an allocation on group
of agents would subsidize the other agents by contributing more than what the group would have to pay on its own. The no-subsidy constraint
for the group is . The set of cost allocations for that satisfy the no-subsidy
constraints, the no-subsidy set for short, is given by:
Thus, the no-subsidy correspondence NS assigns to each the set .
A rule is a mapping which associates with each problem a contribution vector
. In other words, a rule is a mechanism that, for each airport problem, selects an allocation vector belonging to its no-subsidy set.
A vertical line plot in which each line represents the maximum amount an agent can pay without violating the NS constraint, while the points along the lines indicate the contributions made by the agent.
Bernárdez Ferradás, A., Mirás Calvo, M. Á., Quinteiro Sandomingo, C., and Sánchez-Rodríguez, E. (2025). Airport problems with cloned agents. [Preprint manuscript].
Thomson, W. (2024). Cost allocation and airport problems. Mathematical Social Sciences, 31(C), 17–31.
NScheck, basicrule, plotallocations
# CEB rule vs weighted CEB rule vs clones CEB rule c <- c(1, 3, 7, 10) # Cost vector w <- c(1, 4, 8, 2) # Weight vector eta <- w # Size of each groups of clones CEB <- basicrule(c, "CEB") wCEB <- weightedrule(c, w, "CEB") clCEB <- clonesrule(c, w, "CEB") comparisonallocations(c, list(CEB, wCEB, clCEB)) # SEC rule vs CEC rule vs SM rule c <- c(5, 10, 20) # Cost vector comparisonallocations(c, list(SECrule(c), CECrule(c), SMrule(c)), col = "green", agents_names = c("Alex", "Estela", "Carmen"), labels = FALSE, legend = list("SEC", "CEC", "SM"))# CEB rule vs weighted CEB rule vs clones CEB rule c <- c(1, 3, 7, 10) # Cost vector w <- c(1, 4, 8, 2) # Weight vector eta <- w # Size of each groups of clones CEB <- basicrule(c, "CEB") wCEB <- weightedrule(c, w, "CEB") clCEB <- clonesrule(c, w, "CEB") comparisonallocations(c, list(CEB, wCEB, clCEB)) # SEC rule vs CEC rule vs SM rule c <- c(5, 10, 20) # Cost vector comparisonallocations(c, list(SECrule(c), CECrule(c), SMrule(c)), col = "green", agents_names = c("Alex", "Estela", "Carmen"), labels = FALSE, legend = list("SEC", "CEC", "SM"))
CPrule calculates the contribution vector selected by the CP rule.
CPrule(c)CPrule(c)
c |
A numeric cost vector. |
For each , let and , with
, defined recursively, for , by
Then, for each and each ,
With this rule, calculating each agent's contribution is not always straightforward. When a coalition of agents violates the NS constraint, it becomes necessary to proceed in two or more steps.
The core idea of this rule is proportionality, aiming to ensure that agents' contributions are as close as possible to being proportional to the cost parameters, while respecting these constraints.
A numeric contribution vector, where each element represents the payment of the different agents.
Bernárdez Ferradás, A., Mirás Calvo, M. Á., Quinteiro Sandomingo, C., and Sánchez-Rodríguez, E. (2025). Airport problems with cloned agents. [Preprint manuscript].
Thomson, W. (2024). Cost allocation and airport problems. Mathematical Social Sciences, 31(C), 17–31.
basicrule, weightedrule, clonesrule, hierarchicalrule
c <- c(1, 3, 7, 10) # Cost vector CPrule(c)c <- c(1, 3, 7, 10) # Cost vector CPrule(c)
The data includes 4 variables related to the 14 apartments in a building, within the context of distributing the costs associated with installing an elevator in that building.
elevatorelevator
A data frame with 14 rows and 4 columns (variables):
Unit identifier
Floor number
Cumulative elevator installation cost for each dwelling (in euros).
Area of each dwelling (in square meters).
Own elaboration.
# By number of floors (floor) cw <- clonesgroups(elevator$c)$cw eta <- clonesgroups(elevator$c)$eta rules <- c("SFC", "SEC", "CEC", "CP", "CC") by_floor <- list() for (rule in rules){ by_floor[[rule]] <- clonesrule(cw, eta, rule) } comparisonallocations(cw, by_floor, agents_names = unique(elevator$floor), legend = rules, labels = FALSE) # Based on the area of each dwelling (area), by unit identifier (id) c <- elevator$c w <- elevator$area by_id <- multiweightedrules(c, w, rules = c("SFC", "SEC", "CSEC", "CEC", "CP"), draw = TRUE, agents_names = elevator$id, labels = FALSE) round(by_id, 2)# By number of floors (floor) cw <- clonesgroups(elevator$c)$cw eta <- clonesgroups(elevator$c)$eta rules <- c("SFC", "SEC", "CEC", "CP", "CC") by_floor <- list() for (rule in rules){ by_floor[[rule]] <- clonesrule(cw, eta, rule) } comparisonallocations(cw, by_floor, agents_names = unique(elevator$floor), legend = rules, labels = FALSE) # Based on the area of each dwelling (area), by unit identifier (id) c <- elevator$c w <- elevator$area by_id <- multiweightedrules(c, w, rules = c("SFC", "SEC", "CSEC", "CEC", "CP"), draw = TRUE, agents_names = elevator$id, labels = FALSE) round(by_id, 2)
hierarchicalrule calculates the contribution vector resulting from the payment allocation among the different agents using one of the various predefined rules in relation to the agents' hierarchical order.
hierarchicalrule(c, P, rule, a = NULL)hierarchicalrule(c, P, rule, a = NULL)
c |
A numeric cost vector. |
P |
A list showing the agents involved in the different distribution stages. |
rule |
A character string specifying the rule to apply.The rules that can be selected are:
|
a |
A numeric value in the range [0,1], controlling the parameterization of the rule. It can only be defined when |
Let be a finite set of agents and let be a partition
of , with . So, the hierarchical structure, ,
implies that agents in have priority over agents in , agents in have priority
over agents in , and so on. Let denote the family of all hierarchical structures over .
A hierarchical rule is a mapping that, based on a hierarchical structure ,
associates with each problem a cost allocation vector such that . In other words, the allocation proceeds by assigning costs
to agents in higher-hierarchy coalitions before those in lower-hierarchy ones, through the successive application of the rule to the no-subsidy faces of coalitions obtained from .
These rules are on the boundary of the no-subsidy set.
In each stage, the agents share the accumulated costs up to that point. However, the remaining costs are allocated in subsequent stages.
A numeric contribution vector, where each element represents the payment of the different agents.
Bernárdez Ferradás, A., Mirás Calvo, M. Á., Quinteiro Sandomingo, C., and Sánchez-Rodríguez, E. (2025). Airport problems with cloned agents. [Preprint manuscript].
Faigle, U. and Kern, W. (1992). The Shapley value for cooperation games under precedence constraints. International Journal of Game Theory, 21, 249-266.
Fiestras-Janeiro, M. G., Sánchez-Rodríguez, E., and Schuster, M. (2016). A precedence constraint value revisited. TOP, 24, 156-179.
Mirás Calvo, M. Á., Quinteiro Sandomingo, C., and Sánchez-Rodríguez, E. (2020). The boundary of the core of a balanced game: faces games. International Journal of Game Theory, 49(2), 579-599.
# Two stages c <- c(1, 3, 7, 10) # Cost vector P <- list(c(1, 2), c(3, 4)) # Agents' hierarchical order hierarchicalrule(c, P, rule = "SEC") # SEC rule # Three stages c <- c(1, 1, 3, 3, 7, 10) # Cost vector P <- list(2, c(1, 3), c(4, 5, 6)) # Agents' hierarchical order hierarchicalrule(c, P, "CEC") # CEC rule# Two stages c <- c(1, 3, 7, 10) # Cost vector P <- list(c(1, 2), c(3, 4)) # Agents' hierarchical order hierarchicalrule(c, P, rule = "SEC") # SEC rule # Three stages c <- c(1, 1, 3, 3, 7, 10) # Cost vector P <- list(2, c(1, 3), c(4, 5, 6)) # Agents' hierarchical order hierarchicalrule(c, P, "CEC") # CEC rule
multibasicrules calculates the contribution vectors resulting from the allocation of payments among different agents, applying various predefined rules.
It also generates a graphical representation of the allocations based on the implemented rules.
multibasicrules( c, rules = c("SFC", "SEC", "CEC", "CEB", "CP", "SM", "CC", "SIGMA", "PRIOR"), draw = TRUE, col = NULL, a = NULL, order = NULL, agents_names = NULL, labels = TRUE )multibasicrules( c, rules = c("SFC", "SEC", "CEC", "CEB", "CP", "SM", "CC", "SIGMA", "PRIOR"), draw = TRUE, col = NULL, a = NULL, order = NULL, agents_names = NULL, labels = TRUE )
c |
A numeric cost vector. |
rules |
A character vector specifying the allocation rules. The available rules are:
|
draw |
A logical value indicating whether or not the plot should be generated. By default, |
col |
A vector that indicates the colors used to represent each agent in the graphical representation. By default,
the colors are selected by the function |
a |
A numeric value in the range [0,1], controlling the parameterization of the rule. It can only be defined when |
order |
A numeric vector indicating the priority order of agents when making contributions. It can only be defined when |
agents_names |
A vector defining the name assigned to each agent. By default, the names follow a sequence of natural numbers, starting from 1. |
labels |
A logical value indicating whether the labels and the title of the plot should be displayed. By default, |
Let be the set of cost allocations for .
A rule is a mapping that associates with each problem a contribution vector such that . In other words, a rule is a mechanism that selects an allocation vector for each airport problem.
The various proposed rules, despite their differences, share a key characteristic: for any given problem, each rule selects an allocation vector that belongs to its no-subsidy set. Although these rules have been individually characterized in different functions, the one in question allows for the calculation of all of them at once.
A data frame containing the contribution vectors determined by the selected allocation rules. Additionally, if draw = TRUE,
a mosaic plot displaying the allocations obtained for the different rules.
When "CC" is included in the rules argument, the execution time of the function may significantly increase if the number of agents exceeds 150.
Bernárdez Ferradás, A., Mirás Calvo, M. Á., Quinteiro Sandomingo, C., and Sánchez-Rodríguez, E. (2025). Airport problems with cloned agents. [Preprint manuscript].
Potters, J. and Sudhölter, P. (1999). Airport problems and consistent allocation rules. Mathematical Social Sciences, 38, 83–102.
Thomson, W. (2024). Cost allocation and airport problems. Mathematical Social Sciences, 31(C), 17–31.
basicrule, comparisonallocations, plotallocations
# All rules with graphical representation c <- c(1, 3, 7, 10) # Cost vector multibasicrules(c) # SEC, CEC and SIGMA rule without plot c <- c(5, 10, 20) # Cost vector multibasicrules(c, rules = c("SEC", "CEC", "SIGMA"), draw = FALSE, a = 0.75, agents_names = c("Alex", "Estela", "Carmen"))# All rules with graphical representation c <- c(1, 3, 7, 10) # Cost vector multibasicrules(c) # SEC, CEC and SIGMA rule without plot c <- c(5, 10, 20) # Cost vector multibasicrules(c, rules = c("SEC", "CEC", "SIGMA"), draw = FALSE, a = 0.75, agents_names = c("Alex", "Estela", "Carmen"))
multiclonesrules calculates the contribution vectors resulting from the allocation of payments among different agents, applying the versions for clones of various predefined rules.
It also generates a graphical representation of the allocations based on the implemented rules.
multiclonesrules( cw, eta, rules = c("SFC", "SEC", "CEC", "CEB", "CP", "SM", "CC", "SIGMA", "PRIOR"), group_contribution = TRUE, draw = TRUE, col = NULL, a = NULL, order = NULL, agents_names = NULL, labels = TRUE )multiclonesrules( cw, eta, rules = c("SFC", "SEC", "CEC", "CEB", "CP", "SM", "CC", "SIGMA", "PRIOR"), group_contribution = TRUE, draw = TRUE, col = NULL, a = NULL, order = NULL, agents_names = NULL, labels = TRUE )
cw |
A numeric cost vector, with the same length as |
eta |
A numeric vector representing the size of each group of cloned agents. All its elements must be positive integers. |
rules |
A character vector specifying the allocation rules. The available rules are:
|
group_contribution |
A logical value.
By default, if |
draw |
A logical value indicating whether the plot should be generated. By default, |
col |
A vector that indicates the colors used to represent each agent in the graphical representation. By default,
the colors are selected by the function |
a |
A numeric value in the range [0,1], controlling the parameterization of the rule. It can only be defined when |
order |
A numeric vector indicating the priority order of agents when making contributions. It can only be defined when |
agents_names |
A vector defining the name assigned to each group of clones. By default, the names follow a sequence of natural numbers, starting from 1. |
labels |
A logical value indicating whether the labels and the title of the plot should be displayed. By default, |
Let be a rule, , and . For each ,
the sum of the contributions requested by from the group of clones is
.
The computation of the cost allocation selected by a rule for a given problem can be substantially simplified where there are cloned agents. Through this function, a direct method is proposed to obtain either the aggregate contribution or the individual contribution of each group of cloned agents, based on the associated reduced problem and the number of clones in each group.
The version for clones of the SFC, SEC, CEC and CP rules is equal to their respective weighted version, so the formulation of these rules will be the same for the weighted version. Only the CEB rule has a weighted version and a clone version that are different.
If a rule satisfies equal treatment of equals (cloned agents pay equal amounts), then
for any . All the rules listed, with the
exception of the PRIOR rule, satisfy equal treatment of equals. Therefore, the contribution demanded by these rules from a group of clones
is divided equally among them.
Finally, we define a -replica of an airport problem as the problem in which every agent is replaced by clones of itself.
If increases, the number of groups of cloned agents does not change, but the number of agents is large. Thus, we say that a rule satisfies
replication invariance if for each , each , and each , we have ;
i.e., if in any -replica of a problem each group of cloned agents contributes an amount independent of .
The SFC, SEC, CEC, CP, and PRIOR rules verify this property, while the others do not.
A data frame containing the contribution vectors determined by the selected allocation rules. Additionally, if draw = TRUE,
a mosaic plot displaying the allocations obtained for the different rules.
When "CC" is included in the rules argument, the execution time of the function may significantly increase if the number of individual agents exceeds 150.
Bernárdez Ferradás, A., Mirás Calvo, M. Á., Quinteiro Sandomingo, C., and Sánchez-Rodríguez, E. (2025). Airport problems with cloned agents. [Preprint manuscript].
Littlechild, S. C. and Thompson, G. F. (1977). Aircraft landing fees: a game theory approach. The Bell Journal of Economics, 8, 186-204.
clonesgroups, clonesproblem, clonesrule, comparisonallocations, plotallocations
# All rules for clones with graphical representation cw <- c(1, 3, 7, 10) # Different costs eta <- c(3, 4, 1, 2) # Size of each groups of clones multiclonesrules(cw, eta) # SEC, CEC and CP rule for clones without plot cw <- c(5, 10, 20) # Different costs eta <- c(8, 2, 4) # Size of each groups of clones multiclonesrules(cw, eta, rules = c("SEC", "CEC", "CP"), group_contribution = FALSE, draw = FALSE, agents_names = c("Suppliers", "Wholesalers", "Retailers"))# All rules for clones with graphical representation cw <- c(1, 3, 7, 10) # Different costs eta <- c(3, 4, 1, 2) # Size of each groups of clones multiclonesrules(cw, eta) # SEC, CEC and CP rule for clones without plot cw <- c(5, 10, 20) # Different costs eta <- c(8, 2, 4) # Size of each groups of clones multiclonesrules(cw, eta, rules = c("SEC", "CEC", "CP"), group_contribution = FALSE, draw = FALSE, agents_names = c("Suppliers", "Wholesalers", "Retailers"))
multihierarchicalrules calculates the contribution vectors resulting from the allocation of payments among different agents, applying various predefined rules in relation to the agents' hierarchical order.
It also generates a graphical representation of the allocations based on the implemented rules.
multihierarchicalrules( c, P, rules = c("SFC", "SEC", "CEC", "CEB", "CP", "SM", "CC", "SIGMA"), a = NULL, draw = TRUE, col = NULL, agents_names = NULL, labels = TRUE )multihierarchicalrules( c, P, rules = c("SFC", "SEC", "CEC", "CEB", "CP", "SM", "CC", "SIGMA"), a = NULL, draw = TRUE, col = NULL, agents_names = NULL, labels = TRUE )
c |
A numeric cost vector. |
P |
A list showing the agents involved in the different distribution stages. |
rules |
A character vector specifying the allocation rules. The available rules are:
|
a |
A numeric value in the range [0,1], controlling the parameterization of the rule. It can only be defined when |
draw |
A logical value indicating whether the plot should be generated. By default, |
col |
A vector that indicates the colors used to represent each agent in the graphical representation. By default,
the colors are selected by the function |
agents_names |
A vector defining the name assigned to each agent. By default, the names follow a sequence of natural numbers, starting from 1. |
labels |
A logical value indicating whether the labels and the title of the plot should be displayed. By default, |
Let be a finite set of agents and let be a partition
of , with . So, the hierarchical structure, ,
implies that agents in have priority over agents in , agents in have priority
over agents in , and so on. Let denote the family of all hierarchical structures over .
A hierarchical rule is a mapping that, based on a hierarchical structure ,
associates with each problem a cost allocation vector such that . In other words, the allocation proceeds by assigning costs
to agents in higher-hierarchy coalitions before those in lower-hierarchy ones, through the successive application of the rule to the no-subsidy faces of coalitions obtained from .
These rules are on the boundary of the no-subsidy set.
In each stage, the agents share the accumulated costs up to that point. However, the remaining costs are allocated in subsequent stages.
A data frame containing the contribution vectors determined by the selected allocation rules. Additionally, if draw = TRUE,
a mosaic plot displaying the allocations obtained for the different rules.
Bernárdez Ferradás, A., Mirás Calvo, M. Á., Quinteiro Sandomingo, C., and Sánchez-Rodríguez, E. (2025). Airport problems with cloned agents. [Preprint manuscript].
Faigle, U. and Kern, W. (1992). The Shapley value for cooperation games under precedence constraints. International Journal of Game Theory, 21, 249-266.
Fiestras-Janeiro, M. G., Sánchez-Rodríguez, E., and Schuster, M. (2016). A precedence constraint value revisited. TOP, 24, 156-179.
Mirás Calvo, M. Á., Quinteiro Sandomingo, C., and Sánchez-Rodríguez, E. (2020). The boundary of the core of a balanced game: faces games. International Journal of Game Theory, 49(2), 579-599.
NSfaces, PRIORrule, basicrule, comparisonallocations, plotallocations
# All rules in two stages with graphical representation c <- c(1, 3, 3, 7, 10) # Cost vector P <- list(c(1, 2, 3), c(4, 5)) # Agents' hierarchical order multihierarchicalrules(c, P) # SEC, CEC and SM rule in three stages without plot c <- c(5, 10, 20, 20, 30, 50) # Cost vector P <- list(c(1, 2), c(3, 4), c(5, 6)) # Agents' hierarchical order multihierarchicalrules(c, P, rules = c("SEC", "CEC", "SM"), draw = FALSE, agents_names = c("Alex", "Estela", "Carmen", "Miguel", "Gloria", "Brais"))# All rules in two stages with graphical representation c <- c(1, 3, 3, 7, 10) # Cost vector P <- list(c(1, 2, 3), c(4, 5)) # Agents' hierarchical order multihierarchicalrules(c, P) # SEC, CEC and SM rule in three stages without plot c <- c(5, 10, 20, 20, 30, 50) # Cost vector P <- list(c(1, 2), c(3, 4), c(5, 6)) # Agents' hierarchical order multihierarchicalrules(c, P, rules = c("SEC", "CEC", "SM"), draw = FALSE, agents_names = c("Alex", "Estela", "Carmen", "Miguel", "Gloria", "Brais"))
multiweightedrules calculates the contribution vectors resulting from the allocation of payments among different agents, applying various predefined weighted rules.
It also generates a graphical representation of the allocations based on the implemented weighted rules.
multiweightedrules( c, w, rules = c("SFC", "SEC", "CSEC", "CEC", "CEB", "CP"), draw = TRUE, col = NULL, agents_names = NULL, labels = TRUE )multiweightedrules( c, w, rules = c("SFC", "SEC", "CSEC", "CEC", "CEB", "CP"), draw = TRUE, col = NULL, agents_names = NULL, labels = TRUE )
c |
A numeric cost vector. |
w |
A numeric weight vector. |
rules |
A character vector specifying the allocation rules. The available rules are:
|
draw |
A logical value indicating whether the plot should be generated. By default, |
col |
A vector that indicates the colors used to represent each agent in the graphical representation. By default,
the colors are selected by the function |
agents_names |
A vector defining the name assigned to each agent. By default, the names follow a sequence of natural numbers, starting from 1. |
labels |
A logical value indicating whether the labels and the title of the plot should be displayed. By default, |
Let be a positive weight vector, satisfying for all
and . Consider the -standard simplex, defined as .
Then, the set of all positive weight vectors corresponds to , the interior of the
-standard simplex.
A weighted rule is a mapping
which associates with a problem and a positive weight vector a contribution
vector .
It is possible to define weighted versions of the rules: SFC, SEC, CEC, CP and CEB. In fact, two different rules
emerge from the standard SEC rule: the weighted SEC rule and the coalition-weighted SEC rule. If for all , then the solution of weighted SEC and
weighted CSEC coincides.
In all the rules, the higher the weight , the more the corresponding agent will have to pay, except for the weighted CEB rule
(the construction of this rule is based on the concept of allocating 'benefits', so it is logical that it is set up this way).
Furthermore, as previously stated, all the rules, except for the weighted CSEC rule, require the weights to be positive. However, to standardize the criterion,
we establish that the CSEC rule also demands positive weights.
The weighted version of the SFC, SEC, CEC and CP rules is equal to their respective versions for clones, so the formulation of these rules will be the same for the version with clones. Only the CEB rule has a weighted version and a clone version that are different.
A data frame containing the contribution vectors determined by the selected allocation rules. Additionally, if draw = TRUE,
a mosaic plot displaying the allocations obtained for the different weighted rules.
Bernárdez Ferradás, A., Mirás Calvo, M. Á., Quinteiro Sandomingo, C., and Sánchez-Rodríguez, E. (2025a). Airport problems with cloned agents. [Preprint manuscript].
Bernárdez Ferradás, A., Mirás Calvo, M. Á., Quinteiro Sandomingo, C., and Sánchez-Rodríguez, E. (2025b). A characterization of the CSEC rule for airport problems. [Prepint manuscript].
Sánchez-Rodríguez, E., Mirás Calvo, M. Á., Quinteiro Sandomingo, C., and Núñez Lugilde, I. (2024). Coalition-weighted Shapley values. International Journal of Game Theory, 53, 547-577.
Thomson, W. (2024). Cost allocation and airport problems. Mathematical Social Sciences, 31(C), 17–31.
weightedrule, comparisonallocations, plotallocations
# All weighted rules with graphical representation c <- c(1, 3, 3, 7, 10) # Cost vector w <- c(1, 4, 1, 2, 8) # Weight vector multiweightedrules(c, w) # Weighted SEC, CEC and CP rule without plot c <- c(5, 10, 20) w <- c(3, 2, 1) multiweightedrules(c, w, rules = c("SEC", "CEC", "CP"), draw = FALSE, agents_names = c("Alex", "Estela", "Carmen"))# All weighted rules with graphical representation c <- c(1, 3, 3, 7, 10) # Cost vector w <- c(1, 4, 1, 2, 8) # Weight vector multiweightedrules(c, w) # Weighted SEC, CEC and CP rule without plot c <- c(5, 10, 20) w <- c(3, 2, 1) multiweightedrules(c, w, rules = c("SEC", "CEC", "CP"), draw = FALSE, agents_names = c("Alex", "Estela", "Carmen"))
NScheck evaluates whether or not the no-subsidy constraint is satisfied and, if not,
it can also determine one of the coalitions of agents that violates it, as long as the user requests it.
NScheck( c, x, eta = rep(1, length(x)), group_contribution = TRUE, coalition = FALSE, tol = 1e-06 )NScheck( c, x, eta = rep(1, length(x)), group_contribution = TRUE, coalition = FALSE, tol = 1e-06 )
c |
A numeric cost vector. |
x |
A numeric cost allocation vector. |
eta |
A numeric vector representing the size of each group of cloned agents. All its elements must be positive integers. By default, all components of |
group_contribution |
A logical value.
By default, if |
coalition |
A logical value. By default, if |
tol |
Tolerance level for evaluating compliance with the NS constraint. |
For each let be the hyperplane of
given by all the vectors whose coordinates add up to . A cost allocation for is a vector
such that . The component is the contribution requested from agent .
Let be the set of cost allocations for . Given , the difference is the
benefit of agent at .
A basic requirement is that at an allocation on group
of agents would subsidize the other agents by contributing more than what the group would have to pay on its own. The no-subsidy constraint
for the group is . The set of cost allocations for that satisfy the no-subsidy
constraints, the no-subsidy set for short, is given by:
Thus, the no-subsidy correspondence NS assigns to each the set .
Nevertheless, when a problem has group of cloned agents, the structure of its no-subsidy set is simpler than
when all the cost parameters are different. Let , be the set of pairs and .
Then the no subsidy set for is:
It is worth noting that all allocation rules proposed in this package satisfy this property.
If coalition = TRUE, a logical value (TRUE or FALSE) indicating compliance with the NS constraint.
Otherwise, if coalition = FALSE, a list containing the following items:
flag |
A logical value (TRUE or FALSE) indicating compliance with the NS constraint. | |
eta |
If the NS constraint is violated, the coalition of agents that breach it will be returned. |
Bernárdez Ferradás, A., Mirás Calvo, M. Á., Quinteiro Sandomingo, C., and Sánchez-Rodríguez, E. (2025). Airport problems with cloned agents. [Preprint manuscript].
Thomson, W. (2024). Cost allocation and airport problems. Mathematical Social Sciences, 31(C), 17–31.
NSfaces, NSstructure, NSset, comparisonallocations
# Compliance with the NS constraint c <- c(2, 5, 9) x <- SECrule(c) NScheck(c, x) # Non-compliance with the NS constraint c <- c(2, 3, 7, 10) x <- c(1, 2, 5, 2) NScheck(c, x, coalition = TRUE)# Compliance with the NS constraint c <- c(2, 5, 9) x <- SECrule(c) NScheck(c, x) # Non-compliance with the NS constraint c <- c(2, 3, 7, 10) x <- c(1, 2, 5, 2) NScheck(c, x, coalition = TRUE)
NSfaces determines the airport problems defining the two components of the decomposition
of one specific face game.
NSfaces(c, R)NSfaces(c, R)
c |
A numeric cost vector. |
R |
A numeric vector representing the agents forming the coalition |
Let be an airport problem and its associated cost game, for each non-empty proper coalition
define the -face of Core as the set
Also, the -face game is given by .
It turns out that , the -face of the core of the associated cost game is the
core of the -face game. Let such that and denote .
Consider the airport problems
with associated games and , respectively. It is easy to see that the -face game
is decomposable with respect to the partition and its components are
and . Moreover,
Therefore, the components of the face games of the associated cost game are associated cost games themselves.
In the -face game, the players of play the game associated with the problem where
the agents of keep their cost parameters while the cost parameter of the agents in is null.
On the other hand, since the players of already share among themselves, the players of
with an initial cost lower than now have their cost parameter equal to zero while the others
see their cost reduced by .
A numeric matrix with two rows representing the decomposition of the -face game:
[1, ]
|
The first row is obtained by setting the cost of a specific coalition to zero while retaining the cost parameters of the complementary coalition. |
[2, ]
|
The second row is derived by subtracting the highest cost in the complementary coalition from each agent's cost, or setting it to zero if the result is negative. |
Bernárdez Ferradás, A., Mirás Calvo, M. Á., Quinteiro Sandomingo, C., and Sánchez-Rodríguez, E. (2025). Airport problems with cloned agents. [Preprint manuscript].
González-Díaz, J. and Sánchez-Rodríguez, E. (2008). Cores of convex and strictly convex games. Games and Economic Behavior, 62, 100-105.
Mirás Calvo, M. Á., Quinteiro Sandomingo, C., and Sánchez-Rodríguez, E. (2020). The boundary of the core of a balanced game: faces games. International Journal of Game Theory, 49(2), 579-599.
NScheck, NSstructure, NSset, hierarchicalrule
c <- c(1, 3, 7, 10) # Cost vector R <- c(3, 4) # Coalition of agents NSfaces(c, R) # Components of the face gamec <- c(1, 3, 7, 10) # Cost vector R <- c(3, 4) # Coalition of agents NSfaces(c, R) # Components of the face game
NSset calculates the coordinates of the vertices that make up the NS set.
It also enables the generation of a graphical representation of the no-subsidy set in 1D, 2D, and 3D (available only when there are 2, 3, or 4 agents).
NSset( c, draw = FALSE, dimension = NULL, representation = "projection", col = NULL, agents_names = NULL, labels = TRUE )NSset( c, draw = FALSE, dimension = NULL, representation = "projection", col = NULL, agents_names = NULL, labels = TRUE )
c |
A numeric cost vector. |
draw |
A logical value indicating whether the plot should be generated. By default, |
dimension |
A character string that specifies the dimension of the graphic. Possible values are |
representation |
A character string indicating which NS set is displayed. Possible values are |
col |
A character string reflecting the color tone of the NS set. By default, the color tone |
agents_names |
A vector defining the name assigned to each agent. By default, the names follow a sequence of natural numbers, starting from 1. |
labels |
A logical value indicating whether the coordinates of the points and the plot title should be displayed. By default, |
For each let be the hyperplane of
given by all the vectors whose coordinates add up to . A cost allocation for is a vector
such that . The component is the contribution requested from agent .
Let be the set of cost allocations for . Given , the difference is the
benefit of agent at .
A basic requirement is that at an allocation on group
of agents would subsidize the other agents by contributing more than what the group would have to pay on its own. The no-subsidy constraint
for the group is . The set of cost allocations for that satisfy the no-subsidy
constraints, the no-subsidy set for short, is given by:
Thus, the no-subsidy correspondence NS assigns to each the set .
Nevertheless, when a problem has group of cloned agents, the structure of its no-subsidy set is simpler than
when all the cost parameters are different. Let , be the set of pairs and .
Then the no subsidy set for is:
For any cost vector , if there are agents with different cost parameters, the number of faces is .
However, the number of full-dimensional faces is indeed affected by the presence of clones. Let , , and
, has full-dimensional faces if and full-dimensional faces otherwise.
On the other hand, the number of different extreme points of the set is:
(so, when there are no clones, the has extreme points).
A numeric matrix containing the vertices that determine the NS set.
Additionally, if draw = TRUE and the number of agents is 2, 3, or 4, a plot displaying the faces and extreme points of the NS set will be generated.
Bernárdez Ferradás, A., Mirás Calvo, M. Á., Quinteiro Sandomingo, C., and Sánchez-Rodríguez, E. (2025). Airport problems with cloned agents. [Preprint manuscript].
González-Díaz, J., Mirás Calvo, M. Á., Quinteiro Sandomingo, C., and Sánchez-Rodríguez, E. (2016). Airport games: the core and its center. Mathematical Social Sciences, 82, 105–115.
Mirás Calvo, M. Á., Quinteiro Sandomingo, C., and Sánchez-Rodríguez, E. (2020). The boundary of the core of a balanced game: faces games. International Journal of Game Theory, 49(2), 579-599.
plotallocations, NScheck, NSfaces, NSstructure
# Projected NS set for 3 agents c <- c(5, 10, 20) # Cost vector NSset(c, draw = TRUE) # Real and projected NS set for 3 agents c <- c(1, 2, 3) # Cost vector NSset(c, TRUE, "3D", "both") # Projected NS set for 4 agents c <- c(3, 3, 3, 10) # Cost vector NSset(c, TRUE, "3D", "projection", "aquamarine", c("Alex", "Estela", "Carmen", "Miguel"))# Projected NS set for 3 agents c <- c(5, 10, 20) # Cost vector NSset(c, draw = TRUE) # Real and projected NS set for 3 agents c <- c(1, 2, 3) # Cost vector NSset(c, TRUE, "3D", "both") # Projected NS set for 4 agents c <- c(3, 3, 3, 10) # Cost vector NSset(c, TRUE, "3D", "projection", "aquamarine", c("Alex", "Estela", "Carmen", "Miguel"))
NSstructure quantifies the key elements of the structure of the no-subsidy set.
NSstructure(cw, eta = rep(1, length(cw)))NSstructure(cw, eta = rep(1, length(cw)))
cw |
A numeric cost vector, with the same length as |
eta |
A numeric vector representing the size of each group of cloned agents. All its elements must be positive integers. By default, |
For any cost vector , if there are agents with different cost parameters, the number of faces of the NS set is .
However, the number of full-dimensional faces is indeed affected by the presence of clones. Let , , and
, has full-dimensional faces if and full-dimensional faces otherwise.
On the other hand, the number of different extreme points of the set is:
(so, when there are no clones, the has extreme points).
Let and denote by the -dimensional Lebesgue measure. If is a random vector
with joint density function and is a Borel set, then
and the expected value of is . Given a Borel set
of positive measure, , we say that a random vector has a uniform
distribution on , and we write , if has a probability density function if
and otherwise. If with
, denote
Therefore, for each , the value is the
-Lebesgue measure of , so .
A list containing the following items:
n.faces |
A positive integer representing the number of faces that form the NS set. |
n.full.dim.faces |
A positive integer indicating the number of full-dimensional faces forming the NS set. |
n.extreme.points |
A positive integer counting the number of extreme points of the NS set. |
actual.volume |
A positive number representing the volume of the NS set. |
projected.volume |
A positive number reflecting the projected volume of the NS set. |
Bernárdez Ferradás, A., Mirás Calvo, M. Á., Quinteiro Sandomingo, C., and Sánchez-Rodríguez, E. (2025). Airport problems with cloned agents. [Preprint manuscript].
González-Díaz, J., Mirás Calvo, M. Á., Quinteiro Sandomingo, C., and Sánchez-Rodríguez, E. (2016). Airport games: the core and its center. Mathematical Social Sciences, 82, 105–115.
NScheck, NSfaces, NSset, CCrule
# Without cloned agents c <- c(1, 2, 3, 4) NSstructure(c) # With cloned agents c <- c(1, 2) eta <- c(3, 1) NSstructure(c, eta)# Without cloned agents c <- c(1, 2, 3, 4) NSstructure(c) # With cloned agents c <- c(1, 2) eta <- c(3, 1) NSstructure(c, eta)
The data includes several variables describing 833 aircraft operations — 418 take-offs and 415 landings — involving 27 different aircraft types at Peinador Airport (Vigo, Spain) during January 2025.
PeinadorPeinador
A data frame with 27 rows and 6 columns (variables):
Aircraft type
Aircraft index (subscript)
Number of takeoffs
Number of landings
Maximum takeoff weight (in tons)
Maximum landing weight (in tons)
AENA. (2025, April 23). Estadísticas de tráfico aéreo: Consultas personalizadas. https://www.aena.es/es/estadisticas/consultas-personalizadas.html.
# Allocation by MTOW (in t) multiclonesrules(Peinador$MTOW, Peinador$TO, c("SFC", "SEC", "CEC", "CP"), labels = FALSE) # Allocation by MLW (in t) positives <- Peinador$LDG > 0 MLW <- Peinador$MLW[positives] LDG <- Peinador$LDG[positives] multiclonesrules(MLW, LDG, c("SFC", "SEC", "CEC", "CP"), labels = FALSE)# Allocation by MTOW (in t) multiclonesrules(Peinador$MTOW, Peinador$TO, c("SFC", "SEC", "CEC", "CP"), labels = FALSE) # Allocation by MLW (in t) positives <- Peinador$LDG > 0 MLW <- Peinador$MLW[positives] LDG <- Peinador$LDG[positives] multiclonesrules(MLW, LDG, c("SFC", "SEC", "CEC", "CP"), labels = FALSE)
plotallocations generates a graphical representation of the contribution vectors inside the NS set
in 1D, 2D, and 3D (available only when there are 2, 3, or 4 agents).
plotallocations( c, contributions, dimension = NULL, representation = "projection", col = NULL, colors = NULL, agents_names = NULL, labels = TRUE, contributions_names = NULL, tol = 1e-06 )plotallocations( c, contributions, dimension = NULL, representation = "projection", col = NULL, colors = NULL, agents_names = NULL, labels = TRUE, contributions_names = NULL, tol = 1e-06 )
c |
A numeric cost vector. |
contributions |
A list containing different cost allocation vectors. |
dimension |
A character string that specifies the dimension of the graphic. Possible values are |
representation |
A character string indicating which NS set and allocations are displayed. Possible values are |
col |
A character string reflecting the color tone of the NS set. By default, the color tone |
colors |
A vector that indicates the colors used to represent each contribution vector. By default, a color palette of different shades is used. |
agents_names |
A vector defining the name assigned to each agent. By default, the names follow a sequence of natural numbers, starting from 1. |
labels |
A logical value indicating whether the coordinates of the points and the plot title should be displayed. By default, |
contributions_names |
A vector defining the name assigned to each cost allocation vector. By default, and whenever |
tol |
Tolerance level for evaluating compliance with the NS constraint. |
For each let be the hyperplane of
given by all the vectors whose coordinates add up to . A cost allocation for is a vector
such that . The component is the contribution requested from agent .
Let be the set of cost allocations for .
A basic requirement is that at an allocation on group
of agents would subsidize the other agents by contributing more than what the group would have to pay on its own. The no-subsidy constraint
for the group is . The set of cost allocations for that satisfy the no-subsidy
constraints, the no-subsidy set for short, is given by:
Thus, the no-subsidy correspondence NS assigns to each the set .
A rule is a mapping which associates with each problem a contribution vector
. In other words, a rule is a mechanism that, for each airport problem, selects an allocation vector belonging to its no-subsidy set.
Only if the number of agents is 2, 3, or 4 will a plot be generated displaying the NS set and all cost allocation vectors.
Bernárdez Ferradás, A., Mirás Calvo, M. Á., Quinteiro Sandomingo, C., and Sánchez-Rodríguez, E. (2025). Airport problems with cloned agents. [Preprint manuscript].
González-Díaz, J., Mirás Calvo, M. Á., Quinteiro Sandomingo, C., and Sánchez-Rodríguez, E. (2016). Airport games: the core and its center. Mathematical Social Sciences, 82, 105–115.
Mirás Calvo, M. Á., Quinteiro Sandomingo, C., and Sánchez-Rodríguez, E. (2020). The boundary of the core of a balanced game: faces games. International Journal of Game Theory, 49(2), 579-599.
NSset, NScheck, comparisonallocations
# Projected SEC rule, CEC rule and SM rule for 3 agents c <- c(5, 10, 20) # Cost vector plotallocations(c, list(SECrule(c), CECrule(c), SMrule(c)), "2D", "projection", contributions_names = c("SEC", "CEC", "SM")) # Real an projected SM rule and PRIOR rule for 3 agentes c <- c(1, 2, 3) # Cost vector SM <- SMrule(c) PRIOR <- PRIORrule(c, order = c(2, 3, 1)) plotallocations(c, list(SM, PRIOR), "3D", "both") # Projected CEB rule and weighted CEB rule for 4 agents c <- c(3, 3, 3, 10) # Cost vector w <- c(1, 4, 8, 2) # Weight vector CEB <- basicrule(c, "CEB") wCEB <- weightedrule(c, w, "CEB") plotallocations(c, list(CEB, wCEB), contributions_names = c("CEB", "wCEB"))# Projected SEC rule, CEC rule and SM rule for 3 agents c <- c(5, 10, 20) # Cost vector plotallocations(c, list(SECrule(c), CECrule(c), SMrule(c)), "2D", "projection", contributions_names = c("SEC", "CEC", "SM")) # Real an projected SM rule and PRIOR rule for 3 agentes c <- c(1, 2, 3) # Cost vector SM <- SMrule(c) PRIOR <- PRIORrule(c, order = c(2, 3, 1)) plotallocations(c, list(SM, PRIOR), "3D", "both") # Projected CEB rule and weighted CEB rule for 4 agents c <- c(3, 3, 3, 10) # Cost vector w <- c(1, 4, 8, 2) # Weight vector CEB <- basicrule(c, "CEB") wCEB <- weightedrule(c, w, "CEB") plotallocations(c, list(CEB, wCEB), contributions_names = c("CEB", "wCEB"))
PRIORrule calculates the contribution vector selected by a priority rule.
PRIORrule(c, order = NULL)PRIORrule(c, order = NULL)
c |
A numeric cost vector. |
order |
A numeric vector indicating the priority order of agents when making contributions. By default, agents follow their original indexing and contribute accordingly. |
For each and each , a priority rule relative to is defined by
In this rule, each agent contributes at a different step, so that each one pays all that is necessary until reaching the no-subsidy constraint. Consequently, the agents who arrive first cover the cost of all subsequent agents whose cost is lower.
A numeric contribution vector, where each element represents the payment of the different agents.
Bernárdez Ferradás, A., Mirás Calvo, M. Á., Quinteiro Sandomingo, C., and Sánchez-Rodríguez, E. (2025). Airport problems with cloned agents. [Preprint manuscript].
Thomson, W. (2024). Cost allocation and airport problems. Mathematical Social Sciences, 31(C), 17–31.
NSfaces, basicrule, hierarchicalrule
# Ascending order c <- c(1, 3, 7, 10) # Cost vector PRIORrule(c) # Fluctuating order c <- c(1, 3, 7, 10) # Cost vector order <- c(2, 1, 4, 3) # Priority order PRIORrule(c, order)# Ascending order c <- c(1, 3, 7, 10) # Cost vector PRIORrule(c) # Fluctuating order c <- c(1, 3, 7, 10) # Cost vector order <- c(2, 1, 4, 3) # Priority order PRIORrule(c, order)
SECrule calculates the contribution vector selected by the SEC rule.
SECrule(c)SECrule(c)
c |
A numeric cost vector. |
For each and each , the sequential equal contributions rule is defined by
This rule is based on applying an equal division to each segment separately, so that all agents using a given segment contribute equally to its cost. Each agent's contribution is then obtained as a sum of terms, one for each of the segments they use.
The contribution selected by the SEC rule for a problem coincides with the payoff vector assigned
by the Shapley value to the associated cost game , that is, .
A numeric contribution vector, where each element represents the payment of the different agents.
Chun, Y., Hu, C.-C., and Yeh, C. (2012). Characterizations of the sequential equal contributions rule for the airport problem. International Journal of Economic Theory, 8, 77-85.
Littlechild, S.C. and Owen, G. (1973). A simple expression for the Shapley value in a special case. Management Science, 20, 370-372.
Thomson, W. (2024). Cost allocation and airport problems. Mathematical Social Sciences, 31(C), 17–31.
basicrule, weightedrule, clonesrule, hierarchicalrule
c <- c(1, 3, 7, 10) # Cost vector SECrule(c)c <- c(1, 3, 7, 10) # Cost vector SECrule(c)
SFCrule calculates the contribution vector selected by the SFC rule.
SFCrule(c)SFCrule(c)
c |
A numeric cost vector. |
For each and each , let } and let be defined by ,
the sequential full contribution rule is defined by
According to this rule, an agent does not assist other agents with smaller needs than his own in covering the costs they require, even though he uses the same segments they use (similarly, he does not receive any assistance in covering his own segmental cost from agents with greater needs than his, even though these agents also use his segment). If multiple agents have the same cost parameters, they equally share the cost of the common segment they use.
A numeric contribution vector, where each element represents the payment of the different agents.
Bernárdez Ferradás, A., Mirás Calvo, M. Á., Quinteiro Sandomingo, C., and Sánchez-Rodríguez, E. (2025). Airport problems with cloned agents. [Preprint manuscript].
Thomson, W. (2024). Cost allocation and airport problems. Mathematical Social Sciences, 31(C), 17–31.
PRIORrule, basicrule, weightedrule, hierarchicalrule
c <- c(1, 3, 7, 10) # Cost vector SFCrule(c)c <- c(1, 3, 7, 10) # Cost vector SFCrule(c)
SIGMArule calculates the contribution vector selected by a SIGMA rule.
SIGMArule(c, a = 0.5)SIGMArule(c, a = 0.5)
c |
A numeric cost vector. |
a |
A numeric value in the range [0,1], controlling the parameterization of the rule.
By default, |
Let . For each , each , and each , a rule is defined by
In this rule, the closer the parameter is to 0, the more equal the distribution of payments among the agents will be, and vice versa.
In fact, it is easy to verify that .
A numeric contribution vector, where each element represents the payment of the different agents.
Thomson, W. (2024). Cost allocation and airport problems. Mathematical Social Sciences, 31(C), 17–31.
van Gellekom, J. R. G. and Potters, J. A. M. (1999). Consistent solution rules for standard tree enterprises. Technical Report 9910, University of Nijmegen.
CECrule, SMrule, basicrule, hierarchicalrule
c <- c(1, 3, 7, 10) # Cost vector SIGMArule(c) # a=0.5 # The SIGMA rule with a=0 is the CEC rule a <- 0 all.equal(SIGMArule(c, a), CECrule(c)) # The SIGMA rule with a=1 is the SM rule a <- 1 all.equal(SIGMArule(c, a), SMrule(c))c <- c(1, 3, 7, 10) # Cost vector SIGMArule(c) # a=0.5 # The SIGMA rule with a=0 is the CEC rule a <- 0 all.equal(SIGMArule(c, a), CECrule(c)) # The SIGMA rule with a=1 is the SM rule a <- 1 all.equal(SIGMArule(c, a), SMrule(c))
SMrule calculates the contribution vector selected by the SM rule.
SMrule(c)SMrule(c)
c |
A numeric cost vector. |
For each and each , the slack maximizer rule is defined by
This rule aims to maximize the 'slacks', that is, the available margin for each agent within the imposed constraints.
The contribution selected by the SM rule for a problem coincides with the payoff vector assigned
by the nucleolus to the associated cost game , that is, .
A numeric contribution vector, where each element represents the payment of the different agents.
Littlechild, S. C. (1974). A simple expression for the nucleolus in a special case. International Journal of Game Theory, 3(1), 21-29.
Thomson, W. (2024). Cost allocation and airport problems. Mathematical Social Sciences, 31(C), 17–31.
SIGMArule, basicrule, hierarchicalrule
c <- c(1, 3, 7, 10) # Cost vector SMrule(c)c <- c(1, 3, 7, 10) # Cost vector SMrule(c)
Data containing 4 variables with information about the round-trip journeys of university students traveling by bus from the Morrazo region (Galicia, Spain) to the University of Vigo.
universitybusuniversitybus
A data frame with 13 rows and 4 columns (variables):
Area where each student boards and alights from the bus
Town to which each student belongs
Distance in kilometers of the road route (bus path) between a district and the University of Vigo
Number of passengers per district
Own elaboration based on data retrieved from Google Maps (accessed on April 25, 2025).
# We assume that the bus is entirely funded by the municipalities # How are the cots distributed among them? # Allocation by district (in km) by_district <- multiclonesrules(universitybus$distance, universitybus$passengers, agents_names = universitybus$district, labels = FALSE) # Allocation by town (in km) district_to_town <- setNames(universitybus$town, universitybus$district) by_town <- t(rowsum(t(by_district), group = district_to_town[colnames(by_district)])) print(by_town) # Cost allocation by town (in euros) cT <- 500 # Total cost of the journey (bus rental cost + variable costs) max_dist <- max(universitybus$distance) # maximum distance by_town_cost <- round(by_town * (cT / max_dist), 2) # km to euros print(by_town_cost)# We assume that the bus is entirely funded by the municipalities # How are the cots distributed among them? # Allocation by district (in km) by_district <- multiclonesrules(universitybus$distance, universitybus$passengers, agents_names = universitybus$district, labels = FALSE) # Allocation by town (in km) district_to_town <- setNames(universitybus$town, universitybus$district) by_town <- t(rowsum(t(by_district), group = district_to_town[colnames(by_district)])) print(by_town) # Cost allocation by town (in euros) cT <- 500 # Total cost of the journey (bus rental cost + variable costs) max_dist <- max(universitybus$distance) # maximum distance by_town_cost <- round(by_town * (cT / max_dist), 2) # km to euros print(by_town_cost)
weightedrule calculates the contribution vector resulting from the payment allocation among the different agents using one of the various predefined weighted rules.
weightedrule(c, w, rule)weightedrule(c, w, rule)
c |
A numeric cost vector. |
w |
A numeric weight vector. |
rule |
A character string specifying the rule to apply.The rules that can be selected are:
|
Let be a positive weight vector, satisfying for all
and . Consider the ()-standard simplex, defined as .
Then, the set of all positive weight vectors corresponds to , the interior of the
-standard simplex.
A weighted rule is a mapping
which associates with a problem and a positive weight vector a contribution
vector .
It is possible to define weighted versions of the rules: SFC, SEC, CEC, CP and CEB. In fact, two different rules
emerge from the standard SEC rule: the weighted SEC rule and the coalition-weighted SEC rule. If for all , then the solution of weighted SEC and
weighted CSEC coincides.
In all the rules, the higher the weight , the more the corresponding agent will have to pay, except for the weighted CEB rule
(the construction of this rule is based on the concept of allocating 'benefits', so it is logical that it is set up this way).
Furthermore, as previously stated, all the rules, except for the weighted CSEC rule, require the weights to be positive.
Although the weighted CSEC rule allows zero weights, it requires that at least one weight must be positive.
The weighted version of the SFC, SEC, CEC and CP rules is equal to their respective versions for clones, so the formulation of these rules will be the same for the version with clones. Only the CEB rule has a weighted version and a clone version that are different.
A numeric contribution vector, where each element represents the payment of the different agents.
Bernárdez Ferradás, A., Mirás Calvo, M. Á., Quinteiro Sandomingo, C., and Sánchez-Rodríguez, E. (2025a). Airport problems with cloned agents. [Preprint manuscript].
Bernárdez Ferradás, A., Mirás Calvo, M. Á., Quinteiro Sandomingo, C., and Sánchez-Rodríguez, E. (2025b). A characterization of the CSEC rule for airport problems. [Prepint manuscript].
Sánchez-Rodríguez, E., Mirás Calvo, M. Á., Quinteiro Sandomingo, C., and Núñez Lugilde, I. (2024). Coalition-weighted Shapley values. International Journal of Game Theory, 53, 547-577.
Thomson, W. (2024). Cost allocation and airport problems. Mathematical Social Sciences, 31(C), 17–31.
NScheck, NSset, basicrule, clonesrule
c <- c(1, 3, 3, 7, 10) # Cost vector w <- c(1, 4, 1, 2, 8) # Weight vector # Weighted SFC rule weightedrule(c, w, "SFC") # Weighted CEB rule weightedrule(c, w, "CEB") # Weighted SEC rule weightedrule(c, w, "SEC") # Weighted CSEC rule w <- c(0, 4, 1, 2, 8) # New weight vector weightedrule(c, w, "CSEC")c <- c(1, 3, 3, 7, 10) # Cost vector w <- c(1, 4, 1, 2, 8) # Weight vector # Weighted SFC rule weightedrule(c, w, "SFC") # Weighted CEB rule weightedrule(c, w, "CEB") # Weighted SEC rule weightedrule(c, w, "SEC") # Weighted CSEC rule w <- c(0, 4, 1, 2, 8) # New weight vector weightedrule(c, w, "CSEC")