2016-11-28 110 views
0

我對SCIP很陌生。我想用SCIP作爲分支和價格框架。我已經用C++編寫了這個問題,並且已經實現了價值或列生成功能。事實上,我已經通過將Cplex.dll鏈接到項目來實現根節點的BP算法,現在需要編碼分支樹並決定使用SCIP來實現此目的。 我想知道什麼是使用SCIP和我擁有的舊代碼解決我的問題的最快方法?或者,也許使用GCG是一種更好更快的方式? 我已閱讀GCG文檔,但不明白我是否應該再次實施定價機制?實際上我不瞭解這兩者(SCIP和GCG)之間的區別。 謝謝。使用舊代碼的SCIP

+0

您是否查看了[SCIP文檔](http://scip.zib.de/doc/html/)的「入門」部分? [開始新項目]頁面(http://scip.zib.de/doc/html/START.php)列出了可用的編碼示例。就你而言(C++中的列生成),VRP示例可能是一個起點。 – Gregor

回答

1

在GCG中,您不需要自己執行任何操作。它是分支和價格的通用求解器。您必須提供緊湊的配方,即應用了Dantzig-Wolfe配方後的模型會導致您正在解決的主要問題。重新配置還提供了定價問題的MIP制定,因此GCG可以將其作爲定價的子MIP來解決。然而,有可能在GCG中插入一個定價解算器,要求解決的定價MIP將通過(其目標函數對應於當前定價輪次)。然後定價求解器可以用任何問題特定的算法解決這個問題,並將解決方案傳遞迴GCG。

另一方面,在SCIP中,您創建了您想要解決的主要問題並實現了一個從LP獲得雙重價值的價格,並解決了相應的定價問題。這可能與您已經非常相似。

此外,如果你想要做分支和價格,你需要一個分支規則。 GCG帶有一些通用的,在SCIP中,您必須自己實施一個(因爲分支決策必須在您的定價過程中考慮)。總的來說,SCIP是一個分支和價格的框架,也就是說,它提供了樹管理,LP解決和更新等,但是你需要像閱讀器,定價器和分支規則。 GCG是一種通用解算器,因此您可以插入一個緊湊型模型,該模型將以一種通用的方式進行重新配置和解決。重新配製由您通過輸入文件提供,或者您可以嘗試讓GCG檢測適當的結構。你不需要執行任何操作。它已經提供了一些很好的功能,例如使用重構的原始啓發式,自動管理何時解決哪些定價問題等等。另一方面,與SCIP相比,例如通過定價求解器和分支規則進一步擴展的可能性受到限制,因爲您必須堅持GCG定義的結構。

我會說,使用SCIP和添加您的價格是可能的更簡單的方法,更類似於你已有的(你不需要制定緊湊型號)。如果你已經知道你的分支應該如何工作,那麼在SCIP中實現也不會太難。

+0

:非常感謝,但用戶如何通過輸入文件提供重新配置?我在文檔中找不到這個。 – math2014

+0

請查看此頁及其鏈接:http://www.or.rwth-aachen.de/gcg/doc/FILEFORMATS.html – Gerald