Incentive compatibility constraints #309
-
Say I have a (mechanism design) problem where there are two agents Is there a way to encode these kinds of constraint in InfiniteOpt.jl? Here is an MWE for two agents with iid uniformly distributed types:
The incentive compatibility constraints here don't work in this form. |
Beta Was this translation helpful? Give feedback.
Replies: 2 comments 4 replies
-
Could you better clarify your notation? Given a function |
Beta Was this translation helpful? Give feedback.
-
Thanks for the clarifications. If I understand correctly, then we can try to express the 2 agent case: using InfiniteOpt, Distributions, Ipopt
model = InfiniteModel(Ipopt.Optimizer)
N = 1:2
num_samples = 10 # adjust to desired amount
@infinite_parameter(model, v[i in N] ~ Uniform(0,1), independent = true, num_supports = num_samples)
vp_samples = rand(Uniform(0, 1), num_samples) # InfiniteOpt doesn't allow us to swap infinite parameter arguments directly
@variables(model, begin
0 ≤ x[N] ≤ 1, Infinite(v[1], v[2])
t[N], Infinite(v[1], v[2])
end)
u(v,q,t) = v*q - t
# Define the incentive compatibility constraints
@constraint(model, [vp ∈ vp_samples], u(x[1], t[1], v[1]) ≥ u(x[1](vp, v[2]), t[1](vp, v[2]), vp))
@constraint(model, [vp ∈ vp_samples], u(x[2], t[2], v[2]) ≥ u(x[2](v[1], vp), t[2](v[1], vp), vp)) A few things to note here are
To alleviate the last point, there is a plan to allow arbitrary constraint domain restrictions which would allow us to ignore these additional support points in other constraints, but this isn't implemented yet. |
Beta Was this translation helpful? Give feedback.
Thanks for the clarifications. If I understand correctly, then we can try to express the 2 agent case: