在CPLEX中,变量作为索引通常用于定义约束或目标函数中的线性表达式。下面是一个使用CPLEX库解决一个简单线性规划问题的代码示例:
#include
ILOSTLBEGIN
int main() {
IloEnv env;
try {
IloModel model(env);
IloNumVarArray x(env);
IloNumVarArray y(env);
// 创建变量
for (int i = 0; i < 5; ++i) {
char varName[100];
sprintf(varName, "x[%d]", i);
x.add(IloNumVar(env, 0, 1, ILOINT, varName));
}
// 创建约束
for (int i = 0; i < 5; ++i) {
IloExpr expr(env);
for (int j = 0; j < 5; ++j) {
expr += x[j];
}
char constraintName[100];
sprintf(constraintName, "constraint[%d]", i);
model.add(expr <= 1);
expr.end();
}
// 创建目标函数
IloExpr obj(env);
for (int i = 0; i < 5; ++i) {
obj += x[i];
}
model.add(IloMaximize(env, obj));
obj.end();
// 创建Cplex求解器并求解
IloCplex cplex(model);
cplex.solve();
// 输出结果
std::cout << "Objective value: " << cplex.getObjValue() << std::endl;
for (int i = 0; i < 5; ++i) {
std::cout << "x[" << i << "] = " << cplex.getValue(x[i]) << std::endl;
}
} catch (IloException& ex) {
std::cerr << "Error: " << ex << std::endl;
} catch (...) {
std::cerr << "Unknown exception caught!" << std::endl;
}
env.end();
return 0;
}
在上面的代码示例中,我们使用了IloNumVarArray
类来创建变量数组x
,每个变量的索引为j
。然后,我们使用这些变量来定义了约束和目标函数。
在创建约束时,我们使用了IloExpr
类来构建线性表达式,将变量相加。然后,我们将这些约束添加到模型中。
在创建目标函数时,我们使用了同样的方法来构建线性表达式,并将其添加到模型中作为最大化目标。
最后,我们使用IloCplex
类来创建Cplex求解器,并调用solve()
方法求解模型。获取结果的相关信息可以使用getObjValue()
和getValue()
方法。
请注意,这只是一个简单的示例,实际问题的代码可能更加复杂。