MathGroup Archive 2009

[Date Index] [Thread Index] [Author Index]

Search the Archive

compile related issue

  • To: mathgroup at smc.vnet.net
  • Subject: [mg101472] compile related issue
  • From: mpolko lokta <mpolkolokta at gmail.com>
  • Date: Wed, 8 Jul 2009 07:10:32 -0400 (EDT)
  • References: <7c7566c20906270520r49c1a132ndf15d8c7171e8f5@mail.gmail.com>

I cannot figure out why the output of the two versions of the decode
function produce different results. I would REALLY appreciate it if
someone could point me in the right direction here. Thanks in advance.

(code follows)

toBase=  Compile[{{list,_Integer,2},{base,_Integer},{strings,_Integer}},Module[{shift=ConstantArray[0,strings],out},Transpose[MapThread[(out=Mod[##-base+shift,base];shift+=##;out)&,{Transpose[list]}]]],{{_,_Integer,1}}]

split1=Compile[{{list,_Integer,2},{base,_Integer},{strings,_Integer},{ilow,_Integer},{ihigh,_Integer}},(Map[FromDigits[#,base]&,toBase[Take[list,All,{ilow,ihigh}],base,strings]]),{{_,_Integer,2}}]

split2[list_,base_,strings_,ilow_,ihigh_]:=Module[{},(Map[FromDigits[#,base]&,toBase[Take[list,All,{ilow,ihigh}],base,strings]])]

map1=Compile[{{list,_Integer,2},{base,_Integer},{strings,_Integer},{ilow,_Integer},{ihigh,_Integer},{digits,_Integer},{low,_Real},{high,_Real}},(low+(high-low)/(base^digits-1)
split1[list,base,strings,ilow,ihigh])//N,{{_,_Real,1}}]

map2[list_,base_,strings_,ilow_,ihigh_,digits_,low_,high_]:=Module[{},(low+(high-low)/(base^digits-1)
split2[list,base,strings,ilow,ihigh])//N]

decode1=Compile[{{list,_Integer,2},{base,_Integer},{strings,_Integer},{ilow,_Integer,1},{ihigh,_Integer,1},{digits,_Integer,1},{low,_Real,1},{high,_Real,1}},Transpose[MapThread[map1[list,base,strings,#1,#2,#5,#3,#4]&,{ilow,ihigh,low,high,digits}]],{{_,_Real,1}}]

decode2[list_,base_,strings_,ilow_,ihigh_,digits_,low_,high_]:=Module[{},Transpose[MapThread[map2[list,base,strings,#1,#2,#5,#3,#4]&,{ilow,ihigh,low,high,digits}]]]

PerformEvaluation=Compile[{{list,_Real,2}},{Sum[-10 Exp[-0.2
Sqrt[#[[i]]^2+#[[i+1]]^2]],{i,1,2}],Sum[Abs[#[[i]]^0.8]+5
Sin[#[[i]]^3],{i,1,3}]}&/@list];

(parameters follow)

BASE=2;
STRINGS=30;

PARAMETERS=3;
DIGITS={20,20,20};

iHIGH=Plus@@NestList[PadLeft[Most[#],PARAMETERS]&,DIGITS,PARAMETERS - 1];
iLOW=PadLeft[PadLeft[{},PARAMETERS-1,1]+PadRight[iHIGH,PARAMETERS-1],PARAMETERS,1];

LENGTH=Plus@@DIGITS;

LOW={-5,-5,-5};
HIGH={5,5,5};

(test modules follow)

strings=Table[RandomChoice[{0,BASE-1},LENGTH],{STRINGS}];
variables1=decode1[strings,BASE,STRINGS,iLOW,iHIGH,DIGITS,LOW,HIGH];
objectives1=PerformEvaluation[variables1];
variables2=decode2[strings,BASE,STRINGS,iLOW,iHIGH,DIGITS,LOW,HIGH];
objectives2=PerformEvaluation[variables2];
variables1==variables2
positions=Position[MapThread[#1==#2&,{variables1,variables2}],False];
pairs=Transpose[Map[Extract[#,positions]&,{variables1,variables2}]]
objectives1==objectives2
positions=Position[MapThread[#1==#2&,{objectives1,objectives2}],False];
pairs=Transpose[Map[Extract[#,positions]&,{objectives1,objectives2}]]


  • Prev by Date: Re: Pattern matching / subsequence matching, question
  • Next by Date: Re: Re: Re: Collect exponents only
  • Previous by thread: Re: Looping- Programming
  • Next by thread: TimeZones