#include #include "ampl/ampl_c.h" int main(int argc, char **argv) { // Create an AMPL instance AMPL *ampl; AMPL_CALL(AMPL_Create(&l)); /* // If the AMPL installation directory is not in the system search path: AMPL_ENVIRONMENT *env; AMPL_EnvironmentCreate(&env, "full path to the AMPL installation directory", ""); AMPL_CALL(AMPL_CreateWithEnv(&l, env)); */ if (argc > 1) AMPL_CALL(AMPL_SetOption(ampl, "solver", argv[1])); // Read the model file const char *modelDirectory = argc == 3 ? argv[2] : "../models"; char dir[256]; sprintf(dir, "%s%s", modelDirectory, "/diet/diet.mod"); AMPL_CALL(AMPL_Read(ampl, dir)); const char *foods[] = {"BEEF", "CHK", "FISH", "HAM", "MCH", "MTL", "SPG", "TUR"}; double costs[] = {3.59, 2.59, 2.29, 2.89, 1.89, 1.99, 1.99, 2.49}; double fmin[] = {2, 2, 2, 2, 2, 2, 2, 2}; double fmax[] = {10, 10, 10, 10, 10, 10, 10, 10}; AMPL_DATAFRAME *df; const char *const index[] = {"FOOD"}; AMPL_CALL(AMPL_DataFrameCreate(&df, 1, 0, index)); AMPL_CALL(AMPL_DataFrameSetColumnArgString(df, "FOOD", foods, 8)); AMPL_CALL(AMPL_DataFrameAddColumnDouble(df, "cost", costs)); AMPL_CALL(AMPL_DataFrameAddColumnDouble(df, "f_min", fmin)); AMPL_CALL(AMPL_DataFrameAddColumnDouble(df, "f_max", fmax)); AMPL_CALL(AMPL_SetData(ampl, df, "FOOD")); AMPL_DataFrameFree(&df); const char *nutrients[] = {"A", "C", "B1", "B2", "NA", "CAL"}; double nmin[] = {700, 700, 700, 700, 0, 16000}; double nmax[] = {20000, 20000, 20000, 20000, 50000, 24000}; const char *const index2[] = {"NUTR"}; AMPL_CALL(AMPL_DataFrameCreate(&df, 1, 0, index2)); AMPL_CALL(AMPL_DataFrameSetColumnArgString(df, "NUTR", nutrients, 6)); AMPL_CALL(AMPL_DataFrameAddColumnDouble(df, "n_min", nmin)); AMPL_CALL(AMPL_DataFrameAddColumnDouble(df, "n_max", nmax)); AMPL_CALL(AMPL_SetData(ampl, df, "NUTR")); AMPL_DataFrameFree(&df); double amounts[] = {60, 8, 8, 40, 15, 70, 25, 60, 20, 0, 10, 40, 35, 30, 50, 20, 10, 20, 15, 35, 15, 15, 25, 15, 15, 20, 10, 10, 15, 15, 15, 10, 928, 2180, 945, 278, 1182, 896, 1329, 1397, 295, 770, 440, 430, 315, 400, 379, 450}; const char *const index3[] = {"NUTR", "FOOD", "amt"}; AMPL_CALL(AMPL_DataFrameCreate(&df, 2, 1, index3)); AMPL_CALL(AMPL_DataFrameSetMatrixStringString(df, amounts, 6, nutrients, 8, foods)); AMPL_CALL(AMPL_SetData(ampl, df, "")); AMPL_DataFrameFree(&df); AMPL_CALL(AMPL_Solve(ampl, "", "")); double value; AMPL_CALL(AMPL_GetValueNumeric(ampl, "Total_Cost", &value)); printf("Objective: %f\n", value); //AMPL_EnvironmentFree(&env); AMPL_Free(&l); return 0; }