Hi,
I am trying to implement the initialisation of the starting values for
the activity of the variables in a search. From reading the MPG, I am
doing this when the IntActivity is declared:
IntActivity act(*solver, vars, decay, merit)
where merit is a IntBranchMerit function.
I have implemented setting the initial value for the activity of a
variable to its degree. However, I also want to allow the user to
specify the initial values for the variables, in cases where they may
have some idea of which variables are "better", and I am not sure how
this can be done, i.e. how I can pass user defined values to a
IntBranchMerit function:
(..IntBranchMerit)(const Space &home, IntVar x, int i)
what I would like to pass to this function is an array that defines the
initial values (array[i] would give the value intended for x (i.e.
vars[i])).
A possible issue I had with declaring the IntBranchMerit function is
that I had to use Space, rather than GecodeSpace, which is the class I
defined:
class GecodeSpace : public Gecode::MinimizeSpace {....}
i.e., I had to declare merit as:
double merit(const Space& solver, IntVar x, int i)
This probably reflects my (lack of) C++ knowledge...
if I do have to use Space, then I cannot even pass a user specified
field via GecodeSpace to merit function -- and I am not sure if this is
the right thing to do anyway, as the data I want to pass is for a
specific search, rather than something global to the space itself.
On a somewhat related note: it seems to make sense to me to allow the
user to set the initial values for the AFC of each variable, because the
degree may not always be the best initial value. Am I correct that this
is difficult to do, as the AFC value for each variable is computed from
summing the AFC values for the constraints involving that variable?
Thanks in advance for any information/help!
Kish
_______________________________________________
Gecode users mailing list
users@gecode.org
https://www.gecode.org/mailman/listinfo/gecode-users