标签: cplex

二次规划 CPLEX

我正在尝试使用 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)

python cplex quadratic-programming

2
推荐指数
1
解决办法
1537
查看次数

SCIP 没有找到 MIQP 问题的良好解决方案,而 CPLEX 很快找到一个解决方案

我想使用 SCIP 解决具有 267 个变量 [1] 的混合整数二次规划问题。

CPLEX 可以在大约 30 秒内解决该问题,并且在不到一秒的时间内就已经找到了非常接近最优解的解决方案 [2, 3]。

不幸的是,SCIP 确实在解决这个问题上遇到了困难,即使运行了 20 多分钟也无法找到接近最佳的解决方案 [4]。

为什么是这样?CPLEX 在 MIQP 方面真的SCIP 好得多吗?我是否没有正确配置 SCIP?如何使用 SCIP 解决这个问题?

在我看来,SCIP 找到的解决方案与松弛的解决方案相去甚远。我的印象是 SCIP 首先解决松弛问题,然后尝试在此基础上找到整数解。这不正确吗?如果是的话,为什么解决方案还那么遥远?

cplex scip quadratic-programming mixed-integer-programming

2
推荐指数
1
解决办法
565
查看次数

如何用cplex解决LP松弛问题

我有一个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

1
推荐指数
1
解决办法
2333
查看次数

用cplex解决时如何设置差距

我用c ++编写代码并调用CPLEX来解决它.它很快找到了一个非常好的解决方案,但需要很长时间才能改进它.所以我想将间隙设置为更大的值来终止代码,这就是我使用的:

    cplex_model.setParam(EpGap, 0.01);
Run Code Online (Sandbox Code Playgroud)

但编译器给我一个错误,说EpGap是一个未声明的标识符.相对差距的默认名称是什么?

c++ mathematical-optimization linear-programming cplex integer-programming

1
推荐指数
1
解决办法
3030
查看次数

为什么 CPLEX 在不同的机器上输出不同的结果?

当我运行使用 CPLEX 的 .NET 4 应用程序时,我在不同的机器上得到不同的输出。在我的开发机器上,CPLEX 输出一个结果(异常并停留在某个大值),而在所有其他机器上,结果正常。

首先,我认为它与操作系统有关,由于我的开发机器上同时安装了 Windows 7 x64 和 Windows 8 x64,我尝试在两个系统上运行应用程序。结果是一样的 - 有问题。

然后我尝试在两台不同的台式机上运行,​​它工作正常。我什至在虚拟机中尝试过,在我的开发机器上使用 Windows 7 来宾,在所有这些情况下,结果都可以。

如何解决这个问题?我该如何调试正在发生的事情?任何建议都会有所帮助。

附加信息:

  • 我的开发机器是 Asus N73N 笔记本电脑,配备 Intel Core i7-2670QM CPU @ 2.20GHz、4 个内核、8 个逻辑处理器和 8GB RAM。
  • 使用的 CPLEX:v12.4

这是我的开发机器的错误输出:

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)

.net mathematical-optimization cplex

1
推荐指数
1
解决办法
1317
查看次数

Cplex Java如何避免打印输出?

我有一个优化模型,每次仿真迭代时都必须在仿真模型中运行。但是,它会在每次迭代时将日志,错误,警告和结果显示为Cplex的输出。我该如何取消呢?

我在python中找到了针对同一问题的以下链接,但是找不到Java命令:

Cplex Python如何避免打印输出

我想知道是否有人可以帮助我。谢谢。

java cplex

1
推荐指数
1
解决办法
1259
查看次数

CPLEX - 访问解决方案 C++ 时出错

我在获取 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)

c++ cplex

1
推荐指数
1
解决办法
1524
查看次数

CPLEX 与 Gurobi 的比较

Gurobi 和 CPLEX 是近年来非常流行的求解器。就许可证而言,CPLEX 对学者来说更容易。据说它的性能也非常高。但 Gurobi 据称是近年来最快的求解器,而且还在不断改进。但是,据说当约束数量增加时,其性能会下降。

在速度和性能方面,一般推荐哪种求解器专门用于具有二次目标函数的大规模问题,没有太多约束?

它们在 Python 中的使用会影响它们的性能吗?

python cplex gurobi

1
推荐指数
2
解决办法
1763
查看次数

Cplex 库 gcc 编译链接错误

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)

c gcc compiler-errors undefined-reference cplex

0
推荐指数
1
解决办法
1286
查看次数

为什么 CPLEX 将不相关的变量设置为 1?

我一直在研究可以建模为整数线性规划的组合优化问题。我在 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对这个编程中的目标值没有影响。但是,当使用惰性约束回调时,这可能会通过添加一些不正确的约束而导致问题,并且整数编程可以通过迭代添加违反约束来解决。我想知道:

  1. 为什么 cplex 将“无关”变量 x4 设置为 1,而不是 0?
  2. 我应该怎么做才能告诉 CPLEX 我想将这种“无关”变量保留为 0?

linear-programming cplex integer-programming

0
推荐指数
1
解决办法
95
查看次数