Hi David,
you should read the documentation on FD.plus, FD.sum etc. There are some
type problems in your script. FD.plus expects that each of its 3
arguments is a FD variable. You are passing two lists (this is what the
error message is about) and one atom (septima_1) to it. Note that
variable names start with Uppercase. 'septima_1' is an atom (i.e. a
non-integer value).
The easy way to fix this is using what I told you last time: replace
> {FD.plus SumaVariables7_1 SumaVariables7_2 septima_1}
> septima_1 =<: 1
with
{FD.sum {Append SumaVariables7_1 SumaVariables7_2} '=<:' 1}
Your script can also be fixed like this:
for E in 1..1 do
SumaVariables7_1=for M in 1..Salas collect:Collect do
for W in 1..5 do
{Collect X.M.W.1}
end
end
SumaVariables7_2=for M in 1..Salas collect:Collect do
for W in 1..5 do
{Collect X.M.W.4}
end
end
Septima_1={FD.decl} %% a variable
in
{FD.sum {Append SumaVariables7_1 SumaVariables7_2} '=:' Septima_1}
Septima_1 =<: 1
end
Summing SumaVariables7_1 and SumaVariables7_2 is not possible directly,
because each of these is a list of values, not a value (this is why we
use FD.sum). Another way of summing these is expressing the sum of
SumaVariables7_1 and the sum of SumaVariables7_2 (say, X and Y), and
then summing X and Y using FD.plus:
{FD.sum SumaVariables7_1 '=:' X}
{FD.sum SumaVariables7_2 '=:' Y}
{FD.plus X Y Septima_1}
See my previous answer for details.
And maybe the best would be not having lists of values in
SumaVariables7_1 and SumaVariables7_2, but rather the respective sums
(as the variable names indicate):
for E in 1..1 do
SumaVariables7_1={FD.sum
for M in 1..Salas collect:Collect do
for W in 1..5 do
{Collect X.M.W.1}
end
end
'=:'
}
SumaVariables7_2={FD.sum
for M in 1..Salas collect:Collect do
for W in 1..5 do
{Collect X.M.W.4}
end
end
'=:'
}
in
{FD.plus SumaVariables7_1 SumaVariables7_2} =<: 1
%% or (equivalently):
{FD.sum [SumaVariables7_1 SumaVariables7_2] '=<:' 1}
end
Cheers,
Filip
David López wrote:
Filip Konvicka wrote:
Hi David,
SumaVariables7_1 is a list, not a tuple (lists look like [1 2 3], tuples
look like 1#2#3). You can concatenate two lists using Append - for example
thanks Filip, buyt i realy do is sum this two list.
attach pdf with the constraint is enclosed.
it wanted to be able to add those two lists for all the period that is
reflected in the set of ordered pairs
I hope thank you very much that you understand to me,
i try with this script:
%septima restriccion: No deben existir mas de un bloque entre asignaturas w
for E in 1..1 do
SumaVariables7_1=for M in 1..Salas collect:Collect do
for W in 1..5 do
{Collect X.M.W.1}
end
end
SumaVariables7_2=for M in 1..Salas collect:Collect do
for W in 1..5 do
{Collect X.M.W.4}
end
end
in
{FD.plus SumaVariables7_1 SumaVariables7_2 septima_1}
septima_1 =<: 1
end
but raise this message:
%*************************** type error *************************
%**
%** Expected type: finite domain integer in {0,...,134 217 726}
%** At argument: 1
%** In statement: {FDP.plus
_{0#1}|_{0#1}|_{0#1}|_{0#1}|_{0#1}|_{0#1}|_{0#1}|_{0#1}|_{0#1}|_{0#1}|,,,|,,,
_{0#1}|_{0#1}|_{0#1}|_{0#1}|_{0#1}|_{0#1}|_{0#1}|_{0#1}|_{0#1}|_{0#1}|,,,|,,,
septima_1}
%**
%** Call Stack:
%** procedure 'ForProc' in file
"/home/deibyd/documentos/tesis/mozart-oz/tutorial/memoria_salas.oz",
line 321, column 3, PC = 137180160
thanks for the patience and the answer
_________________________________________________________________________________
mozart-users mailing list
[email protected]
http://www.mozart-oz.org/mailman/listinfo/mozart-users