定义变量和表达式:IloNumVar
描述 C++ 类 IloNumVar。
您需要的第一个建模类可能是 IloNumVar
。
这个类的对象表示模型中的决策变量。 它们由变量的下限和上限定义,类型可以是 ILOFLOAT
、ILOINT
或 ILOBOOL
,分别代表连续变量、整数变量或布尔型变量。 以下构造函数将创建界限为 -1 和 10 的整数变量:
IloNumVar myIntVar(env, -1, 10, ILOINT);
类 IloNumVar
提供了用于查询指定变量时所需数据的方法。
但是,只有界限可修改。 Concert Technology 提供了建模对象类
IloConversion
,用于更改变量的类型。 此转换允许在不同模型中使用具有不同类型的同一变量。
变量通常用来构建表达式,后者进而用来定义优化问题的目标或约束。 表达式可以显式地编写,例如:
1*x[1] + 2*x[2] + 3*x[3]
其中,假定 x
是变量数组 (IloNumVarArray
)。
另外,还可以使用循环来逐段创建表达式:
IloExpr expr(env);
for (int i = 0; i < x.getSize(); ++i)
expr += data[i] * x[i];
请尽可能依据整数数据或双精度(64 位)浮点数据来构建表达式。 应该避免使用单精度(32 位)浮点数据,因为这可能会不必要地生成情况不良的问题。 有关更多信息,请参阅数字难度。
虽然 Concert Technology 支持非常一般的表达式,但在要使用 IloCplex
来求解的模型中,只能使用线性表达式、二次表达式、分段线性表达式和逻辑表达式。
有关其中每种可能性的更多信息,请参阅下列主题:
-
求解 LP:单纯形法优化器和求解 LP:barrier 优化器都探讨线性表达式。
-
求解具有二次目标 (QP) 的问题探讨目标函数中的二次表达式。
-
使用二次约束 (QCP) 对问题求解探讨二次约束规划问题 (QCP)(包括二阶锥规划 (SOCP) 问题的特殊情况)中的二次表达式。
-
在优化中使用分段线性函数:运输示例通过一个运输示例来介绍分段线性表达式。
-
优化中的逻辑约束介绍 CPLEX 所处理的逻辑约束。 随后的主题提供了示例。
完成使用表达式之后(即,使用表达式来创建约束之后),需要通过调用其 end
方法将其删除,例如:
expr.end();