/* 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;}
Help and Feedback