簡體   English   中英

如何在 SCIP 中指定編程類型

[英]How to Specify the Programming Type in SCIP

我正在 Python 中使用 PYSCIPOPT 解決優化問題。我知道我不需要指定問題類型,它會自動為我檢測。 但我有一個特殊的情況,它可能會有用。

我原來的問題是 MINLP,但 PYSCIPOPT 無法解決它。 所以我使用外部代碼來建議對 integer 變量的猜測,之后我修復了 integer 變量,從而使問題有效地成為 NLP。為了編碼方便,並且因為我有時可能無法修復所有 integer 變量,所以我使用相同的MINLP 公式,但使用.fixVar()方法指定 integer 變量的值。 預求解后,它說 0 integer 個變量,所以我假設它將問題視為 NLP。但是因為最初的 model 包含 integer 個變量,我想知道它是否仍在嘗試像 MINLP 一樣解決它; 例如,使用針對 MINLP 而不是 NLP 進行微調的啟發式方法。在這種情況下,明確告訴 SCIP 像 NLP 一樣解決它可能會有好處。

我查看了SCIPPYSCIPOPT文檔,但找不到指定問題類型的參數,就像 GAMS 那樣。 我也沒有在 StackOverflow 上看到任何相關問題。

如果有人知道,

  1. 如何強制問題類型
  2. 一種更好的方法來確保它像 NLP 一樣求解,而不是僅僅使用.fixVar()來修復 integer 變量
  3. 或知道它正在將其視為哪種類型的問題的標志(預解決后)

那太好了。 或者,如果這無關緊要,因為,

  1. SCIP 對兩者使用相同的啟發式方法
  2. 固定integer個變量后MINLP求解算法等價於NLP算法
  3. 或者SCIP看到沒有integer變量后自動切換到NLP算法

這也很高興知道。

無需強制問題類型。 SCIP 將在應用所有變量固定后沒有剩余 integer 個變量時實現。

SCIP 用於 NLP 的算法與用於 MINLP 的算法沒有太大區別。 如果沒有的話,它只是跳過了一些處理 integer 變量的技術。 但是 SCIP 幾乎沒有說現在問題只是一個 NLP,它會做一些特別的事情。 多啟動啟發式算法僅在 NLP 的情況下運行。

直接回答要點:

  1. SCIP 不知道“問題類型”
  2. .fixVar() 很好
  3. 從日志中,您可以看到問題中是否還剩下二進制/整數變量以及哪些類型的約束。
  4. 是的,一些啟發式算法同時適用於 NLP 和 MINLP。 如果沒有 integer 個變量,許多 MIP 和 MINLP 啟發式方法將不會運行。 像 subnlp 這樣的一些啟發式算法將對 MINLP 和 NLP 運行。多啟動啟發式算法只對 NLPs 運行。
  5. 是的。
  6. 是的,有點。 NLP 算法是去除了 integer 變量處理的 MINLP 算法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM