manbet体育手机客户端


dense_c.c.


/ *版权所有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  #include  #include“gurobi_c.h”/ *求解使用密集矩阵表示的LP / QP / MILP / MIQP。此例程假定A和Q都存储在行主要订单中。如果优化成功,它会返回1。成功后,它返回“objvalp”中的最佳目标值,“解决方案”中的最佳解决方案矢量。* / static int dense_optimize(grbenv * env,int行,int col,双* c,/ *线性部分的物镜函数* / double * q,/ *客观函数的二次部分* / double * a,/ *约束矩阵* / char * sense,/ *约束感测* / double * rhs,/ * rhs矢量* / double * lb,/ *可变下限* / double * Ub,/ *可变上限* / char * vtype,/ *可变类型(连续,二进制等)* /双*解决方案,双* objvalp){grbmodel * model = null; int i, j, optimstatus; int error = 0; int success = 0; /* Create an empty model */ error = GRBnewmodel(env, &model, "dense", cols, c, lb, ub, vtype, NULL); if (error) goto QUIT; error = GRBaddconstrs(model, rows, 0, NULL, NULL, NULL, sense, rhs, NULL); if (error) goto QUIT; /* Populate A matrix */ for (i = 0; i < rows; i++) { for (j = 0; j < cols; j++) { if (A[i*cols+j] != 0) { error = GRBchgcoeffs(model, 1, &i, &j, &A[i*cols+j]); if (error) goto QUIT; } } } /* Populate Q matrix */ if (Q) { for (i = 0; i < cols; i++) { for (j = 0; j < cols; j++) { if (Q[i*cols+j] != 0) { error = GRBaddqpterms(model, 1, &i, &j, &Q[i*cols+j]); if (error) goto QUIT; } } } } /* Optimize model */ error = GRBoptimize(model); if (error) goto QUIT; /* Write model to 'dense.lp' */ error = GRBwrite(model, "dense.lp"); if (error) goto QUIT; /* Capture solution information */ error = GRBgetintattr(model, GRB_INT_ATTR_STATUS, &optimstatus); if (error) goto QUIT; if (optimstatus == GRB_OPTIMAL) { error = GRBgetdblattr(model, GRB_DBL_ATTR_OBJVAL, objvalP); if (error) goto QUIT; error = GRBgetdblattrarray(model, GRB_DBL_ATTR_X, 0, cols, solution); if (error) goto QUIT; success = 1; } QUIT: /* Error reporting */ if (error) { printf("ERROR: %s\n", GRBgeterrormsg(env)); exit(1); } /* Free model */ GRBfreemodel(model); return success; } int main(int argc, char *argv[]) { GRBenv *env = NULL; int error = 0; 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}; double sol[3]; int solved; double objval; /* Create environment */ error = GRBloadenv(&env, "dense.log"); if (error) goto QUIT; /* Solve the model */ solved = dense_optimize(env, 2, 3, c, &Q[0][0], &A[0][0], sense, rhs, lb, NULL, NULL, sol, &objval); if (solved) printf("Solved: x=%.4f, y=%.4f, z=%.4f\n", sol[0], sol[1], sol[2]); QUIT: /* Free environment */ GRBfreeenv(env); return 0; }