Try our new documentation site (beta).
Filter Content By
Version
Text Search
${sidebar_list_label} - Back
Filter by Language
GCFuncnonlinear.java
/* 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. */ import com.gurobi.gurobi.*; public class GCFuncnonlinear { private static void printsol(GRBModel m, GRBVar x) throws GRBException { assert(m.get(GRB.IntAttr.Status) == GRB.OPTIMAL); System.out.println("x = " + x.get(GRB.DoubleAttr.X)); System.out.println("Obj = " + m.get(GRB.DoubleAttr.ObjVal)); } public static void main(String[] args) { try { // Create environment GRBEnv env = new GRBEnv(); // Create a new model GRBModel m = new GRBModel(env); // Create variables GRBVar x = m.addVar(-1.0, 4.0, 0.0, GRB.CONTINUOUS, "x"); GRBVar twox = m.addVar(-2.0, 8.0, 0.0, GRB.CONTINUOUS, "twox"); GRBVar sinx = m.addVar(-1.0, 1.0, 0.0, GRB.CONTINUOUS, "sinx"); GRBVar cos2x = m.addVar(-1.0, 1.0, 0.0, GRB.CONTINUOUS, "cos2x"); GRBVar expx = m.addVar(0.0, GRB.INFINITY, 0.0, GRB.CONTINUOUS, "expx"); // Set objective GRBLinExpr obj = new GRBLinExpr(); obj.addTerm(1.0, sinx); obj.addTerm(1.0, cos2x); obj.addConstant(1.0); m.setObjective(obj, GRB.MINIMIZE); // Add linear constraints GRBLinExpr expr = new GRBLinExpr(); expr.addTerm(0.25, expx); expr.addTerm(-1.0, x); m.addConstr(expr, GRB.LESS_EQUAL, 0.0, "l1"); expr = new GRBLinExpr(); expr.addTerm(2.0, x); expr.addTerm(-1.0, twox); m.addConstr(expr, GRB.EQUAL, 0.0, "l2"); // Add general function constraints // sinx = sin(x) GRBGenConstr gcf1 = m.addGenConstrSin(x, sinx, "gcf1", null); // cos2x = cos(twox) GRBGenConstr gcf2 = m.addGenConstrCos(twox, cos2x, "gcf2", null); // expx = exp(x) GRBGenConstr gcf3 = m.addGenConstrExp(x, expx, "gcf3", null); // Approach 1) Set FuncNonlinear parameter m.set(GRB.IntParam.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.set(GRB.IntParam.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 (GRBException e) { System.out.println("Error code: " + e.getErrorCode() + ". " + e.getMessage()); } } }