Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[docs] move manual section on Semicontinuous and Semiinteger variables #3562

Merged
merged 3 commits into from
Nov 6, 2023
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 0 additions & 28 deletions docs/src/manual/constraints.md
Original file line number Diff line number Diff line change
Expand Up @@ -1296,34 +1296,6 @@ julia> @constraint(model, [t; u; x] in RotatedSecondOrderCone())
[t, u, x[1], x[2]] ∈ MathOptInterface.RotatedSecondOrderCone(4)
```

## Semi-integer and semi-continuous variables

Semi-continuous variables are constrained to the set
``x \in \{0\} \cup [l, u]``.

Create a semi-continuous variable using the [`Semicontinuous`](@ref) set:
```jldoctest
julia> model = Model();

julia> @variable(model, x);

julia> @constraint(model, x in Semicontinuous(1.5, 3.5))
x in MathOptInterface.Semicontinuous{Float64}(1.5, 3.5)
```

Semi-integer variables are constrained to the set
``x \in \{0\} \cup \{l, l+1, \dots, u\}``.

Create a semi-integer variable using the [`Semiinteger`](@ref) set:
```jldoctest
julia> model = Model();

julia> @variable(model, x);

julia> @constraint(model, x in Semiinteger(1.0, 3.0))
x in MathOptInterface.Semiinteger{Float64}(1.0, 3.0)
```

## Special Ordered Sets of Type 1

In a Special Ordered Set of Type 1 (often denoted SOS-I or SOS1), at most one
Expand Down
24 changes: 24 additions & 0 deletions docs/src/manual/variables.md
Original file line number Diff line number Diff line change
Expand Up @@ -640,6 +640,30 @@ julia> set_integer(x)
in the model, returning a function that can be called to undo the operation
later on.

## Semi-integer and semi-continuous variables

Semi-continuous variables are constrained to the set
``x \in \{0\} \cup [l, u]``.

Create a semi-continuous variable using the [`Semicontinuous`](@ref) set:
```jldoctest
julia> model = Model();

julia> @variable(model, x in Semicontinuous(1.5, 3.5))
x
```

Semi-integer variables are constrained to the set
``x \in \{0\} \cup \{l, l+1, \dots, u\}``.

Create a semi-integer variable using the [`Semiinteger`](@ref) set:
```jldoctest
julia> model = Model();

julia> @variable(model, x in Semiinteger(1.0, 3.0))
x
```

## Start values

There are two ways to provide a primal starting solution (also called MIP-start
Expand Down
31 changes: 22 additions & 9 deletions docs/src/tutorials/linear/tips_and_tricks.jl
Original file line number Diff line number Diff line change
Expand Up @@ -237,15 +237,6 @@ M = 100

# ## Semi-continuous variables

# !!! info
# This section uses sets from [MathOptInterface](@ref moi_documentation).
# By default, JuMP exports the `MOI` symbol as an alias for the
# MathOptInterface.jl package. We recommend making this more explicit in
# your code by adding the following lines:
# ```julia
# import MathOptInterface as MOI
# ```

# A semi-continuous variable is a continuous variable between bounds $[l,u]$
# that also can assume the value zero, that is:
# $$x \in \{0\} \cup [l,u].$$
Expand All @@ -255,6 +246,17 @@ M = 100
model = Model();
@variable(model, x in Semicontinuous(1.0, 2.0))

# You can also represent a semi-continuous variable using the reformulation:

model = Model();
@variable(model, x)
@variable(model, z, Bin)
@constraint(model, x <= 2 * z)
@constraint(model, x >= 1 * z)

# When `z = 0` the two constraints are equivalent to `0 <= x <= 0`. When `z = 1`,
# the two constraints are equivalennt to `1 <= x <= 2`.
odow marked this conversation as resolved.
Show resolved Hide resolved

# ## Semi-integer variables

# A semi-integer variable is a variable which assumes integer values between
Expand All @@ -264,6 +266,17 @@ model = Model();
model = Model();
@variable(model, x in Semiinteger(5.0, 10.0))

# You can also represent a semi-integer variable using the reformulation:

model = Model();
@variable(model, x, Int)
@variable(model, z, Bin)
@constraint(model, x <= 10 * z)
@constraint(model, x >= 5 * z)

# When `z = 0` the two constraints are equivalent to `0 <= x <= 0`. When `z = 1`,
# the two constraints are equivalennt to `5 <= x <= 10`.
odow marked this conversation as resolved.
Show resolved Hide resolved

# ## Special Ordered Sets of Type 1

# A Special Ordered Set of Type 1 is a set of variables, at most one of which
Expand Down
Loading