Try our new documentation site (beta).
Filter Content By
Version
Text Search
${sidebar_list_label} - Back
Filter by Language
gc_funcnonlinear_vb.vb
' Copyright 2024, Gurobi Optimization, LLC ' ' This example considers the following nonconvex nonlinear problem ' ' minimize sin(x) + cos(2*x) + 1 ' subject to 0.25*exp(x) - x <= 0 ' -1 <= x <= 4 ' ' We show you two approaches to solve it as a nonlinear model: ' ' 1) Set the paramter FuncNonlinear = 1 to handle all general function ' constraints as true nonlinear functions. ' ' 2) Set the attribute FuncNonlinear = 1 for each general function ' constraint to handle these as true nonlinear functions. ' Imports System Imports Gurobi Class gc_funcnonlinear_vb Shared Sub printsol(m As GRBModel, x As GRBVar) Console.WriteLine("x = " & x.X) Console.WriteLine("Obj = " & m.ObjVal) End Sub Shared Sub Main() Try ' Create environment Dim env As New GRBEnv() ' Create a new m Dim m As New GRBModel(env) Dim x As GRBVar = m.AddVar(-1.0, 4.0, 0.0, GRB.CONTINUOUS, "x") Dim twox As GRBVar = m.AddVar(-2.0, 8.0, 0.0, GRB.CONTINUOUS, "twox") Dim sinx As GRBVar = m.AddVar(-1.0, 1.0, 0.0, GRB.CONTINUOUS, "sinx") Dim cos2x As GRBVar = m.AddVar(-1.0, 1.0, 0.0, GRB.CONTINUOUS, "cos2x") Dim expx As GRBVar = m.AddVar(0.0, GRB.INFINITY, 0.0, GRB.CONTINUOUS, "expx") ' Set objective m.SetObjective(sinx + cos2x + 1, GRB.MINIMIZE) ' Add linear constraints m.AddConstr(0.25*expx - x <= 0, "l1") m.AddConstr(2*x - twox = 0, "l2") ' Add general function constraints ' sinx = sin(x) Dim gcf1 As GRBGenConstr = m.AddGenConstrSin(x, sinx, "gcf1", "") ' cos2x = cos(twox) Dim gcf2 As GRBGenConstr = m.AddGenConstrCos(twox, cos2x, "gcf2", "") ' expx = exp(x) Dim gcf3 As GRBGenConstr = m.AddGenConstrExp(x, expx, "gcf3", "") ' Approach 1) Set FuncNonlinear parameter m.Parameters.FuncNonlinear = 1 ' Optimize the model and print solution m.Optimize() printsol(m, x) ' Restore unsolved state and set parameter FuncNonlinear to ' its default value m.Reset() m.Parameters.FuncNonlinear = 0 ' Approach 2) Set FuncNonlinear attribute for every ' general function constraint gcf1.Set(GRB.IntAttr.FuncNonlinear, 1) gcf2.Set(GRB.IntAttr.FuncNonlinear, 1) gcf3.Set(GRB.IntAttr.FuncNonlinear, 1) ' Optimize the model and print solution m.Optimize() printsol(m, x) ' Dispose of model and environment m.Dispose() env.Dispose() Catch e As GRBException Console.WriteLine("Error code: " + e.ErrorCode + ". " + e.Message) End Try End Sub End Class