This section includes source code for all of the Gurobi qp 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 QP model: minimize x^2 + x*y + y^2 + y*z + z^2 + 2 x subject to x + 2 y + 3 z >= 4 x + y >= 1 x, y, z non-negative It solves it once as a continuous model, and once as an integer model.*/#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];intqrow[5];intqcol[5];doubleqval[5];charvtype[3];intoptimstatus;doubleobjval;/* Create environment */error=GRBloadenv(&env,"qp.log");if(error)gotoQUIT;/* Create an empty model */error=GRBnewmodel(env,&model,"qp",0,NULL,NULL,NULL,NULL,NULL);if(error)gotoQUIT;/* Add variables */error=GRBaddvars(model,3,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);if(error)gotoQUIT;/* Quadratic objective terms */qrow[0]=0;qrow[1]=0;qrow[2]=1;qrow[3]=1;qrow[4]=2;qcol[0]=0;qcol[1]=1;qcol[2]=1;qcol[3]=2;qcol[4]=2;qval[0]=1;qval[1]=1;qval[2]=1;qval[3]=1;qval[4]=1;error=GRBaddqpterms(model,5,qrow,qcol,qval);if(error)gotoQUIT;/* Linear objective term */error=GRBsetdblattrelement(model,GRB_DBL_ATTR_OBJ,0,2.0);if(error)gotoQUIT;/* First constraint: x + 2 y + 3 z <= 4 */ind[0]=0;ind[1]=1;ind[2]=2;val[0]=1;val[1]=2;val[2]=3;error=GRBaddconstr(model,3,ind,val,GRB_GREATER_EQUAL,4.0,"c0");if(error)gotoQUIT;/* Second constraint: x + y >= 1 */ind[0]=0;ind[1]=1;val[0]=1;val[1]=1;error=GRBaddconstr(model,2,ind,val,GRB_GREATER_EQUAL,1.0,"c1");if(error)gotoQUIT;/* Optimize model */error=GRBoptimize(model);if(error)gotoQUIT;/* Write model to 'qp.lp' */error=GRBwrite(model,"qp.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=%.4f, y=%.4f, z=%.4f\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");}/* Modify variable types */vtype[0]=GRB_INTEGER;vtype[1]=GRB_INTEGER;vtype[2]=GRB_INTEGER;error=GRBsetcharattrarray(model,GRB_CHAR_ATTR_VTYPE,0,3,vtype);if(error)gotoQUIT;/* Optimize model */error=GRBoptimize(model);if(error)gotoQUIT;/* Write model to 'qp2.lp' */error=GRBwrite(model,"qp2.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=%.4f, y=%.4f, z=%.4f\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 QP model: minimize x^2 + x*y + y^2 + y*z + z^2 + 2 x subject to x + 2 y + 3 z >= 4 x + y >= 1 x, y, z non-negative It solves it once as a continuous model, and once as an integer model.*/#include"gurobi_c++.h"usingnamespacestd;intmain(intargc,char*argv[]){try{GRBEnvenv=GRBEnv();GRBModelmodel=GRBModel(env);// Create variablesGRBVarx=model.addVar(0.0,1.0,0.0,GRB_CONTINUOUS,"x");GRBVary=model.addVar(0.0,1.0,0.0,GRB_CONTINUOUS,"y");GRBVarz=model.addVar(0.0,1.0,0.0,GRB_CONTINUOUS,"z");// Set objectiveGRBQuadExprobj=x*x+x*y+y*y+y*z+z*z+2*x;model.setObjective(obj);// Add constraint: x + 2 y + 3 z >= 4model.addConstr(x+2*y+3*z>=4,"c0");// Add constraint: x + y >= 1model.addConstr(x+y>=1,"c1");// 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;// Change variable types to integerx.set(GRB_CharAttr_VType,GRB_INTEGER);y.set(GRB_CharAttr_VType,GRB_INTEGER);z.set(GRB_CharAttr_VType,GRB_INTEGER);// 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 QP model: minimize x^2 + x*y + y^2 + y*z + z^2 + 2 x subject to x + 2 y + 3 z >= 4 x + y >= 1 x, y, z non-negative It solves it once as a continuous model, and once as an integer model.*/usingSystem;usingGurobi;classqp_cs{staticvoidMain(){try{GRBEnvenv=newGRBEnv("qp.log");GRBModelmodel=newGRBModel(env);// Create variablesGRBVarx=model.AddVar(0.0,1.0,0.0,GRB.CONTINUOUS,"x");GRBVary=model.AddVar(0.0,1.0,0.0,GRB.CONTINUOUS,"y");GRBVarz=model.AddVar(0.0,1.0,0.0,GRB.CONTINUOUS,"z");// Set objectiveGRBQuadExprobj=x*x+x*y+y*y+y*z+z*z+2*x;model.SetObjective(obj);// Add constraint: x + 2 y + 3 z >= 4model.AddConstr(x+2*y+3*z>=4.0,"c0");// Add constraint: x + y >= 1model.AddConstr(x+y>=1.0,"c1");// 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);// Change variable types to integerx.VType=GRB.INTEGER;y.VType=GRB.INTEGER;z.VType=GRB.INTEGER;// 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 QP model: minimize x^2 + x*y + y^2 + y*z + z^2 + 2 x subject to x + 2 y + 3 z >= 4 x + y >= 1 x, y, z non-negative It solves it once as a continuous model, and once as an integer model.*/importcom.gurobi.gurobi.*;publicclassQp{publicstaticvoidmain(String[]args){try{GRBEnvenv=newGRBEnv("qp.log");GRBModelmodel=newGRBModel(env);// Create variablesGRBVarx=model.addVar(0.0,1.0,0.0,GRB.CONTINUOUS,"x");GRBVary=model.addVar(0.0,1.0,0.0,GRB.CONTINUOUS,"y");GRBVarz=model.addVar(0.0,1.0,0.0,GRB.CONTINUOUS,"z");// Set objectiveGRBQuadExprobj=newGRBQuadExpr();obj.addTerm(1.0,x,x);obj.addTerm(1.0,x,y);obj.addTerm(1.0,y,y);obj.addTerm(1.0,y,z);obj.addTerm(1.0,z,z);obj.addTerm(2.0,x);model.setObjective(obj);// Add constraint: x + 2 y + 3 z >= 4GRBLinExprexpr=newGRBLinExpr();expr.addTerm(1.0,x);expr.addTerm(2.0,y);expr.addTerm(3.0,z);model.addConstr(expr,GRB.GREATER_EQUAL,4.0,"c0");// Add constraint: x + y >= 1expr=newGRBLinExpr();expr.addTerm(1.0,x);expr.addTerm(1.0,y);model.addConstr(expr,GRB.GREATER_EQUAL,1.0,"c1");// 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();// Change variable types to integerx.set(GRB.CharAttr.VType,GRB.INTEGER);y.set(GRB.CharAttr.VType,GRB.INTEGER);z.set(GRB.CharAttr.VType,GRB.INTEGER);// Optimize againmodel.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());// Dispose of model and environmentmodel.dispose();env.dispose();}catch(GRBExceptione){System.out.println("Error code: "+e.getErrorCode()+". "+e.getMessage());}}}
functionqp()% Copyright 2025, Gurobi Optimization, LLC%% This example formulates and solves the following simple QP model:% minimize% x^2 + x*y + y^2 + y*z + z^2 + 2 x% subject to% x + 2 y + 3 z >= 4% x + y >= 1% x, y, z non-negative%% It solves it once as a continuous model, and once as an integer% model.names={'x','y','z'};model.varnames=names;model.Q=sparse([10.50;0.510.5;00.51]);model.A=sparse([123;110]);model.obj=[200];model.rhs=[41];model.sense='>';gurobi_write(model,'qp.lp');results=gurobi(model);forv=1:length(names)fprintf('%s %e\n',names{v},results.x(v));endfprintf('Obj: %e\n',results.objval);model.vtype='B';results=gurobi(model);forv=1:length(names)fprintf('%s %e\n',names{v},results.x(v));endfprintf('Obj: %e\n',results.objval);end
#!/usr/bin/env python3# Copyright 2025, Gurobi Optimization, LLC# This example formulates and solves the following simple QP model:# minimize# x^2 + x*y + y^2 + y*z + z^2 + 2 x# subject to# x + 2 y + 3 z >= 4# x + y >= 1# x, y, z non-negative## It solves it once as a continuous model, and once as an integer model.importgurobipyasgpfromgurobipyimportGRB# Create a new modelm=gp.Model("qp")# Create variablesx=m.addVar(ub=1.0,name="x")y=m.addVar(ub=1.0,name="y")z=m.addVar(ub=1.0,name="z")# Set objective: x^2 + x*y + y^2 + y*z + z^2 + 2 xobj=x**2+x*y+y**2+y*z+z**2+2*xm.setObjective(obj)# Add constraint: x + 2 y + 3 z >= 4m.addConstr(x+2*y+3*z>=4,"c0")# Add constraint: x + y >= 1m.addConstr(x+y>=1,"c1")m.optimize()forvinm.getVars():print(f"{v.VarName}{v.X:g}")print(f"Obj:{m.ObjVal:g}")x.VType=GRB.INTEGERy.VType=GRB.INTEGERz.VType=GRB.INTEGERm.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 QP model:# minimize# x^2 + x*y + y^2 + y*z + z^2 + 2 x# subject to# x + 2 y + 3z >= 4# x + y >= 1# x, y, z non-negativelibrary(gurobi)model<-list()model$A<-matrix(c(1,2,3,1,1,0),nrow=2,byrow=T)model$Q<-matrix(c(1,0.5,0,0.5,1,0.5,0,0.5,1),nrow=3,byrow=T)model$obj<-c(2,0,0)model$rhs<-c(4,1)model$sense<-c('>','>')result<-gurobi(model)print(result$objval)print(result$x)model$vtype<-c('I','I','I')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 QP model:'' minimize x^2 + x*y + y^2 + y*z + z^2 + 2 x' subject to x + 2 y + 3 z >= 4' x + y >= 1' x, y, z non-negative'' It solves it once as a continuous model, and once as an integer model.'ImportsGurobiClassqp_vbSharedSubMain()TryDimenvAsNewGRBEnv("qp.log")DimmodelAsNewGRBModel(env)' Create variablesDimxAsGRBVar=model.AddVar(0.0,1.0,0.0,GRB.CONTINUOUS,"x")DimyAsGRBVar=model.AddVar(0.0,1.0,0.0,GRB.CONTINUOUS,"y")DimzAsGRBVar=model.AddVar(0.0,1.0,0.0,GRB.CONTINUOUS,"z")' Set objectiveDimobjAsNewGRBQuadExpr()obj=x*x+x*y+y*y+y*z+z*z+2*xmodel.SetObjective(obj)' Add constraint: x + 2 y + 3 z >= 4model.AddConstr(x+2*y+3*z>=4.0,"c0")' Add constraint: x + y >= 1model.AddConstr(x+y>=1.0,"c1")' 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)' Change variable types to integerx.VType=GRB.INTEGERy.VType=GRB.INTEGERz.VType=GRB.INTEGER' 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