简体   繁体   中英

Call gecode from Java using MiniZinc model

I would like to solve a model with dynamic arguments at run-time in Java. I have my problem written in MiniZinc. From a terminal I can solve the model by calling the following commands:

mzn2fzn model.mzn model_data.dzn  (this produces model.fzn file)
fzn-gecode model.fzn (actually solves the model)

Basically there are 2 steps, first I need to compile minizinc model into flatzinc format while supplying the data file, and then I need to run gecode itself on the flatzinc model.

Ofcourse I can do these steps by calling an external process (using ProcessBuilder in Java or subprocess 'like' in python). But I would like to know if there is a better way. Particularly I would like to avoid recompiling my model into flatzinc for every call.

Is there some alternatives to the way I am trying to call gecode?

Thanks!

The is currently no direct interface from Java to libminizinc, written in C++. The best option is thus to run MiniZinc as an external process.

However, you don't have to call two separate processes. Using the process mzn-fzn , found in the MiniZinc 2 distribution, you can compile and run using a given solver while only constructing one process.

The given code could thus be expressed as: mzn-fzn --solver fzn-gecode model.mzn model_data.dzn

You can avoid saving the data to a file by using the -D flag.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM