1
我有一个优化变量 x和一个常数y。变量的cplex约束函数
我想表达一个约束
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
有人可以帮我写这种形式的约束?
首先,你是我的英雄:它是失败的,因为getValue不能成为模型的一部分,并且将f(x)重写为“cplex”版本是要走的路,谢谢!我认为这是一种痛苦,因为f是非常平凡的,现在我必须用它们的所有符号重写它,但是O很好。就线性而言,CPLEX(至少为12.4)现在支持MILP编程,具有整数和二进制约束。约束可能必须是整数线性或整数二次的,但我不认为它必须是凸的,因为如果x是二进制或整数约束,它甚至可能不连续。 – Tommy 2012-07-18 05:22:53
您提到“除非我反复解决它”。有没有办法我可以迭代解决它,而不必重写f?也许是在迭代求解的模型中使用getValue()的指针? – Tommy 2012-07-18 05:26:17
@Tommy如果您想使用优化的结果来制定不同的解决方案,您可以迭代地解决问题。这对你的情况没有帮助。为了避免多个版本的代码,您可以使用C++模板。 – 2012-07-18 14:00:15