簡體   English   中英

如何在 Minizinc 中使用熱啟動?

[英]How to use warm starts in Minizinc?

我正在嘗試使用 Minizinc 中的熱啟動注釋來為模型提供已知的次優解決方案。

我首先嘗試從 Minizinc 文檔(他們提供的唯一文檔)中執行這個熱啟動示例:

array[1..3] of var 0..10: x;
array[1..3] of var 0.0..10.5: xf;
var bool: b;
array[1..3] of var set of 5..9: xs;
constraint b+sum(x)==1;
constraint b+sum(xf)==2.4;
constraint 5==sum( [ card(xs[i]) | i in index_set(xs) ] );
solve
  :: warm_start_array( [                     %%% Can be on the upper level
    warm_start( x, [<>,8,4] ),               %%% Use <> for missing values
    warm_start( xf, array1d(-5..-3, [5.6,<>,4.7] ) ),
    warm_start( xs, array1d( -3..-2, [ 6..8, 5..7 ] ) )
  ] )
  :: seq_search( [
    warm_start_array( [                      %%% Now included in seq_search to keep order
      warm_start( x, [<>,5,2] ),             %%% Repeated warm_starts allowed but not specified
      warm_start( xf, array1d(-5..-3, [5.6,<>,4.7] ) ),
      warm_start( xs, array1d( -3..-2, [ 6..8, 5..7 ] ) )
    ] ),
    warm_start( [b], [true] ),
    int_search(x, first_fail, indomain_min)
  ] )
  minimize x[1] + b + xf[2] + card( xs[1] intersect xs[3] );

該示例運行,並獲得最佳解決方案。 但是,輸出顯示警告,指出所有熱啟動注釋都被忽略。

Warning, ignored search annotation: warm_start_array([warm_start([[xi(1), xi(2)], [i(5), i(2)]]), warm_start([[xf(0), xf(2)], [f(5.6), f(4.7)]]), warm_start([[xs(0), xs(1), xs(2)], [s(), s()]])])
Warning, ignored search annotation: warm_start([[xb(0)], [b(true)]])
Warning, ignored search annotation: warm_start_array([warm_start([[xi(1), xi(2)], [i(8), i(4)]]), warm_start([[xf(0), xf(2)], [f(5.6), f(4.7)]]), warm_start([[xs(0), xs(1), xs(2)], [s(), s()]])])

我沒有修改示例中的任何內容,只是復制粘貼它並在 Minizinc IDE 中使用 Geocode 默認求解器運行它。 如果相關,我正在使用 Windows。 我已經運行其他模型並使用其他搜索注釋沒有問題。

在這個例子中,有兩塊暖星(一個在 solve 之后,一個在 seq_search 中)。 我不確定兩者是否都需要。 我嘗試刪除一個,然后刪除另一個,但是對於所有剩余的熱啟動注釋仍然會發生警告。 我也不明白為什么在第一個塊中沒有提到“b”。

git https://github.com/google/or-tools/issues/539 中有一個類似的例子,但它也會產生警告。

如果有人可以向我指出warm_start 的一個工作示例,那就太好了。

您對warm_start注釋的使用是正確的,但目前大多數求解器不支持熱啟動注釋。 在撰寫本文時,我相信只有混合整數編程接口(CoinBC、Gurobi、CPlex、XPress 和 SCIP)支持熱啟動注釋。 盡管我們一直致力於在 Gecode 和 Chuffed 中添加對注釋的支持,但尚未在任何已發布版本中包含對此注釋的支持。

暫無
暫無

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

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