約束式編程
到近期因為一些原因,我又在找類似的方案,特別是在找 Java 上的實現,好讓我可以直接在常用的平台做類似的事情。
我先找到了 OptaPlanner,它由 JBoss Community 維護,但建模似乎更複雜,我未太明白。
我亦找到了 Google 推出的 or-tools,但它的說明文件比較混亂。
後來我找到了 Java 平台上有 JSR-331 這標準(連結、連結、連結、連結、連結),大家可按著這共有的編程介面,配合不同的實現,建構出基於約束的解題程式。可惜網上的資源並不算太多,我亦不太肯定各種實現的實現和更新情況。那些開發商的非 JSR-331 實現反而可能更好(例子)。當然這標準值得留意。
我退而求其次,撇開 Java 這個條件,反而找到了一種名叫 MiniZinc 的語言,算易編寫,我寫了一個簡單的程式,找出符合條件的最大數字:
它其實也有 Java 上的接近的實現,但我也未試過。
這個網站有大量基於不同語言和建模方式的約束式編程範例程式,很值得參考。
參考連結:
Wikipedia - Constraint programming
本文連結