manbet体育手机客户端


dense_c ++。CPP


/ *版权所有2019,Gurobi优狗万app足彩化,LLC * / / *此示例制定和解决以下简单QP模型:最小化X + Y + x ^ 2 + x * y + y ^ 2 + y * z + z ^ 2受到x + 2 y + 3 z> = 4 x + y> = 1 x,y,z非负图示例说明了使用密集矩阵存储A和Q(以及用于其他相关数据的密度矢量)。我们不建议您使用密集的矩阵,但如果您已经以这种格式已拥有您的数据,此示例可能会有所帮助。* / #include“gurobi_c ++。h”使用命名空间std;静态BOOL DENSE_OPTIMIZE(GRBENV * ENV,INT行,INT COL,双* C,/ *线性部分的物镜函数* /双* Q,/ *客观函数的二次部分* /双* A,/ *约束矩阵* /char * sense,/ *约束感测* / double * rhs,/ * rhs矢量* / double * lb,/ *可变下限* / double *ub,/ *可变上限* / char * vtype,/ *变量类型(连续,二进制等)* /双*解决方案,双* objvalp){grbmodel model = grbmodel(* env);int i,j;BOOL成功=假;/ *将变量添加到模型* / grbvar * vars = model.addvars(lb,Ub,null,vtype,null,cols); /* Populate A matrix */ for (i = 0; i < rows; i++) { GRBLinExpr lhs = 0; for (j = 0; j < cols; j++) if (A[i*cols+j] != 0) lhs += A[i*cols+j]*vars[j]; model.addConstr(lhs, sense[i], rhs[i]); } GRBQuadExpr obj = 0; for (j = 0; j < cols; j++) obj += c[j]*vars[j]; for (i = 0; i < cols; i++) for (j = 0; j < cols; j++) if (Q[i*cols+j] != 0) obj += Q[i*cols+j]*vars[i]*vars[j]; model.setObjective(obj); model.optimize(); model.write("dense.lp"); if (model.get(GRB_IntAttr_Status) == GRB_OPTIMAL) { *objvalP = model.get(GRB_DoubleAttr_ObjVal); for (i = 0; i < cols; i++) solution[i] = vars[i].get(GRB_DoubleAttr_X); success = true; } delete[] vars; return success; } int main(int argc, char *argv[]) { GRBEnv* env = 0; try { env = new GRBEnv(); double c[] = {1, 1, 0}; double Q[3][3] = {{1, 1, 0}, {0, 1, 1}, {0, 0, 1}}; double A[2][3] = {{1, 2, 3}, {1, 1, 0}}; char sense[] = {'>', '>'}; double rhs[] = {4, 1}; double lb[] = {0, 0, 0}; bool success; double objval, sol[3]; success = dense_optimize(env, 2, 3, c, &Q[0][0], &A[0][0], sense, rhs, lb, NULL, NULL, sol, &objval); cout << "x: " << sol[0] << " y: " << sol[1] << " z: " << sol[2] << endl; } catch(GRBException e) { cout << "Error code = " << e.getErrorCode() << endl; cout << e.getMessage() << endl; } catch(...) { cout << "Exception during optimization" << endl; } delete env; return 0; }