Hide navigation sidebar
Hide table of contents sidebar
Back to top
Toggle table of contents sidebar

# feasopt_vb.vb

    ' Copyright 2025, Gurobi Optimization, LLC
    '
    ' This example reads a MIP model from a file, adds artificial
    ' variables to each constraint, and then minimizes the sum of the
    ' artificial variables.  A solution with objective zero corresponds
    ' to a feasible solution to the input model.
    ' We can also use FeasRelax feature to do it. In this example, we
    ' use minrelax=1, i.e. optimizing the returned model finds a solution
    ' that minimizes the original objective, but only from among those
    ' solutions that minimize the sum of the artificial variables.

    Imports Gurobi
    Imports System

    Class feasopt_vb
        Shared Sub Main(ByVal args As String())

            If args.Length < 1 Then
                Console.WriteLine("Usage: feasopt_vb filename")
                Return
            End If

            Try
                Dim env As New GRBEnv()
                Dim feasmodel As New GRBModel(env, args(0))

                'Create a copy to use FeasRelax feature later
                Dim feasmodel1 As New GRBModel(feasmodel)

                ' Clear objective
                feasmodel.SetObjective(New GRBLinExpr())

                ' Add slack variables
                Dim c As GRBConstr() = feasmodel.GetConstrs()
                For i As Integer = 0 To c.Length - 1
                    Dim sense As Char = c(i).Sense
                    If sense <> ">"c Then
                        Dim constrs As GRBConstr() = New GRBConstr() {c(i)}
                        Dim coeffs As Double() = New Double() {-1}
                        feasmodel.AddVar(0.0, GRB.INFINITY, 1.0, GRB.CONTINUOUS, _
                                         constrs, coeffs, _
                                         "ArtN_" & c(i).ConstrName)
                    End If
                    If sense <> "<"c Then
                        Dim constrs As GRBConstr() = New GRBConstr() {c(i)}
                        Dim coeffs As Double() = New Double() {1}
                        feasmodel.AddVar(0.0, GRB.INFINITY, 1.0, GRB.CONTINUOUS, _
                                         constrs, coeffs, _
                                         "ArtP_" & c(i).ConstrName)
                    End If
                Next

                ' Optimize modified model
                feasmodel.Optimize()
                feasmodel.Write("feasopt.lp")

                ' Use FeasRelax feature */
                feasmodel1.FeasRelax(GRB.FEASRELAX_LINEAR, true, false, true)
                feasmodel1.Write("feasopt1.lp")
                feasmodel1.Optimize()

                ' Dispose of model and env
                feasmodel1.Dispose()
                feasmodel.Dispose()
                env.Dispose()

            Catch e As GRBException
                Console.WriteLine("Error code: " & e.ErrorCode & ". " & e.Message)
            End Try
        End Sub
    End Class

Help and Feedback

Press `/` or click to search this documentation | Gurobi website | Gurobi community forum
Go to other Gurobi documentation | Gurobi download | Contact support