Hi there. I'm very new to minizinc, and I'm trying to get it working with cplex as a solver.
My apologies that this is kind of long and rambly.
We're using the prepackaged version of minizinc available from the ubuntu22 repos:
ccalzone@cpu155:~$ dpkg -l | grep minizinc
ii minizinc 2.5.3+dfsg1-1 amd64 constraint modelling language and tool chain
ccalzone@cpu155:~$ dpkg -l | grep zinc
ii flatzinc 6.2.0-5 amd64 constraint problem modelling language
ii libgecodeflatzinc49 6.2.0-5 amd64 Gecode support for FlatZinc modelling language
ii minizinc 2.5.3+dfsg1-1 amd64 constraint modelling language and tool chain
And a locally packaged version of cplex:
ccalzone@cpu155:~$ which cplex
/opt/uw/cplex/22.1.0/cplex/bin/x86-64_linux/cplex
ccalzone@cpu155:~$ cplex
Welcome to IBM(R) ILOG(R) CPLEX(R) Interactive Optimizer 22.1.0.0
with Simplex, Mixed Integer & Barrier Optimizers
5725-A06 5725-A29 5724-Y48 5724-Y49 5724-Y54 5724-Y55 5655-Y21
Copyright IBM Corp. 1988, 2022. All Rights Reserved.
Type 'help' for a list of available commands.
Type 'help' followed by a command name for more
information on commands.
CPLEX>
As a test, I'm just using a pretty simple Chessboard Queens problem which runs fine with the builtin solvers:
ccalzone@cpu155:~/Work/minizinc$ cat nqueens.mzn
int: n = 4;
array [1..n] of var 1..n: q; % queen in column i is in row q[i]
include "alldifferent.mzn";
constraint alldifferent(q); % distinct rows
constraint alldifferent([ q[i] + i | i in 1..n]); % distinct diagonals
constraint alldifferent([ q[i] - i | i in 1..n]); % upwards+downwards
% search
solve :: int_search(q, first_fail, indomain_min)
satisfy;
output [ if fix(q[j]) == i then "Q" else "." endif ++
if j == n then "\n" else "" endif | i,j in 1..n];
output [ "q_t = ", show(q)];
ccalzone@cpu155:~/Work/minizinc$ minizinc nqueens.mzn
..Q.
Q...
...Q
.Q..
q_t = [2, 4, 1, 3]
----------
I tried setting my preferences files set up like this:
ccalzone@cpu155:~/Work/minizinc$ cat ~/.minizinc/Preferences.json
{
"tagDefaults": [["cplex","org.minizinc.cplex"]],
"solverDefaults": [["org.minizinc.cplex","--cplex-dll","/opt/uw/cplex/22.1.0/cplex/bin/x86-64_linux/libcplex2210.so"]]
}
ccalzone@cpu155:~/Work/minizinc$ cat ~/.minizinc/solvers/cplex.msc
{
"id": "org.minizinc.cplex",
"name": "cplex",
"version": "22.10",
"executable": "/opt/uw/cplex/22.1.0/cplex/bin/x86-64_linux/cplex"
}
And indeed it looks like minizinc can see them:
ccalzone@cpu155:~/Work/minizinc$ minizinc --solvers
MiniZinc driver.
Available solver configurations:
cplex 22.10 (org.minizinc.cplex)
Gecode 6.2.0 (org.gecode.gecode, default solver, cp, int, float, set, restart)
Gecode Gist 6.2.0 (org.gecode.gist, cp, int, float, set, restart)
Search path for solver configurations:
/u/ccalzone/.minizinc/solvers
/usr/share/minizinc/solvers
/usr/local/share/minizinc/solvers
But when I try to use the cplex solver:
ccalzone@cpu155:~/Work/minizinc$ minizinc --solver cplex nqueens.mzn
minizinc: Unrecognized option or bad format `--cplex-dll'
minizinc: MiniZinc driver.
Usage: minizinc [<options>] [-I <include path>] <model>.mzn [<data>.dzn ...] or just <flat>.fzn
More info with "minizinc --help"
And if I take out that --cplex-dll line from my Preferences.json file, I get a different error:
ccalzone@cpu155:~/Work/minizinc$ minizinc --solver cplex nqueens.mzn
Warning: invalid configuration file: internal error
Incorrect usage. Correct command syntax is:
/opt/uw/cplex/22.1.0/cplex/bin/x86-64_linux/cplex [-i] [-f <commandfile> | -c "<command1>" "<command2>" ...]
Exiting
=====UNKNOWN=====
I thought maybe it wanted me to put a -f option in the executable line, which I tried, and that gave me:
ccalzone@cpu155:~/Work/minizinc$ minizinc --solver cplex nqueens.mzn
Warning: invalid configuration file: internal error
MiniZinc: internal error: Error occurred when executing FZN solver with command "/opt/uw/cplex/22.1.0/cplex/bin/x86-64_linux/cplex -f /tmp/mznfileS7IUMr.fzn ".
=====ERROR=====
Any idea how I can get this working?
Christopher