【问题标题】:How to Specify the Programming Type in SCIP如何在 SCIP 中指定编程类型
【发布时间】:2022-11-24 06:33:36
【问题描述】:

我正在 Python 中使用 PYSCIPOPT 解决优化问题。我知道我不需要指定问题类型,它会自动为我检测。但我有一个特殊的情况,它可能会有用。

我原来的问题是 MINLP,但 PYSCIPOPT 无法解决它。所以我使用外部代码来建议对整数变量的猜测,然后我修复整数变量,从而使问题有效地成为 NLP。为了编码方便,并且因为我有时可能无法修复所有整数变量,所以我使用相同的 MINLP 公式,但使用 .fixVar() 方法指定整数变量的值。预求解后,它显示 0 个整数变量,因此我假设它将问题视为 NLP。但是因为初始模型包含整数变量,我想知道它是否仍然像MINLP一样试图解决它;例如使用针对 MINLP 而不是 NLP 微调的启发式方法。在这种情况下,明确告诉 SCIP 像 NLP 一样解决它可能会有好处。

我查看了 SCIPPYSCIPOPT 文档,但找不到指定问题类型的参数,就像 GAMS 那样。我也没有在 StackOverflow 上看到任何相关问题。

如果有人知道,

  1. 如何强制问题类型
  2. 一种更好的方法来确保它像 NLP 一样求解,而不是仅仅使用 .fixVar() 来修复整数变量
  3. 或者一个标志,知道它正在将其视为什么类型的问题(在预解决之后)

    那很好啊。或者,如果这无关紧要,因为,

    1. SCIP 对两者使用相同的启发式
    2. 固定整数变量后MINLP求解算法等价于NLP算法
    3. 或者SCIP看到没有整型变量后自动切换到NLP算法

    这也很高兴知道。

【问题讨论】:

    标签: scip pyscipopt


    【解决方案1】:

    无需强制问题类型。 SCIP 将在应用所有变量固定后没有剩余整数变量时实现。

    SCIP 用于 NLP 的算法与用于 MINLP 的算法没有太大区别。如果没有,它只是跳过了一些处理整数变量的技术。但是 SCIP 几乎没有说现在问题只是一个 NLP,它会做一些特别的事情。多起点启发式算法只能在 NLP 的情况下运行。

    直接回答要点:

    1. SCIP 不知道“问题类型”
    2. .fixVar() 没问题
    3. 从日志中,您可以看到是否还有二进制/整数变量剩余以及问题中剩余的约束类型。
    4. 是的,一些启发式算法同时适用于 NLP 和 MINLP。如果没有整数变量,许多 MIP 和 MINLP 启发式方法将不会运行。像 subnlp 这样的一些启发式方法将同时适用于 MINLP 和 NLP。多起点启发式算法仅适用于 NLP。
    5. 是的。
    6. 是的,有点。 NLP 算法是 MINLP 算法,去除了对整数变量的处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-16
      • 2021-09-11
      • 1970-01-01
      • 2019-10-04
      相关资源
      最近更新 更多