This section includes source code for all of the Gurobi qcp examples.The same source code can be found in theexamples directory of theGurobi distribution.
/* Copyright 2025, Gurobi Optimization, LLC *//* This example formulates and solves the following simple QCP model: maximize x subject to x + y + z = 1 x^2 + y^2 <= z^2 (second-order cone) x^2 <= yz (rotated second-order cone) x, y, z non-negative*/#include<stdlib.h>#include<stdio.h>#include"gurobi_c.h"intmain(intargc,char*argv[]){GRBenv*env=NULL;GRBmodel*model=NULL;interror=0;doublesol[3];intind[3];doubleval[3];doubleobj[]={1,0,0};intqrow[3];intqcol[3];doubleqval[3];intoptimstatus;doubleobjval;/* Create environment */error=GRBloadenv(&env,"qcp.log");if(error)gotoQUIT;/* Create an empty model */error=GRBnewmodel(env,&model,"qcp",0,NULL,NULL,NULL,NULL,NULL);if(error)gotoQUIT;/* Add variables */error=GRBaddvars(model,3,0,NULL,NULL,NULL,obj,NULL,NULL,NULL,NULL);if(error)gotoQUIT;/* Change sense to maximization */error=GRBsetintattr(model,GRB_INT_ATTR_MODELSENSE,GRB_MAXIMIZE);if(error)gotoQUIT;/* Linear constraint: x + y + z = 1 */ind[0]=0;ind[1]=1;ind[2]=2;val[0]=1;val[1]=1;val[2]=1;error=GRBaddconstr(model,3,ind,val,GRB_EQUAL,1.0,"c0");if(error)gotoQUIT;/* Cone: x^2 + y^2 <= z^2 */qrow[0]=0;qcol[0]=0;qval[0]=1.0;qrow[1]=1;qcol[1]=1;qval[1]=1.0;qrow[2]=2;qcol[2]=2;qval[2]=-1.0;error=GRBaddqconstr(model,0,NULL,NULL,3,qrow,qcol,qval,GRB_LESS_EQUAL,0.0,"qc0");if(error)gotoQUIT;/* Rotated cone: x^2 <= yz */qrow[0]=0;qcol[0]=0;qval[0]=1.0;qrow[1]=1;qcol[1]=2;qval[1]=-1.0;error=GRBaddqconstr(model,0,NULL,NULL,2,qrow,qcol,qval,GRB_LESS_EQUAL,0.0,"qc1");if(error)gotoQUIT;/* Optimize model */error=GRBoptimize(model);if(error)gotoQUIT;/* Write model to 'qcp.lp' */error=GRBwrite(model,"qcp.lp");if(error)gotoQUIT;/* Capture solution information */error=GRBgetintattr(model,GRB_INT_ATTR_STATUS,&optimstatus);if(error)gotoQUIT;error=GRBgetdblattr(model,GRB_DBL_ATTR_OBJVAL,&objval);if(error)gotoQUIT;error=GRBgetdblattrarray(model,GRB_DBL_ATTR_X,0,3,sol);if(error)gotoQUIT;printf("\nOptimization complete\n");if(optimstatus==GRB_OPTIMAL){printf("Optimal objective: %.4e\n",objval);printf(" x=%.2f, y=%.2f, z=%.2f\n",sol[0],sol[1],sol[2]);}elseif(optimstatus==GRB_INF_OR_UNBD){printf("Model is infeasible or unbounded\n");}else{printf("Optimization was stopped early\n");}QUIT:/* Error reporting */if(error){printf("ERROR: %s\n",GRBgeterrormsg(env));exit(1);}/* Free model */GRBfreemodel(model);/* Free environment */GRBfreeenv(env);return0;}
/* Copyright 2025, Gurobi Optimization, LLC *//* This example formulates and solves the following simple QCP model: maximize x subject to x + y + z = 1 x^2 + y^2 <= z^2 (second-order cone) x^2 <= yz (rotated second-order cone) x, y, z non-negative*/#include"gurobi_c++.h"usingnamespacestd;intmain(intargc,char*argv[]){try{GRBEnvenv=GRBEnv();GRBModelmodel=GRBModel(env);// Create variablesGRBVarx=model.addVar(0.0,GRB_INFINITY,0.0,GRB_CONTINUOUS,"x");GRBVary=model.addVar(0.0,GRB_INFINITY,0.0,GRB_CONTINUOUS,"y");GRBVarz=model.addVar(0.0,GRB_INFINITY,0.0,GRB_CONTINUOUS,"z");// Set objectiveGRBLinExprobj=x;model.setObjective(obj,GRB_MAXIMIZE);// Add linear constraint: x + y + z = 1model.addConstr(x+y+z==1,"c0");// Add second-order cone: x^2 + y^2 <= z^2model.addQConstr(x*x+y*y<=z*z,"qc0");// Add rotated cone: x^2 <= yzmodel.addQConstr(x*x<=y*z,"qc1");// Optimize modelmodel.optimize();cout<<x.get(GRB_StringAttr_VarName)<<" "<<x.get(GRB_DoubleAttr_X)<<endl;cout<<y.get(GRB_StringAttr_VarName)<<" "<<y.get(GRB_DoubleAttr_X)<<endl;cout<<z.get(GRB_StringAttr_VarName)<<" "<<z.get(GRB_DoubleAttr_X)<<endl;cout<<"Obj: "<<model.get(GRB_DoubleAttr_ObjVal)<<endl;}catch(GRBExceptione){cout<<"Error code = "<<e.getErrorCode()<<endl;cout<<e.getMessage()<<endl;}catch(...){cout<<"Exception during optimization"<<endl;}return0;}
/* Copyright 2025, Gurobi Optimization, LLC *//* This example formulates and solves the following simple QCP model: maximize x subject to x + y + z = 1 x^2 + y^2 <= z^2 (second-order cone) x^2 <= yz (rotated second-order cone) x, y, z non-negative*/usingSystem;usingGurobi;classqcp_cs{staticvoidMain(){try{GRBEnvenv=newGRBEnv("qcp.log");GRBModelmodel=newGRBModel(env);// Create variablesGRBVarx=model.AddVar(0.0,GRB.INFINITY,0.0,GRB.CONTINUOUS,"x");GRBVary=model.AddVar(0.0,GRB.INFINITY,0.0,GRB.CONTINUOUS,"y");GRBVarz=model.AddVar(0.0,GRB.INFINITY,0.0,GRB.CONTINUOUS,"z");// Set objectiveGRBLinExprobj=x;model.SetObjective(obj,GRB.MAXIMIZE);// Add linear constraint: x + y + z = 1model.AddConstr(x+y+z==1.0,"c0");// Add second-order cone: x^2 + y^2 <= z^2model.AddQConstr(x*x+y*y<=z*z,"qc0");// Add rotated cone: x^2 <= yzmodel.AddQConstr(x*x<=y*z,"qc1");// Optimize modelmodel.Optimize();Console.WriteLine(x.VarName+" "+x.X);Console.WriteLine(y.VarName+" "+y.X);Console.WriteLine(z.VarName+" "+z.X);Console.WriteLine("Obj: "+model.ObjVal+" "+obj.Value);// Dispose of model and envmodel.Dispose();env.Dispose();}catch(GRBExceptione){Console.WriteLine("Error code: "+e.ErrorCode+". "+e.Message);}}}
/* Copyright 2025, Gurobi Optimization, LLC *//* This example formulates and solves the following simple QCP model: maximize x subject to x + y + z = 1 x^2 + y^2 <= z^2 (second-order cone) x^2 <= yz (rotated second-order cone) x, y, z non-negative*/importcom.gurobi.gurobi.*;publicclassQcp{publicstaticvoidmain(String[]args){try{GRBEnvenv=newGRBEnv("qcp.log");GRBModelmodel=newGRBModel(env);// Create variablesGRBVarx=model.addVar(0.0,GRB.INFINITY,0.0,GRB.CONTINUOUS,"x");GRBVary=model.addVar(0.0,GRB.INFINITY,0.0,GRB.CONTINUOUS,"y");GRBVarz=model.addVar(0.0,GRB.INFINITY,0.0,GRB.CONTINUOUS,"z");// Set objectiveGRBLinExprobj=newGRBLinExpr();obj.addTerm(1.0,x);model.setObjective(obj,GRB.MAXIMIZE);// Add linear constraint: x + y + z = 1GRBLinExprexpr=newGRBLinExpr();expr.addTerm(1.0,x);expr.addTerm(1.0,y);expr.addTerm(1.0,z);model.addConstr(expr,GRB.EQUAL,1.0,"c0");// Add second-order cone: x^2 + y^2 <= z^2GRBQuadExprqexpr=newGRBQuadExpr();qexpr.addTerm(1.0,x,x);qexpr.addTerm(1.0,y,y);qexpr.addTerm(-1.0,z,z);model.addQConstr(qexpr,GRB.LESS_EQUAL,0.0,"qc0");// Add rotated cone: x^2 <= yzqexpr=newGRBQuadExpr();qexpr.addTerm(1.0,x,x);qexpr.addTerm(-1.0,y,z);model.addQConstr(qexpr,GRB.LESS_EQUAL,0.0,"qc1");// Optimize modelmodel.optimize();System.out.println(x.get(GRB.StringAttr.VarName)+" "+x.get(GRB.DoubleAttr.X));System.out.println(y.get(GRB.StringAttr.VarName)+" "+y.get(GRB.DoubleAttr.X));System.out.println(z.get(GRB.StringAttr.VarName)+" "+z.get(GRB.DoubleAttr.X));System.out.println("Obj: "+model.get(GRB.DoubleAttr.ObjVal)+" "+obj.getValue());System.out.println();// Dispose of model and environmentmodel.dispose();env.dispose();}catch(GRBExceptione){System.out.println("Error code: "+e.getErrorCode()+". "+e.getMessage());}}}
functionqcp()% Copyright 2025, Gurobi Optimization, LLC%% This example formulates and solves the following simple QCP model:% maximize% x% subject to% x + y + z = 1% x^2 + y^2 <= z^2 (second-order cone)% x^2 <= yz (rotated second-order cone)% x, y, z non-negativenames={'x','y','z'};model.varnames=names;% Set objective: xmodel.obj=[100];model.modelsense='max';% Add constraint: x + y + z = 1model.A=sparse([111]);model.rhs=1;model.sense='=';% Add second-order cone: x^2 + y^2 <= z^2 using a sparse matrixmodel.quadcon(1).Qc=sparse([100;010;00-1]);model.quadcon(1).q=zeros(3,1);model.quadcon(1).rhs=0.0;model.quadcon(1).name='std_cone';% Add rotated cone: x^2 <= yz using sparse triplet representation% Equivalent sparse matrix data:%model.quadcon(2).Qc = sparse([% 1 0 0;% 0 0 -1;% 0 0 0]);model.quadcon(2).Qrow=[1,2]model.quadcon(2).Qcol=[1,3]model.quadcon(2).Qval=[1,-1]% All-zero sparse 3-by-1 vectormodel.quadcon(2).q=sparse(3,1);model.quadcon(2).rhs=0.0;model.quadcon(2).name='rot_cone';gurobi_write(model,'qcp.lp');result=gurobi(model);forj=1:3fprintf('%s %e\n',names{j},result.x(j))endfprintf('Obj: %e\n',result.objval);end
#!/usr/bin/env python3# Copyright 2025, Gurobi Optimization, LLC# This example formulates and solves the following simple QCP model:# maximize x# subject to x + y + z = 1# x^2 + y^2 <= z^2 (second-order cone)# x^2 <= yz (rotated second-order cone)# x, y, z non-negativeimportgurobipyasgpfromgurobipyimportGRB# Create a new modelm=gp.Model("qcp")# Create variablesx=m.addVar(name="x")y=m.addVar(name="y")z=m.addVar(name="z")# Set objective: xobj=1.0*xm.setObjective(obj,GRB.MAXIMIZE)# Add constraint: x + y + z = 1m.addConstr(x+y+z==1,"c0")# Add second-order cone: x^2 + y^2 <= z^2m.addConstr(x**2+y**2<=z**2,"qc0")# Add rotated cone: x^2 <= yzm.addConstr(x**2<=y*z,"qc1")m.optimize()forvinm.getVars():print(f"{v.VarName}{v.X:g}")print(f"Obj:{m.ObjVal:g}")
# Copyright 2025, Gurobi Optimization, LLC## This example formulates and solves the following simple QCP model:# maximize# x# subject to# x + y + z = 1# x^2 + y^2 <= z^2 (second-order cone)# x^2 <= yz (rotated second-order cone)# x, y, z non-negativelibrary(gurobi)library(Matrix)model<-list()model$A<-matrix(c(1,1,1),nrow=1,byrow=T)model$modelsense<-'max'model$obj<-c(1,0,0)model$rhs<-c(1)model$sense<-c('=')# First quadratic constraint: x^2 + y^2 - z^2 <= 0qc1<-list()qc1$Qc<-spMatrix(3,3,c(1,2,3),c(1,2,3),c(1.0,1.0,-1.0))qc1$rhs<-0.0# Second quadratic constraint: x^2 - yz <= 0qc2<-list()qc2$Qc<-spMatrix(3,3,c(1,2),c(1,3),c(1.0,-1.0))qc2$rhs<-0.0model$quadcon<-list(qc1,qc2)result<-gurobi(model)print(result$objval)print(result$x)# Clear spacerm(model,result)
' Copyright 2025, Gurobi Optimization, LLC' This example formulates and solves the following simple QCP model:'' maximize x' subject to x + y + z = 1' x^2 + y^2 <= z^2 (second-order cone)' x^2 <= yz (rotated second-order cone)' x, y, z non-negativeImportsGurobiClassqcp_vbSharedSubMain()TryDimenvAsNewGRBEnv("qcp.log")DimmodelAsNewGRBModel(env)' Create variablesDimxAsGRBVar=model.AddVar(0.0,GRB.INFINITY,0.0,GRB.CONTINUOUS,"x")DimyAsGRBVar=model.AddVar(0.0,GRB.INFINITY,0.0,GRB.CONTINUOUS,"y")DimzAsGRBVar=model.AddVar(0.0,GRB.INFINITY,0.0,GRB.CONTINUOUS,"z")' Set objectiveDimobjAsGRBLinExpr=xmodel.SetObjective(obj,GRB.MAXIMIZE)' Add linear constraint: x + y + z = 1model.AddConstr(x+y+z=1.0,"c0")' Add second-order cone: x^2 + y^2 <= z^2model.AddQConstr(x*x+y*y<=z*z,"qc0")' Add rotated cone: x^2 <= yzmodel.AddQConstr(x*x<=y*z,"qc1")' Optimize modelmodel.Optimize()Console.WriteLine(x.VarName&" "&x.X)Console.WriteLine(y.VarName&" "&y.X)Console.WriteLine(z.VarName&" "&z.X)Console.WriteLine("Obj: "&model.ObjVal&" "&obj.Value)' Dispose of model and envmodel.Dispose()env.Dispose()CatcheAsGRBExceptionConsole.WriteLine("Error code: "&e.ErrorCode&". "&e.Message)EndTryEndSubEndClass
Help and Feedback