如何在Minizinc中使用热启动?

问题描述 投票:0回答:1

我正在尝试使用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()]])])

我没有修改示例中的任何内容,只是将其复制粘贴并在带有Geocode默认求解器的Minizinc IDE中运行。如果相关,则我使用Windows。我运行了其他模型并使用了其他搜索注释,没有出现问题。

在该示例中,有两个温暖的星星块(一个在求解后,另一个在seq_search内部)。我不确定两者是否都是必要的。我尝试先删除一个,然后删除另一个,但是所有剩余的热启动注释仍然会发出警告。我也不明白为什么在fisrt块中未引用“ b”。

[git https://github.com/google/or-tools/issues/539中有一个类似的示例,但它也会产生警告。

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

constraint-programming minizinc
1个回答
0
投票

您对warm_start批注的用法是正确的,但是大多数求解器目前不支持热启动批注。在撰写本文时,我相信混合整数编程接口(CoinBC,Gurobi,CPlex,XPress和SCIP)仅支持热启动注释。尽管我们一直在努力在Gecode和Chuffed中添加对注释的支持,但是任何发行版本均未包含对此注释的支持。

© www.soinside.com 2019 - 2024. All rights reserved.