向模型添加约束

向模型添加约束

一旦新变量集成到模型中,下一步就是添加我们的两个线性约束。通过这些约束通过grbaddconstr()常规。要添加约束,必须指定几条信息,包括与约束,约束感,右侧侧值和约束名称相关联的非零值。这些都被指定为参数grbaddconstr()


/ *第一个约束:x + 2 y + 3 z <= 4 * / ind [0] = 0;IND [1] = 1;IND [2] = 2;val [0] = 1;val [1] = 2;val [2] = 3;ERROR = GRBADCONSTR(型号,3,IND,VAL,GRB_LEES_EQUAL,4.0,“C0”);如果(错误)转到戒烟;/ *第二约束:x + y> = 1 * / ind [0] = 0;IND [1] = 1; val[0] = 1; val[1] = 1; error = GRBaddconstr(model, 2, ind, val, GRB_GREATER_EQUAL, 1.0, "c1"); if (error) goto QUIT;

第一个论点grbaddconstr()是添加约束的模型。第二是与新约束相关联的非零系数的总数。接下来的两个参数描述了新约束中的非零。使用索引值对列表指定约束系数,每个非零值一个。在我们的示例中,要添加的第一个约束是<span> $ </ span> x + 2y + 3z \ leq 4 <span> $ </ span>。我们选择了<span> $ </ span> x <span> $ </ span>我们的约束矩阵中的第一个变量,<span> $ </ span> y <span> $ </ span>第二,和<span> $ </ span> z <span> $ </ span>第三(请注意,这种选择是任意的)。鉴于我们的可变订购选择,我们的第一个约束所需的索引值对(0,1.0),(1,2.0),(2,3.0)。这些对放置在Ind.阵列。

第五个论点grbaddconstr()提供了新约束的感觉。可能的值是grb_less_equal.grb_greater_equal., 或者grb_equal.。第六个论点给出了右侧值。最终的参数给出了约束的名称(我们允许约束通过指定在此处采取其默认名称空值对于参数)。第二约束以类似的方式添加。

请注意常规grbaddconstrs()将允许您在单个呼叫中添加两个约束。此例程的参数更复杂,而不提供任何显着的优势,因此我们建议您一次添加一个约束。