/ / Appelez gecode depuis Java en utilisant le modèle MiniZinc - java, minizinc, gecode

Appelez gecode à partir de Java avec le modèle MiniZinc - java, minizinc, gecode

J'aimerais résoudre un modèle avec des arguments dynamiques au moment de l'exécution en Java. J'ai mon problème écrit en MiniZinc. À partir d'un terminal, je peux résoudre le modèle en appelant les commandes suivantes:

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

En gros, il y a 2 étapes. Tout d'abord, je dois compiler le modèle minizinc au format flatzinc lors de la fourniture du fichier de données, puis je dois exécuter gecode sur le modèle flatzinc.

Bien sûr, je peux faire ces étapes en appelant unprocessus externe (utilisant ProcessBuilder en Java ou un sous-processus "comme" en python). Mais j'aimerais savoir s'il existe un meilleur moyen. En particulier, j'aimerais éviter de recompiler mon modèle en flatzinc pour chaque appel.

Existe-t-il des alternatives à la façon dont j'appelle gecode?

Merci!

Réponses:

3 pour la réponse № 1

Il n’existe actuellement aucune interface directe de Java vers libminizinc, écrite en C ++. La meilleure option consiste donc à exécuter MiniZinc en tant que processus externe.

Cependant, vous n’avez pas à appeler deux processus distincts. Utiliser le processus mzn-fzn, que l’on trouve dans la distribution MiniZinc 2, vous pouvez compiler et exécuter en utilisant un solveur donné tout en ne construisant qu’un seul processus.

Le code donné pourrait donc être exprimé par: mzn-fzn --solver fzn-gecode model.mzn model_data.dzn

Vous pouvez éviter de sauvegarder les données dans un fichier en utilisant le -D drapeau.