/* Copyright 2025, Gurobi Optimization, LLC *//* This example reads an LP model from a file and solves it. If the model can be solved, then it finds the smallest positive variable, sets its upper bound to zero, and resolves the model two ways: first with an advanced start, then without an advanced start (i.e. 'from scratch'). */#include<stdlib.h>#include<stdio.h>#include<math.h>#include<string.h>#include"gurobi_c.h"intmain(intargc,char*argv[]){GRBenv*env=NULL;GRBmodel*model=NULL;interror=0;intj;intnumvars,isMIP,status,minVar=0;doubleminVal=GRB_INFINITY,sol,lb;char*varname;doublewarmCount,warmTime,coldCount,coldTime;if(argc<2){fprintf(stderr,"Usage: lpmod_c filename\n");exit(1);}error=GRBloadenv(&env,"lpmod.log");if(error)gotoQUIT;/* Read model and determine whether it is an LP */error=GRBreadmodel(env,argv[1],&model);if(error)gotoQUIT;error=GRBgetintattr(model,"IsMIP",&isMIP);if(error)gotoQUIT;if(isMIP){printf("The model is not a linear program\n");gotoQUIT;}error=GRBoptimize(model);if(error)gotoQUIT;error=GRBgetintattr(model,"Status",&status);if(error)gotoQUIT;if((status==GRB_INF_OR_UNBD)||(status==GRB_INFEASIBLE)||(status==GRB_UNBOUNDED)){printf("The model cannot be solved because it is ");printf("infeasible or unbounded\n");gotoQUIT;}if(status!=GRB_OPTIMAL){printf("Optimization was stopped with status %i\n",status);gotoQUIT;}/* Find the smallest variable value */error=GRBgetintattr(model,"NumVars",&numvars);if(error)gotoQUIT;for(j=0;j<numvars;++j){error=GRBgetdblattrelement(model,"X",j,&sol);if(error)gotoQUIT;error=GRBgetdblattrelement(model,"LB",j,&lb);if(error)gotoQUIT;if((sol>0.0001)&&(sol<minVal)&&(lb==0.0)){minVal=sol;minVar=j;}}error=GRBgetstrattrelement(model,"VarName",minVar,&varname);if(error)gotoQUIT;printf("\n*** Setting %s from %f to zero ***\n\n",varname,minVal);error=GRBsetdblattrelement(model,"UB",minVar,0.0);if(error)gotoQUIT;/* Solve from this starting point */error=GRBoptimize(model);if(error)gotoQUIT;/* Save iteration & time info */error=GRBgetdblattr(model,"IterCount",&warmCount);if(error)gotoQUIT;error=GRBgetdblattr(model,"Runtime",&warmTime);if(error)gotoQUIT;/* Reset the model and resolve */printf("\n*** Resetting and solving ");printf("without an advanced start ***\n\n");error=GRBreset(model,0);if(error)gotoQUIT;error=GRBoptimize(model);if(error)gotoQUIT;/* Save iteration & time info */error=GRBgetdblattr(model,"IterCount",&coldCount);if(error)gotoQUIT;error=GRBgetdblattr(model,"Runtime",&coldTime);if(error)gotoQUIT;printf("\n*** Warm start: %f iterations, %f seconds\n",warmCount,warmTime);printf("*** Cold start: %f iterations, %f seconds\n",coldCount,coldTime);QUIT:/* Error reporting */if(error){printf("ERROR: %s\n",GRBgeterrormsg(env));exit(1);}/* Free model */GRBfreemodel(model);/* Free environment */GRBfreeenv(env);return0;}