2401_82753220 2024-04-21 23:20 采纳率: 80%
浏览 20
已结题

yalmip的binvar二进制变量,求解的取值不是绝对的0或1,而是无限趋近于0或1的值

为什么定义了yalmip的binvar二进制变量,求解的取值不是绝对的0或1,而是无限趋近于0或1的值。用的是Cplex求解器。

还有通过引入一个极大值M来将几个非线性的约束改成线性的约束,但是M的取值很玄乎,有的时候可以,有的时候运行不出结果(参数是随机生成的),该怎么办,binvar二进制变量的取值也对大M取值有影响,如果他是绝对的0或1,那极大值M就很容易取值了,但是并不是,所以大M过大也不行,可能导致约束失效,怎么解决。

  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-21 23:20
    关注

    引自免费微信小程序:皆我百晓生

    在使用YALMIP和CPLEX求解二进制变量问题时,有时会出现二进制变量的解并非严格等于0或1的情况,这主要是由于数值计算的精度限制以及优化算法本身的特性导致的。为了使二进制变量更接近于0或1,你可以采取以下策略:

    1. 提高 solver 的精度设置:在调用求解器时,可以尝试提高精度参数,使得解更加精确。对于CPLEX,可以通过cplex.options.tolerances.mipgap来设置混合整数规划的容忍度。这个值越小,求解器会花更多的时间去寻找更精确的解,但可能会增加计算时间。例如:

      cplex = sdpsettings('solver', 'cpoptimizer', 'solveropts', struct('mipgap', 1e-6)); % 设置MIP gap为0.00001
      sol = solve(model, cplex);
      
    2. 强迫二进制变量取整:在某些情况下,即使求解器返回的结果不是严格的0或1,但可能是非常接近这两个值。你可以选择在得到解之后进行强制取整,确保它们是0或1。例如:

      x_solved = value(x); % x_solved是解
      x_int = round(x_solved); % 强制取整
      
    3. 使用逻辑约束:尽管这不是解决精度问题的最佳方法,但有时候可以通过添加逻辑约束来迫使二进制变量更接近0或1。例如,你可以添加一个新的线性不等式来保证每个二进制变量与它的平方之差小于某个很小的正数ε(比如ε=1e-6)。

      epsilon = 1e-6;
      model = [model, x .^ 2 <= x + epsilon, x .^ 2 >= x - epsilon];
      
    4. 对于极大值M的问题,确实存在一定的挑战。如果你正在处理非线性约束,并且试图通过大M方法将其转换为线性约束,那么选择合适的M值至关重要。通常,M应该大于所有可能情况下的右端项的最大值。然而,在实际应用中,我们往往不知道这些最大值的确切值,因此需要试错或使用启发式方法来估计。

      一种常见的做法是先运行一次无约束的线性化问题,获取各变量的上界和下界,然后根据这些上下界来确定M的范围。但这种方法也可能存在问题,因为初始的线性化解可能并不是最优的,从而导致M值的估计不够准确。

      另外,如果二进制变量的取值对M的选择有很大影响,那么在选择M时需要考虑二进制变量的最优解。一种可能的方法是在迭代过程中动态调整M值,直到找到一个足够大的M,使得约束变得活跃。

      如果上述方法都难以找到一个合适的M值,你可能需要重新思考模型的构建方式,看看是否有可能采用其他方法来处理非线性约束,或者寻找其他的建模技巧。

    记住,优化问题的复杂性和精度要求有时会导致这些问题。在实践中,需要不断试验和调整模型、求解器参数和约束来获得满意的结果。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 5月16日
  • 已采纳回答 5月8日
  • 创建了问题 4月21日

悬赏问题

  • ¥20 找辅导 初学者 想实现一个项目 没有方向
  • ¥15 关于渗漏场的电场分布模拟
  • ¥24 matlab怎么修改仿真初始时间
  • ¥15 两分段线性回归模型分析阈值效应
  • ¥15 前端和后端代码都没报错,但是点登录没反应的?
  • ¥100 需要远程解决QSQLITE问题!
  • ¥15 利用光场表达式画出初始光场强度分布图像等几个问题在这两个图片里
  • ¥15 gozero求手把手教学,400一天
  • ¥15 泥浆冲清水的泥浆分布
  • ¥15 LASSO回归分析筛选关键基因,适合多大样本量?