2017-05-05 118 views
0

我試圖在單個mzn文件所施加的結構如下:MiniZinc可以應用多個「解決方案」嗎?

define Variables; 

%% first set of constraints 
constraint ...; 
constraint ...; 
solve satisfy; 

%% second set of constraints 
constraint ...; 
constraint ...; 
solve satisfy; 

其中第二組約束是約束施加到從第一solve結果,進行操作分別將減少搜索空間從而減少計算時間,這是我首先想到這個結構的原因。

有什麼辦法可以實現這種依賴結構嗎?由於MiniZinc不允許兩個solve

回答

1

正如你所提到的MiniZinc在模型中只需要一個solve

根據問題還有其他方法。

1)用另一種編程語言編寫程序,運行第一個MiniZinc模型並獲取結果。然後,您可以製作(運行時間)另一個以前一個結果運行的MiniZinc模型。這是我自己可能會用到的方法。

MiniZinc的開發版本包含一個Python接口,這可能會讓這很容易。但是,我沒有測試過這個。 2)非常依賴於具體問題,可能將兩個版本在同一模型中組合起來。例如,如果問題有兩個目標,那麼您可以在模型中同時存在兩個子問題,並將這兩個目標相結合,從而爲每個子問題目標的重要性添加權重。它是處理多個目標(多目標)的「標準」方式,例如線性規劃。但是,在MiniZinc中沒有特別的支持。 (MiniZinc的一個相關特性是支持一個首先解決目標的模型,然後生成滿足該目標的所有解決方案,但在今天的MiniZinc中這是不可能的,但實驗MiniSearch擴展的迷你鋅,http://www.minizinc.org/minisearch/可能會使這成爲可能,至少根據開發人員。雖然我從來沒有得到它的工作...)

相關問題