Skip to content

Constraint Feasibility Checks & Actions #46

@pedromxavier

Description

@pedromxavier

When generating penalty functions for constraints like $$a x + b \le 0$$ i.e. $$g(x) \le 0$$ one might go for $$\rho_k (g_k(x) + s)^{2} = 0, g(x) \in \text{PBF}$$ to compose the objective function.

As it is expected from PBF's that go $$ g: \mathbb{B}^{n} \to [a, b] $$, we can compute $$ [l, u] $$ such that $$ [a, b] \subseteq [l, u] $$ which gives us checks on wheter the function is infeasible or even always feasible. Tests against MOI's Knapsack were successful in detecting this case.

The question is: what to do when such things happen?

My first suggestion is:

# -*- Bounds & Slack Variable -*-
l, u = PBO.bounds(g)

s = if u < zero(T) # Always feasible
    @warn "Always-feasible constraint detected"
    continue
elseif l > zero(T) # Infeasible
    @warn "Infeasible constraint detected"
    error()
else
    VM.expansion(VM.encode!(VM.Binary, model, nothing, zero(T), abs(l)))
end

Although, I also suggest for continue and error() to be triggered by flags such as :ignore_feasible and :error_infeasible. Setting MOI termination status seems appropriate in the latter.

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionFurther information is requested

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions