On 23/08/2012 18:10, Kostas Oikonomou wrote: > > I have one more question: I'm trying the example of using a > MiniZinc/FlatZinc model in Eclipse, found on the lib(flatzinc) > reference page. So far, I have the following code: > > my_fzn_run_file(ModelFile, Options) :- > % initialize the solver state > fzn_init(Options, State), > % load the model and set up the constraints > open(ModelFile, read, S), fzn_load_stream(S, FznState), > % Get the objective > fzn_obj_lookup(FznState, Obj), > % Now suppose the mzn model has variables X, a 1-d > array, and Y, a 2d-array. > fzn_var_lookup(FznState, X, Xe), > fzn_var_lookup(FznState, Y, Ye), Here you have to single-quote 'X' and 'Y' (the FlatZinc variable names), otherwise they will be taken as ECLiPSe variables. You could also use mzn_load/5 for part of the code above. http://www.eclipseclp.org/doc/bips/lib_public/minizinc/mzn_load-5.html > % How do I use Xe, Ye, and Obj in bb_min()? > % ???? The mapping of MiniZinc data structures to FlatZinc is explained in the FlatZinc specification: basically, multi-dimensional arrays are flattened, and the indices normalized to start at 1. The mapping of FlatZinc data structures to ECLiPSe is described in the table at http://www.eclipseclp.org/doc/bips/lib_public/minizinc/index.html Together that means that MiniZinc arrays will all end up as one-dimensional ECLiPSe arrays, i.e. structures with functor []/N. A brute-force way of calling bb_min in this example would be term_variables([Xe,Ye], Vars), bb_min(labeling(Vars), Obj, bb_options{}), > % output solution, if found > fzn_output(State), > % increments solutions count, and succeeds if last > one reached > fzn_last(State), > !. -- JoachimReceived on Thu Aug 23 2012 - 19:30:20 CEST
This archive was generated by hypermail 2.3.0 : Wed Sep 25 2024 - 15:13:20 CEST