簡體   English   中英

獲取 SCIP 中的節點被修剪的原因

[英]Getting the reason why a node in SCIP was pruned

我已經在 C++ 中使用 SCIP 實現了分支和剪切算法。 我的優化問題有一個最小化目標函數,目前我的代碼有一個我正在努力修復的錯誤。 我的問題的最佳值為 100,但程序返回 101。查看分支定界樹(使用可視化工具),我看到 SCIP 正在修剪 LP 界限為 100 的節點。此外,經過進一步調查,我發現確實,對於這個節點來說,值為 100 的最優解應該是可行的。 我還確認我的自定義約束處理程序沒有修剪此節點。 因此,為了調試它,我一直在尋找一種方法來找出 SCIP 修剪這個特定節點的原因,有沒有辦法做到這一點?

我已經嘗試過使用“調試解決方案”功能,但由於我有自定義分支規則,它無法正常工作。 每次它分支時,它都會報告我的輸入解決方案(最佳解決方案)違反了分支不等式之一。 此外,它沒有報告任何關於為什么有問題的節點被修剪的信息。 此外,當我創建分支約束時,我將檢查標志設置為 FALSE。

非常感謝您抽出寶貴的時間,我將不勝感激有關此主題的任何評論。

編輯:我還將變量鎖定在我的自定義約束處理程序中,以便 SCIP 不會錯誤地修復某些變量。

啊,我在郵件列表上找到了你的問題。 我查看了用於檢查調試解決方案的代碼,我認為 SCIP 將分支約束處理到調試解決方案的方式存在一個錯誤(可能是因為沒有人使用帶有調試解決方案功能的分支約束)。 僅檢查綁定更改,而不檢查分支約束,以確定調試解決方案是否與該節點相關。 isSolutionInNode方法需要擴展以考慮node->conssetchg 不幸的是,這意味着您無法使用調試解決方案功能來查找您的錯誤。

只是為了確保,現在你的分支不等式說總和正好是 2 或至少是 4,這是正確的嗎? (因為您最多寫了 2 篇)為什么對於您正在解決的問題,這是一個有效的析取?

如果您完全卡在這一點上,但在 SCIP 中還不夠舒適,無法自己擴展isSolutionNode ,我可以嘗試為您編寫一個補丁。

暫無
暫無

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

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