Browse Source

First commit : a Makefile and an example using gurobi

Olivier Marty 8 years ago
commit
2c5ef264b2
3 changed files with 78 additions and 0 deletions
  1. 3 0
      .gitignore
  2. 19 0
      Makefile
  3. 56 0
      gurobi.cpp

+ 3 - 0
.gitignore

@@ -0,0 +1,3 @@
+gurobi.log
+*.o
+main

+ 19 - 0
Makefile

@@ -0,0 +1,19 @@
+GUROBI_DIR=/opt/gurobi650/linux64
+CPP=g++ -D_GLIBCXX_USE_CXX11_ABI=0 -m64 -g
+INC=-I$(GUROBI_DIR)/include
+LIBS=-L $(GUROBI_DIR)/lib -lgurobi_c++ -lgurobi65 -lpthread -lm
+SOURCES=gurobi.cpp
+
+main: $(SOURCES:.cpp=.o)
+	$(CPP) -o $@ $^ $(INC) $(LIBS)
+
+%.o: %.cpp
+	$(CPP) -o $@ -c $< $(INC)
+
+.PHONY: clean mrproper
+
+clean:
+	rm -f $(SOURCES:.cpp=.o)
+
+mrproper: clean
+	rm -f main

+ 56 - 0
gurobi.cpp

@@ -0,0 +1,56 @@
+#include "gurobi_c++.h"
+using namespace std;
+
+int
+main(int   argc,
+     char *argv[])
+{
+  try {
+    GRBEnv env = GRBEnv();
+
+    GRBModel model = GRBModel(env);
+
+    // Create variables
+
+    GRBVar x = model.addVar(0.0, 1.0, 0.0, GRB_BINARY, "x");
+    GRBVar y = model.addVar(0.0, 1.0, 0.0, GRB_BINARY, "y");
+    GRBVar z = model.addVar(0.0, 1.0, 0.0, GRB_BINARY, "z");
+
+    // Integrate new variables
+
+    model.update();
+
+    // Set objective: maximize x + y + 2 z
+
+    model.setObjective(x + y + 2 * z, GRB_MAXIMIZE);
+
+    // Add constraint: x + 2 y + 3 z <= 4
+
+    model.addConstr(x + 2 * y + 3 * z <= 4, "c0");
+
+    // Add constraint: x + y >= 1
+
+    model.addConstr(x + y >= 1, "c1");
+
+    // Optimize model
+
+    model.optimize();
+
+    cout << x.get(GRB_StringAttr_VarName) << " "
+         << x.get(GRB_DoubleAttr_X) << endl;
+    cout << y.get(GRB_StringAttr_VarName) << " "
+         << y.get(GRB_DoubleAttr_X) << endl;
+    cout << z.get(GRB_StringAttr_VarName) << " "
+         << z.get(GRB_DoubleAttr_X) << endl;
+
+    cout << "Obj: " << model.get(GRB_DoubleAttr_ObjVal) << endl;
+
+  } catch(GRBException e) {
+    cout << "Error code = " << e.getErrorCode() << endl;
+    cout << e.getMessage() << endl;
+  } catch(...) {
+    cout << "Exception during optimization" << endl;
+  }
+
+  return 0;
+}