CPLEX出现‘q1‘ is not convex?

本文介绍了在使用CPLEX优化工具时遇到'q1' is not convex错误的原因和解决方案。问题源于模型中出现了非线性表达式,通常由变量相乘导致。通过大M法,将非线性约束转换为线性,以适应CPLEX的求解。文章以货物流平衡问题为例,详细解释了如何应用大M法,并讨论了大M取值与CPLEX精度的关系,提醒读者在实际应用中需要注意的潜在问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不知道大家在写CPLEX的时候遇到过这个问题没有?

其实有过经验的小伙伴都知道该怎么处理了,但是小编决定还是写一下避免刚入行的小伙伴们踩坑。

这个错误呢查了ibm knowledge center显示如下:

里面讲了一堆想必大家也懒得去看了,我来讲讲这类问题的解决方案吧~出现这个错误的原因不是编程上的问题,而是建模方式上的问题。简单来说就是目标函数或者约束上出现了非线性的数学表达式。

那么什么是线性和非线性呢?我这里引一下百度知道上一个非常通俗易懂的解释:

两个变量之间的关系是一次函数关系的——图象是直线,这样的两个变量之间的关系就zhi是“线性关系”;如果不是一次函数关系的——图象不是直线,就是“非线性关系”。比如说y=kx 就是线形的 而y=x^2就是非线形的线形的图形一般是一条直线。


“非线性”的意思就是“所得非所望”。一个线性关系中的量是成比例的:十枚橘子的价钱是一枚的十倍。非线性意味着批发价格是不成比例的:一大箱橘子的价钱比一枚的价钱乘以橘子的个数要少。这里重要的观念是“反馈”——折扣的大小反过来又影响顾客购买的数量。

也就是说你的模型中很可能出现了多个变量相乘的情况,例如下面这种情景:

要解决这个问题,首先就得想你的模型给linearlized了。而最常用的做法就是“大M”法了,通过增加一个充分大的数,将多个相乘的变量给拆开,从而达到线性化的目的。

不过像上图那种情况就非常麻烦(其实是我建模建错了),今天就先不讨论。举个简单的例子,VRP的arc-flow模型中货物流常见的约束如下:

其中QjkQ_j^kQjkxi,jkx_{i,j}^kxi,jk为决策变量,QjkQ_j^kQjk表示车辆kkk离开客户jjj以后的载重量,而xi,jkx_{i,j}^kxi,jk为1表示车辆走过边(i,ji, ji,j),否则为0。这条约束的含义是非常明了的,如果车辆经过边(i,ji, ji,j),那么该车辆离开客户jjj的载重量必须大于等于车辆离开客户iii的载重量加上客户jjj的需求量,这是货物流平衡。

可以看到不等式右边出现了变量和变量相乘的情况,这就造成了我们刚刚说的“非线性”问题,那么这个模型放进cplex中肯定会报“not convex”的错误。为了让cplex能求解该模型,我们需要将非线性的约束转成线性的。

常见的一个办法是引入一个充分大的数,我们都喜欢叫它大M。当然这个数具体要多大,是不是越大越好,也不一定,后面我再讲。

先观察约束(8)右端的式子,发现只有当xi,jkx_{i,j}^kxi,jk为1时,才需要Qjk≥Qik+qiQ_j^k \ge Q_i^k + q_iQj

为了解决公交乘务排班优化问题,首先需要定义目标函数和约束条件。目标函数可能关注于最小化成本、工时,或最大化服务效率,这取决于公交公司的具体需求。例如,若目标是最小化乘务员数量,可以设置目标函数为最小化所有乘务员的总工作时间。为了满足乘务规则和乘客需求,需要设立一系列约束条件,例如:每天工作时间不超过8小时、连续驾驶不超过4小时、每条线路的班次需求必须满足等。 参考资源链接:[Cplex教程:公交乘务排班优化问题的IBM ILOG CPLEX应用](https://wenku.csdn.net/doc/7wt7b8dw0x?spm=1055.2569.3001.10343) 在建立了目标函数和约束条件后,可以使用Cplex来求解这一优化问题。Cplex支持线性规划(LP)、整数规划(IP)等多种优化模型。在这个案例中,由于排班问题通常涉及到整数解(如人员数量和班次),因此需要使用整数规划。将目标函数和约束条件转化为Cplex能够识别的格式后,可以调用Cplex的优化引擎进行求解。 实际操作中,可以按照以下步骤进行: 1. 使用Cplex的建模语言定义决策变量,例如每条线路的每个班次是否有乘务员值乘。 2. 根据公司目标,设置相应的目标函数,如最小化乘务员的总工作时间。 3. 根据乘务规则和线路需求,定义约束条件,保证排班满足所有规定。 4. 利用Cplex的API编写代码,输入目标函数和约束条件,运行优化算法。 5. 分析Cplex返回的最优解,验证排班方案是否符合实际操作的可行性。 6. 如果需要,调整目标函数或约束条件,重新求解,直至找到满意的解决方案。 通过这一系列的步骤,可以利用Cplex的强大功能来求解公交乘务排班问题,从而实现对乘务员的有效调度,优化班次配置,同时符合劳动法规和公司政策。随着Cplex求解技术的进步,公交乘务排班方案将更加精确和高效,为公交公司的运营决策提供有力支持。 参考资源链接:[Cplex教程:公交乘务排班优化问题的IBM ILOG CPLEX应用](https://wenku.csdn.net/doc/7wt7b8dw0x?spm=1055.2569.3001.10343)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值