[eclipse-clp-users] labeling question with ic and eplex

From: Kostas Oikonomou <ko_at_...308...>
Date: Tue, 02 Oct 2012 13:45:40 -0400
Hi,

I am experimenting with hybrid algorithms, using eplex and ic.
I am encountering a problem with labeling, exemplified by 
the following code:



:- lib(eplex).
:- lib(ic).

hyb1(W,X,Y,F) :-
     eplex: (F :: 0.0..100.0),
     eplex_solver_setup(min(F),F,[],[new_constraint]),
     eplex: ([W,X,Y] :: 0..10),
     % constrain X to be integral for ic, so we can use 
ic:search() on it
     ic: (X #:: 0..10),
     eplex: (2*W + X + Y $= 13),
     eplex: (F $= W + 3*Y),
     ic:search([X],0,input_order,indomain,complete,[]),
     eplex_var_get(W,solution,W),
     eplex_var_get(Y,solution,Y),
     eplex_get(cost,F)
.


hyb2(W,X,Y,F) :-
     eplex: (F :: 0.0..100.0),
     eplex_solver_setup(min(F),F,[],[new_constraint]),
     eplex: ([W,Y] :: 0..10),
     dim(X,[2]),
     eplex: (X[1..2] :: 0..10),
     % constrain X to be integral for ic, so we can use 
ic:search() on it
     ic: (X[1..2] #:: 0..10),
     eplex: (2*W + X[1] + X[2] + Y $= 13),
     eplex: (F $= W + 3*Y),
     ic:search([X[1..2]],0,input_order,indomain,complete,[]),
     eplex_var_get(W,solution,W),
     eplex_var_get(Y,solution,Y),
     eplex_get(cost,F)
.

The query hyb1(W,X,Y,F) works as expected.  The query 
hyb2(W,X,Y,F) results in a type error:

[eclipse 3]: hyb2(W,X,Y,F).
Eplex warning: Imposing integer bounds on variable(s) [W, Y] 
for eplex instance eplex does not impose integer type.
Eplex warning: Imposing integer bounds on variable(s) 
[](_938, _939)[1 .. 2] for eplex instance eplex does not 
impose integer type.
type error in indomain([](_1059{}(','(:(ic, ..(0, 10)), 
:(eplex, @(..(0.0, 10.0), 10.0)))), _1041{}(','(:(ic, ..(0, 
10)), :(eplex, @(..(0.0, 10.0), 3.0)))))[1 .. 2])
Abort
[eclipse 4]:


The only difference between hyb1 and hyb2 is that X is a 
single variable in hyb1 but a 2-element array in hyb2.
I don't understand why or how the array is treated 
differently.  And is there a way around this issue?

I see that when I change X from an array to an explicit list 
[X1,X2], the problem goes away.
But in my application I need an array.

                                     Kostas
Received on Tue Oct 02 2012 - 17:45:50 CEST

This archive was generated by hypermail 2.2.0 : Mon Jul 09 2018 - 02:05:29 CEST