MiniZinc / libminizinc

The MiniZinc compiler
http://www.minizinc.org
Other
510 stars 80 forks source link

Version 2.2.0 libminizinc (git version): No support for gecode (or any other FlatZinc solver) after build #228

Closed hakank closed 5 years ago

hakank commented 6 years ago

I'm using the Git version (branch master) of libminizinc 2.2.0 after fetching a completely new libminizinc clone.

$ mkdir build $ cd build $ cmake -DGECODE_HOME="/home/hakank/gecode/gecode" .. """ -- The CXX compiler identification is GNU 7.3.0 -- The C compiler identification is GNU 7.3.0 -- Check for working CXX compiler: /usr/bin/c++ -- Check for working CXX compiler: /usr/bin/c++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Detecting CXX compile features -- Detecting CXX compile features - done -- Check for working C compiler: /usr/bin/cc -- Check for working C compiler: /usr/bin/cc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Detecting C compile features -- Detecting C compile features - done -- Performing Test HAS_WERROR -- Performing Test HAS_WERROR - Success -- Performing Test HAS_STDCPP11 -- Performing Test HAS_STDCPP11 - Success -- Performing Test HAS_CPP11 -- Performing Test HAS_CPP11 - Success -- Performing Test HAS_ATTR_THREAD -- Performing Test HAS_ATTR_THREAD - Success -- Performing Test HAS_ATOLL -- Performing Test HAS_ATOLL - Success -- Performing Test HAS_PIDPATH -- Performing Test HAS_PIDPATH - Failed -- Performing Test HAS_GETMODULEFILENAME -- Performing Test HAS_GETMODULEFILENAME - Failed -- Performing Test HAS_GETFILEATTRIBUTES -- Performing Test HAS_GETFILEATTRIBUTES - Failed -- Performing Test HAS_MEMCPY_S -- Performing Test HAS_MEMCPY_S - Failed -- Found BISON: /usr/bin/bison (found version "3.0.4") -- Found FLEX: /usr/bin/flex (found version "2.6.4") -- Looking for pthread.h -- Looking for pthread.h - found -- Looking for pthread_create -- Looking for pthread_create - not found -- Looking for pthread_create in pthreads -- Looking for pthread_create in pthreads - not found -- Looking for pthread_create in pthread -- Looking for pthread_create in pthread - found -- Found Threads: TRUE
-- Could NOT find MPFR (missing: MPFR_LIBRARY MPFR_INCLUDE) -- Configuring done -- Generating done -- Build files have been written to: /home/hakank/g12/git/libminizinc/build """ $ cmake --build . """ [ 1%] [FLEX][RegExLexer] Building scanner with flex 2.6.4 [ 3%] [BISON][MZNParser] Building parser with bison 3.0.4 [ 4%] [FLEX][MZNLexer] Building scanner with flex 2.6.4 [ 6%] [BISON][RegExParser] Building parser with bison 3.0.4 Scanning dependencies of target minizinc [ 7%] Building CXX object CMakeFiles/minizinc.dir/lib/ast.cpp.o [ 9%] Building CXX object CMakeFiles/minizinc.dir/lib/astexception.cpp.o [ 10%] Building CXX object CMakeFiles/minizinc.dir/lib/aststring.cpp.o [ 12%] Building CXX object CMakeFiles/minizinc.dir/lib/astvec.cpp.o [ 14%] Building CXX object CMakeFiles/minizinc.dir/lib/builtins.cpp.o [ 15%] Building CXX object CMakeFiles/minizinc.dir/lib/copy.cpp.o [ 17%] Building CXX object CMakeFiles/minizinc.dir/lib/eval_par.cpp.o [ 18%] Building CXX object CMakeFiles/minizinc.dir/lib/file_utils.cpp.o [ 20%] Building CXX object CMakeFiles/minizinc.dir/lib/gc.cpp.o [ 21%] Building CXX object CMakeFiles/minizinc.dir/lib/htmlprinter.cpp.o [ 23%] Building CXX object CMakeFiles/minizinc.dir/lib/json_parser.cpp.o [ 25%] Building C object CMakeFiles/minizinc.dir/lib/miniz.c.o /home/hakank/g12/git/libminizinc/lib/miniz.c:3030:9: note: #pragma message: Using fopen, ftello, fseeko, stat() etc. path for file I/O - this path may not support large files.

pragma message("Using fopen, ftello, fseeko, stat() etc. path for file I/O - this path may not support large files.")

     ^~~~~~~

[ 26%] Building C object CMakeFiles/minizinc.dir/lib/cdecode.c.o [ 28%] Building C object CMakeFiles/minizinc.dir/lib/cencode.c.o [ 29%] Building CXX object CMakeFiles/minizinc.dir/lib/model.cpp.o [ 31%] Building CXX object CMakeFiles/minizinc.dir/lib/prettyprinter.cpp.o [ 32%] Building CXX object CMakeFiles/minizinc.dir/lib/pathfileprinter.cpp.o [ 34%] Building CXX object CMakeFiles/minizinc.dir/lib/type.cpp.o [ 35%] Building CXX object CMakeFiles/minizinc.dir/lib/typecheck.cpp.o [ 37%] Building CXX object CMakeFiles/minizinc.dir/lib/flatten.cpp.o [ 39%] Building CXX object CMakeFiles/minizinc.dir/lib/MIPdomains.cpp.o [ 40%] Building CXX object CMakeFiles/minizinc.dir/lib/optimize.cpp.o [ 42%] Building CXX object CMakeFiles/minizinc.dir/lib/options.cpp.o [ 43%] Building CXX object CMakeFiles/minizinc.dir/lib/optimize_constraints.cpp.o [ 45%] Building CXX object CMakeFiles/minizinc.dir/lib/output.cpp.o [ 46%] Building CXX object CMakeFiles/minizinc.dir/lib/solver_instance.cpp.o [ 48%] Building CXX object CMakeFiles/minizinc.dir/lib/solver_instance_base.cpp.o [ 50%] Building CXX object CMakeFiles/minizinc.dir/lib/statistics.cpp.o [ 51%] Building CXX object CMakeFiles/minizinc.dir/lib/values.cpp.o [ 53%] Building CXX object CMakeFiles/minizinc.dir/parser.tab.cpp.o [ 54%] Building CXX object CMakeFiles/minizinc.dir/lexer.yy.cpp.o [ 56%] Building CXX object CMakeFiles/minizinc.dir/regex_parser.tab.cpp.o [ 57%] Building CXX object CMakeFiles/minizinc.dir/regex_lexer.yy.cpp.o [ 59%] Linking CXX static library libminizinc.a [ 59%] Built target minizinc Scanning dependencies of target minizinc_fzn [ 60%] Building CXX object CMakeFiles/minizinc_fzn.dir/solvers/fzn/fzn_solverinstance.cpp.o [ 62%] Building CXX object CMakeFiles/minizinc_fzn.dir/solvers/fzn/fzn_solverfactory.cpp.o [ 64%] Building CXX object CMakeFiles/minizinc_fzn.dir/solvers/mzn/mzn_solverinstance.cpp.o [ 65%] Building CXX object CMakeFiles/minizinc_fzn.dir/solvers/mzn/mzn_solverfactory.cpp.o [ 67%] Linking CXX static library libminizinc_fzn.a [ 67%] Built target minizinc_fzn Scanning dependencies of target minizinc_gecode [ 68%] Building CXX object CMakeFiles/minizinc_gecode.dir/solvers/gecode/fzn_space.cpp.o [ 70%] Building CXX object CMakeFiles/minizinc_gecode.dir/solvers/gecode/gecode_solverinstance.cpp.o [ 71%] Building CXX object CMakeFiles/minizinc_gecode.dir/solvers/gecode/gecode_solverfactory.cpp.o [ 73%] Building CXX object CMakeFiles/minizinc_gecode.dir/solvers/gecode/gecode_constraints.cpp.o [ 75%] Building CXX object CMakeFiles/minizinc_gecode.dir/lib/passes/gecode_pass.cpp.o [ 76%] Linking CXX static library libminizinc_gecode.a [ 76%] Built target minizinc_gecode Scanning dependencies of target minizinc_solver [ 78%] Building CXX object CMakeFiles/minizinc_solver.dir/lib/flattener.cpp.o [ 79%] Building CXX object CMakeFiles/minizinc_solver.dir/lib/passes/compile_pass.cpp.o [ 81%] Building CXX object CMakeFiles/minizinc_solver.dir/lib/process.cpp.o [ 82%] Building CXX object CMakeFiles/minizinc_solver.dir/lib/solns2out.cpp.o [ 84%] Building CXX object CMakeFiles/minizinc_solver.dir/lib/solver.cpp.o [ 85%] Building CXX object CMakeFiles/minizinc_solver.dir/lib/solver_config.cpp.o [ 87%] Linking CXX static library libminizinc_solver.a [ 87%] Built target minizinc_solver Scanning dependencies of target solns2out [ 89%] Building CXX object CMakeFiles/solns2out.dir/minizinc.cpp.o [ 90%] Linking CXX executable solns2out [ 90%] Built target solns2out Scanning dependencies of target mzn2fzn [ 92%] Building CXX object CMakeFiles/mzn2fzn.dir/minizinc.cpp.o [ 93%] Linking CXX executable mzn2fzn [ 93%] Built target mzn2fzn Scanning dependencies of target minizinc-bin [ 95%] Building CXX object CMakeFiles/minizinc-bin.dir/minizinc.cpp.o [ 96%] Linking CXX executable minizinc [ 96%] Built target minizinc-bin Scanning dependencies of target mzn2doc [ 98%] Building CXX object CMakeFiles/mzn2doc.dir/mzn2doc.cpp.o [100%] Linking CXX executable mzn2doc [100%] Built target mzn2doc """

So this seems to work well. But there are no solvers at all. Why?

$ ./minizinc --solvers MiniZinc driver. Available solver configurations: none.

Axel's suggestion in https://github.com/MiniZinc/libminizinc/issues/227 to manually create a .msc file works and after adding the file share/minizinc/solvers/picat_sat.msc I now got:

$ minizinc --solvers
MiniZinc driver. Available solver configurations: picat_sat 24 (picat_sat, cp, int)

But why isn't gecode in the list, or - for that matter - some default solver?

Versions:

/Hakan

a1880 commented 6 years ago

This is the output of the official 2.2.0 release for Windows:

C:\AK\Programme\MiniZinc_IDE_2.2.0>minizinc --solvers
MiniZinc driver.
Available solver configurations:
  Chuffed 0.10.0 (org.chuffed.chuffed, cp, lcg, int)
  CPLEX <unknown version> (org.minizinc.mip.cplex, mip, float, api)
  findMUS 0.1.0 (org.minizinc.findmus)
  Gecode 6.0.1 (org.gecode.gecode, default solver, cp, int, float, set, restart)
  Gecode Gist 6.0.1 (org.gecode.gist, cp, int, float, set, restart)
  Globalizer 0.1.5.0 (org.minizinc.globalizer, experimental, tool)
  Google OR v6.4.4495 (GoogleOR)
  Google OR v6.4.4495 (googleor, cp, int, float, set, restart)
  Gurobi <unknown version> (org.minizinc.mip.gurobi, mip, float, api)
  OSICBC 2.9/1.16 (org.minizinc.mip.osicbc, mip, float, api)
  picat 24 (picat, cp, int, float, set, restart)

Google OR and picat have been added by me via home-grown *.msc files. I've run the command from within the MiniZinc directory.

guidotack commented 6 years ago

The default solver for the old minizinc driver was the flatzinc executable (G12fd). Since we stopped shipping this solver with 2.2.0, we removed the default as well. The output of --solvers only lists actual solvers (i.e., ones with a library, binary etc). But the minizinc driver contains a default solver interface, i.e., the code to run any external solver (it has the solver id org.minizinc.mzn-fzn). Perhaps this should be listed in the --solvers output?

hakank commented 6 years ago

Hi again, Guido.

But shouldn't Gecode be seen as a solver in the solver list now that I actually configured for it with cmake -DGECODE_HOME="/home/hakank/gecode/gecode" ..? Why else would I want to configure with -DGECODE_HOME="...."?

The org.minizinc.mzn-fzn seems to be the thing I look for, it seems to support the "--fzn-cmd" etc.

Perhaps the --solver org.minizinc.mzn-fzn option should be mentioned in the --help page?

/Hakan

hakank commented 6 years ago

Other "solver" that is not available in --solvers is

They are both mentioned in Axel's output above, but neither is available.

$ minizinc --solver org.minizinc.globalizer coins3.mzn """ Config exception: no solver with tag org.minizinc.globalizer found minizinc: MiniZinc driver. Usage: minizinc [] [-I ] .mzn [.dzn ...] or just .fzn More info with "minizinc --help" """

$ minizinc --solver findMUS coins3.mzn """ Config exception: no solver with tag findmus found minizinc: MiniZinc driver. Usage: minizinc [] [-I ] .mzn [.dzn ...] or just .fzn More info with "minizinc --help" """

How do I install them in my non-IDE system?

hakank commented 6 years ago

And I just got MiniZincIDE to work. Copying the generated .msc files etc to the libminizinc directories generate this solvers list:

$ minizinc --solvers
""" MiniZinc driver. Available solver configurations: Chuffed 0.10.0 (org.chuffed.chuffed, cp, lcg, int) findMUS 0.1.0 (org.minizinc.findmus) Gecode 6.0.1 (org.gecode.gecode, cp, int, float, set, restart) Gecode Gist 6.0.1 (org.gecode.gist, cp, int, float, set, restart) Globalizer 0.1.5.0 (org.minizinc.globalizer, experimental, tool) picat_sat 24 (picat_sat, cp, int) """

However, I had to copy the binaries "findMUS" and "minizinc-globalizer". Is there a way to generate these with libminizinc as well?

(Both findMUS and Globalizer seems very interesting and is what I will check out now,)

guidotack commented 6 years ago

findMUS and globalizer are not part of libminizinc. We will make the repositories public soon, but at the moment they are only available with the binary release.

hakank commented 6 years ago

Thanks Guido. I really like these tools, and have a bit use of the globalizer already as well as findMUS (at least for verifying where the problem was). Great tools!

I copied findMUS and globalizer from the MiniZincIDE distribution, so that's not a big deal for me, at least.

Perhaps I should make this a new issue, but it's a related wish: If one have at least one solver available in the command line version, it would be really nifty to be able to set one solver as default (perhaps with parameters). This way, one don't have to state --solver gecode -a -s all the time.

guidotack commented 6 years ago

You can set a default solver in your user configuration file (see http://www.minizinc.org/doc-2.2.0/en/command_line.html#user-configuration-files) using the empty tag, e.g.

{ "tagDefaults": [["","org.gecode.gecode"]] }

This doesn't let you set parameters yet (at the moment).

hakank commented 6 years ago

Thanks again, Guido.

Setting default parameters is another wish.