# Copyright 2025, Gurobi Optimization, LLC## This example considers the following separable, convex problem:## minimize# f(x) - y + g(z)# subject to# x + 2 y + 3 z <= 4# x + y >= 1# x, y, z <= 1## where f(u) = exp(-u) and g(u) = 2 u^2 - 4u, for all real u. It# formulates and solves a simpler LP model by approximating f and# g with piecewise-linear functions. Then it transforms the model# into a MIP by negating the approximation for f, which gives# a non-convex piecewise-linear function, and solves it again.library(gurobi)model<-list()model$A<-matrix(c(1,2,3,1,1,0),nrow=2,byrow=T)model$obj<-c(0,-1,0)model$ub<-c(1,1,1)model$rhs<-c(4,1)model$sense<-c('<','>')# Uniformly spaced points in [0.0, 1.0]u<-seq(from=0,to=1,by=0.01)# First piecewise-linear function: f(x) = exp(-x)pwl1<-list()pwl1$var<-1pwl1$x<-upwl1$y<-sapply(u,function(x)exp(-x))# Second piecewise-linear function: g(z) = 2 z^2 - 4 zpwl2<-list()pwl2$var<-3pwl2$x<-upwl2$y<-sapply(u,function(z)2*z*z-4*z)model$pwlobj<-list(pwl1,pwl2)result<-gurobi(model)print(result$objval)print(result$x)# Negate piecewise-linear function on x, making it non-convexmodel$pwlobj[[1]]$y<-sapply(u,function(x)-exp(-x))result<-gurobi(model)gurobi_write(model,"pwl.lp")print(result$objval)print(result$x)# Clear spacerm(model,pwl1,pwl2,result)