Languages:
C
C++
Java
.NET
Python
MATLAB
R

Cloud Guide

diet_c++.cpp

diet_c++.cpp

```/* Copyright 2018, Gurobi Optimization, LLC */

/* Solve the classic diet model, showing how to add constraints
to an existing model. */

#include "gurobi_c++.h"
using namespace std;

void printSolution(GRBModel& model, int nCategories, int nFoods,

int
main(int argc,
char *argv[])
{
GRBEnv* env = 0;
GRBVar* nutrition = 0;
try
{

// Nutrition guidelines, based on
// USDA Dietary Guidelines for Americans, 2005
// http://www.health.gov/DietaryGuidelines/dga2005/
const int nCategories = 4;
string Categories[] =
{ "calories", "protein", "fat", "sodium" };
double minNutrition[] = { 1800, 91, 0, 0 };
double maxNutrition[] = { 2200, GRB_INFINITY, 65, 1779 };

// Set of foods
const int nFoods = 9;
string Foods[] =
{ "hamburger", "chicken", "hot dog", "fries",
"macaroni", "pizza", "salad", "milk", "ice cream" };
double cost[] =
{ 2.49, 2.89, 1.50, 1.89, 2.09, 1.99, 2.49, 0.89, 1.59 };

// Nutrition values for the foods
double nutritionValues[][nCategories] = {
{ 410, 24, 26, 730 },    // hamburger
{ 420, 32, 10, 1190 },   // chicken
{ 560, 20, 32, 1800 },   // hot dog
{ 380, 4, 19, 270 },     // fries
{ 320, 12, 10, 930 },    // macaroni
{ 320, 15, 12, 820 },    // pizza
{ 320, 31, 12, 1230 },   // salad
{ 100, 8, 2.5, 125 },    // milk
{ 330, 8, 10, 180 }      // ice cream
};

// Model
env = new GRBEnv();
GRBModel model = GRBModel(*env);
model.set(GRB_StringAttr_ModelName, "diet");

// Create decision variables for the nutrition information,
// which we limit via bounds
nutrition = model.addVars(minNutrition, maxNutrition, 0, 0,
Categories, nCategories);

// Create decision variables for the foods to buy

// The objective is to minimize the costs
model.set(GRB_IntAttr_ModelSense, GRB_MINIMIZE);

// Nutrition constraints
for (int i = 0; i < nCategories; ++i)
{
GRBLinExpr ntot = 0;
for (int j = 0; j < nFoods; ++j)
{
}
}

// Solve
model.optimize();

cout << "\nAdding constraint: at most 6 servings of dairy" << endl;

// Solve
model.optimize();

}
catch (GRBException e)
{
cout << "Error code = " << e.getErrorCode() << endl;
cout << e.getMessage() << endl;
}
catch (...)
{
cout << "Exception during optimization" << endl;
}

delete[] nutrition;
delete env;
return 0;
}

void printSolution(GRBModel& model, int nCategories, int nFoods,
{
if (model.get(GRB_IntAttr_Status) == GRB_OPTIMAL)
{
cout << "\nCost: " << model.get(GRB_DoubleAttr_ObjVal) << endl;
for (int j = 0; j < nFoods; ++j)
{
{
cout << buy[j].get(GRB_StringAttr_VarName) << " " <<
}
}
cout << "\nNutrition:" << endl;
for (int i = 0; i < nCategories; ++i)
{
cout << nutrition[i].get(GRB_StringAttr_VarName) << " " <<
nutrition[i].get(GRB_DoubleAttr_X) << endl;
}
}
else
{
cout << "No solution" << endl;
}
}
```