变量的cplex约束函数

cplex constraint function of a variable

本文关键字:约束函数 cplex 变量      更新时间:2023-10-16

我有一个优化变量x和一个常数y。

我想表达一个约束

f(x) <= y. 

我试着做

 27: IloRange rng = (f(cplex->getValue(x)) <= y);
 28: model.add(rng);

但是我得到错误

cplex.cpp:27: error: conversion from 'bool' to non-scalar type 'IloRange' requested

有人能帮我写下这个表格的约束条件吗?

首先,严格不等式在线性规划中是不可能的。然而,您可以表达

f(x) <= y

cplex->getValue(x)是一个二重,因此f(x)<=y是布尔值。无论如何,cplex->getValue()只有在您有了解决方案之后才可用,所以它永远不应该成为模型的一部分,除非您正在迭代求解它。要获得IloRange,需要重写f(x)以接受IloNumVar作为其参数,并返回IloExpr。例如,如果你有类似的东西

double f(double x) {return 2*x;}

你需要一个版本

IloExpr f(IloNumVarx) {return 2*x;}

然后你可以写

IloRange rng = (f(x) <= y);

如果使用cplex(或任何线性规划求解器),f(x)只能是线性函数或凸二次函数。