我正在尝试使用 CPLEX 的 Python API 实现一个简单的二次程序。随 CPLEX 提供的样本文件 qpex1 对此进行了讨论。qpex.lp 中提到的问题是
Maximize
obj: x1 + 2 x2 + 3 x3 + [ - 33 x1 ^2 + 12 x1 * x2 - 22 x2 ^2 + 23 x2 * x3
- 11 x3 ^2 ] / 2
Subject To
c1: - x1 + x2 + x3 <= 20
c2: x1 - 3 x2 + x3 <= 30
Bounds
0 <= x1 <= 40
End
Run Code Online (Sandbox Code Playgroud)
该问题在 Python 中实现时,会收到一个矩阵 qmat,该矩阵实现了目标函数的二次部分。矩阵是:
qmat = …Run Code Online (Sandbox Code Playgroud) 我想使用 SCIP 解决具有 267 个变量 [1] 的混合整数二次规划问题。
CPLEX 可以在大约 30 秒内解决该问题,并且在不到一秒的时间内就已经找到了非常接近最优解的解决方案 [2, 3]。
不幸的是,SCIP 确实在解决这个问题上遇到了困难,即使运行了 20 多分钟也无法找到接近最佳的解决方案 [4]。
为什么是这样?CPLEX 在 MIQP 方面真的比SCIP 好得多吗?我是否没有正确配置 SCIP?如何使用 SCIP 解决这个问题?
在我看来,SCIP 找到的解决方案与松弛的解决方案相去甚远。我的印象是 SCIP 首先解决松弛问题,然后尝试在此基础上找到整数解。这不正确吗?如果是的话,为什么解决方案还那么遥远?
我有一个MIP模型,我想要解决它的LP放松问题.
我没有改变我的变量声明,但最后却没有
cplex_model.solve();
Run Code Online (Sandbox Code Playgroud)
我写:
cplex_model.solveRelaxed();
Run Code Online (Sandbox Code Playgroud)
但它给了我一个错误,说solveRelaxed不是IloCplex的成员!我该如何摆脱这个错误?谢谢
为了Model.add(IloConversion(env, variable, ILOFLOAT));用于矩阵,我应该在其中一个维度上使用for循环吗?在我的情况下,我有一个矩阵x(i,j)和一个数组z(j),我写这样的转换:
for(IloInt i=0; i<I; i++){
Model.add(IloConversion(env, x[i], ILOFLOAT));
}
Model.add(IloConversion(env, z, ILOFLOAT));
我用c ++编写代码并调用CPLEX来解决它.它很快找到了一个非常好的解决方案,但需要很长时间才能改进它.所以我想将间隙设置为更大的值来终止代码,这就是我使用的:
cplex_model.setParam(EpGap, 0.01);
Run Code Online (Sandbox Code Playgroud)
但编译器给我一个错误,说EpGap是一个未声明的标识符.相对差距的默认名称是什么?
c++ mathematical-optimization linear-programming cplex integer-programming
当我运行使用 CPLEX 的 .NET 4 应用程序时,我在不同的机器上得到不同的输出。在我的开发机器上,CPLEX 输出一个结果(异常并停留在某个大值),而在所有其他机器上,结果正常。
首先,我认为它与操作系统有关,由于我的开发机器上同时安装了 Windows 7 x64 和 Windows 8 x64,我尝试在两个系统上运行应用程序。结果是一样的 - 有问题。
然后我尝试在两台不同的台式机上运行,它工作正常。我什至在虚拟机中尝试过,在我的开发机器上使用 Windows 7 来宾,在所有这些情况下,结果都可以。
如何解决这个问题?我该如何调试正在发生的事情?任何建议都会有所帮助。
附加信息:
这是我的开发机器的错误输出:
IBM ILOG CPLEX Optimization Studio Commercial Edition
Tried aggregator 1 time.
MIP Presolve eliminated 125 rows and 0 columns.
MIP Presolve modified 15000 coefficients.
Reduced MIP has 28795 rows, 14520 columns, and 965648 nonzeros.
Reduced MIP has 14520 binaries, 0 …Run Code Online (Sandbox Code Playgroud) 我有一个优化模型,每次仿真迭代时都必须在仿真模型中运行。但是,它会在每次迭代时将日志,错误,警告和结果显示为Cplex的输出。我该如何取消呢?
我在python中找到了针对同一问题的以下链接,但是找不到Java命令:
我想知道是否有人可以帮助我。谢谢。
我在获取 LP 问题的解决方案时遇到问题。
这是调用 cplex.solve() 后 CPLEX 的输出;
CPXPARAM_MIP_Strategy_CallbackReducedLP 0
Found incumbent of value 0.000000 after 0.00 sec. (0.70 ticks)
Tried aggregator 1 time.
MIP Presolve eliminated 570 rows and 3 columns.
MIP Presolve modified 88 coefficients.
Reduced MIP has 390 rows, 29291 columns, and 76482 nonzeros.
Reduced MIP has 29291 binaries, 0 generals, 0 SOSs, and 0 indicators.
Presolve time = 0.06 sec. (49.60 ticks)
Tried aggregator 1 time.
Reduced MIP has 390 rows, 29291 columns, and 76482 nonzeros. …Run Code Online (Sandbox Code Playgroud) Gurobi 和 CPLEX 是近年来非常流行的求解器。就许可证而言,CPLEX 对学者来说更容易。据说它的性能也非常高。但 Gurobi 据称是近年来最快的求解器,而且还在不断改进。但是,据说当约束数量增加时,其性能会下降。
在速度和性能方面,一般推荐哪种求解器专门用于具有二次目标函数的大规模问题,没有太多约束?
它们在 Python 中的使用会影响它们的性能吗?
gcc -I/opt/cplex-studio-125/cplex/include -lcplex -L/opt/cplex-studio-125/cplex/lib/x86-64_sles10_4.1/static_pic mipex1.c
Run Code Online (Sandbox Code Playgroud)
我正在尝试从 cplex 编译一个示例。-I选项很好。该-L选项似乎已损坏,因为它找不到函数名称。
错误在哪里?在特定链接中有一个libcplex.a.
/tmp/ccf5sKky.o: In function `main':
mipex1.c:(.text+0x9f): undefined reference to `CPXopenCPLEX'
mipex1.c:(.text+0xee): undefined reference to `CPXgeterrorstring'
mipex1.c:(.text+0x125): undefined reference to `CPXsetintparam'
mipex1.c:(.text+0x222): undefined reference to `CPXcreateprob'
mipex1.c:(.text+0x2e1): undefined reference to `CPXcopylp'
mipex1.c:(.text+0x334): undefined reference to `CPXcopyctype'
mipex1.c:(.text+0x380): undefined reference to `CPXmipopt'
mipex1.c:(.text+0x3cc): undefined reference to `CPXgetstat'
mipex1.c:(.text+0x403): undefined reference to `CPXgetobjval'
mipex1.c:(.text+0x474): undefined reference to `CPXgetnumrows'
mipex1.c:(.text+0x490): undefined reference to `CPXgetnumcols'
mipex1.c:(.text+0x4be): undefined reference to `CPXgetx'
mipex1.c:(.text+0x51c): …Run Code Online (Sandbox Code Playgroud) 我一直在研究可以建模为整数线性规划的组合优化问题。我在 Visual Studio 2017 和 CPLEX1271 中将它实现为一个 C++ 项目。由于有成倍数的约束,我通过 IloCplex::LazyConstraintCallbackI 实现了惰性约束。在我看来,以下过程是如何产生最优解的:每次确定一个整数解时,LazyConstraintCallbackI 将检查它并向模型添加一些违反约束,直到获得最优整数解。
但是,我对不同输入的实现给出的目标值并不总是正确的。经过将近一年的间歇性调试和测试,我终于找到了原因,这与问题非常相关,但可以通过以下小示例来解释(希望如此):涉及四个布尔变量 x1、x2、x3 和 x4 的整数线性规划
minimize x1
subject to:
x1 ? x2
x1 ? x3
x1 ? x4
x2 + x3 ? 1
x1, x2, x3 and x4 ? {0, 1}?
Run Code Online (Sandbox Code Playgroud)
cplex给出的结果是:
Solution status = Optimal
Objective value = 1
x1 = 1
x2 = 1
x3 = 1
x4 = 1?
Run Code Online (Sandbox Code Playgroud)
毫无疑问,目标值是正确的。奇怪的是cplex设置x4 = 1。虽然x4等于1或0对这个编程中的目标值没有影响。但是,当使用惰性约束回调时,这可能会通过添加一些不正确的约束而导致问题,并且整数编程可以通过迭代添加违反约束来解决。我想知道: