You are not only changing variables names, but you also change the arity of
the record Sol: the fields of the record are taken as defined by the order
on the features (lexicographic). If you have a fixed order in mind
independent of the names, please use a list or tuple.

Christian

-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Vladimír Duša
Sent: Wednesday, August 24, 2005 12:09 PM
To: [EMAIL PROTECTED]
Subject: FD Distribution with changed names in tuple


Hello,

I have a problem with a FD script. When I only change names in Root-Tuple, I
become another search time and another search tree. Please see two examples
at the end of this Message. First example is finished in few seconds and
invoke cca 500 thousend propagators. Second example is same as the first
one, only some variables have other name. This second example runs about 5
minutes and invoke cca 15 million propagators. 

I mean this two scripts should be same. Variable name should not have
influence on the search tree.

Could you help me please? Why have this two scripts different run time?

Thank you very much

Vladimir Dusa

Example one:
Variables Created: 71
Propagators Created: 156
Propagators Invoked: 479159
%% BEGINNING OF SCRIPT
local FirstSolution SolutionList Scheduling ScheduleOrder TotalCosts in
 proc {Scheduling Root}
  L6 M6 L8 M8 E1 G1 H1 I1 K1 L1 M1 N1 O1 P1 U1 W1 X1 Y1 E2 G2 H2 J2 L2 M2 N2
O2 U2 W2 X2 Z2 L7 M7 P7 D4 F4 Q4 R4 T4 V4 E5 G5 H5 L5 M5 N5 O5 P5 U5 W5 X5
D3 E3 F3 G3 H3 K3 L3 M3 N3 O3 P3 Q3 R3 S3 T3 U3 V3 W3 X3
 in
  Root=sol(l6:L6 m6:M6 l8:L8 m8:M8 e1:E1 g1:G1 h1:H1 i1:I1 k1:K1 l1:L1 m1:M1
n1:N1 o1:O1 p1:P1 u1:U1 w1:W1 x1:X1 y1:Y1 e2:E2 g2:G2 h2:H2 j2:J2 l2:L2
m2:M2 n2:N2 o2:O2 u2:U2 w2:W2 x2:X2 z2:Z2 l7:L7 m7:M7 p7:P7 d4:D4 f4:F4
q4:Q4 r4:R4 t4:T4 v4:V4 e5:E5 g5:G5 h5:H5 l5:L5 m5:M5 n5:N5 o5:O5 p5:P5
u5:U5 w5:W5 x5:X5 d3:D3 e3:E3 f3:F3 g3:G3 h3:H3 k3:K3 l3:L3 m3:M3 n3:N3
o3:O3 p3:P3 q3:Q3 r3:R3 s3:S3 t3:T3 u3:U3 v3:V3 w3:W3 x3:X3)
  Root ::: 0#1
  D4 + D3=:1
  E1 + E2 + E5 + E3=:1
  F4 + F3=:1
  G1 + G2 + G5 + G3=:1
  H1 + H2 + H5 + H3=:1
  I1=:1
  J2=:1
  K1 + K3=:1
  L6 + L8 + L1 + L2 + L7 + L5 + L3=:1
  M6 + M8 + M1 + M2 + M7 + M5 + M3=:1
  N1 + N2 + N5 + N3=:1
  O1 + O2 + O5 + O3=:1
  P1 + P7 + P5 + P3=:1
  Q4 + Q3=:1
  R4 + R3=:1
  S3=:1
  T4 + T3=:1
  U1 + U2 + U5 + U3=:1
  V4 + V3=:1
  W1 + W2 + W5 + W3=:1
  X1 + X2 + X5 + X3=:1
  Y1=:1
  Z2=:1
  60*L6 + 70*M6=<:67
  60*L8 + 70*M8=<:70
  40*E1=<:70
  30*G1 + 30*H1=<:70
  70*I1=<:70
  60*L1 + 40*K1 + 70*M1 + 70*N1 + 70*O1 + 40*P1=<:70
  40*U1=<:70
  30*W1 + 30*X1=<:70
  70*Y1=<:70
  40*E2=<:90
  30*G2 + 30*H2=<:90
  50*J2=<:90
  60*L2 + 70*M2=<:90
  70*M2 + 70*N2 + 70*O2=<:90
  40*U2=<:90
  30*W2 + 30*X2=<:90
  50*Z2=<:90
  60*L7 + 70*M7=<:60
  70*M7 + 40*P7=<:60
  40*D4 + 20*F4=<:65
  20*Q4 + 50*R4=<:65
  40*T4 + 20*V4=<:65
  40*E5=<:55
  30*G5 + 30*H5=<:55
  60*L5 + 70*M5=<:55
  70*M5 + 70*N5 + 70*O5 + 40*P5=<:55
  40*U5=<:55
  30*W5 + 30*X5=<:55
  40*D3 + 40*E3 + 20*F3=<:70
  30*G3 + 30*H3=<:70
  20*Q3 + 60*L3 + 40*K3 + 70*M3 + 70*N3 + 70*O3 + 40*P3=<:70
  20*Q3 + 50*R3=<:70
  70*S3=<:70
  40*T3 + 40*U3 + 20*V3=<:70
  30*W3 + 30*X3=<:70

  {FD.distribute naive Root}
 end

 proc {ScheduleOrder Old New}
 
5*Old.l6+5*Old.m6+5*Old.l8+5*Old.m8+10*Old.e1+10*Old.g1+10*Old.h1+10*Old.i1+
10*Old.k1+10*Old.l1+10*Old.m1+10*Old.n1+10*Old.o1+10*Old.p1+10*Old.u1+10*Old
.w1+10*Old.x1+10*Old.y1+10*Old.e2+10*Old.g2+10*Old.h2+10*Old.j2+10*Old.l2+10
*Old.m2+10*Old.n2+10*Old.o2+10*Old.u2+10*Old.w2+10*Old.x2+10*Old.z2+10*Old.l
7+10*Old.m7+10*Old.p7+15*Old.d4+15*Old.f4+15*Old.q4+15*Old.r4+15*Old.t4+15*O
ld.v4+15*Old.e5+15*Old.g5+15*Old.h5+15*Old.l5+15*Old.m5+15*Old.n5+15*Old.o5+
15*Old.p5+15*Old.u5+15*Old.w5+15*Old.x5+20*Old.d3+20*Old.e3+20*Old.f3+20*Old
.g3+20*Old.h3+20*Old.k3+20*Old.l3+20*Old.m3+20*Old.n3+20*Old.o3+20*Old.p3+20
*Old.q3+20*Old.r3+20*Old.s3+20*Old.t3+20*Old.u3+20*Old.v3+20*Old.w3+20*Old.x
3>:5*New.l6+5*New.m6+5*New.l8+5*New.m8+10*New.e1+10*New.g1+10*New.h1+10*New.
i1+10*New.k1+10*New.l1+10*New.m1+10*New.n1+10*New.o1+10*New.p1+10*New.u1+10*
New.w1+10*New.x1+10*New.y1+10*New.e2+10*New.g2+10*New.h2+10*New.j2+10*New.l2
+10*New.m2+10*New.n2+10*New.o2+10*New.u2+10*New.w2+10*New.x2+10*New.z2+10*Ne
w.l7+10*New.m7+10*New.p7+15*New.d4+15*New.f4+15*New.q4+15*New.r4+15*New.t4+1
5*New.v4+15*New.e5+15*New.g5+15*New.h5+15*New.l5+15*New.m5+15*New.n5+15*New.
o5+15*New.p5+15*New.u5+15*New.w5+15*New.x5+20*New.d3+20*New.e3+20*New.f3+20*
New.g3+20*New.h3+20*New.k3+20*New.l3+20*New.m3+20*New.n3+20*New.o3+20*New.p3
+20*New.q3+20*New.r3+20*New.s3+20*New.t3+20*New.u3+20*New.v3+20*New.w3+20*Ne
w.x3
 end

 fun {TotalCosts Sol}
 
5*Sol.l6+5*Sol.m6+5*Sol.l8+5*Sol.m8+10*Sol.e1+10*Sol.g1+10*Sol.h1+10*Sol.i1+
10*Sol.k1+10*Sol.l1+10*Sol.m1+10*Sol.n1+10*Sol.o1+10*Sol.p1+10*Sol.u1+10*Sol
.w1+10*Sol.x1+10*Sol.y1+10*Sol.e2+10*Sol.g2+10*Sol.h2+10*Sol.j2+10*Sol.l2+10
*Sol.m2+10*Sol.n2+10*Sol.o2+10*Sol.u2+10*Sol.w2+10*Sol.x2+10*Sol.z2+10*Sol.l
7+10*Sol.m7+10*Sol.p7+15*Sol.d4+15*Sol.f4+15*Sol.q4+15*Sol.r4+15*Sol.t4+15*S
ol.v4+15*Sol.e5+15*Sol.g5+15*Sol.h5+15*Sol.l5+15*Sol.m5+15*Sol.n5+15*Sol.o5+
15*Sol.p5+15*Sol.u5+15*Sol.w5+15*Sol.x5+20*Sol.d3+20*Sol.e3+20*Sol.f3+20*Sol
.g3+20*Sol.h3+20*Sol.k3+20*Sol.l3+20*Sol.m3+20*Sol.n3+20*Sol.o3+20*Sol.p3+20
*Sol.q3+20*Sol.r3+20*Sol.s3+20*Sol.t3+20*Sol.u3+20*Sol.v3+20*Sol.w3+20*Sol.x
3
 end

 {Panel.object open}
% {ExploreBest Scheduling ScheduleOrder}
 SolutionList={SearchBest Scheduling ScheduleOrder}
 if SolutionList==nil then
  {Browse 'No feasible solution found'}
 else
 FirstSolution =  {Nth SolutionList 1}
  {Browse {TotalCosts FirstSolution}}
 end
end
%%END OF SCRIPT


And in following example were only some variables renamed. Order of
variables is and whole script is same as the first example.
Variables Created: 71
Propagators Created: 156
Propagators Invoked: 14865247

renamed variables (in the script marked red):
T -> AH
U -> AI
V -> AJ
W -> AK
X -> AL
Y -> AM
Z -> AN
(it means for example: everywhere, where was U, is now AI (U1 is now AI1, U2
is now AI2, ...)

%% BEGINNING OF SCRIPT
local FirstSolution SolutionList Scheduling ScheduleOrder TotalCosts in
 proc {Scheduling Root}
  L6 M6 L8 M8 E1 G1 H1 I1 K1 L1 M1 N1 O1 P1 AI1 AK1 AL1 AM1 E2 G2 H2 J2 L2
M2 N2 O2 AI2 AK2 AL2 AN2 L7 M7 P7 D4 F4 Q4 R4 AH4 AJ4 E5 G5 H5 L5 M5 N5 O5
P5 AI5 AK5 AL5 D3 E3 F3 G3 H3 K3 L3 M3 N3 O3 P3 Q3 R3 S3 AH3 AI3 AJ3 AK3 AL3
 in
  Root=sol(l6:L6 m6:M6 l8:L8 m8:M8 e1:E1 g1:G1 h1:H1 i1:I1 k1:K1 l1:L1 m1:M1
n1:N1 o1:O1 p1:P1 ai1:AI1 ak1:AK1 al1:AL1 am1:AM1 e2:E2 g2:G2 h2:H2 j2:J2
l2:L2 m2:M2 n2:N2 o2:O2 ai2:AI2 ak2:AK2 al2:AL2 an2:AN2 l7:L7 m7:M7 p7:P7
d4:D4 f4:F4 q4:Q4 r4:R4 ah4:AH4 aj4:AJ4 e5:E5 g5:G5 h5:H5 l5:L5 m5:M5 n5:N5
o5:O5 p5:P5 ai5:AI5 ak5:AK5 al5:AL5 d3:D3 e3:E3 f3:F3 g3:G3 h3:H3 k3:K3
l3:L3 m3:M3 n3:N3 o3:O3 p3:P3 q3:Q3 r3:R3 s3:S3 ah3:AH3 ai3:AI3 aj3:AJ3
ak3:AK3 al3:AL3)
  Root ::: 0#1
  D4 + D3=:1
  E1 + E2 + E5 + E3=:1
  F4 + F3=:1
  G1 + G2 + G5 + G3=:1
  H1 + H2 + H5 + H3=:1
  I1=:1
  J2=:1
  K1 + K3=:1
  L6 + L8 + L1 + L2 + L7 + L5 + L3=:1
  M6 + M8 + M1 + M2 + M7 + M5 + M3=:1
  N1 + N2 + N5 + N3=:1
  O1 + O2 + O5 + O3=:1
  P1 + P7 + P5 + P3=:1
  Q4 + Q3=:1
  R4 + R3=:1
  S3=:1
  AH4 + AH3=:1
  AI1 + AI2 + AI5 + AI3=:1
  AJ4 + AJ3=:1
  AK1 + AK2 + AK5 + AK3=:1
  AL1 + AL2 + AL5 + AL3=:1
  AM1=:1
  AN2=:1
  60*L6 + 70*M6=<:67
  60*L8 + 70*M8=<:70
  40*E1=<:70
  30*G1 + 30*H1=<:70
  70*I1=<:70
  60*L1 + 40*K1 + 70*M1 + 70*N1 + 70*O1 + 40*P1=<:70
  40*AI1=<:70
  30*AK1 + 30*AL1=<:70
  70*AM1=<:70
  40*E2=<:90
  30*G2 + 30*H2=<:90
  50*J2=<:90
  60*L2 + 70*M2=<:90
  70*M2 + 70*N2 + 70*O2=<:90
  40*AI2=<:90
  30*AK2 + 30*AL2=<:90
  50*AN2=<:90
  60*L7 + 70*M7=<:60
  70*M7 + 40*P7=<:60
  40*D4 + 20*F4=<:65
  20*Q4 + 50*R4=<:65
  40*AH4 + 20*AJ4=<:65
  40*E5=<:55
  30*G5 + 30*H5=<:55
  60*L5 + 70*M5=<:55
  70*M5 + 70*N5 + 70*O5 + 40*P5=<:55
  40*AI5=<:55
  30*AK5 + 30*AL5=<:55
  40*D3 + 40*E3 + 20*F3=<:70
  30*G3 + 30*H3=<:70
  20*Q3 + 60*L3 + 40*K3 + 70*M3 + 70*N3 + 70*O3 + 40*P3=<:70
  20*Q3 + 50*R3=<:70
  70*S3=<:70
  40*AH3 + 40*AI3 + 20*AJ3=<:70
  30*AK3 + 30*AL3=<:70

  {FD.distribute naive Root}
 end

 proc {ScheduleOrder Old New}
 
5*Old.l6+5*Old.m6+5*Old.l8+5*Old.m8+10*Old.e1+10*Old.g1+10*Old.h1+10*Old.i1+
10*Old.k1+10*Old.l1+10*Old.m1+10*Old.n1+10*Old.o1+10*Old.p1+10*Old.ai1+10*Ol
d.ak1+10*Old.al1+10*Old.am1+10*Old.e2+10*Old.g2+10*Old.h2+10*Old.j2+10*Old.l
2+10*Old.m2+10*Old.n2+10*Old.o2+10*Old.ai2+10*Old.ak2+10*Old.al2+10*Old.an2+
10*Old.l7+10*Old.m7+10*Old.p7+15*Old.d4+15*Old.f4+15*Old.q4+15*Old.r4+15*Old
.ah4+15*Old.aj4+15*Old.e5+15*Old.g5+15*Old.h5+15*Old.l5+15*Old.m5+15*Old.n5+
15*Old.o5+15*Old.p5+15*Old.ai5+15*Old.ak5+15*Old.al5+20*Old.d3+20*Old.e3+20*
Old.f3+20*Old.g3+20*Old.h3+20*Old.k3+20*Old.l3+20*Old.m3+20*Old.n3+20*Old.o3
+20*Old.p3+20*Old.q3+20*Old.r3+20*Old.s3+20*Old.ah3+20*Old.ai3+20*Old.aj3+20
*Old.ak3+20*Old.al3>:5*New.l6+5*New.m6+5*New.l8+5*New.m8+10*New.e1+10*New.g1
+10*New.h1+10*New.i1+10*New.k1+10*New.l1+10*New.m1+10*New.n1+10*New.o1+10*Ne
w.p1+10*New.ai1+10*New.ak1+10*New.al1+10*New.am1+10*New.e2+10*New.g2+10*New.
h2+10*New.j2+10*New.l2+10*New.m2+10*New.n2+10*New.o2+10*New.ai2+10*New.ak2+1
0*New.al2+10*New.an2+10*New.l7+10*New.m7+10*New.p7+15*New.d4+15*New.f4+15*Ne
w.q4+15*New.r4+15*New.ah4+15*New.aj4+15*New.e5+15*New.g5+15*New.h5+15*New.l5
+15*New.m5+15*New.n5+15*New.o5+15*New.p5+15*New.ai5+15*New.ak5+15*New.al5+20
*New.d3+20*New.e3+20*New.f3+20*New.g3+20*New.h3+20*New.k3+20*New.l3+20*New.m
3+20*New.n3+20*New.o3+20*New.p3+20*New.q3+20*New.r3+20*New.s3+20*New.ah3+20*
New.ai3+20*New.aj3+20*New.ak3+20*New.al3
 end

 fun {TotalCosts Sol}
 
5*Sol.l6+5*Sol.m6+5*Sol.l8+5*Sol.m8+10*Sol.e1+10*Sol.g1+10*Sol.h1+10*Sol.i1+
10*Sol.k1+10*Sol.l1+10*Sol.m1+10*Sol.n1+10*Sol.o1+10*Sol.p1+10*Sol.ai1+10*So
l.ak1+10*Sol.al1+10*Sol.am1+10*Sol.e2+10*Sol.g2+10*Sol.h2+10*Sol.j2+10*Sol.l
2+10*Sol.m2+10*Sol.n2+10*Sol.o2+10*Sol.ai2+10*Sol.ak2+10*Sol.al2+10*Sol.an2+
10*Sol.l7+10*Sol.m7+10*Sol.p7+15*Sol.d4+15*Sol.f4+15*Sol.q4+15*Sol.r4+15*Sol
.ah4+15*Sol.aj4+15*Sol.e5+15*Sol.g5+15*Sol.h5+15*Sol.l5+15*Sol.m5+15*Sol.n5+
15*Sol.o5+15*Sol.p5+15*Sol.ai5+15*Sol.ak5+15*Sol.al5+20*Sol.d3+20*Sol.e3+20*
Sol.f3+20*Sol.g3+20*Sol.h3+20*Sol.k3+20*Sol.l3+20*Sol.m3+20*Sol.n3+20*Sol.o3
+20*Sol.p3+20*Sol.q3+20*Sol.r3+20*Sol.s3+20*Sol.ah3+20*Sol.ai3+20*Sol.aj3+20
*Sol.ak3+20*Sol.al3
 end

 {Panel.object open}
% {ExploreBest Scheduling ScheduleOrder}
 SolutionList={SearchBest Scheduling ScheduleOrder}
 if SolutionList==nil then
  {Browse 'No feasible solution found'}
 else
 FirstSolution =  {Nth SolutionList 1}
  {Browse {TotalCosts FirstSolution}}
 end
end
%%END OF SCRIPT


_________________________________________________________________________________
mozart-users mailing list                               
[email protected]
http://www.mozart-oz.org/mailman/listinfo/mozart-users

Reply via email to