COPT 5.0.1 | GUROBI 9.5.1 | |
---|---|---|
Installation | pip install coptpy |
pip install gurobipy |
1. Replace gurobipy by coptpy (importing pakcage)
2. Replace GRB by COPT (for constant values)
3. Replace name by nameprefix (for creating names)
4. Replace optimize() by solve()
5. Replace getAttr('X') by getInfo(COPT.Info.Value) (for getting solutions)
6. Replace ConstrName/Varname by name (for getting names)
1 | Import Package | |
---|---|---|
COPT | import coptpy as cp from coptpy import COPT |
|
GUROBI | import gurobipy as gp from gurobipy as GRB |
|
2 | Create Model | |
COPT | env = cp.Envr() model = env.createModel('sudoku') |
|
GUROBI | model = gp.Model('sudoku') |
|
2.1 | Create Model with Remote Server | |
COPT | config = cp.EnvConfig() confit.set("cluster", "192.168.9.9") env = cp.Envr(config) model = env.createModel('sudoku') |
|
3 | Add Variables | |
COPT | vars = model.addVars(n, n, n, vtype=COPT.BINARY, nameprefix='G') |
|
GUROBI | vars = model.addVars(n, n, n, vtype=GRB.BINARY, name='G') |
|
4 | Add Constraints | |
COPT | model.addConstrs((vars.sum(i, j, '*') == 1 for i in range(n) for j in range(n)), nameprefix='V') |
|
GUROBI | model.addConstrs((vars.sum(i, j, '*') == 1 for i in range(n) for j in range(n)), name='V') |
|
5 | Add Constraints using quicksum | |
COPT | model.addConstrs(( cp.quicksum(vars[i, j, v] for i in range(i0 * s, (i0 + 1) * s) for j in range(j0 * s, (j0 + 1) * s)) == 1 for v in range(n) for i0 in range(s) for j0 in range(s)), nameprefix='Sub) |
|
GUROBI | model.addConstrs(( gp.quicksum(vars[i, j, v] for i in range(i0 * s, (i0 + 1) * s) for j in range(j0 * s, (j0 + 1) * s)) == 1 for v in range(n) for i0 in range(s) for j0 in range(s)), name='Sub) |
|
6 | Solve | |
COPT | model.solve() |
|
GUROBI | model.optimize() |
|
7 | Get Solutions | |
COPT | solution = model.getInfo(COPT.Info.Value, vars) |
|
GUROBI | solution = model.getAttr('X', vars) |
|
8 | Get Names | |
COPT | constraint.name variable.name |
|
GUROBI | constraint.ConstrName variable.VarName |
|
9 | Parameter Attribute Checking Status |
|
COPT | model.param.timelimit = 60 model.objval model.status = COPT.OPTIMAL |
|
GUROBI | model.params.timelimit = 60 model.objval model.status = GRB.OPTIMAL |
1 | Add MIP Start | |
---|---|---|
COPT | model.setMipStart(vars[i], 0.0) model.loadMipStart() |
|
GUROBI | vars[i].Start = 0.0 |
|
2 | Add Constraints with Two Bounds | |
COPT | for c in c_list: m.addConstr(cp.quicksum( coef[i, c] * vars[f] for i in vlist) == [con_lower[c], con_upper[c]], c) |
|
GUROBI | m.addConstrs(gp.quicksum( coef[i, c] * vars[f] for i in vlist) == [con_lower[c], con_upper[c]] for c in c_list, "_") |
|
3 | Linear Expression | |
COPT | expr = LinExpr(1.0) expr.addTerm(x, 2.0) |
|
GUROBI | expr = LinExpr(1.0) expr.addTerm(2.0, x) |