DiceDesign/0000755000176200001440000000000014534331712012253 5ustar liggesusersDiceDesign/NAMESPACE0000644000176200001440000000074513770347050013503 0ustar liggesusersuseDynLib(DiceDesign, .registration = TRUE, .fixes = "C_") export( coverage, discrepancyCriteria, discrepESE_LHS, discrepSA_LHS, dmaxDesign, factDesign, faureprimeDesign, lhsDesign, maximinESE_LHS, maximinSA_LHS, meshRatio, mindist, mstCriteria, nolhDesign, nolhdrDesign, olhDesign, phiP, rss2d, rss3d, runif.faure, scaleDesign, straussDesign, unif.test.quantile, unif.test.statistic, unscaleDesign, wspDesign, xDRDN ) import(graphics, grDevices, stats) DiceDesign/data/0000755000176200001440000000000014011021262013146 5ustar liggesusersDiceDesign/data/datalist0000644000176200001440000000006013212052750014702 0ustar liggesusersNOLHdesigns NOLHDRdesigns OA131 OA131_scrambled DiceDesign/data/NOLHDRdesigns.rda0000644000176200001440000025712113326623462016233 0ustar liggesusers,z^{ M*lI6 6BΨmY4u`>dUdҀC0/0`V|=׎7XJST5""cDdy1_~ml6?l~懟~g?|O6??WvuZm~o~9l}.6/}Sߥ7S_MI7RRߤor9Cr{xqr9C=qq89^r[_o.8/~]:K߿tGϥ{^i߱;n:_:~{>>;9U:>quqTܨ;o>t|_q~'cۧ~wqUr=vN~ǿu=ǩ]iߎ~Gq|z?yُp}wtޮ^~pfw{T{8P7[ܖ^ߵ~oۿv׾~ov~u~߮SC׳zr~?kۛyd_}7&u_Qdnm?7ǝ?G</T_]u_=_W1US1US1US1US1USqSmT7M~߰䭶zHHHHHwPq)~ߋ~w>DZЗGK#qߋ!Vn^]z{wߥU]|)Kv\pm<>%XWn˕w?ͷ|pñ6߶brko?{VLWaV_Ӆo]Ӆo )ttt/7]t!wL޾wd5s5shßv|kgR\fkЎϚ9tL'M))))o> =C =n BI~;t=`/Pߡ6Ct;:.~oR]?4s..:P<]}.>]9Er(N{??߻C2QAГ ܦt)h}IFNu^.MJo,i׷s;EӮS:/.{t~}]kؿ~z`u?]yU8~r:3 Y?;g7`>.]W#ǣ'8ӏ~[q?]G+]r^p|߳%1u}v~?뼚~O2Iѯ~'\ۦMT٥'Y獋z'b18|kwN9n#ߡ%?m=g.u%X[]]w*nqOus=\]?G%O۹,.u%륓ԝ~и7QUӉ.9~u탠A]>S[~O'{sycD|o:Q%S(ćACw8_}9;?iu;>ҹmO`vܹͭy7|?C뮿l:'l~ām7תsR?d {qu5~G}_|}mW/_ߴާM}O;s}O;s}mwqAOou|v_?~\V:OKΫ~vw.egig9yq?/aޯ~_뿷}y>irO{}>}ce;[s޲h\_ڹ\[s޲\l9m-ocezvlzv[)[l>br}z.[s޺Ku;5u_׻g?]_׻]~ʏR[ΦX~)r1llok1s}1su67H昗9l\gs:cn1ou6\fs{lu6ǯlo6G1fb϶ĎNubG֯;ĎyubǷNN?Cub\;:c}]K۔Z=u\|r3ow:X'NNuOuϼ|3/_':g. >sNuϷdzN_ >u:yzOc4go?9b.iS?YJ_A lIN3ۘWi?t)i?IcK󂟧eEJyEE?ui8RhuCRSSJ^_dXR'7|cDml==<6<9<7qg18ScVAyqA/vH?x}Ǒ2=إϩI?(,X!=X0=xpĿ~Xu{_?&>7J_?1u@_?4G痺~ ;@_?!uO]RĿ~N|* /r+>@@   /bK/~// /C?. /zЯ.х~.Ѕ۬Яwׅ~.׻BMJ] zw]׻B]Яwׅ~.}hsB ]r]w]u ]. ]w]uׅ]w]hta1f֯o hq,tЉЉЉB'Z/o u>1î/:|/:|/:}N8zb-zb-zb-λw:q)/^ 碎\B#.ȅ8t.K:s)/?#_:r!/?#_K:rm^_֡+w\W~t]~t}v|vl8l=l?tle5(>][ R~wO~#ϭ#◎GqDIcӭ>?|tթ&uSqMOqQ:|eu_A|g:F}:L~J8oS-NYY:"~xGA9g,smZRߤN!=T<O}!c?q캺~9t{]~LG6Mtv^~ӟ=}H?*_{/tۧtݣO#]@ף+xk:vtJ1׽Q)}tCtO:Kc:B/Y/nJ?Ss"CAq"}7/tSe:G+|q=oй]S|>gduć׼lM8>zPyW.gtL?đR\߁}ŕ~ňK:wlCڳwWHLV՟]qsJO!o'>/M+?٥y7ٞԼlMI= 6Ϩt K?yoَ.=z+R''.]m?=|f/)%}ίK<O_z>;w⻞9M]mZ[\t?G~z?nWYױK. #}9 X>=ָW֋3:y]W .w⻞N]mZV󅲜Ox nnJ=KUoVgˏű~KCΧҙv|5x-O(=rNw\e{q/nߚ/ǬM֋SJ,[]/lnTgeˏű~gC{h2W3O)U+f~-aJ>Ct*`9]UzC'1 d=={rW:}_ψ_џE{~ɧ'9e;:7סoˍjKߚkRssPv:~҇q?o{␞s]ioJʇ'qSO)_kRON)š8?lo ݦtQ?K/sO;Ɨ|CzF/Sz/پ߯mnkq~g~'zpH|ŁoO)nLK]?vx_t@\8u;!!*o:-UT3R9NNGןCGIA8c)ϑS/tx~Lo"耸W|Gc@Nlz/?oC~xWSHIStށ_*r>?E|~|aPu|9\C')XqzYuI\ߔݯ]c뷧Ud?m>"{O`OtNSćIg}Aq|zI')TqzYu|n > c)_cSJ'6OoUIW{{>>Ÿ=?Gom~^ ]rO)˕q*O):uup}9ռ|}9կ>˩R__N5]GS:j.]:jTs?@]/K!\Tsyv[OKTU9~~\/q/o_oSq:#N]?хzAp\?8f9׏>zGtn=:l^L_ W|^X_R7K/˿/K֗ԭ/[_R7\_RsomzI]2Kn.w)곾.y﫛o|=w.un.7+뽾n.]^W﫛}u^뻾.k~.}uso^ q.1﫛}d}_]}usn.wz)-p}_]REuggggt<5nnO?տBӞwѿye>۹.~6]\ĥ~.ţ߹~z,߮~MTﺘg߉z@?鬸NxJOo菸77Ome݇scO7%_~rHw|9Y.8٦޸w];CO:9\[ʹߵ{+SO,f8K[:\Wk{~S+;8?'i=?Up}mSg]{ *Nϻ,t8)>{vMtU|β_Y<^W+ʓ(O^.;}T_t^ ~@Ϸz3u.Wz!^ũxyż~EݧlKnoza3Yq9:<[}M`.꿮N8K[kR/.^%lK/]6QKnnR?/͗,GIn7|*n?:ޛQԞo-=7V>_/?8d=hTz/S}YsX@7S=TzIxF.uIGI/YzW?/oSڏ/kKǮ8VV1{+S6=}oxt]?Ou~_9 BGy~Iuѯw)雸o7m,{t#s_RR&>}*􉾉O]?ҡ_q$}#L~=jN]J&_RqϝxpOECo)lM6)o_d:-Υx;d?kZ_oSsWَСSJqv.͓I{lv.@TLcຮﯝĉ!ڔBkSq)YߞRﯝKu9i~[{+V\[9\[swn|~9 ˔+,rr}>+,W ˹@_? ˹^_a>uJ2b}e ˬo೾~|}e/kc}esI'ZLI_L\BY_a2'v9M!WXsu_ٯW]+,/C|?[}>;>[??]WW곾.u']W/QN~~6ճ[zzqӯ;qW{xt'qO1~q)]:GHW:/ڼ'tuo?/c{HNs٦z}L:B/Y/nJ=^z.9? C)2{?@]KX.)I8Ϭ_oPzrtLs_ڼ2__]}8s}uݼ꺹N_Wͥ/۔,|N3┞Rv#Oyʾŧ~ܮkq58˝Q$YOWګ=_Vf}e+,SoBGWXf}ވr.W+,+,r}\+,t v~WXf~5]Y_a{\5S5?& ˹/tE/ч~cç7?[_a9ά˭S1r}\KAn_3m}eڥt\_a9~ 짏>+,ײ6uD/.ůyuGtn8=8u/E~OJPiRo=sY{_zzStTC6uo߯E7K^ > /=ső8U?qVRtFҁv}AC?8ُIIj~]JIoo?e1#~!ߧt_!~\nx)~*ۿvk}*UU?ǫlW7j^jr}\Rog}mߟooGXjĿ~ o[mSߧ.O9,o{}mv.׷{9VV۔[mv|V۔뷾~S~'[mSR6}?mG~秿8\j委Q:qz~:<OgۿO ҅>=q/o׭7}s]mveҹ1;K]GsWY.]7jz> v1P?~Yqoۣ7?5LxYiF\R}ͮ0t?t馸k/vY.n\>G!73Y|Ig|b.׷[zwmv81˷Y.]n=/wv.֩ ۭ:ۭv..>ۭOkzWVs][4xӮu7O~>O.hSgZ+?%lO^.m\ti:ܤN ݣ_O7]z+7+8nTt/SO3zCo N?C6_}wk>xUַ!. MlO ^6YKnnR?/~MU=}۔8n}}9t=>mSo%뺩ַg;FN)yMJwv뗮_ktk~Lgs_6y7:Oy~gۭRQۭ鷧ۭr}\wrnۭ.+vYn?s}}>ۭSI~OJPjRzzk}v֛?ۭ_[ן?Z/]:ܥ\_t|?^:@_?X_t=.S}|}u?^_t/E^뻾:k~:빝 g}uȅ8^_t]e ~:\_t=Еq:O):uuy:\EY.]o]%,닮Es]?N.=X_t=]}빎]R?f빤t'DWt6?i}uw}Ӆz <ǵzăk^/ndzz/닮s\ٞ^/Kk}\Evh}\S/tF~w}\=:l,[׿/v>ok|O]߷cWy~mӕbCנ_xu]ֻW'Ż?Ӟ~coܞ)}⛎j ħ~tkmWBGxtkЯSwiCsto>Y.;Ƭ?W+ēvGqA_xާl\>T^ո[A ﳜ :l}/.]:?\{Rӯ"7G<(oR6\_x]J&_;_|{j<8ktǯ/7|ŋ8kuJ:@葸tWCCԷ)x>ŗYҟ\':w|њߔ qW/L)a6^/vRCq_|) t.}xoq>!ꅠ)]7Lo=qHe֮xR׏/rבmD:OwzMoTާlާtӁ}tӁmӁLtO?xtN`O?|O?_56ҁtG^Y9:>:>l_cY$8////hsmx@^m//}//f%_^3A////l//o:p// wս////|_^u鏬s R//}. }//إ.///پMf=y )/Y zw.޹{9O\sA=;x\sA=;xo\P_R~pN);x\ssA=;^w.޹{ Z:w.߹ :w.s6ec\\%qA;t\5 :w.߹ :w.߹ j?sJ߹ 6 :w.߹`sA;t\qAE|7}XpBE|7}Xp>Ga ~>nnnn@|wׇ'}/]|~M|~d8a|M|~MйsӇ >'4_~O|a ~> o‚/x Nh>/,8[ o‚w‚ξz/,8[ 8' #o‚/x Nh>y .9₏_}"G\{A?.r"G\{A?.rEإ/#.8璏_ Ey~|"G\<!|"_'.rq/9Eإ/|bcxR>q#JCJCJCkZC|y|j҇+9JǯG+}Z6C>?}:}~vlllt|9}y΁>߻|<=ڏ~Vkҫ)7i+yt|Y/^ ⓾?BGg,Qr:Oq/8˗xG|-.\|~ =կ>;qN?~ҡSJT{9Jԟ|5)甞zgqI}p õw(\O7W?{x;|v8ny>Yxr0n|Y /W9.c/Rz gcJ\ x]g</; \^Oqo|_R,q'~++_>Wp(RzFs|Q|5)T~x|,gȃp|w(\O7WDɇY'pmΖGyyCrr >$?:;D|;wL'߯9N9 qק,׿eqg9=DāƏp|Nz^,߈7MxFŭ~w)tHw~8u_tt''L?%.C<* -~C-.S-z}| \/wpwL'~g~܋sOYw?zFXyx7_p1G8ɏ =ϫ&<_ϋtͷcm<8|W܂{ˣj~=^0~5Ne;"MJ$_ y!'1y|Y&?“W!OW|_#ġo\.s˛xd=_9{@t}zAWΗ/ӹ]? ␏/~O}q%~^gM~5(C]W~X:?MgcqH:,.L(^kBަN9u:A'{gŁ^|!q(NqŻ,x]E⹞_v8//P-/Sz})W t~?g|\Gw9ߗ?/|tRsa:~ýGE{igiy^gM]^#8q@Cyg\ ~X:{Ç~j8 >__C}IyNwEynSsy|x=l%2S |Q<K$ W|Su8%_0?wN>p/(_'|+!.~^c4Ž۬ߧ.O|qD[xG|˻%\TArק9y&uwpscU/9t!u:7]+}8;_|I=OCkS|C_ٞ^W:߶_~~U|G\V8J~^~ψg_<3Cw+6?8KtOG7[|W|6Qyqr~ N56u&=>/z7kޞ)._R|G4Dq;'xoDWsY/pGd|xa|?6Y5jn87q2~y,y/X'oƬǡE|U>-\://nA]~zHyx^|O0?u?4qg=u"uy ~?5_4uy|O|wv5Wɗ8{9:qv^9_~Dt:|"2֟O=~ykj>0?ҏ~}|5XWq?6k*_3YWG|Ozy8LmɧOp?Ùxh:%!.m|X,Nigǝqe;yQݗr܎7cu|Us5Y,9zNb'p~ynk!ԯq_,w=W|ψ3z/{?N]!~qyDN/]t6WB3|_+ y?ЗϑЅR8%~A0hϓwЍcڼ< qvZ|W~ߟ3 qEq|ŧ;~8y<^ހws˗4 Sk~S;w|wC~Is=]-ǡ'n7x0"[Gϑz^(:xCG 2c'm+/s`yqv˷}XްK?< j\Q|vߧ:kqCW9\w59Gv)_|?).p]¸:wڦq58|f|)9 _{>xԘwG'||]^O~+G^) y<d"q<˛vYN[۔ut~C=by/> _SsƇ|=?'qwί8qUޖog辸~>wr=ލlRp8~f?8Al.F|o#npAd%89ΔƝr7+t9PL{߯xh*/|1A''kxO|gqCpJ~J'rG:>Nɧ,_ON/p)q+=(5nqL3t?G&F|g;5 q6q .=%~|~py: ?}%=8R%8M^Q|8SŇ 8܈7|6_|c8Cy|cx|GE*hW٤d98 }y9/~-_לX̯q> U;xg;zq,KOp&t>:tJ O>am?ָٞp<٥ތ$\p nIx[=-.n¥|/%|#;{C"5>,>5!Vw&e!/Y~pB#zn.ů08./O?|<5lWuNv{~~g]E.mqswxl/~,NkC_깙,~/^;:[)9tuߧEOōdy?Ǯ?_t~qT?Kz.Dž+tXt]cy?uC(ĵ5.5~e?xe| 7O+} ~4;9`/Vyw8k'?8<3uyĭf< 7h~)اܥON1i57V摖?y@;ķ["oƩ?I|z>2R19><㵸M^<@q?_?8o?ytܤ)Źk:yY/YOqHv~gShsY/z$I|_~Go <,?"a%WϡN^]Ֆn7Δ8{m086qiO\zI?ƗRh|vj\_ nxO+~ |=>S^8H?ytt|u?%Ƿj:yY/Y''.CS xwɣ<w)~t߹, wjyR?p"‹|/:Cm|I>Xϡ.Oxw_{Φƙn|KE8]̴qIU~\K)q4}N;}D5.S Yc/f"&[s(sUc5_1Do3#)wm:y$9n'| ?_p_MO/~oOם.)>הu_#/\}/ӟ"=7md%Nu)nPY^IxxrS£5>J_8 <1usqu|gcBJ|Iop'S8✒)zs<Լ?]O9G=__Kxx:U(OlC:ǯ)FÏ\}/×|Q~$»xHIqHi 'ky|5:P- u5q<,DZ8?(kë,7 `8=VV>6P 5LfXNox0p[3#O^&2e冟 3w3lmBZnİaA`7lkpaÒ>Ǒ.uɆ y w6^YZ _lo ;N@ 67ij) iu) ֎԰፽4lcz0K5lb0{J{̶n#5 l À?n?dsW .nkظO1nx0{tn jװO Tdu s;6 gFjp3؃i# ?aN{ݾ0L6 mްC761aIH}drnmݎp˰< e흚^:ԹY:6|Ӂz4uߦne{:O:z:t8#:ٞC:c@X4O@·:u0>笧N{?tӁg=cӁH.u:@M7H?g{O?mmjڹ f_^򂜏 tn۹笗z9R//g=c c>RyAM?L?g{////mh zw.޹{}/;lS=_x\sA=_s{ zw.޹{ zw.޸x=Rw.޹{炍gy zw.ex\sA=;x?4.9t\sA;t\mJ߹K :w.߹kt\sA;t\sA_JsA;l?;t\s. :w.߹{=>/C焮/ h>s1>eͧ{|v_wӇ ]__?Cn>,8tn9˂3O>s8˂3v)?n9aЗgt.|~M:'t}}z|sB7|1pB7|z|sB7|zr|sB7|z|sB7|zS~ =Xp.}~-_0kgI3Ow^>/tNFk}R+}R+}R+}Vk}j2Cy|j҇+9JǯGOA샟?[>|>??9tdl|9{s;~wρռy`?*mEM+_֋~G/Б6O7ץ#KOq/8˗xG|-.\\~ =կ>;qN?~ҡSJT{ ԟ|5)=߉sJO?ϋ}p õw뉲?8_ѿs \H6lO,_O5O8q/q_[~2|v?)q9~'xu+ |˟9oG8%%qZ w'"¹O|Yy)%~f=us?Fk僸GR~ʿq'|O>tr< ?hpO?GFy)^Fm3*ns@Ŀ㯸O5oE#Ʃlp8?`/_o/9/Ɵt}|?O=OHp_?NÍxӿcJ>ɟ6Svv8^{rM<9N\cA9F$8>&?+SϑMx执tͷcm<8|W܂{ˣ9a ?kvE܇U8IB+O/9/&_c:,S7z@sā~M.?~>ί/_s~!W?!_\_MJp /:/RkP燺# 8$uAw35~:Ǵϗ tX\6QHMstNԋCPwYN\{N._0(iO>ww{u@sp1Υt}|_Lj/u<7܋8~{8X^Tq6[p|5 ~CT>ԟyƥn!y;|1e<ߗtyg(^6u;.o7S/x_^q;nxA<姻=?0ybtxL> /SqSw:]q>x99g?qL]+|~×lozg~Kt]ӯ%~?|f}+o_?W~7?3'(}vxH\j?~}tYWu>Y8 ?>⢚㯼>ΑЭMx5ߧo8ٖY~r~Fq.?G9kx:+|~lop#=8 A\o; t\798_'__X:>7/yv ȇk5?|D8G[tyjͧ)f>uy/}V#*;GxX-/ᢚ㯼>Αc6|_ßC}gi/G qx]~7Cũߙ O:?89};:^s}OO1JKG?JO'QSxF<˗\9ߧΟ1][|G?$Mַqϋx_p2~yL7yAStǧx%Yl?Oq½|WV:D 8 %:q?x)Jsw%koC>Sf{`.w< Fj '*U|8%s3c|waT<+6?3c8B>$Oy A6QpƙoVsͣM`yW!tO۟8s|8n.|?ggh/qP/.ŗ8~u3lϏSCoą~KWesK?gmK藸=>?c[q8gp)yȿc^~'?UGp|s뼼w!uq<yǷ!.?8^$М[ǟ85 | =%;Oy>x*_~#<빍|O*~C'{-~&YOoğ\O~Bq.[.NqVoP~#nW>M|Aq/}_)|(u'WЁSJ|&~<=Ɠ\Jpg{3x_m|ң>R/ߙ| e;%]oC..q>_ K?ă~G~sJǙ9n]y ߫!s|g/{Bħy k,I{|mʏ?<9|ڧ<8iAs5.?p)x >?cϣE7ksN>p:YϏ;SB`JT?pxZ?/Num~/a |+HoN}'{r[*q׸0߫qKWʯk8_Ky^8DLJq<˛vYN[۔5^:gXދOp3>W<-mH{}\Gǝ矋SWm96\>C-c:{:Çy۴lDUyxsz6#Ox_} 7x2FGxB|qqqQ=I'8ui޾8OA<}x|1A''kxO|g8!8d?|3>_yV\)4 ip9e9n#=\+o{Om>Cqbjܓ_'H~._>[܃qA/}\g3%^Ƀ!n187w? :>'_KyXZy g6?)u g,oz̼}q+vy -Ϩ9|{9scӎ_GF )5-I75~ǻ,ן6_7?tO57,翸HEpo# ~?pB{Nljc܋?q8~.Y~6Ys ~xL~wL?]/ mܱx5qwsHg +kϩqs>}a7sF Լ<_~r|+ڦS/§?<xoxM>{)? Zs5p=şG*Ow{z#/!<:~q /|y_|38~~Sw-._Zwm=>>/o{5.x?w8H<u*|pJQ>?қSoCWwtB⫍oʟ!eݬ5%O4^,t0ߣ#'q[+)|v|yq[Nqq)u->kOqxnt+_~pe;>/}xIW5#AOW\py8O7OC~=:P j>kk|O5<(ߓWu'Dž-]^ay<Wg[Ѹwϖ}מs[~/=/B'_Kg2}Gtq+j~Ho8yg<O_v)n/#=x/ M _i۫7q'np/|W9~Bgp/Iåygxv#+|%+P=/wS|g΁w}õ8D'}~,ϭe~}s>Q>?:xK3G{s|Ѵp?q3:'9ߓ<xK)g)+8pC_R$hwp8qx=\&D*h#}gy ݤ _}soClx _ĭcX3\@\;p>ZgMol𭞯qО79UCtA?ΛN=C_,~/^;:[RsJwEtqc?Ycן/:p 8z<} 7W0_>JS?tL\[󤲼Ƨ..f9Mt|/ \q)u/'_@#=YGy]5k|k+~>wٞ_kq;|7}Y.?O8^p:[Ss>$.|_,1my5⨞z\ 9._qߗ]>//|+L]>"8ּ,il\>5>e| 7<.O1OC=?vynWΛoY'(mnO#>9o\*N]]+.cɏVWG.'_ҕ}]Jqzӥ~=_|.1/k_t=GR q=ԟG㚷P\SO㹓H*N]q-GWjoCp'n|4IGKy>.%.w <XxL;9|W!o?/p:I|[?r|5O*ǍkkZC<]\I~?ƿp ^<7Wnwm@s#? Ƿ>V)OqO|%˓i)篮_98M_gF{)7)kJq??o/w|>ŏ;.//H|N?x? h/)q?= 9,ǓW!)|_cQ|\;?:\;p<?p"‹|/:CmQ͛{)R'C1|Pqa*Ĺ|AeƗRh|v'58m//m*%?ǁ|>_[:N)'z~?qNɿok=W|̧pht-{|M?=SK6u<%?]wLs.^S}l~+^{_tTC})K(|5R- 5帉8Gk|xn߮|v;Ǖ+>7pxct}.8SJ|Iop'S8✒)zs.[(_Ý~S| oSSx[iph_ǿ5ev[./;x_E >wyӇƟpVWMAPW7 ^~rS£uxnw}WJ"W#qSp<jy㜫>w=k2%ӏA7q[SUח?Ez~+~Kq=qJ)k>MG?81~c ݧMCA 븄>S5~ 5'ۋWq&9֔lp52Ax7ǸpN|b\g]Czʟ9|5%=y|麏q2||nqVy1/Lp->q#u>%_{6z/~c|98n'lS|O>%8=~(wS& /:<W)N?k^oo{-RMu|RU,_܈kq#‰0yάǻɯLJykJ>o@Cmu)d ݸc{vu'_˿3/w^j6|xǣ?_חknژژژژژڸ6njڸ6njڸ6njڸ6njڸ6njڸ6jڸ6jڸ6jڸ6jڸ6jx6jx6jx6jx6jx6jx6jx6jx6/sތ?oǟwq9Z2Z2Z2Z2Z2Z2Z2Z2Z2Z2ZFkhmMi6֦4ZFkhfv3Z݌nFk7hfv3ZݎnGkhvv;ZݎFkwhnv7ZݍFkwh~v?ZݏGkha0Z{=Fkha0Z{=Gkhq8Z{=֞FkOhi4Z{=֞FkCK%Вih4dZ2 -LCK%Вih4dZ2 -LCK%Вih4dZ2 -LCK%Вih4dZ2 -LCK%Вih4dZ2 -LCK%Вih4dZ2 -LCK%Вih4dZ2 -LCK%ݏv#΋~x+|+|+|+|+|+|+|+|#=mF{=mF{=mF{=mǜ_w6w+#2b'7Fd42dPfڟj)PXkf]J#mFy3"ido)e2mJ#/Y/7$6bЈd{geǝ҈k7ވLHP_qkdUld)ˍa5`KfTn$ȆڈX #%onȄԈSHN{F81cDH #F@1h$c=w`1|F 7aL#Fk/6S#FF#<:PwOF(`LFڌdEjDSi6Mi%y2n$H&179FYv!nop`FVYȏVwpAo3CjH;Fa0kDޝ wNugȯ;0DjXHyrwnLwsÝ#^OzLJ#}lI6j͝ #lR7Nl#H;IF 1bL#Fk}:PosYO6cF^$t`:t`t%;|zޔ?d=7e:>퉆yN?tff:Kr>t<:pz:(i::55M^_^fk=瓺u'Ll//ا./m ^^^߼xޔy^^Y_^ V3yA{±Dyԓ?y #/<y9ވNyy׌M>RyA1L?g{////mf_NiOx\sA=;}޹`Rw.{ zw.=;x\sA=;x\sA)sA=;l?;x\s.{ zw.޹qϡ :w.߹};lS_t\sA_s :w.߹ :w.߸S/< :w.߹`cY޹ vY;t\sAt_wӇ'4_wӇ'S~M|~#Nh> Nh> Nh> Nh> Nh> Nh>Âξz Nh> Nh>x~?~> Nh> N\߹C o‚/x Nا[ f?qB|a '4_~|~-_XpB|a ;|a gK~|~-_XpBo{]|a '4 |b^Џq/>q#.9₏_ q#.9₏_s"GR~~{||R^ҏKs/|"G\q#.EO\ >~/9₏_ Ey|"GR~yB>1k1G\K<)w\!Ww\!Ww\!Ww\!><~e>r5\Wr_W#Wsȕ>|-_\!탟?Y>>?}6|~:r>>;qN?~ҡSJT{9Jԟ|5)甞zgqI}p õw(\O7W?{x;|v8ny>Do!=S}pg=/⿸^/-H6?)q9~'xu+ |˟yoG8%%qZw'"¹O|Yy)%~g{с|`=G)Ox]'_?¿{pNW_gqI}p<q¥8|O{|x6ly?+,{y|_A?.K8SOķǔ|?m~}r{:^|q-^?MJn'1zWy^?ONR?xgTxq_q M7k~=^tG~Swَ?>EG7)q_(^r^8?1:2=ē9/3-~C-.S-z}| \/wpwL'~g~܋sOYw?zFXyx7_p1G8ɏ =ϫ&<_ϋtͷcm<8|W܂{ˣj~=^0~5Ne;"MJ$_ y!'1y|Y&?“W!OW|_#ġo\.s˛xd=_9{@t}zAWΗ/ӹ]? ␏/~O}q%~^gM~5(C]W~X:?MgcqH:,.L(^kBަN9u:A'{gŁ^|!q(NqŻ,x]E⹞_v8//?|nO]ݧ^/E=\s|_@W/ӹK} r>}!x_7uy|_Epq)<aqHC,|~L|Y~!%e8];9|M]>ΩMԋ=ޗr܎[<=d|}."|_/f;&O/y<%|*1{Jaq.^ ^\c>2S |Q<K$ W|Su8%_0?wN>p/(_'|+!.~^c4Ž۬ߧ.O|qD[xG|˻%\TArק9y&uwpscU/9t!u:7]+}8;_|I=OCkS|C_ٞ^W:߶_~~U|G\V8J~^~ψg_<3Cw+6?8KtOG7[|W|6Qyqr~ N56u&=>/z7kޞ)._R|G4Dq;'xoDWsY/pGd|xa|?6Y5jn87q2~y,yG*z?_L1?W#nGyy):^K_5aqK/Ϝ8[ǟ8~?5_4u}q>/p7^ ty; ΐDjm%uyGcǸUB}p2ݥ;ʇ|q܃p,}~< ?<xcP| gC*Ovy .?=W<O'x˟8}x@ズ??៚/'=RJp&ڧp ÷xH|OƇ=8C wǕ`Cf8ŏS?=KGj<-Oͷ|Rw5,C||pr\⸲Kf9nǏ:y|J*¹Ovmg='zדN8?g==tן~'.8މ<"_.}Ff?P+ntt|\\>/~CWC~q<K~Bz{Jߋ_GwW|ɋ;1wm`{t_8Cf;|->+щ] z۸8Sd{wY/o;9KxCzsqé5);g >!POwx'zCP;S\5ny׸~ .͚v#N┯K>Wǧ;ӽz/ywc[q.C<4R~kOp3>W|O[P=k{\;/^q6ǑG?q,^T\f=vp%>Ӹ5sc7דs}O=Gpxct\:B&m۞~ U<z|}Á5 ϧgzXvֿy/kK'[[}_Yz ?|zޣt~N_Ky}7zHp =ov=qOG5ď:A1t>s@G _| ā|ug3AwvYq3=Gx/ӵWd?x_A>E?kCzOyxʃ|;>f Yp|/yѬm| '=E>|C>v5G~$O>?/|O9J>OY޹[wvO5ďсy )#oyi?O8Z!Oāh[#M=.Gt ?pxe1qgё~Iq|}}Zf ݦ;k%bCg>?87ƕ>_|igJWr3n;L?q5t޾8?mv\Dw#>gq"gųYO|,H<2o_?q9%n3x5~S|w+,KO|c5~2wW'7#x(t?-K7 >#x/|>S4]43%(9_|q2!|[o:o_}sYu"yXϯD<))6XYΧG⹗y'9N*}^Nθ|^=qssyzf8='_>%_s'\o#5,uRϹ8/x3ܦ+鏸?O"qck_tߠG8A;ަqO\"N˕/x&qc'?'>WS급<}AWd>κo,Cʦw5^S##>g?|~k7:^R)[S ?e9?mSeʿ)ΗS\ßqCYq1x[x88\{'.сj4ǃ6YsA>p=^SOp<.1O^ OpRϫyJo~}O~:tU?|KtQ\!5?$=9?o/'5y8Gc^6oq0=Ʃ;K☺xŷtA@?gߐ:_2|ӛ_5q_|~(O_Ep95_4#~O65_yODZ5y8R3}~%ze~{q W!ߓ/2&᎚/ùuwy-~囔}^11/Y~p|`N5.)Ýy<_SV^ExA>%]oH]>?Z]E..W.^X<~}hd9={Zٚ/OWz>G|YkQ=pC~8? Oo>O*8?N>řIeyilvx_#O%wٞ_kq;|74'Kq8)9>|Z,1my5⨞?O]~ٟ|7Wex*8Xb僩G|gښ75Nvq6C]7^S<(5o+)Ɓ|s]ޅvFq=/O)}ߦ~7ׅ~CAć/.~)⌎ >5z)\G\_/gq|#>Np uyN[Fvu#em^)}L ?ψOJN^Exdzć_s|m}e܎vYk>O| _ O? 'OkO>Qum^^q<\r\+'Uy3|dܟ㞗#tF3N|,st?G^7!N~#qN|Gm~O??qܧܥtu\p^1xEsy !g}7ykO:JgpU$uG*~qg{Og5Oos6Ǒt%%y8wlS?j~Cwj~\">_)Kw(3P]Ϸ8xSo܌ [~ŽǙ:=nW5OKw=Gy ~8/ɿ1xES>(~Žk;|Ie5o-Y'oȫJ?A~qg{|(:PsqA)/zIɯqD/|"y<=xo~wG)]z#&u:WI5;7.{S:K{ 1N yS8c";-N^oَ+(ޢ~ \CkKzzH;?x+S*$OKzYs;v>w+%Oocz+>=0G) =x9S:WϗqWW+_T^K{ #Ǐ.gݞ7z^7ǹMg:3%}J_הu_#Oq<op|BkqIO{^wȯ)q'goEq^WsY'<_ɗ^ȓpYs;}[,92~o_阺E>K~fÿo?ߝoZo~'_1ǽ?菧×}ꯛ믇6jc6jc6jc6jc6jc6njڸ6njڸ6njڸ6njڸ6njڸ6jڸ6jڸ6jڸ6jڸ6jڸ6jx6jx6jx6jx6jx6jx6jx6'm~?2Ɵ7~0|־־־־־־־־־־֦4ZFkhmMi6֦4Z݌nFk7hfv3Z݌nGkhvv;ZݎnGkhnv7ZݍFkwh~v?ZݏGkh~v?Z{=Fkha0Z{=Gkhq8Z{=Gkhi4Z{=֞FkOВih4dZ2 -LCK%Вih4dZ2 -LCK%Вih4dZ2 -LCK%Вih4dZ2 -LCK%Вih4dZ2 -LCK%Вih4dZ2 -LCK%Вih4dZ2 -LCK%Вiht#o7?臷ʷʷʷʷʷʷʷʷ:F{=mF{=mF{=mF{=m1J$?~KIZ= Dl_)%Y2| ^~$O=`$vKK ̓lKz *p`B=$S08sfCK j$m_%۠d) $j`d3 0heF2l- 1dnhˠ9 J|>9g0 d`? r<1XiлO2K :oA ` 6hl A͟ԠhсS3n?|W7St5x_7SDe;=`AmJ/Yo`<dh/ᨛ мN馆k7ޠAq`rgޠ@,0HdPנ  5xfMVn7A8xnڸ)Isn22(}rO;vSཛ+n~,/0kPM7S )bҠwe0yAfun&ݤpS`? eMٞ:չ]:P;ެPj:fR۬/YO?tO?0?xtO?tl^nCdL?tO?96/<z(:RtO6:)?إN?t?g{O?t xnF =yAD'JM ͤl//ا./m ^^^_^_^?f{y?d=yyA{DN^&7$4yyy r>5I}^^/k/yny9N{ `cY_^-` ?g{////mra zw.޹{}/;lS=_x\sA=_s{ zw.޹{ zw.޸x=Rw.޹{炍gy zw.ex\sA=;x?4.9t\sA;t\mJ߹K :w.߹kt\sA;t\sA_JsA;l?;t\s. :w.߹{nn}ʏÂ/{| a a a =>,8">,8| N8^->,8">,8"7=p.(>,8">,8s}|/x Nh>/,8a#o‚/x| '4_~|~-_XpB|a '4'}/=_XpB|a qOvG'4_~|~:'\{A?.rE~\ >~1~/E~\ >~1~)?ЏK_ 1e1G\K{I?.q%q/>EyB>q#.EO\ >~/9₏_sK_ q/|G\Wߕs5\Wߕs5\Wߕs5\ߵs-\Wr_W#Wsȕ>|5_\!W<~m>r-|~zdtd><Чs'ggCA߻|{}wy{{GW/o/Rn_W^;g9mΦ|tr0n|Y /W9.c/Rz gcJ\ x]g</z<%?A[#NIwt_P~kdt˧+@p_ :n8SIķ뼟sSm|޻u8V;=nM\Nc#Bjyr b)2mX(ǽxA~#)_W;ПwNNI^zq`tHS"~!?hqx 1ϯ-/Sz})W t~?g|\Gw9ߗ?/|tRsa:~ýGE{igiy^gM]^#8q@Cyg\ ~X:{Ç~j8 >__C}IyNwEynSsy|x=l%ww|[ĥ7~/ K5S5^|s/wَ~/|q@/H|8GkC⒎0~WXYmS>ָx_|(07|w'nmRǫ>}϶S3:wY7 c> 8=:P}^Ëq._d{~9a8~+_x:!?G5qݿt9~?σOG>\9~/ '}u/lj?*vx>WXm>Mq6p|:oQޑ?|(n| |w'GIռ=K;|N?*]HMC ?.~:.N_y9A;1u_tﻮxxjG?wW__>Qz:?⨗ߧ3Y ]J>u,8%Mlk}^F+_sͣM`Iş;>ŋ/͚gx s8'y?Q8 /q܎ ۸OU:ws?+/9^sx[q:du5Gp!m_i0:PMO>Q\ %?Q/Y/;e=x3#a\9ߧΟqO?F-5ޘ8T(;@>哝k^8O>q7p>v 'y|p=N:ǡ5O.O拦.OoW.u׳}<2G~/A'+֏r[ǟs:[])u8{=!xMG]oúQu_#*Ccڣum^ 5& AO IO_=3=\-aq,Nigǝqe;:XY.N&uEOtґOvtuS?_{]g9O×.ODp?•~%Otq=M4=.mM=ďp<ҺQu_[~;͏yiO>Tmaͧz?p>7 g8S{[џWx|QQ9yB _8? t9HӮ8k)~A't~jp]?mu/~/.?Ǽ8o,ue>{5~Hr|~u >}\=O'wYN[۔5N:g܌>1!=#T|{ڞcjqd?Opv.,Y=\4| ?>/ A\_Se;܅nſ8'qR>0߫ٯ|+WV>!ϓ'uCy>1y._)?xk/~烲_\,'}c0϶+/>Hwr~℞='_ku%p`?~_~)Y5.xz^0K|҉c{VrWCֻ8>z.:߯C5q8@vuߍ%/| \CO}>ey3~v#~/c8Ni|p yi?O>7Q:p ߤ8?n:G/q _|qН]cLO^tU8xOϚtǓ/}6ެs6cp0+NrYB3Ŀ z^4q_xO~ oO/ߐOyyÑSx5 &ߓguSw{~/ct8E ox [j`ρSy/>0.wq#ȟp<{~K?đ;e9]~? wYLosmY#t߇lqR"#~v_3Y:G~B~xᦹ>οxqW2߮qǙŅC?O;h7/O>]ヸݮY'Yl7/505_(4~8Ͻۗ?OrN ^])~S8z߾>U+)^jf=nnCpkkMs1G8c>^ ϔJFqǯV>pv\V/H+|$ij8OogV>ħk`Ckpi&?đxe޾uC)q?CWb?)u}3?W|O\y\7꟯Y.깇oϳWzOI7 ׿=۟?x+Ksn9N ?eL/)Ňʿ{#ϸ,翸HE?7NN?8p8ƽGrK9zccqc~x/|CIŧ3:ntqzpvGPvx5qw=]k?׼qJ=GkwYoO۔xo~AgPi_\q ޖ5 y'|kNhmq8^Kp{t?My1~1\W<q|?S<;Rmqײnٗ|Q|_{]G~3Cpx?렿Uŷ4>r[^y875(l_~S7x|Zc-RS|M?5_}_O5<ПSY`GG'N7g|}ݷt5G=nO:9ƥ ||=N/}s.3/𺏩8O7OC>.:Pu'5>Ƨϩ,|O^q>;'<[vykgʇ}*_1)o GR܅kM˟^{j.GWŷ_}8} _n{<AM c]:'#ߣ5y8R]~}] m^IqݦG↯ywO雸78NC?3~O G6dz}>1^/Y~ 'W\7~·wS|g΁w}yO͛x7ej^s>Q>?:xK3G{ss#i~?>x=yQ7t'/0~}<7yA8 +m]q|h!U|N~)mα|HJtG<nR _}soClx _ĭcX3\@\;p>ռ-]5\ G*~=9]Џũ|:oKּ}qQ#>]Oy?0\/9k/ Oo>O*8qXP:|gښ/5>vq6_=wT>e| 7pCן]='Z܎$; :o kNg9}yFj|2ߗ'm'z~#x[ޅp 8zޞGq|7Wex*8S(ĵT괋KY.2GRA߯9N3{~..(ם7ߴ3K~JO6. z$>\qI;OwgtRw|^WW9?K9~Ç;g÷455yN[F<6j+em^)}<<~p!8.Rǽt^>?GߞĚ7n帖o'5_ NT>_y|{>)}ߦ8 oz3'xt  wѺ_5z"WLRq5S~ 8oi>kjH]c96<>ϔ5ޕ?[})>c8X>!?Pމq<:|5N|U]Zy,>ʛ5_ 8COusp%z=85Cqw=8RtW{M!y ^4=nW~>^8}r{p]p^cy ~|Q{xw<_͗qjz'O(?W;p<ʃ/5ޝ⇍Pt #W?u?HܱMOO䫸Z)36EJy>?w?7;#甮?=c:J5;7.{6Og"E/t1Bw{s9mXȯp#N|lW:=[)F C赸tm>Ow+~V7U:RKr>G/Yo".fc,9?>ſzϏ-n:N/Ύ,C ;70G) =x9S:'+_/~._8~uy<ey6u~0|Dqs+}|]~Ƿ^S}l?q6% y'|d>MRN|ފ*%d9#|%_zr|#Oe}n|RGAʿz/c8.'_˿7/w^j6|xǣ?_חknژژژژژڸ6njڸ6njڸ6njڸ6njڸ6njڸ6jڸ6jڸ6jڸ6jڸ6jx6jx6jx6jx6jx6jx6jx6jx6/sތ?oǟwq9Z2Z2Z2Z2Z2Z2Z2Z2Z2Z2ZFkhmMi6֦4ZFkhfv3Z݌nFk7hfv3ZݎnGkhvv;ZݎFkwhnv7ZݍFkwh~v?ZݏGkha0Z{=Fkha0Z{=Gkhq8Z{=֞FkOhi4Z{=֞FkCK%Вih4dZ2 -LCK%Вih4dZ2 -LCK%Вih4dZ2 -LCK%Вih4dZ2 -LCK%Вih4dZ2 -LCK%Вih4dZ2 -LCK%Вih4dZ2 -LCK%ݏp++++++++F{=mF{=mF{=mF{=mަ3_~=l9y粞?Iigi'ǝkϐW1aܰn=8|xqK}^q]ƛG0O3nmxc^}_lwKoG<:PyՍGuJ~{J>lg\S1Mi%W1gx \uޣSa7n|eb\3o8|t/2kҸqppьG3n~+uxgi'ǝka}A׭Sbƿ,ʻԍ7s_}l~cƭ2m}0}_ϯeӁzz:Pϧ+e{:O:z:tO?ޔ2?xtO{B:>m^C:ҁOO{ttti::tӁH.u:9:ShOݗz~5'/z^yA=:yJ^^O]^۬d 7%#/25 ! {By?_^9|4yyy r>5_}^^с?^^wJ 6_^| v s//JmSix\sA=;}޹`Rw.{ zw.=;x\sA=;x\sA)sA=;l?;x\s.{ zw.޹qϡ :w.߹};lS_t\sA_s :w.߹ :w.߸S/< :w.߹`cY޹ vY;t\sAt_wӇ'4_wӇ'S~M|~#Nh> Nh> Nh> N7a a {|w}XpRoa a qOvGa a ;7}}~-_XpB|a ~|~#Nh>/,8[ o‚/x Nh>/,8|/,8{7‚/x Nh>x~?~>/,8[{9ᒏ_ q#.ݧ@?.r"G\{A?.r"G\{N~\]|b^Џy/9₏_Kq#|.EO\ >~)?'.rq/|"G\<!|"ϟS~O\]|"_'om> >~/8Z:ԟ9J:ԟ9J:ԟ9J6՟k9ZǯG+}j2Cy|j҇kk9}'ߧs'gֿ OO·>>??;l}{߻΃{>sg5?x޾?ڏ8/~~[~rvGǗ⅟:.> +tDnK=O M_p>/)[].r ?z_/|w~NCmst?oM7kSw{)=⒚k?Qo }9.whp6|ЧC/|O{tçz^(q/q_[~2sm8SrO W?x)) pKJ1w|9O|E~s#8' ųSJTzR//WY.2<~\5?pG\?~oqG)$5w?g;!s6u,L=gt[;~8pNcZI[ϋxƷoϨ=⎿<ߛnz.?Ï}⋎nR$|Qpct?ez's@iߧ[[\_ۧ'[>^ _)7oxFq< 篸OGza ?kvE܇U8IB+O/9/&_c:,S7z@sā~M.?~>ί/_s~!WA!_\_MJp /:/RkP燺# 8$uAw35~:Ǵϗ tX\6QHMstNԋCPwYNGs=p__~Mo4'x һO:_9{?~>ί_s5:|?=,/*K8OC-8?oġ*ϋ\SSYBKpw/sv|S7ț{f{//y{r ]E_v8L(_vy>KTc\:?,]N|9C?eΧyُSׯ _%Yヸ7'.]GAk~__YxJ|vvCÕ_ODLk/lj?J_tjϪo~:]UO7(};C,+Os$>=tk:^}eaܽz!O8q>Oсs~^6֧qK`l|?o|)_8Q&9NQVC8]^ji{YO]ݻk˚wS%@mt@rf޽F9yq R ^<~*?bF ,5&Ɉ1#fL.yYlѼwG<,w˟.|\s}'G#첌W?ss~C?h_|/iGՅ,qz]>7ߋχ>g~׿pO{wӡSgާEwOO1hvn{AUяl8J>QN߲ڿK?{,g.->#]ҿ7lϋxs NϝGe&=>+/z7;o)/pesB8'rqNKt.~6.Sx\=%,ϼO-}^s_kp< ]~patMOhU|S[|1>;rq%s?f?z9Eq<$}Dx_l于3_lh_p%y* >| tvFopOȲvu3ϏSCo !W^6_j/s>{vǼEq._[/篎[>G/]WU58,>~?a^}y~wَC;'L|,Ӆ軿i| N8'Iop8 N۸Gq9[AOٟV9#}p2=dw.1/X2Տ|^N_vDto]tWtNkoY{|yyt>0?Ҏvswz_G~?1wOΟv?p>8~R~31|:|O~,N|pz\Ẳ8dqeEOtґe??_{,㻎}Lwq5~%r9 W)JNtG܂2ƷoYg~ܿAW98swz_[>9GyS꓇:r\;6 AHnA|CC,=\-nr8 Rk;qч~rQKf=nǏ,˱r"OɫrΕ+:}\g8fNxRO!Ԯq[}ܽ?ߧ~'~F%x_k_.q_?/yDN/]t1B}\3|_~CWC+ 5y?ЗyzRqK^a1'/wЍSƼ{t_v!?+щC vpE8d|>]n;=KxCzsqéߔ|_\oS-ǡx'?r|G辜#Qc@ۢq,wqMߐxyE\&ȋFs×3u<0|q?jj> |tSv=i߳~K>޳O :s{}/쇻c߷31K\/ݥ5,%9n\|9o$SOp3>Wǔ\޳wǧ`\Os}9O#~ ?<=1ʿ8 |<ƣּ8j?绽r{+G䵑{'<9d"ĸVr!?R[?xkM/Ǘ|P΋^|:<:iyv<\<|?'e(; ~Ov~j־`/i-1뵯C>p|@_}.:lm|M{Nz/{ߍ%@7NW'Go-g?g<9k~O:A1tS| 9| 7Q:p ߤ8?n:G/q _ogfz:_kWrGU}^4q_xO>[  y#_w|$ȁx|5Qu;OO5ďсr s/?t)x==A|nsџ;*]q)_?jϸQq^gp'|4W<\Dw#>gq"gl_ӝ?z>sSf>W7G|~jt ?)~roK>Us^rG><-Ƨlmm9'~</?t)x|sx/|{)U9owuoq#Nƿ8W|+O,)Wuer~sY_ p6>;,NēMy6x`vpi&H;NcJh眇OsÎw^YqJsu ~_!gzOhtO{574f=E-ѿ5^ zw|0~o8N?ƽяrRA@~W)qc~x/|CI_a3-˸<sAWrog>r]cJ9?s'ݏa9Werr/V~ڧS/S\ßqCi_\q ޖxY.8 \? )w_=y-9v>>/8k첟?NAwJ6GGmSor~~;7v:uR=)+/}qnKr\~xt/# |+.ÿ|U|:=7Os~~PJ/^P὏8O7'95o8|4^9\ pux9y޷rg3aOL/~Kq|l9nt>:oo|_gO#ϗe z~y~s~#ߣo}R]~x] c^I9n#ywmMop_^ss67-_8>E mgw)|bW?O~s>~[)˸ <79\q~we<y3OfLSx_G8-/g\-G{sp?y<\އy!>s޷WppØgZWƼrq45*>'_MW m9R _s·o!|q6r)^W/q<~2.qKq8f;2~6_>oͼ #y_w5tA;Oo:}kzΛNIߧ+s5xs_t~q7|}9Ǎ}:}y:Wc,Gq&|t%}>iqx_#߲L 8rt7Q:~gk|k5\;8ﯗ_?_NIw :os5}*%=?|_Θ!qQ'ss1G܅p 8Yy}<q<+rr_xy_V^l̲<"QkT~u%}.8-r ~o:g({~.v 7ryzV={>RkR?>pqvT>c=ҥ,^Exdzć?s}/us<-|Ÿ$|r脿\G֟rs꣧}/(F!ΐO2 ǔ wޯKCxU+p&|n~Çx Oc泸P, 8VΑ<Ǝy?Q>\%O9H~xw΋v;PtH'9N|Sk#q>xZ>Wq)aL9H/w\W7}|M})w)_J\{<YO>\lX9OkO^ʶ7@q~Dq wFC~e=_?xvt/w9;t;.e﷧q?sW!qWǜ_W~L)q4}O=gv>秃-~/H|`p?R>܇@7qGIq 9#>ŏN{)˟|~\-'"~e=_?x-\^rg?|8HcpR~{cq\/9_yH!?/ǜ_~q3=O{!q,_.mrޒqvK[JhgڵGS/>E]+nOO1^[k#>j,)[Ny~ݼϮ);!i/|=/C:}9wү)K(u)7w~IYOp]7GXs_ܚgYp]) |g9N)twűtėw\<#)w;Ӽq$]S8D\!£| wO??%<2U(-=yϔߐ#].;x_EH»xh>;S)?DVсr|n ^zSüyczoRU#q9xe9?uzY_Ob΋{/xɋg/^?}zǾzj[Z:ֱulck[Z]kwuܵq:Z]kuܷq:[}ou<:ZCxhu<:[cxlu<:[SxjOu<:ZSxjϭu<:[sxnϭu:^ZKxi/uuÏq^nzy^>z^~~~~~~~~~~ڶU۶jVm۪m[mmնڶU۶j[ݭVmwUݪnvj[ݭWmU~vj_ݯWmUêaj{X=VmUêqj{\=WmUqj{Z=ڞVmOUӪij{Z=ڞWmϫUyj{^=ڞWmϫU˪ej{Y^Vm/UҒmiɶd[Z--ٖlKK%Ғmiɶd[Z--ٖlKK%Ғmiɶd[Z--ٖlKK%Ғmiɶd[Z--ٖlKK%Ғmiɶd[Z--ٖlKK%Ғmiɶd[Z--ٖlKK%Ғmiɶd[Z--ٖlKK%Ғmiw8UW~+_ʯzW^UZjq_}Zjq_}Zjq_}Zjq_}slIEۥOJdMihO641-씢[)EI?g?P) ,?]3bO 5CJu4a_ԛ_]65E4R)AX% :2k(Ѹe!5C *0eHGD6S 14)tn) 3T}zCՆ\w3mhC7bi CTDC#0 ϩچY6lϐ!oИ!lC@ %3hS:k{t`DG:g|4SR5)x) -tP) ާ4dv 3$ohܭSПs)0d/nPԭCsJyC`PLCDQ R3ց,x thО[9nD:CaYoڐN}0["OOĤtŭJ a S 1l[ ng.*3햐mCnZt+Sr>O?tӁv:П2SY -OY쳝|d;tOJ-:g5?t`tX4F?tS r~O?ՁNYO@ott'SR[?tӁg;T,Ӂh?:p2tS߳?K[r \)|-'rSY -/,`rG_.r J-G.r >\__.?)Mr?x/G:E].r :0r sAOaO@os?޲/`;,r)r!r :U1=_.c6~ \0'>`O.ا'`O.}ry`O.}r f\0'>R>8'>`;O.}r!O.}r F\u &O.?`c )َ &O.?`y` &O.?` &O.? ) &O.9O.?`C'L\0rLC8aUp ǔ?C8aUտ>\qٿ>\qqY{' C8aUy<9N8~yr>py~#/\q+yOޟyar-oM71O&G~>~Џqoq#n{N?~\β9G[~|&79↏cʟ䉛qoM6|Ӈ?oww>mf6|Ӈ#oyyM.7|C~s/_j}/C~jyWsП]v?=:v;yUE]+hw/zKl3Ow<(|ޚnϜ;8z %ǜk?Qo }qx;|~8ny>Dok/|O{t_>/⿸Wr]/R>׆)%.q.o?"W[,xyoyG#e9n6/ǝW8? >Cq¿<+/Y\Yp<;p.+|"8yx?hpRC^yzyeA?.K5?>NvwO':}3s\~z{e>g=jtwg7+Əp|N}^,69^g~_q C7;E#ƩpEGw)q_}}08Oݜߧ[[\_;fOFw.K8|AÍxӿSJ>ɟ6v~8^xwegrn:qp{ǍI~8>&z>Wϓrb)2mylgq/^o_q #Gu~=^r?Ï\KU,OȅWNy_8L^cr,Gx5;D|߸\Gcf?ﲝ/E=@t}zAW/_s,C_I;`ԯ_?t/?܂3f~ W# eAwgÇ;~e?R?_'tgCaό"]>L'$}or90tH?Oqw_9Ϗ}~10(iO>ww{|.bK.?|_L:e<Yoqp\TK8O!x?7r/q3.p?,daO2ϗ 9dޗp9;ʋroYG9r$׳\x_.y !"|1y@~v9%|*}2?YN~ɏ8s=~y?9<e횯u~d~s>s .闾GA״k~__Qٞeo_۫] nԞ?‰w/׉?t'w~2]֏cUlQ};CY~CqQ<92^ 3߲a}v!'{Ώ8'~@sOYƹ|O\ n|p> (NuxC?#|η=/\ ]'#xkKyDyM\'h~xu?q1ܻc4\//>#/9e:7]]+{qO|.it^~usw:t2~Կלٟ^W:ߎmtY;H*_>Q=mGɧ8#[Yޡ|IǕ|o9e%'pK7[|Wcc\yqo_h_p0ݤsOE\fr={lN2DN3!ixvO %x y_ek_~r Gp!˯r.t W/p|>]{v<0>gxGS0{,g\/1r#/1|˃cc\p\qˑ͛8?wm 9CW:O?s}8n^< P_A_ԿY֮_{vJw_ B;?d꯸KMcp^n6%K}1zTEkwJwz@1w~e[o__[#/p7^ ty; ΐ{xO2}2^8ȟx^V (~h{ן8َ z"r ~?/e9AӿwY}v '_uЉ֎rvq.i-tq>?G]nwnpTkcH6Cu)ѿ_׼3WG|OzRJp&:f\oI?qũO_s.xwY>\Wz?̷8\:GW?u+|e|qrO×.ODn8|J9_ɩyן\[p6]-r?}ߏ7}>J9wnpTkgp?>sJ}P\af;_8ɍ8H/p?ÙxeKpCx]m|XC|v>Aqug=.p]O.}ɬqe9V[)yU¹rEӲzsl} _i/=5}kߔOԯ!ckw;ݥ/Nw> t?9T:]tojxHyE\&9]>@oRj/Σ;|_+>?qݘ7Xs|ˎ3}'}9#:q2~yW쏓G x| O_zH/q.80p63K?m?8]y^|]~_rݗs!9jhr[t>>nrxoyb>+yQ|GNPzK<ΓCTQ~cLC8|7\`_v! ,'gR3:?C_O:;nqC_Ppϕnvsю:{O~{c)~A'|t<7p~8Fۻ~_׿C来Q~=g=uwzp%>Ӹ5{cA}/sDwz8F:|6rWǔ\a<-ώ˜ҝcu;ힿx)wB??Re}CD9F(eg캝'#~/cB'4>S8Nu`}S>f>JgGM%䫻?uНCcLO^t*rtA΃g%S.x2m>/+ `VNyzټ o(;ϋf;nk8r<!O}Ñ9Fo59JoY?[;nq 1:PN6|pyo>O^|`];D(Gc8?nG~r.}|~G-~,w61柵=#>'y|}g~= ݦ;gΣ%.8Эc>87sǕR?_|43%_7;ګL?qozٿ}A\S|g,Nē<|sBYϧ?xsJgj_\W޲.<!OYo)sÇ?bK\N1GҘQt?-Ϝ%.pc9/qo}3~*ӸΔQ~-n}o);7_O>x. q.fGr'ʼnxR)flӝ?z>C>.7OrNN*~#~OIARu:k޷7Y?O{?ϳsԿ{CWNHJi_:Gz0oٿ}RQ_;OezR #;_.׃ky==9~󜟊)q*~Яs~r]O]n^Aå]:_5/:sz-1Ǎ腿 totOzΗ9];쇷>R~gr\qx^w, op)ryA9;7%~r\q;~8Η&y5hxO΋q5Ƿs~*~ܧĩ[<}~r]*~p .R+7țr 5򂜊[&l.7sxT|^.GWqL#A-t~Ho87|/};Og}R]~x] ~R9n#mMop_^ss67-_8>E mgw)<"W?O~s>~[)˸ <79\q~ߐe<ev~]s3qmIe=lg=v9OPoe/}\'ātG{7n͛wk!i~l?dqkr8N=#oi~+'Kq8}9S⢎Ox9i2GeYNM\|9.wFZ;Py?~??zJ)~CA߿~I;pLshRjw|^>#Юs~ٹ~Ç'ig÷}o>L[Frߺ~#e6O/<}L ?8.e-zM?(k'#>u^㉝/o'tD'57}2~?S=xG4Mq| NWp(8U~]J%.ƋG\3q/?Kw>,'X9G:6_J\ <͔| 1,Oȇʝx)oYƽr&OQ/,\s=x"~#{!܂zr\O|Qr}} p1!%ߕ{pr ~8/_xz>s=x")9<_q/C΃Y|G.뼵OOn*WɱS_:ޝ⇝<|n9R:0W7}|M})w);?~=GYO>\X9OkO^ʶ7@q~D;z]!?'E ԗuJ܏oN}y포Ǔ+|5>/1^]sF|R?ZN18ETz!x[>Ap"\wӥ;4\_s·s8B~_9_gJ{8_>CX9\*%@|Q=>DsS5C>?zoYw>אN?e;s =;/%?Ϝ=Y/G[p#DK)Pf;©YsjWK ا Ǎ笗o*|!A>qqL,nVwPlp>d=>{!Rr T47f9:p8jW.y?ysJ~@v2|A'>G~;۹CXswg6}Ɏht ~Dgpξg?wηqgs~tsz_[4#kJn ?v>MzMN>^Ïz:滷R/G3~+~9_,z:'~xn9o)|?sJ~@1ntS 8x̳*~q\wp=s8P|rr܁oqgs~r\!8_⫸R>3p v>GQ?? &e=^(.}d=Əۜ6yuS;o䫾_ϝ.ғߎCjou҅}9~?O9:{L9Gt$%=Ŀs=tЧsJ< O|dU?C~~O>wƍnԎq +t*HwÝ'~qŬLI_ġtI?N_w>ָr}g#S=\fčtw^~J3mE~rsn)?yJ8r?/c; $)A=#y4>ȯ|?~s .g._܈kq\WR]>U~YR>28#q$'3w>1jǿv_/tYmw/6/G/x%/W?j뫻難z쫧zֱulck[Z:ֱuܵq:Z]kwuܵq:[}ouܷq:[Cxhu<:ZCxhu<:[cxlu<:ZSxjOu<:[sxnϭu<:[Kxi/u:^ZKxQ?8^ޭz^>ǪǪǪǪǪǪǪǪǪǪm[mmնڶU۶jVm۪m[mUݪnvj[ݭVmwUݪ~vj_ݯWmU~vj{X=VmUêaj{X=WmUqj{\=WmUӪij{Z=ڞVmOUӪyj{^=ڞWmϫUyj{Y^Vm/U˪ej{Y--ٖlKK%Ғmiɶd[Z--ٖlKK%Ғmiɶd[Z--ٖlKK%Ғmiɶd[Z--ٖlKK%Ғmiɶd[Z--ٖlKK%Ғmiɶd[Z--ٖlKK%Ғmiɶd[Z--ٖlKK%Ғmiɶd[Z--ٖl_ʯzW^UW~+_VZ-kVZ-kVZ-kVZ-kV7wv'{RR&4dP)fHҨQ^<:>*Sv(TnŨKF_IFjsE5ۍ.IFuFfrQXi(K%2kht=f65 "}}0Z+0S0ѠNE@s1SFnj1*4~=RQnF=:-5J76qȲQ@wv]|Fō257JbthNFv_GS_@-4mT¨lvKi4hwKiTΨWtFOiTh>Qlw(Qz.F^5bt٨#QovKF7j4~=jv)5n*:Q"J 3>g7뮈xw#wW]@"%vW݈@GnAsֻcu>wGE0:n=_QuF1l(|]Cg{7*QswM{d(Q>:v:_2OtwI,ON> =O?t߻ٟltO?x OO?9?@Of@gK9-:),O9ӁC15_.r}-'rO-ﬓ/,`rGw/;_.r g-df; \/SrU>.}0r sAO沾t֏_.8g\e/;vߧв,\pȲ\0R#/YW>`O.}r 9^\OO.#q f\0?>q f\0'>`O.}pAy=|pNO.}r vΟ f\0C f\0':'L\0r'S?L\0r?>q'L\0r'L\0pA)S'L\s\0rl &O.?` .>տ>\q=)ֿ>\qy~ Ї+N>տ>\q=_W0|}O}ℳ<ԇ+N>տ>\q>~yr>py~ֿ>\q=&O09+y_ WpL3y_>' 8ap x+N>#/\q+yOޟyΎ8ap x}|8G^W?' ?[>~ЏqocʟM7 7|f79↏7&G'q#)7 es-nM'nr ǔ?79↏y&G<#O>~o䉛qo9OM8yrqo]n.j/_샿jW/_~9b<Я?ٿ?9ߟ;~NCo)Sq%][M>=~TO?\Cp-8 S>9OBzgM>χ }zz0n|r]WUEp6<: W |˟9/>O -o|?R,w܍? G>p(' ųr[Jqс|`S9^g·S|lsG쯝&zNc|Iϋ?"7ߦc?5N9~>|?my9O9pǽ8->>u:+qq? |L>+|>6'&ί_LYᇼvq~_^g2/RPC}G<a9$xw48K<~LO%EF/};gNIr`׿~f=s|R?.ҟba|!~Q5t%|J]9/8]~8?|u/x?p/.`q6C-8?~8oy_Cyg\ ~X2=ýeO/rȼ/)tsw,sI+g\q;nx5AKT1e~F\wy.{q>z/~:sy|?)5_S?F;|A\o[/}xi?_=C+\ WG?>|7=3x_T_/O:5eǎz?>8wLJ?>7gyr$>=tkegֿe=?ø|CN8q>Oс9\? ‰NѼN~r?Xc>Mw,i^^}V'G4oCy򧼄:$\ɑ1,/_Џ}>W9_K;sQu!to@Wϙ/\>ite{S9S?tL?^vvU}zz)>OqGl3?3Cw+>ǟs1Y?KtOGo:DM.ǸF6:\y9sf`Iş;ʋ/۳z 9\ٜe:7 gCAK^x=A;ÿr)3o!|לW_,B~;_4\x'.ey_(G}dGp<9܎|eq<?񼼁<<'9Pм?\?qhD:_4r|8@_OLw#g+%~9[ן9-][?}B5̏#jצṁSv9ygy8L!>S; 8\}G;)~eoq:E?ùtiُw|;W!y/]\pp?•r S98?slL[ ~><o|?•rťזp5~}ηΧv?p>q<%_?~31|:|<,N|pz\Ẳ\Y.r\'Ss劎e?9kt?${|_zH/k.;)}>w_ >C~I<ש3wK?_@} E>]ts7t:P/ ǗߐF?oM9r0}޾_GwW|t1o:gH}쇯OsFtep\Q=s'l{y^\pj7e=axl>gp7=<|Kq( ~/CrԘ?<@}'|xS7z0|^W#90sy'ȩ‡}rq1or8Cg?|-~?;YO87_+g~?t<h>ruwڭGϡ+<ԣit5l+SN^y:o8.qw |Aw0s;K&{z+x0a##>[tA/p]¸:yڧ8C缸܌1)!i5#T3!{RR\GCıx gRq΢})J|Hqnk8l)~!7ד\_爲Oq/Num~/0y5,%O9n\^' ++ym 9ON8y>1tڧ}>bf|)OxZ79;y =y|>J?y_~S5.x󶵯>/K|)w=kKyzĿW}>$q_/=S~~wts>'Q[~u;OG_S9Ni|p <7§||7/KWw[;Ǹ#ΗZU:K<ȧg9d;]d?eƛ}^0WN9xy!QwpUvp2ޓyyCH=#)r q|=9kr<߲~rwvΓ~/ct"7mOS|ʽ8\-wȉ8Pp~r]<.Џ\[% !OYmc?k{9GG}O):mZ{g?MwϜG;K7]5^Oq[}qo+~Jvi\gJOy3n/wW~,IG;9?1ヸݩY'Yy6Wt<8󅲞O7~#e3!甸ߥe=]x 'CR8|qrŜ4b1ϣ|˯>q't[9K7]5^/ >#s<^ gJ|UNq)_[܈/S8 wUozٿ}\V\$|N<|S1<ħ;0?|ɇ8}\o^ǟ87˝xUs^hoY9W:WsA#Rf;nmY?ώknh/9|#Wert_~|z^S+5q  ͧYq~c/z3}i'mӏq/%iܼkl9|??<~w2~x)|_|}WLq}2ntqzpG\gq=zy-R8 <8~c>|xe9\ ?>d=)2~Ag|x7&#8anS8\{'.с洎z.q\!<{2~r98A9{?./~V)~|y'NGR܅;&1Ǎ饿rxntr\tp}ُ~x'wv?8i/_c6GyS_e>G4>kpxc'%S|uMIxM9E:>91>|N*8}~r]8^N9p\LyXpbY3|>Gtqtho8A`z'/t}o9 EpØWRH+c])}?3vO~#|]9Տ?|_o%|V{2.{8MĥW_dD'u œ.Gy{9>Q>?:xKW}n$7Ï>gtOs'uzrrH)Ϝ-Ŀ0晖8G1*p<~yqɗrn&=#@~#|[ij"W?y_\K*`&R܁+ٯg䦟o[3`Hs{!W]?9]ЎSN=C_4>/^wtSswE#9.'z~?a_,ͼ>x_Gq#A|k|U6aC?Qk;_:;>zq>_yr^ȷ,%?_zq>>wt|4e| 7|˲1۹N!s]r\w~|do8OS>7 8>iw8稟юϥ\}G\]i/sO> 8oi>k:2]n]c\?SFJOvO?>|Fĩt-˸nkG'^8\rOuǵ| '>|?:y9>{>)}ߧ8 oz3qCq1%tRPF/q1^5x? {_[9^;>.'ŧ,?>'2u\U\K9:N|2}owz@|>_~9çxh}}ǔ|'G8/[z>s=x"~9O{ҟo r}Ý{>=tW-IUm΋v;/==s=x")9<_q/C΃ut[.OOn*WɱS_:ޝ⇝<|A9R:q.+| |>M_'_|S_]>R?מ}ΓS众/oܡE_.{Y8D/Ë.|C·sAΧKw܏\:/9_yHA/1>SJoS1_ nx+~ |?R?0/$oOv>!/Mxryox%=ƫk9O^'_߸WI8;'!{Y8oG}~*ׇ9C>'|ߞzA+ |u|GO1|L)q4}O=gv>痋p\s>꯾gvUОvjB7tGoz-.~㚇h ~о>s] ~?q.stMоC~{Pf;.,9|5q,Ӎ>ϙ|yxz})xN|O?8T;fJ|J!ōtẎoe{|?v!{|CIRSg&~ ,Ǘ} G+#|Ip/^Oeَp*~k8#/~N!=NvYCt/hZos;Wgkw|N,ߦ>2>NWď .v;LyُNzNokzW#~@Wpy$~;zM?MzǎχHWe=ݣ}d~cܘ鸧pgS?UPzp-|5%,WtuAr>GmG:+Rʳ\9ye\/I:/#S=qSU/}ONI]o![vn~O>G?~c| =o:NLK9%i|_'zy!?e?\'mvFx7jǸpN|wSo;)<1#8Nw>In3r[[.~dJk̟OWø^0(_t>oX<ߜsn~r>'OCSuL9Gt$|09z<\"S5~o{lpe+q-n+pNƫyv~|vHWm3fgJ|@Nơr[d,܍[|Fc~/~q~^l^yqŃ^__ADiceDesign/data/NOLHdesigns.rda0000644000176200001440000004613613326623464016011 0ustar liggesusers]+kzwΞ$Yp@C `_W%[#6`!1):??*M/v^F d=Uu離~e7^jf~o>{~sK{՟?/??~aӿ1IO~vԬ[g;lg쳝l-y~>o;ԟڿ6_1;_=O}ߟ|ھ=a~~_cp93~q4p93~qt6T`[_g%`=+/v^\{qŭw^{ŧjWW}뾺۾[ҭtk/Kҭtk/mNftSڜFu^Zft-x~y?"ђhd?ُF߯_CGkfpۏ;U88w>k\qqg?f|o_e^syymg۟7uΉJ%Wݓ{/V-~ni??J+޼qj+8ڥ>:$ܷifGL}.KKL$_8-硢9o95tC;Itr*><:qxh>~8}q/ʼnqseqzirQ n׌W΋6T|qbܜg켮CY<9eq:m>x'.dq8 N8C<<4ēO8bv3|/O\GgyDNGٟ;7/&+8>i>KsV\9΃T{TqN;/@lgbGϋ;J>'Wq)iŕ~ޢeÜ>[пbSoytV9oCf+2G8yO(Nű6>xO9;y$.:GCQ띷|l˼xgl?4n ~8Gy#^<-s^[fIkř<Sxۦ5m ~8g%^:u<o׌xu\+l,N'gP m+qʲ,>x1Ѹq<¸nFc^!ė3?۴,Ļ>x1q#Ņqdxt _^Tŧz-xئwĸ8K/[qo뫛7c:<8^]OtgyOGyϲ5cM֏Af[>fyDy7y?rɯ~z__N>zӉW}\q>Mi7}ܴq>nMi}ܶq>nmm}ܵq>]M ߴӗfyyNUr/';fY{ ~7,YM,ӌC-,FT=0Lu.ߗ~7zM=tCK:MLt_>m_X,}ώW&>:_*<7tH9Y|8Pܯӎx8sdeWWy*ŝq2{;≾_+-=;_G=]\䛿yJw躸#A;f=}suez+<|n{zH=wB/?/Sx=>g:5X9^z Oȯq{meyq̲87ܸ҅y{lyʸ S:8+>wE凸]eɼyC):CO]s.G?(P]π4Y,s~ <]tkk=K7ܼ~M}[t}>"t_UgX^z_*O^jƁ|+~#d~a'ݐg2,o3}FWgyU^w>"tA88[W}#i[8o~7]H6!N^;9Q?5#V~1zy,s^O6ɝ|K~O,0u#L=oqiq}}Rt!qPt{&_7yȲ<_@'+Y|gU:~ywL^y~*ſns,S5]"qd I1,{BIq@Wot\cz$!@|7Co zg.nU)wL^b׿G)ݚ'O v8Lm=|3qP_[u<㫴9yꁸ83 yAy xV9#œ3tEzD}tUM>GOi铼:-i<,G]9=tQoLHLɸO:/ K߫wi_CZ:Do"=>g:ʿ&'㌓<4>|+|㙝_c^~Jzy8ō?|rt.t('ƓNpu Cy0}d^3qKGg?`J!گ#|,5>׫fZG%'~#t<=trf=בzmnyo9o{ 1:8gVifeuby~ʴջ㨿 z4K3ayStky#~ݡG9:}ϿqK z7~;ωqzMN_>g}Jl1oTޥ[E|EM>7T^УyZ~&ΞtN%:" ?t::Fu1] z73v! ~5[g;|z_V3ߦnn _FU[1/8cu8yTs^VT,]>q3km}ZqCŵ*>tۘOd;A?XyW;#Z9C/\{HOʁw׭%=7/o]W嫼tġ+/f-"0ʸ.λr>iGwLI+邸OhEE_cE7|Nq@7yqĕ_/#*/8~}ӻ\ty\q]0۴r=?ݤstЧ[<|/JKj>'Dg?<{|[QͿ9MZy7yjz6:ϋq6Y>+utHGIOzA'|{ύ:).3ޏ8[FWWismʻy=>Sz~i|o!qJYβ]_CO:G_c>7$cy^sҼ_JKo^}3meyߺ'ަ?tn?y<k7YYOg>tN7.k?̲Yi?q*{%1-Xeҥ䧿|SLYtu$ަOtnYt|Vy7YYOg>tqV?̲Yi=|cz%1-Xe%:=9W؏^N?쇼27ʣPNÇ8O:盏iGYDӊ+q&;Wiz .H\3qg*O]ctqǝ:|ywz .ĉdY\ĝsvԟO>7>-;|.O|b>OW CtY~^Vc̃.\y,nYW>O#,88m_oۿmm^q>}o}ܷq>}o}<>Cxh}|jǧ}|jǧ}|jkWjy[^^//o˻ayWo_-~WWKoWKoWKoWKonm[z-vKo*p_qn{_^>,/ޖw.W߾_-+~iS˛$,a$?N;g<}9{ImZ,?li=, o}̍11XO=e(,Aڗջ֎с}ts}сjсFс}t5Tt`aUF]k55ft񏽟PkFZkEZ͎iծjQ5vt`Gс}t`GZcHy?:Z1с^As^vҾsсс֠сoޏ@k^sZ=:pjtnFt5:,+赛|>:tn#:К9[0v>e{&̝D:weƜ9@{0Ft`G/~(O?t`e:=>Y_^O?to>U::pHt?fy\ۓM O?x:罪t`ut?tO?tӁ>K_]_] ` |H]og^.fO.>`:゙ FM.yri fO.>`䂙 fqA fO.>5ۑ fO.>`䂙 Vi䂙 fO.>`䂙iq3ߟₙ۴`䂙 F .6ryL\0?`.O.?` &O.O.?`lO.?` &O.X &O.?` &?'LJ &o &O.\0},>q¼7}Ї3N>C8aY~}8g=ϟЇ3Nl>{_Wf~}8g=ϟЇ3N>߫_g=ϟЇ3N>C8aY~}8>LN7}Gp ل^8g?3N>^8g?3N>^8yC%Nxlo8azϟ8a~ϟ8azϟ8azOޟK>~1/E~\ >~1/ExM"G\{A?.rt/s"G\K{I?.qK>~/9₏_ EyB=q#^~/z"G\<|"_'|#.EPO\ >~/8>|C^a8>?GQQ00/s}y+C_~m栟uYuY@?>΃?<:^y8}}g{|oO}{?-=j{pGcNm\GY89z=)܈Gpxq>G1}.'kޗtt诿>_7_/ ]~#g{|oU}rt)?܆f]q_}|A_zxu19|?q:x5ԛс71>O748;:wއM|MܮW]Xsxq:eK]OxCzFt=ŇT?Gt qxk3= sk\ʿyx2u: اz /)x λ|Kz7wñ]:a]uW׼fYKq: ?Ṃ,nRlas-zw^}~׿}ϕfyVY o=yش|OMϏyEGa_ύSyBO nxF~fǸ'\=2A~zm2]ȷS+|tS\ӧ3iƯZg\c _3\#_Ř)Ipߦ{8y1/.]7xtFSMEY_@~SN~_|v^&?<9UY}#q3x5>?Q@|3>G)JoOsWG\ʨ;;W׳]܏;CU~=\zZ};:>f?ՏxWh=Pn:^97~+ZiWyymWLW;~rzELݕŸy3lW<yoG Ah,߳!O ^ᓸ~Gn“|[ĵ8gu{}Woywpnx8~_z7﷠۴x>}>k|7r0op)?:Oq~jOtc穻x?4~l_'p497p:S/'qu^߳!O3^ᓸL!ٸ Oac.n¹:s׽&lW>W>qzmuZ<^mѓp\u:^fm#Ewtϭl\lO~;뼙_/z։| Wq|'z2|=ķ<]V|ƿ _n=?!w<ĝ|w܊??c8a{~zTC?UMf ~ǣx̓O|'~oM/7SEYP >2NK>hġ|GU'}<hi}DSY+ u>͏bs|?Q{8o?py,|ƿxOɟwQwmuz?J'1^/=|@Co<_,yy%>̯fY<O>{py?m{='C|Q䩼ģOy?%Eһ^Jɳr g:ٜ Ù{)|W/iķQ@s7>8~s=|6Bq~[8&j]xkyE>{pNϛy?E]ďYz?w~|Tp;NǣOy?Z_,~]G?^@uk>wzue|lNQ~V܇3>}u+>SK8~8y oq;q6]{Λx]{Ntܔ/:6ow+'!td;W ~I:pACg6m8's+~9>GcMuLqQqaygqL7q÷gq_y*|_9ni}Տu|ѿ}n5qŧ>'縨:1ǡ'I-ʹN/:74>Ety3 ?o;y"n7YO$ξ|{^r<^oi\>8=& =g?o{A%[.U'\3<}ܴ>p#>|O5|C%׳d9~~Ǭǥ􋛣 /tu< .}xi1Vy!^-MgGMq&^o>G:`"!3};}-m+{g-5:8C/:V=NWR.Ǽg?pnG\ݬnkY-ۋ1q:f| ?~ˁtO9K??꽼'<9Kpƫz~E39?#pE}-#.D>=yW&et?UqM99ۑ^\y^ϻW(/6Y+_$9N4ۡC>}>8 Wʕx?e?p0]Sx 8]}A?nz.KxI݁|FZ<7\=~}-S!|xo!\UqMͲoj<װ^Vޟ 3p~Nj8yeEyC!<0m܆Gx ru^PohQlh%VyR[auyJُ׼?KE/:<8_|@,:|os>6P\3|H_t#x~7#BwF|XgU&q:Jg8@#;ݣO8~\+<q|QWw^^>~<A oQx}#Ks u_yי׼?Km:8/aί.曽A2?ĹǬ3|W_tOp>3nG۩ E2:կ8v7y_]Rw_Ob{q%g_^Y/ͯq◫_3W㋸a@Czz~|xZyd~WYO=1t)˗I>G=#WLySz=<:f{z=9o;O=OtW:˟cc<_+|7y->{i8_y7ƛ_Ҫ ']MZܧ|EBwR{>/>g?;WA}nŻ]sz_f p)gR'W^gL먶zx֫~?O|X~7p:ggUu.*>|qˁU<^CT\v}t\I誼[ޘvnK_cMp,#gx~N/'teBw_1qֺ?{8a#{1>7ן?P^>fq }~5˝z:&+o_[tWzK4NLб>m W]ѭU>Gg.[Tw&ZfY]Wp/^S=߳rw^]WgCqF8}xK_[/u o Vwis\ȧM]Nq*S78)5|3r*ݦ5pO˽^y'i>ɲxGq*3.:nqBSs<|4n|ʷGA|Aw;oٯl8Jk ~8 ć8o.uG;NU/Op:Ybz;?ezJ}T;8O7xo2翽&ߣw wO7q۴qe}!uky{hާ,npk>禲,. uk~ϲ<k-9ǃNgqϏMynpe\ď9~uG=|(/q:q7k9ħ:c'|KSNwxd=7Y{wk~<7CxMxs>gcuF>w~ZCsepo1?ǏFNA":P^>:G}Gշs>HݮW7k#,A>oϏt988)to9ƇmqK#d?>G w$^9δt9wtoo~g'y}2gkϧ\~ 1bO*'COK{~3z'/{>M6iq!g8y}wA:O[.+/q?pz~r*]3|2϶i}p KL=' wM{8Ӫ9~N~'WpSy>C*:'RqqO:Cǩ2z1?8MZ\gԿǴ=u:nс^ɝMYg'S]>Iw|NˎW'#_M?:ʇ|~f83W|ArZͲ8@e~*1ߥOY?[.~5Iޜ/{9`<_>t_yIst.DY|uF2':4?|5uY7'4%y^~z 8/tO O=ԟ7sG'C5Sw< CO8l]|t3Π'8?[=^o *)4.ngu~uBF#^~_3t6zq~>[ Σ+?/\q){x5^tnq6;y< ?qC /79pzueỵ%;&zD}r:VvH_༏ui1]r P_P>1WNϧq w,Ӛ\1wz|gpS%PbU6 E]I?:OkUYq¸Ϧe|߯YOl|Q\>xv C|o_~W}k[)1x; GOǴ)|NNBg{/O\cOǯ>uy{yL~.q ݓ83H}8^ z:KM_fC=="ۥl_Ggq0? ^SO+ei?A3t/4ϳ qzI~.=#>|?:[z8Eވ^7Mo<t,*򙮊3q?漉f=}!-5_)>onAyp ٤wǴ|^ӑ}q ޡt7r,#yCGR$?K S[7:Nq1)oW|p{_y-t/ z~I~q1='|?:[zzzqcJ%iYW8,܉ǜ7۬?5{+>.etǫ8>T_;cZ>~SW쳌k@ݒfhu:U]yOmju>\poW|8,=目t-K_"Ly]~`~)(OOYϟqxˇʸGgi*|oz' O}gA>=L}G\-=|E~+7p7qAz9&x?ΚG Yu97ikYEWzl8Sw#tt#x5-n~`~)OYϟq>ˇ اŕ|'1{|?uu N3?~|'|V=y^W^H˯;q<=L"T:ս"Ә,'&x?x< yu;g&-|P~:2:z|x^:w6Jߵo?]xJ+_!m/0OUާeG#5|~[y̷1,˧״`32zpUk?<5M/_i}2#෸ocu>=d_Ņ.[}7^;mсluXg܇#YV:ܜe>qz]uT":rp8U^P=g?q%9Y_}~}n߭`_ʋ^xqŝ^un}\q>nMi7}ܴq>nmm}ܶq>nmmw}ܵq>]kw}ܷq>}o}ܷ>Cxh}<>ǧ}|jǧ}|jǧI߿nWzyy]^-/˥nm[z-vKonzzzzzzzzzzffffffffffvvvvvvvvvvnnnnnnnnnn~~~~~~~~~~aaaaaaaaaaۧOKo>-}Zziۢ%EKv--Z[dhnђݢ%EKv--Z[dhnђݢ%EKv--Z[dhnђݢ%EKv--Z[dhnђݢ%EKv--Z[dhnђݢ%EKv--Z[dhnђݢ%EKv--Z[dhnђݢ%EKv+wzZK^R|W+_/ʗzKe%^{Y"e%^{Y"e%^{Y"e%^{Y"e%^{q_/_\V_?V~Ňo{~ݷ=ӊo?]VDiceDesign/data/OA131.txt.gz0000644000176200001440000000022712132615374015072 0ustar liggesusers  PI,'㸞x q9b3H(XƎsfجge [X f3ZNn<2 ̖2qk.'4U8#淴rLx=K%6;7,B^ڭ5 @%4tš”W PBM\ ui^و) f?\&&l$U]Ldaet$y8z\@<ϗ+rխi\f蟪 O ɞ6֭Z)ۜܳ [WDpn?nw0q`q:V5̔?dwc]p49ojoFvK 6J 3;H2t P<ڷFˁop^ o WŶNR DiceDesign/man/0000755000176200001440000000000014532322253013024 5ustar liggesusersDiceDesign/man/rss3d.Rd0000644000176200001440000001202014011023500014325 0ustar liggesusers\name{rss3d} \alias{rss3d} \title{3D graphical tool for defect detection of Space-Filling Designs.} \description{ For a 3-dimensional design, the 3D radial scanning statistic (RSS) scans angularly the domain. In each direction, it compares the distribution of projected points to their theoretical distribution under the assumption that all design points are drawn from uniform distribution. For a d-dimensional design, all triplets of dimensions are scanned. The RSS detects the defects of low discrepancy sequences or orthogonal arrays, and can be used for selecting space-filling designs.} \usage{ rss3d(design, lower, upper, gof.test.type = "greenwood", gof.test.stat = NULL, transform = NULL, n.angle = 60, graphics = 1, trace = TRUE) } \arguments{ \item{design}{a matrix or data.frame containing the d-dimensional design of experiments. The row no. i contains the values of the d input variables corresponding to simulation no. i} \item{lower}{the domain lower boundaries.} \item{upper}{the domain upper boundaries.} \item{gof.test.type}{an optional character indicating the kind of statistical test to be used to test the goodness-of-fit of the design projections to their theoretical distribution. Several tests are available, see \code{\link{unif.test.statistic}}. Default is "greenwood".} \item{gof.test.stat}{an optional number equal to the goodness-of-fit statistic at level \code{5\%}. Default is the modified test statistic for fully specified distribution (see details below).} \item{transform}{ an optional character indicating what type of transformation should be applied before testing uniformity. Only one choice available "spacings", that lead to over-detection. Default - and recommended - is \code{NULL}.} \item{n.angle}{ an optional number indicating the number of angles used. Default is \code{60} corresponding to a 3-degree discretization step. Note that the RSS surface is continuous.} \item{graphics}{ an optional integer indicating whether a graph should be produced. If negative, no graph is produced. Otherwise (default), the design is plotted in the worst 3D coordinate subspace (corr. to the worst value of statistic), with its projections onto the worst (oblique) axis.} \item{trace}{ an optional boolean. Turn it to \code{FALSE} if you want no verbosity.} } \details{ The RSS surface is continuous. However for computational purposes, a discretization is used. The default discretization step is tunable with \code{n.angle}. } \value{a list with components: \item{global.stat}{an array containing the values of the global statistic (equal to the maximum of statistic values over the RSS surface) for all triplets of dimensions.} \item{print.out}{the same as \code{global.stat}, but with a user-friendly printing.} \item{worst.case}{the worst triplet of dimensions, that is the one that gives the worst value of \code{global.stat}.} \item{worst.dir}{the worst direction, that is the one that gives the worst value of the statistic in the coordinate 3D subspace defined by \code{worst.case}.} \item{stat}{a matrix of size \code{n.angle*n.angle} containing the statistic values for each angles (spherical coordinates).} \item{angle}{a matrix of size \code{n.angle*n.angle} containing the corresponding angles used (spherical coordinates).} \item{gof.test.stat}{the threshold at significance level 0.05 for the specified goodness-of-fit statistic.} } \references{ Roustant O., Franco J., Carraro L., Jourdan A. (2010), A radial scanning statistic for selecting space-filling designs in computer experiments, MODA-9 proceedings. D Agostino R.B., Stephens M.A. (1986), Goodness-of-fit techniques, CRC Press, New York. } \author{O. Roustant} \seealso{ \code{\link{unif.test.statistic}}, \code{\link{unif.test.quantile}}, \code{\link{rss2d}}} \keyword{design} \examples{ ## An orthogonal array in 3D data(OA131) ## centering the design points of this 7-levels design OA <- (OA131 + 0.5)/7 ## 2D projections onto coordinate axis pairs(OA, xlim=c(0,1), ylim=c(0,1)) ## Now let us look at the 3D properties with the 3D RSS (requires the rgl package) rss <- rss3d(OA, lower=c(0,0,0), upper=c(1,1,1)) ## The worst direction detected is nearly proportional to (2,-1,2) ## (type "?OA131" for explanations about this linear orthogonal array) print(rss$worst.dir) ## Now, scramble this design ## X <- (OA131 + matrix(runif(49*3, 49, 3)))/7 ## or load the design obtained this way data(OA131_scrambled) OA2 <- OA131_scrambled ## No feature is detected by the 2D RSS: rss <- rss2d(OA2, lower=c(0,0,0), upper=c(1,1,1)) ## 4 clusters are detected by the 3D RSS: rss <- rss3d(OA2, lower=c(0,0,0), upper=c(1,1,1)) ## Defect detection of 8D Sobol sequences ## All triplets of dimensions are tried to detect the worst defect ## (according to the specified goodness-of-fit statistic). ## requires randtoolbox library to generate the Sobol sequence \dontrun{ library(randtoolbox) d <- 8 n <- 10*d rss <- rss3d(design=sobol(n=n, dim=d), lower=rep(0,d), upper=rep(1,d))} } DiceDesign/man/scaleDesign.Rd0000644000176200001440000000303113770344364015543 0ustar liggesusers\name{scaleDesign} \alias{scaleDesign} \title{Scale a Design} \description{ This function scales the values of the design points to values comprised in [0,1]. The scaling can be made by the Rosenblatt transformation (uniformization by applying the empirical cumulative distribution function) or by translating the design from maximum and minimum values (given for each variable). } \usage{ scaleDesign(design, min=NULL, max=NULL, uniformize=FALSE) } \arguments{ \item{design}{a matrix (or a data.frame) corresponding to the design of experiments to scale} \item{min}{the vector of minimal bounds of each design variable. If not given, the minimal value of each variable is taken} \item{max}{the vector of maximal bounds of each design variable. If not given, the maximal value of each variable is taken} \item{uniformize}{boolean: TRUE to use the Rosenblatt transformation (the min and max vectors are useless in this case). If FALSE (default value), the translation from max and min values is applied} } \value{A list containing: \item{design}{the scaled design} \item{min}{the vector of minimal bounds that has been used} \item{max}{the vector of maximal bounds that has been used} \item{uniformize}{the value of this boolean argument} \item{InitialDesign}{the starting design} } \author{B. Iooss} \examples{ d <- 2 n <- 100 x <- matrix(rnorm(d*n), ncol=d) xscale1 <- scaleDesign(x, uniformize=FALSE) xscale2 <- scaleDesign(x, uniformize=TRUE) par(mfrow=c(1,2)) plot(xscale1$design) ; plot(xscale2$design) } DiceDesign/man/xDRDN.Rd0000644000176200001440000000264713770344364014255 0ustar liggesusers\name{xDRDN} \alias{xDRDN} \title{Extract a Design and Give it a Range and Dimnames} \description{ Extract a design contained in a list (i.e. with a \eqn{design} item), adjust the range, give it dimnames and finally round the values to a certain number of digits. Colnames will look like (\code{A,B,C}), (\code{X1,X2,X3}), (\code{X01,X02,X03}), (\code{X001,X002,X003}). } \usage{ xDRDN(obj, width = 1, letter = "X", dgts = NULL, range = NULL) } \arguments{ \item{obj }{ a list that contains a \code{design} item. Matrix or data.frame are also accepted } \item{width }{ the digit width in colnames (to write for instance X1, X01, X001). If 0, colnames are filled with capital and small letters (without letters \code{I} and \code{i}) up to 50 columns } \item{letter}{ the generic letter used in colnames } \item{dgts }{ the number of digits to which the design is rounded } \item{range }{ a vector \code{c(min, max)} to adjust the range of the design. The default \code{NULL} keeps the original range. Special ranges \code{c(0, 0)} and \code{c(1, 1)} are not accepted } } \value{ A rounded matrix or a data.frame with appropriate dimnames and an adjusted range. } \examples{ xDRDN(lhsDesign(5, 12)) xDRDN(lhsDesign(5, 12), width = 2, letter = "V", dgts = 2, range = c(-10, 10)) head(xDRDN(olhDesign(50, range = c(1,1)), width = 0, letter = "Z"), 3) head(xDRDN(olhDesign(51, range = c(1,1)), width = 0, letter = "Z"), 3) } DiceDesign/man/NOLHDRdesigns.Rd0000644000176200001440000000406514011265013015653 0ustar liggesusers\name{NOLHDRdesigns} \alias{NOLHDRdesigns} \docType{data} \title{List of De Rainville's Nearly Orthogonal Latin Hypercubes designs} \description{ A list of the NOLH designs for 8 to 29 input variables proposed by De Rainville in 2012. These designs are said to be an improvment of Cioppa's NOLH designs as they have the same structure but better dispersion measures like the discrepancy. This list combines the csv files published by De Rainville (see Source), centered and normalized to integer values. It is used internally by the function \code{\link{nolhdrDesign}} which provides various normalizations. } \usage{NOLHDRdesigns} \format{ A list of 22 matrices representing designs of experiments for 8 to 29 input variables: \describe{ \item{\code{nolhdr08 to nolhdr11: }}{8, 9, 10, 11 input variables, 33 experiments.} \item{\code{nolhdr12 to nolhdr16: }}{12, 13, 14, 15, 16 input variables, 65 experiments.} \item{\code{nolhdr17 to nolhdr22: }}{17, 18, 19, 20, 21, 22 input variables, 129 experiments.} \item{\code{nolhdr23 to nolhdr29: }}{23, 24, 25, 26, 27, 28, 29 input variables, 257 experiments.} } } \author{F.-M. De Rainville for the designs. P. Kiener for the R code.} \source{ Main website: \url{http://qrand.gel.ulaval.ca/} The python source code: \url{https://github.com/fmder/pynolh/} The python package: \url{https://pypi.org/project/pynolh/}. } \references{ De Rainville F.-M., Gagne C., Teytaud O., Laurendeau D. (2012). Evolutionary optimization of low-discrepancy sequences. ACM Transactions on Modeling and Computer Simulation (TOMACS), 22(2), 9. Cioppa T.M., Lucas T.W. (2007). Efficient nearly orthogonal and space-filling Latin hypercubes. Technometrics 49, 45-55. } \seealso{ The main function \code{\link{nolhdrDesign}}. Cioppa's NOLH design list: \code{\link{NOLHdesigns}}. } \examples{ ## data(NOLHDRdesigns) ## all matrices names(NOLHDRdesigns) lapply(NOLHDRdesigns, tail, 2) ## The first matrix/design NOLHDRdesigns[["nolhdr08"]] } \keyword{datasets} DiceDesign/man/discrepSA_LHS.Rd0000644000176200001440000000731014011022600015660 0ustar liggesusers\name{discrepSA_LHS} \alias{discrepSA_LHS} \title{Simulated annealing (SA) routine for Latin Hypercube Sample (LHS) optimization via L2-discrepancy criteria} \description{The objective is to produce low-discrepancy LHS. SA is an efficient algorithm to produce space-filling designs. It has been adapted here to main discrepancy criteria.} \usage{ discrepSA_LHS(design, T0=10, c=0.95, it=2000, criterion="C2", profile="GEOM", Imax=100) } \arguments{ \item{design}{a matrix (or a data.frame) corresponding to the design of experiments} \item{T0}{The initial temperature} \item{c}{A constant parameter regulating how the temperature goes down} \item{it}{The number of iterations} \item{criterion}{The criterion to be optimized. One can choose three different L2-discrepancies: the C2 (centered) discrepancy ("C2"), the L2-star discrepancy ("L2star") and the W2 (wrap-around) discrepancy ("W2")} \item{profile}{The temperature down-profile, purely geometric called "GEOM", geometrical according to the Morris algorithm called "GEOM_MORRIS" or purely linear called "LINEAR"} \item{Imax}{A parameter given only if you choose the Morris down-profile. It adjusts the number of iterations without improvement before a new elementary perturbation} } \details{This function implements a classical routine to produce optimized LHS. It is based on the work of Morris and Mitchell (1995). They have proposed a SA version for LHS optimization according to mindist criterion. Here, it has been adapted to some discrepancy criteria taking in account new ideas about the reevaluations of a discrepancy value after a LHS elementary perturbation (in order to avoid computing all terms in the discrepancy formulas).} \value{A list containing: \item{InitialDesign}{the starting design} \item{T0}{the initial temperature of the SA algorithm} \item{c}{the constant parameter regulating how the temperature goes down} \item{it}{the number of iterations} \item{criterion}{the criterion to be optimized} \item{profile}{the temperature down-profile} \item{Imax}{The parameter given in the Morris down-profile} \item{design}{the matrix of the final design (low-discrepancy LHS)} \item{critValues}{vector of criterion values along the iterations} \item{tempValues}{vector of temperature values along the iterations} \item{probaValues}{vector of acceptation probability values along the iterations} } \references{ Damblin G., Couplet M., and Iooss B. (2013). Numerical studies of space filling designs: optimization of Latin Hypercube Samples and subprojection properties, \emph{Journal of Simulation,} 7:276-289, 2013. M. Morris and J. Mitchell (1995) Exploratory designs for computationnal experiments. Journal of Statistical Planning and Inference, 43:381-402. R. Jin, W. Chen and A. Sudjianto (2005) An efficient algorithm for constructing optimal design of computer experiments. Journal of Statistical Planning and Inference, 134:268-287. } \author{G. Damblin & B. Iooss} \seealso{Latin Hypercube Sample(\code{\link{lhsDesign}}),discrepancy criteria(\code{\link{discrepancyCriteria}}), geometric criterion (\code{\link{mindist}}\code{\link{phiP}}), optimization (\code{\link{maximinSA_LHS}},\code{\link{maximinESE_LHS}} ,\code{\link{discrepESE_LHS}})} \examples{ dimension <- 2 n <- 10 X <- lhsDesign(n, dimension)$design ## Optimize the LHS with C2 criterion Xopt <- discrepSA_LHS(X, T0=10, c=0.99, it=2000, criterion="C2") plot(Xopt$design) plot(Xopt$critValues, type="l") ## Optimize the LHS with C2 criterion and GEOM_MORRIS profile \dontrun{ Xopt2 <- discrepSA_LHS(X, T0=10, c=0.99, it=1000, criterion="C2", profile="GEOM_MORRIS") plot(Xopt2$design) } } \keyword{design} DiceDesign/man/maximinSA_LHS.Rd0000644000176200001440000000713214011023302015673 0ustar liggesusers\name{maximinSA_LHS} \alias{maximinSA_LHS} \title{Simulated annealing (SA) routine for Latin Hypercube Sample (LHS) optimization via phiP criteria} \description{The objective is to produce maximin LHS. SA is an efficient algorithm to produce space-filling designs.} \usage{ maximinSA_LHS(design, T0=10, c=0.95, it=2000, p=50, profile="GEOM", Imax=100) } \arguments{ \item{design}{a matrix (or a data.frame) corresponding to the design of experiments} \item{T0}{The initial temperature of the SA algorithm} \item{c}{A constant parameter regulating how the temperature goes down} \item{it}{The number of iterations} \item{p}{power required in phiP criterion} \item{profile}{The temperature down-profile, purely geometric called "GEOM", geometrical according to the Morris algorithm called "GEOM_MORRIS" or purely linear called "LINEAR"} \item{Imax}{A parameter given only if you choose the Morris down-profile. It adjusts the number of iterations without improvement before a new elementary perturbation} } \details{This function implements a classical routine to produce optimized LHS. It is based on the work of Morris and Mitchell (1995). They have proposed a SA version for LHS optimization according to mindist criterion. Here, it has been adapted to the \code{phiP} criterion. It has been shown (Pronzato and Muller, 2012, Damblin et al., 2013) that optimizing phiP is more efficient to produce maximin designs than optimizing mindist. When \eqn{p} tends to infinity, optimizing a design with \code{phi_p} is equivalent to optimizing a design with \code{mindist}.} \value{A list containing: \item{InitialDesign}{the starting design} \item{T0}{the initial temperature of the SA algorithm} \item{c}{the constant parameter regulating how the temperature goes down} \item{it}{the number of iterations} \item{p}{power required in phiP criterion} \item{profile}{the temperature down-profile} \item{Imax}{The parameter given in the Morris down-profile} \item{design}{the matrix of the final design (maximin LHS)} \item{critValues}{vector of criterion values along the iterations} \item{tempValues}{vector of temperature values along the iterations} \item{probaValues}{vector of acceptation probability values along the iterations} } \references{ Damblin G., Couplet M., and Iooss B. (2013). Numerical studies of space filling designs: optimization of Latin Hypercube Samples and subprojection properties, \emph{Journal of Simulation,} 7:276-289, 2013. M. Morris and J. Mitchell (1995) Exploratory designs for computationnal experiments. Journal of Statistical Planning and Inference, 43:381-402. R. Jin, W. Chen and A. Sudjianto (2005) An efficient algorithm for constructing optimal design of computer experiments. Journal of Statistical Planning and Inference, 134:268-287. Pronzato, L. and Muller, W. (2012). Design of computer experiments: space filling and beyond, \emph{Statistics and Computing,} 22:681-701. } \author{G. Damblin & B. Iooss} \seealso{ Latin Hypercube Sample (\code{\link{lhsDesign}}), discrepancy criteria (\code{\link{discrepancyCriteria}}), geometric criterion (\code{\link{mindist}}, \code{\link{phiP}}), optimization (\code{\link{discrepSA_LHS}}, \code{\link{maximinESE_LHS}}, \code{\link{discrepESE_LHS}}) } \examples{ dimension <- 2 n <- 10 X <- lhsDesign(n ,dimension)$design Xopt <- maximinSA_LHS(X, T0=10, c=0.99, it=2000) plot(Xopt$design) plot(Xopt$critValues, type="l") plot(Xopt$tempValues, type="l") \dontrun{ Xopt <- maximinSA_LHS(X, T0=10, c=0.99, it=1000, profile="GEOM_MORRIS") } } \keyword{design} DiceDesign/man/unif.test.statistic.Rd0000644000176200001440000000167713770344364017265 0ustar liggesusers\name{unif.test.statistic} \alias{unif.test.statistic} \title{Statistic of some uniformity tests} \description{Computes the statistic of a uniformity test (see available tests below).} \usage{ unif.test.statistic(x, type, transform=NULL) } \arguments{ \item{x}{a vector containing the sample values.} \item{type}{a character indicating which test is used. The choices are the following: "greenwood", "qm" (for Quesenberry-Miller), "ks" (Kolmogorov-Smirnov), "cvm" (Cramer-Von Mises) and "V" (D+ + D- from Kolmogorov-Smirnov).} \item{transform}{ an optional character indicating what type of transformation should be applied before testing uniformity. Default is NULL.} } \value{A real number equal to the statistic of the specified test.} \references{ D Agostino R.B., Stephens M.A. (1986), Goodness-of-fit techniques, CRC Press, New York. } \author{O. Roustant} \seealso{\code{\link{unif.test.quantile}}, \code{\link{rss2d}}} \keyword{design} DiceDesign/man/nolhdrDesign.Rd0000644000176200001440000000306013770344364015744 0ustar liggesusers\name{nolhdrDesign} \alias{nolhdrDesign} \title{De Rainville's Nearly Orthogonal Latin Hypercube Designs} \description{ This function generates a NOLH design of dimension 2 to 29 and normalizes it to the selected range. From 2 to 7 input variables, the design is extracted from Cioppa's \code{\link{NOLHdesigns}} list and from 8 to 29 input variables it is extracted from De Rainville's \code{\link{NOLHDRdesigns}} list. } \usage{ nolhdrDesign(dimension, range = c(0, 1)) } \arguments{ \item{dimension }{ number of input variables } \item{range }{ the scale (min and max) of the inputs. Range (0, 0) and (1, 1) are special cases and call integer ranges \eqn{(-m, m)} and \eqn{(0, 2m)}. See the examples} } \value{ A list with components: \item{n }{the number of lines/experiments} \item{dimension }{the number of columns/input variables} \item{design }{the design of experiments} } \author{T.M. Cioppa and F.-M. De Rainville for the designs. P. Kiener for the R code.} \seealso{ De Rainville's list \code{\link{NOLHDRdesigns}}. Other NOLH or OLH designs: \code{\link{nolhDesign}}, \code{\link{olhDesign}}. } \examples{ ## Classical normalizations nolhdrDesign(8, range = c(1, 1)) nolhdrDesign(8, range = c(0, 1)) nolhdrDesign(8, range = c(0, 0)) nolhdrDesign(8, range = c(-1, 1)) ## Change the dimnames, adjust to range (-10, 10) and round to 2 digits xDRDN(nolhdrDesign(8), letter = "T", dgts = 2, range = c(-10, 10)) ## A list of designs lapply(5:9, function(n) nolhdrDesign(n, range = c(-1, 1))$design) } \keyword{design} DiceDesign/man/mstCriteria.Rd0000644000176200001440000000434314011023302015566 0ustar liggesusers\name{mstCriteria} \alias{mstCriteria} \title{Deriving the MST criteria} \description{Compute both the mean and the standard deviation of the Minimal Spanning Tree (MST)} \usage{mstCriteria(design, plot2d="FALSE")} \arguments{ \item{design}{a matrix (or a data.frame) corresponding to the design of experiments.} \item{plot2d}{an argument for visualizing the mst of a 2d design} } \details{In our context, a MST is a tree whose the sum of the lengthes of the edges is minimal. Even if unicity does not hold, the overall length is stable. The mean and the standard deviation of the lengthes of the edges are usually derived to analyze the geometric profile of the design. A large mean and a small standard deviation characterize a so-called quasi-periodic design.} \value{A list containing two components: \item{tree}{a list containing the MST: each component of it contains a vector with all vertices which are connected with the experiment corresponding to the number of the components} \item{stats}{vector with both the mean and the standard deviation values of the lengthes of the edges} } \references{ Damblin G., Couplet M., and Iooss B. (2013). Numerical studies of space filling designs: optimization of Latin hypercube samples and subprojection properties, \emph{Journal of Simulation,} 7:276-289, 2013. Dussert, C., Rasigni, G., Rasigni, M., and Palmari, J. (1986). Minimal spanning tree: A new approach for studying order and disorder. \emph{Physical Review B}, 34(5):3528-3531. Franco J. (2008). Planification d'experiences numerique en phase exploratoire pour la simulation des phenomenes complexes, \emph{PhD thesis, Ecole Nationale Superieure des Mines de Saint Etienne}. Franco, J., Vasseur, O., Corre, B., and Sergent, M. (2009). Minimum spanning tree: A new approach to assess the quality of the design of computer experiments. \emph{Chemometrics and Intelligent Laboratory Systems}, 97:164-169. Prim, R.C. (1957). Shortest connection networks and some generalizations, \emph{in Bell System Technical Journal 36:1389-1401}. } \author{G. Damblin & B. Iooss} \examples{ dimension <- 2 n <- 40 X <- matrix(runif(n*dimension), n, dimension) mstCriteria(X, plot2d=TRUE) } \keyword{design} DiceDesign/man/unif.test.quantile.Rd0000644000176200001440000000267413770344364017076 0ustar liggesusers\name{unif.test.quantile} \alias{unif.test.quantile} \title{Quantile of some uniformity tests} \description{Computes the quantile of a uniformity test at a given significance level (see available tests and levels below).} \usage{ unif.test.quantile(type, n, alpha) } \arguments{ \item{type}{a character indicating which test is used. The choices are the following: "greenwood", "qm" (for Quesenberry-Miller), "ks" (Kolmogorov-Smirnov), "cvm" (Cramer-Von Mises) and "V" (D+ + D- from Kolmogorov-Smirnov).} \item{n}{an integer equal to the sample size.} \item{alpha}{a real number equal to significance level. At present stage, only four values are available: 0.1, 0.05, 0.025 and 0.01.} } \value{A real number equal to the quantile of the specified test at significance level \code{alpha} for \code{n} observations.} \references{ D Agostino R.B., Stephens M.A. (1986), Goodness-of-fit techniques, CRC Press, New York. } \details{ Modified statistics are used. For \code{alpha = 0.05}, the quantile is (see D Agostino and Stephens, 1986, section 4.4.): \code{1.358/(sqrt(n) + 0.12 + 0.11/sqrt(n))} for Kolmogorov-Smirnov and \code{0.461/(1+1/n) + 0.4/n - 0.6/n^2} for Cramer-von Mises. When the design size is \code{< 20}, the corrected value seems to be a good approximation, but the non asymptotical value should be preferred. } \author{O. Roustant} \seealso{\code{\link{unif.test.statistic}}, \code{\link{rss2d}}, \code{\link{rss3d}}} \keyword{design} DiceDesign/man/OA131_scrambled.Rd0000644000176200001440000000151314011023163016041 0ustar liggesusers\name{OA131_scrambled} \alias{OA131_scrambled} \docType{data} \title{ A scrambled 3D orthogonal array of strength 2} \description{ This design is obtained by adding a uniform noise to each coordinate of the orthogonal array OA131. } \usage{data(OA131_scrambled)} \format{ A data frame with 49 observations on the following 3 variables. \describe{ \item{\code{x1}}{first coordinate} \item{\code{x2}}{second coordinate} \item{\code{x3}}{third coordinate} } } \source{ Roustant O., Franco J., Carraro L., Jourdan A. (2010), A radial scanning statistic for selecting space-filling designs in computer experiments, MODA-9 proceedings. } \examples{ data(OA131) data(OA131_scrambled) pairs(OA131, xlim=c(0,1), ylim=c(0,1)) pairs(OA131_scrambled, xlim=c(0,1), ylim=c(0,1)) } \keyword{datasets} DiceDesign/man/nolhDesign.Rd0000644000176200001440000000257113770344364015424 0ustar liggesusers\name{nolhDesign} \alias{nolhDesign} \title{Cioppa's Nearly Orthogonal Latin Hypercube Designs} \description{ This function generates a NOLH design of dimension 2 to 29 and normalizes it to the selected range. The design is extracted from Cioppa's \code{\link{NOLHdesigns}} list. } \usage{ nolhDesign(dimension, range = c(0, 1)) } \arguments{ \item{dimension }{ number of input variables } \item{range }{ the scale (min and max) of the inputs. Range (0, 0) and (1, 1) are special cases and call integer ranges \eqn{(-m, m)} and \eqn{(0, 2m)}. See the examples} } \value{ A list with components: \item{n }{the number of lines/experiments} \item{dimension }{the number of columns/input variables} \item{design }{the design of experiments} } \author{T.M. Cioppa for the designs. P. Kiener for the R code.} \seealso{ Cioppa's list \code{\link{NOLHdesigns}}. Other NOLH and OLH designs: \code{\link{nolhdrDesign}}, \code{\link{olhDesign}}. } \examples{ ## Classical normalizations nolhDesign(8, range = c(1, 1)) nolhDesign(8, range = c(0, 0)) nolhDesign(8, range = c(0, 1)) nolhDesign(8, range = c(-1, 1)) ## Change the dimnames, adjust to range (-10, 10) and round to 2 digits xDRDN(nolhDesign(8), letter = "T", dgts = 2, range = c(-10, 10)) ## A list of designs lapply(5:9, function(n) nolhDesign(n, range = c(-1, 1))$design) } \keyword{design} DiceDesign/man/unscaleDesign.Rd0000644000176200001440000000340713770344364016115 0ustar liggesusers\name{unscaleDesign} \alias{unscaleDesign} \title{Unscale a Design} \description{ This function unscales the values of a scaled design (values in [0,1]). The unscaling can be made by the inverse Rosenblatt transformation (by applying the empirical quantile function given by another design) or by translating the design from maximum and minimum values (given for each variable). } \usage{ unscaleDesign(design, min=NULL, max=NULL, uniformize=FALSE, InitialDesign=NULL) } \arguments{ \item{design}{a matrix (or a data.frame) corresponding to the design of experiments to unscale} \item{min}{the vector of minimal bounds of each design variable} \item{max}{the vector of maximal bounds of each design variable} \item{uniformize}{boolean: TRUE to use the inverse Rosenblatt transformation (the min and max vectors are useless in this case). If FALSE (default value), the translation from max and min values is applied} \item{InitialDesign}{If the inverse Rosenblatt transformation is applied (uniformize = TRUE): a matrix (or a data.frame) corresponding to the design which gives the empirical quantiles} } \value{A list containing: \item{design}{the unscaled design} \item{min}{the vector of minimal bounds that has been used} \item{max}{the vector of maximal bounds that has been used} \item{uniformize}{the value of this boolean argument} } \author{B. Iooss} \examples{ d <- 2 n <- 100 x <- matrix(rnorm(d*n), ncol=d) xscale <- scaleDesign(x, uniformize=TRUE) xunscale1 <- unscaleDesign(xscale$design, uniformize=TRUE, InitialDesign=x) xunscale2 <- unscaleDesign(xscale$design, min=c(min(x[,1]), min(x[,2])), max = c(max(x[,1]), max(x[,2]))) par(mfrow=c(2,2)) plot(x) ; plot(xscale$design) plot(xunscale1$design) ; plot(xunscale2$design) } DiceDesign/man/NOLHdesigns.Rd0000644000176200001440000000405014011265013015417 0ustar liggesusers\name{NOLHdesigns} \alias{NOLHdesigns} \docType{data} \title{List of Cioppa's Nearly Orthogonal Latin Hypercubes designs} \description{ A list of the NOLH designs for 2 to 29 input variables proposed by Cioppa in 2007. These designs combine a latin structure, orthogonality between the main terms and the interactions (+ squares) and reduced correlations between the interactions (+ squares). This list combines the Excel spreadsheets published by Sanchez (see Source). It is used internally by the function \code{\link{nolhDesign}} which provides various normalizations. } \usage{NOLHdesigns} \format{ A list of 5 matrices representing designs of experiments for 8 to 29 input variables: \describe{ \item{\code{nolh2_7: }}{2 to 7 input variables, 17 experiments.} \item{\code{nolh8_11: }}{8 to 11 input variables, 33 experiments.} \item{\code{nolh12_16: }}{12 to 16 input variables, 65 experiments.} \item{\code{nolh17_22: }}{17 to 22 input variables, 129 experiments.} \item{\code{nolh23_29: }}{23 to 29 input variables, 257 experiments.} } } \author{T.M. Cioppa for the designs. P. Kiener for the R code.} \source{ Sanchez, S. M. (2011). NOLHdesigns in Excel file. Available online at \url{https://nps.edu/web/seed/software-downloads/} } \references{ Cioppa T.M., Lucas T.W. (2007). Efficient nearly orthogonal and space-filling Latin hypercubes. Technometrics 49, 45-55. Kleijnen, J.P.C., Sanchez S.M., T.W. Lucas and Cioppa T. M.. A user's guide to the brave new world of designing simulation experiments. INFORMS Journal on Computing 17(3): 263-289. Ye, K. Q. (1998). Orthogonal Latin hypercubes and their application in computer experiments. J. Amer. Statist. Asso. 93, 1430- 1439. } \seealso{ The main function \code{\link{nolhDesign}}. De Rainville's NOLH design list: \code{\link{NOLHDRdesigns}}. } \examples{ ## data(NOLHdesigns) ## all matrices names(NOLHdesigns) lapply(NOLHDRdesigns, tail, 2) ## The first matrix/design NOLHdesigns[["nolh2_7"]] } \keyword{datasets} DiceDesign/man/OA131.Rd0000644000176200001440000000271114011023163014026 0ustar liggesusers\name{OA131} \alias{OA131} \docType{data} \title{ A 3D orthogonal array of strength 2} \description{ A 3-dimensional linear orthogonal array (OA) of strength 2 with 49 points. The design points are equally spaced into 2 dimensional coordinate planes. However by construction, such OAs satisfy a linear relation, here: \code{x1 + 3*x2 + x3 = 0 (mod 7)}. As a consequence, the design points are contained in parallel planes orthogonal to (1,3,1). Actually, they are also contained in parallel planes orthogonal to other directions, as (2,-1,2) or (3,2,3), since the congruence relation leads to \code{2*x1 - x2 + 2*x3 = 0 (mod 7)} or \code{3*x1 + 2*x2 + 3*x3 = 0 (mod 7)}. For instance, they are contained in 4 parallel planes orthogonal to (2,-1,2). } \usage{data(OA131)} \format{ A data frame with 49 observations on the following 3 variables. \describe{ \item{\code{x1}}{first coordinate} \item{\code{x2}}{second coordinate} \item{\code{x3}}{third coordinate} } } \source{ Roustant O., Franco J., Carraro L., Jourdan A. (2010), A radial scanning statistic for selecting space-filling designs in computer experiments, MODA-9 proceedings. } \examples{ data(OA131) # centering and reducing to [0,1]^3 OA <- (OA131 + 0.5)/7 pairs(OA, xlim=c(0,1), ylim=c(0,1)) \dontrun{ library(lattice) cloud(x3~x1+x2, data=OA, xlim=c(0,1), ylim=c(0,1), zlim=c(0,1), screen = list(z = 50, x = -70, y = 0))} } \keyword{datasets} DiceDesign/man/coverage.Rd0000644000176200001440000000310314011520266015077 0ustar liggesusers\name{coverage} \alias{coverage} \title{Coverage} \description{Compute the coverage measure} \usage{coverage(design)} \arguments{ \item{design}{a matrix (or a data.frame) representing the design of experiments representing the design of experiments in the unit cube [0,1]\eqn{^d}. If this last condition is not fulfilled, a transformation into [0,1]\eqn{^{d}} is applied before the computation of the criteria.} } \details{The coverage criterion is defined by \deqn{coverage=\frac{1}{\bar{\gamma}} \left[ \frac{1}{n} \sum_{i=1}^{n} \left( \gamma_{i} - \bar{\gamma} \right)^2 \right]^{1/2}}{coverage) =1/gMean *[ 1/n * [( g_1 - gMean )^2 + ... + (g_n - gMean)^2] ]^(1/2)} where \eqn{\gamma_{i}}{g_i} is the minimal distance between the point \eqn{x_{i}}{x_i} and the other points of the \code{design} and \eqn{\bar{\gamma}}{gMean} is the mean of the \eqn{\gamma_{i}}{g_i}. Note that for a regular mesh, \code{cov}=0. Then, a small value of \code{cov} means that the design is close to a regular grid.} \value{A real number equal to the value of the coverage criterion for the \code{design}.} \references{Gunzburer M., Burkdart J. (2004) \emph{Uniformity measures for point samples in hypercubes}, \url{https://people.sc.fsu.edu/~jburkardt/}.} \author{J. Franco} \seealso{other distance criteria like \code{\link{meshRatio}}, \code{\link{phiP}} and \code{\link{mindist}}. discrepancy measures provided by \code{\link{discrepancyCriteria}}.} \examples{ dimension <- 2 n <- 40 X <- matrix(runif(n*dimension), n, dimension) coverage(X) } \keyword{design} DiceDesign/man/discrepancyCriteria.Rd0000644000176200001440000000645714011022476017312 0ustar liggesusers\name{discrepancyCriteria} \alias{discrepancyCriteria} \title{Discrepancy measure} \description{Compute discrepancy criteria. } \usage{discrepancyCriteria(design,type='all')} \arguments{ \item{design}{a matrix (or a data.frame) corresponding to the design of experiments. The discrepancy criteria are computed for a design in the unit cube [0,1]\eqn{^d}. If this condition is not satisfied the design is automatically rescaled.} \item{type}{type of discrepancies (single value or vector) to be computed: \tabular{ll}{ \code{'all'} \tab all type of discrepancies (default) \cr \code{'C2'} \tab centered L2-discrepancy \cr \code{'L2'} \tab L2-discrepancy \cr \code{'L2star'} \tab L2star-discrepancy \cr \code{'M2'} \tab modified L2-discrepancy \cr \code{'S2'} \tab symmetric L2-discrepancy \cr \code{'W2'} \tab wrap-around L2-discrepancy \cr \code{'Mix2'} \tab mixture L2-discrepancy \cr } } } \details{The discrepancy measures how far a given distribution of points deviates from a perfectly uniform one. Different L2 discrepancies are available in DiceDesign. For example, if we denote by \eqn{Vol(J)} the volume of a subset \eqn{J} of \eqn{[0; 1]^d} and \eqn{A(X; J)} the number of points of \eqn{X} falling in \eqn{J}, the \eqn{L2} discrepancy is: \deqn{D_{L2} (X) = \left[ \int_{[0,1]^{2d}}{} \left( \frac{A(X,J_{a,b})}{n} - Vol (J_{a,b}) \right)^{2} da db \right]^{1/2}}{DL2 (X)^2 = \int_{[0,1]^d} [(A(X,J_{a,b})/n - Vol(J_{a,b})]^2 da db} where \eqn{a = (a_{1}; ... ; a_{d})'}{a = (a1; ... ; ad)'}, \eqn{b = (b_{1};...; b_{d})'}{b = (b1;...; bd)'} and \eqn{J_{a,b} = [a_{1}; b_{1}) \times ... \times [a_{d};b_{d})}{J_{a,b} = [a1; b1) X ... X [ad;bd)}. The other L2-discrepancies are defined according to the same principle with different form from the subset \eqn{J}. Among all the possibilities, discrepancyCriteria implements only the L2 discrepancies because it can be expressed analytically even for high dimension. Centered L2-discrepancy is computed using the analytical expression done by Hickernell (1998). The user will refer to Pleming and Manteufel (2005) to have more details about the wrap around discrepancy. } \value{A list containing the L2-discrepancies of the \code{design}.} \references{ Fang K.T, Li R. and Sudjianto A. (2006) Design and Modeling for Computer Experiments, \emph{Chapman & Hall}. Fang K-T., Liu M-Q., Qin H. and Zhou Y-D. (2018) Theory and application of uniform experimental designs. \emph{Springer}. Franco J. (2008) Planification d'experiences numerique en phase exploratoire pour la simulation des phenomenes complexes, \emph{PhD thesis, Ecole Nationale Superieure des Mines de Saint Etienne}. Hickernell F.J. (1998) A generalized discrepancy and quadrature error bound. \emph{Mathematics of Computation}, \bold{67}, 299-322. Pleming J.B. and Manteufel R.D. (2005) \emph{Replicated Latin Hypercube Sampling}, 46th Structures, Structural Dynamics & Materials Conference, 16-21 April 2005, Austin (Texas) -- AIAA 2005-1819. } \author{J. Franco, D. Dupuy & B. Iooss} \seealso{distance criteria (\code{\link{coverage}}, \code{\link{meshRatio}}, \code{\link{mindist}} and \code{\link{phiP}})} \examples{ dimension <- 2 n <- 40 X <- matrix(runif(n*dimension), n, dimension) discrepancyCriteria(X) } \keyword{design} DiceDesign/man/straussDesign.Rd0000644000176200001440000001224614532322253016156 0ustar liggesusers\name{straussDesign} \alias{straussDesign} \title{ Designs based on Strauss process} \description{Space-Filling Designs based on Strauss process} \usage{ straussDesign(n,dimension, RND, alpha=0.5, repulsion=0.001, NMC=1000, constraints1D=0, repulsion1D=0.0001, seed=NULL) } \arguments{ \item{n }{the number of experiments} \item{dimension}{the number of input variables} \item{RND }{a real number which represents the radius of interaction} \item{alpha }{the potential power (default, fixed at 0.5)} \item{repulsion}{the repulsion parameter in the unit cube (gamma)} \item{NMC }{the number of McMC iterations (this number must be large to converge)} \item{constraints1D }{1 to impose 1D projection constraints, 0 otherwise} \item{repulsion1D }{the repulsion parameter in 1D} \item{seed }{ seed for the uniform generation of number}} \details{Strauss designs are Space-Filling designs initially defined from Strauss process: \deqn{\pi (X) = k \gamma^{s(X)}}{\pi (X) = k gamma^s(X)} where \eqn{s(X)} is is the number of pairs of points \eqn{(x^{i}, x^{j})}{(xi,xj)} of the design \eqn{X = \left( x^{1}, \ldots, x^{n} \right)}{X = ( x1, ..., xn \right)} that are separated by a distance no greater than the radius of interaction \code{RND}, \eqn{k} is the normalizing constant and \eqn{\gamma}{gamma} is the repulsion parameter. This distribution corresponds to the particular case \code{alpha}=0. For the general case, a stochastic simulation is used to construct a Markov chain which converges to a spatial density of points \eqn{\pi(X)}{\pi(X)} described by the Strauss-Gibbs potential. In practice, the Metropolis-Hastings algorithm is implemented to simulate a distribution of points which converges to the stationary law: \deqn{\pi (X) \propto exp(-U(X))}{\pi(X) = k exp(-U(X))} with a potentiel \eqn{U} defined by: \deqn{U(X) = \beta \sum_{1 \leq i < j \leq n} \varphi \left( \| x^{i}-x^{j} \| \right)}{beta Sum_{ia}{if h_{ij}>a},} where \eqn{h_{ij}}{h[i,j]} is the distance between \eqn{x_{i}}{xi} and \eqn{x_{j}}{xj}, \eqn{a}{a} denotes the range of the variogram and \eqn{\gamma}{gamma} is a spherical variogram: \deqn{\gamma(h) = 1.5 \frac{h}{a}- 0.5\left(\frac{h}{a}\right)^3 \textnormal{ for } h \leq a}{gamma(h)= 1.5*(h/a)- 0.5*(h/a)^3 for h>=a.} } \value{A list with components: \item{n }{the number of points} \item{design }{the design of experiments} \item{dimension }{the number of variables} \item{range }{the range of the variogram} \item{niter_mx }{the number of iterations} \item{design_init }{the initial distribution} \item{det_init }{the value of the determinant for the initial distribution} \item{det_end }{the value of the determinant at the end of the procedure} \item{seed }{the value of the seed} } \references{Currin C., Mitchell T., Morris M. and Ylvisaker D. (1991) \emph{Bayesian Prediction of Deterministic Functions With Applications to the Design and Analysis of Computer Experiments}, American Statistical Association, \bold{86}, 416, 953-963. Shewry, M. C. and Wynn and H. P. (1987) \emph{Maximum entropy sampling}, Journal of Applied Statistics 14, 165-170.} \author{J. Franco} \examples{ n <- 20 dimension <- 2 range <-0.9 niter_max <- 200 out <- dmaxDesign(n, dimension, range, niter_max) ## Change the dimnames, adjust to range (-10, 10) and round to 2 digits xDRDN(out, letter = "T", dgts = 2, range = c(-10, 10)) } \keyword{design} DiceDesign/man/lhsDesign.Rd0000644000176200001440000000427513770344364015255 0ustar liggesusers\name{lhsDesign} \alias{lhsDesign} \title{Latin Hypercube Designs} \description{ Simple (random) Latin Hypercube Design (randomized or centered) with \eqn{n}{n} experiments in [0,1]\eqn{^d}{^d}. } \usage{ lhsDesign(n, dimension, randomized=TRUE, seed=NULL) } \arguments{ \item{n }{ number of experiments } \item{dimension }{ number of variables } \item{randomized}{ TRUE for randomized LHS; FALSE for centered LHS} \item{seed }{ seed used to generate the random permutations and perturbations} } \details{This program builds a Latin Hypercube Design (LHD), also called a Latin Hypercube Sample (LHS), on the space [0,1]\eqn{^d}{^d} (with uniform probability measures). LHD aims at ensuring that each variable has its whole range well scanned: the range of each variable is divided into \eqn{n}{n} equally probable stratas. Each stratum of each variable contains only one point of the LHD. Centered LHD is obtained by choosing for each point the center of the corresponding case, while randomized LHD is obtained by adding random perturbations inside each point case. Once the sample is generated, the uniform sample from a column can be transformed to any distribution by using the quantile functions. } \value{A list with components: \item{n }{the number of points} \item{dimension }{the number of variables} \item{design }{the design of experiments} \item{randomized }{the type of LHD} \item{seed }{the value of the seed} } \references{McKay M., Conover W. and Beckman R. (1979) \emph{A comparison of three methods for selecting values of input variables in the analysis of output from a computer code}, Technometrics, \bold{21}, 2, 239-245. Stein M. (1987) \emph{Large sample properties of simulations using Latin hypercube sampling}, Technometrics, \bold{29}, 143-151. } \author{B. Iooss} \seealso{LHD optimization (\code{\link{maximinSA_LHS}},\code{\link{discrepSA_LHS}},\code{\link{maximinESE_LHS}} ,\code{\link{discrepESE_LHS}})} \examples{ n <- 20 dimension <- 2 out <- lhsDesign(n, dimension) out$design ## Change the dimnames, adjust to range (-10, 10) and round to 2 digits xDRDN(out, letter = "T", dgts = 2, range = c(-10, 10)) } \keyword{design} DiceDesign/man/rss2d.Rd0000644000176200001440000001175014011023500014335 0ustar liggesusers\name{rss2d} \alias{rss2d} \title{2D graphical tool for defect detection of Space-Filling Designs.} \description{ For a 2-dimensional design, the 2D radial scanning statistic (RSS) scans angularly the domain. In each direction, it compares the distribution of projected points to their theoretical distribution under the assumption that all design points are drawn from uniform distribution. For a d-dimensional design, all pairs of dimensions are scanned.The RSS detects the defects of low discrepancy sequences or orthogonal arrays, and can be used for selecting space-filling designs.} \usage{ rss2d(design, lower, upper, gof.test.type="greenwood", gof.test.stat=NULL, transform=NULL, n.angle=360, graphics=1, trace=TRUE, lines.lwd = 1, lines.lty = "dotted", ...) } \arguments{ \item{design}{a matrix or data.frame containing the d-dimensional design of experiments. The row no. i contains the values of the d input variables corresponding to simulation no. i} \item{lower}{the domain lower boundaries.} \item{upper}{the domain upper boundaries.} \item{gof.test.type}{ an optional character indicating the kind of statistical test to be used to test the goodness-of-fit of the design projections to their theoretical distribution. Several tests are available, see \code{\link{unif.test.statistic}}. Default is "greenwood".} \item{gof.test.stat}{ an optional number equal to the goodness-of-fit statistic at level \code{5\%}. Default is the modified test statistic for fully specified distribution (see details below).} \item{transform}{ an optional character indicating what type of transformation should be applied before testing uniformity. Only one choice available "spacings", that lead to over-detection. Default - and recommended - is \code{NULL}.} \item{n.angle}{ an optional number indicating the number of angles used. Default is \code{360} corresponding to a 0.5-degree discretization step. Note that the RSS curve is continuous.} \item{graphics}{ an optional integer indicating whether a graph should be produced. If negative, no graph is produced. If superior to 2, the RSS curve only is plotted in the worst 2D coordinate subspace (corr. to the worst value of statistic). If 1 (default), the design is also added, with its projections onto the worst (oblique) axis.} \item{trace}{ an optional boolean. Turn it to \code{FALSE} if you want no verbosity.} \item{lines.lwd}{optional number specifying the width of the straight lines involved in the graphical outputs (axis and projections)} \item{lines.lty}{optional character string specifying the type of the straight lines involved in the graphical outputs (axis and projections)} \item{...}{ optional graphical parameters of plot function, to draw the RSS curve.} } \value{a list with components: \item{global.stat}{a matrix containing the values of the global statistic (equal to the maximum of statistic values over the RSS curve) for all pairs of dimensions.} \item{worst.case}{the worst pair of dimensions, that is the one that gives the worst value of \code{global.stat}.} \item{worst.dir}{the worst direction, that is the one that gives the worst value of the global statistic in the coordinate plane defined by \code{worst.case}.} \item{stat}{a vector of length \code{n.angle} containing the statitic values for each angle, in the coordinate plane defined by \code{worst.case}.} \item{angle}{a vector of length \code{n.angle} containing the corresponding angles used.} \item{curve}{a \code{(2*n.angle)x2} matrix containing the discretized RSS curve.} \item{gof.test.stat}{the threshold at significance level 0.05 for the specified goodness-of-fit statistic. It is equal to the radius of the circle superimposed on the RSS figure.} } \references{ Roustant O., Franco J., Carraro L., Jourdan A. (2010), A radial scanning statistic for selecting space-filling designs in computer experiments, MODA-9 proceedings. D Agostino R.B., Stephens M.A. (1986), Goodness-of-fit techniques, CRC Press, New York. } \author{O. Roustant} \seealso{ \code{\link{unif.test.statistic}}, \code{\link{unif.test.quantile}}, \code{\link{rss3d}} } \keyword{design} \examples{ ## Detection of defects of Sobol designs ## requires randtoolbox package library(randtoolbox) ## In 2D rss <- rss2d(design=sobol(n=20, dim=2), lower=c(0,0), upper=c(1,1), type="l", col="red") ## In 8D ## All pairs of dimensions are tried to detect the worst defect ## (according to the specified goodness-of-fit statistic). d <- 8 n <- 10*d rss <- rss2d(design=sobol(n=n, dim=d), lower=rep(0,d), upper=rep(1,d), type="l", col="red") ## Avoid this defect with scrambling? ## 1. Faure-Tezuka scrambling (type "?sobol" for more details and options) rss <- rss2d(design=sobol(n=n, dim=d, scrambling=2), lower=rep(0,d), upper=rep(1,d), type="l", col="red") ## 2. Owen scrambling rss <- rss2d(design=sobol(n=n, dim=d, scrambling=1), lower=rep(0,d), upper=rep(1,d), type="l", col="red") } DiceDesign/man/factDesign.Rd0000644000176200001440000000217113770344364015375 0ustar liggesusers\name{factDesign} \alias{factDesign} \title{Full Factorial Designs} \description{ Create a factorial design with \eqn{n}{n} = pow(levels,dimension) experiments in [0,1]\eqn{^d}{^d}. } \usage{ factDesign(dimension, levels) } \arguments{ \item{dimension}{an integer given the number of input variables } \item{levels }{an integer given the number of levels} } \details{It is possible to take a different number of levels for any factor. In this case, the argument \code{levels} should be a vector. } \value{\code{factDesign} returns a list containing all the input arguments detailed before, plus the following components: \item{n }{the number of experiments} \item{design }{the design of experiments} } \author{G. Pujol and J. Franco} \examples{ ## First example g1 <- factDesign(2, 7) plot(g1$design, xlim=c(0,1), ylim=c(0,1)) ## Second example g2 <- factDesign(2, c(2,7)) plot(g2$design, xlim=c(0,1), ylim=c(0,1)) ## Change the dimnames, adjust to range (-10, 10) and round to 2 digits xDRDN(g1, letter = "T", dgts = 2, range = c(-10, 10)) xDRDN(g2, letter = "T", dgts = 2, range = c(-10, 10)) } \keyword{design} DiceDesign/man/meshRatio.Rd0000644000176200001440000000266313770344364015267 0ustar liggesusers\name{meshRatio} \alias{meshRatio} \title{MeshRatio measure} \description{ The \code{meshRatio} criterion is the ratio between the maximimum and the minimum distance between two points of the experimental design. } \usage{meshRatio(design)} \arguments{ \item{design}{a matrix (or a data.frame) representing the design of experiments in the unit cube [0,1]\eqn{^d}. If this last condition is not fulfilled, a transformation into [0,1]\eqn{^{d}} is applied before the computation of the criteria.} } \details{The \code{meshRatio} criterion is defined by \deqn{meshRatio=\frac{\max_{1\leq i \leq n} \gamma_{i}}{\min_{1\leq i \leq n} \gamma_{i}}}{meshRatio(\code{design})=max(g_1, ..., g_n)/min(g_1, ..., g_n)} where \eqn{\gamma_{i}}{g_i} denotes the minimal distance between the point \eqn{x_{i}}{x_i} and the other points of the \code{design}. Note that for a regular mesh, \code{meshRatio}=1. } \value{ A real number equal to the value of the meshRatio criterion for the \code{design}. } \references{ Gunzburer M. and Burkdart J. (2004), Uniformity measures for point samples in hypercubes, \url{https://people.sc.fsu.edu/~jburkardt/}. } \author{J. Franco} \seealso{Other distance criteria like \code{\link{meshRatio}}, \code{\link{phiP}} and \code{\link{mindist}}. Discrepancy measures provided by \code{\link{discrepancyCriteria}}.} \examples{ dimension <- 2 n <- 40 X <- matrix(runif(n*dimension), n, dimension) meshRatio(X) } \keyword{design} DiceDesign/man/DiceDesign-package.Rd0000644000176200001440000001154414011520053016675 0ustar liggesusers\name{DiceDesign-package} \alias{DiceDesign-package} \alias{DiceDesign} \docType{package} \title{Designs of Computer Experiments} \description{Space-Filling Designs (SFD) and space-filling criteria (distance-based and uniformity-based).} \details{ %\tabular{ll}{ % Package: \tab DiceDesign\cr % Type: \tab Package\cr % Version: \tab 1.7\cr % Date: \tab 2015-06-15\cr % License: \tab GPL-3\cr %} This package provides tools to create some specific Space-Filling Design (SFD) and to test their quality: \itemize{ \item Latin Hypercube designs (randomized or centered) \item Strauss SFD and Maximum entropy SFD, WSP designs \item Optimal (low-discrepancy and maximin) Latin Hypercube desigsn by simulated annealing and genetic algorithms, \item Orthogonal and Nearly Orthogonal Latin Hypercube designs, \item Discrepancies criteria, distance measures, \item Minimal spanning tree criteria, \item Radial scanning statistic } } \author{ J. Franco, D. Dupuy, O. Roustant, P. Kiener, G. Damblin and B. Iooss. Thanks to A. Jourdan for discussions about OA131. Maintainer: Celine Helbert \email{Celine.Helbert@ec-lyon.fr} } \note{ Part of this work was conducted on 2006-2009 within the frame of the DICE (Deep Inside Computer Experiments) Consortium between ARMINES, Renault, EDF, IRSN, ONERA and TOTAL S.A. (http://dice.emse.fr/). In this package, only Faure's sequence is implemented. Note that the \pkg{randtoolbox} package provides the following quasi random sequences: the Sobol sequence, the Halton (hence Van Der Corput) sequence and the Torus sequence (also known as Kronecker sequence). Note also that the \pkg{lhs} package provides other types of algorithms to compute optimized LHS. } \references{ Cioppa T.M., Lucas T.W. (2007). Efficient nearly orthogonal and space-filling Latin hypercubes. \emph{Technometrics} 49, 45-55. Damblin G., Couplet M., and Iooss B. (2013). Numerical studies of space filling designs: optimization of Latin Hypercube Samples and subprojection properties, \emph{Journal of Simulation}, 7:276-289, 2013. De Rainville F.-M., Gagne C., Teytaud O., Laurendeau D. (2012). Evolutionary optimization of low-discrepancy sequences. \emph{ACM Transactions on Modeling and Computer Simulation (TOMACS)}, 22(2), 9. Dupuy D., Helbert C., Franco J. (2015), DiceDesign and DiceEval: Two R-Packages for Design and Analysis of Computer Experiments, \emph{Journal of Statistical Software}, \bold{65}(11), 1--38. Fang K.-T., Li R. and Sudjianto A. (2006) Design and Modeling for Computer Experiments, \emph{Chapman & Hall}. Fang K-T., Liu M-Q., Qin H. and Zhou Y-D. (2018) Theory and application of uniform experimental designs. \emph{Springer}. Nguyen N.K. (2008) A new class of orthogonal Latinhypercubes, \emph{Statistics and Applications}, Volume 6, issues 1 and 2, pp.119-123. Owen A.B. (2020), On dropping the first Sobol point, \url{https://arxiv.org/abs/2008.08051}. Roustant O., Franco J., Carraro L., Jourdan A. (2010), A radial scanning statistic for selecting space-filling designs in computer experiments, \emph{MODA-9 proceedings}. Santner T.J., Williams B.J. and Notz W.I. (2003) The Design and Analysis of Computer Experiments, \emph{Springer}, 121-161. } \examples{ # ********************** # Designs of experiments # ********************** # A maximum entropy design with 20 points in [0,1]^2 p <- dmaxDesign(20,2,0.9,200) plot(p$design,xlim=c(0,1),ylim=c(0,1)) # Change the dimnames, adjust to range (-10, 10) and round to 2 digits xDRDN(p, letter = "T", dgts = 2, range = c(-10, 10)) # ************************ # Criteria: L2-discrepancy # ************************ dp <- discrepancyCriteria(p$design,type=c('L2','C2')) # Coverage measure covp <- coverage(p$design) # ******************************* # Criteria: Minimal Spanning Tree # ******************************* mstCriteria(p$design,plot2d=TRUE) # **************************************************************** # Radial scanning statistic: Detection of defects of Sobol designs # **************************************************************** # requires randtoolbox package library(randtoolbox) # in 2D rss <- rss2d(design=sobol(n=20, dim=2), lower=c(0,0), upper=c(1,1), type="l", col="red") # in 8D. All pairs of dimensions are tried to detect the worst defect # (according to the specified goodness-of-fit statistic). d <- 8 n <- 10*d rss <- rss2d(design=sobol(n=n, dim=d), lower=rep(0,d), upper=rep(1,d), type="l", col="red") # avoid this defect with scrambling ? # 1. Faure-Tezuka scrambling (type "?sobol" for more details and options) rss <- rss2d(design=sobol(n=n, dim=d, scrambling=2), lower=rep(0,d), upper=rep(1,d), type="l", col="red") # 2. Owen scrambling rss <- rss2d(design=sobol(n=n, dim=d, scrambling=1), lower=rep(0,d), upper=rep(1,d), type="l", col="red") } \keyword{package} DiceDesign/man/mindist.Rd0000644000176200001440000000311213770344364014771 0ustar liggesusers\name{mindist} \alias{mindist} \title{Mindist measure} \description{Compute the \code{mindist} criterion (also called maximin)} \usage{mindist(design)} \arguments{ \item{design}{a matrix (or a data.frame) representing the design of experiments in the unit cube [0,1]\eqn{^d}. If this last condition is not fulfilled, a transformation into [0,1]\eqn{^{d}} is applied before the computation of the criteria.} } \details{The mindist criterion is defined by \deqn{mindist= \min_{x_{i}\in X} \left( \gamma_{i} \right)}{mindist = min (g_1, ... g_n)} where \eqn{\gamma_{i}}{g_i} is the minimal distance between the point \eqn{x_{i}}{x_i} and the other points \eqn{x_{k}}{x_k} of the \code{design}. A higher value corresponds to a more regular scaterring of design points. } \value{A real number equal to the value of the mindist criterion for the \code{design}.} \references{ Gunzburer M., Burkdart J. (2004), Uniformity measures for point samples in hypercubes, \url{https://people.sc.fsu.edu/~jburkardt/}. Jonshon M.E., Moore L.M. and Ylvisaker D. (1990), Minmax and maximin distance designs, \emph{J. of Statis. Planning and Inference}, 26, 131-148. Chen V.C.P., Tsui K.L., Barton R.R. and Allen J.K. (2003), A review of design and modeling in computer experiments, \emph{Handbook of Statistics}, 22, 231-261. } \author{J. Franco} \seealso{ other distance criteria like \code{\link{meshRatio}} and \code{\link{phiP}}, discrepancy measures provided by \code{\link{discrepancyCriteria}}.} \examples{ dimension <- 2 n <- 40 X <- matrix(runif(n*dimension), n, dimension) mindist(X) } \keyword{design} DiceDesign/man/wspDesign.Rd0000644000176200001440000000323013770344364015266 0ustar liggesusers\name{wspDesign} \alias{wspDesign} \title{WSP algorithm} \description{The WSP (Wooton, Sergent, Phan-Tan-Luu) algorithm is an iterative algorithm based on suppression of some experiments from an initial design in each step. WSP leads to a space filling design} \usage{wspDesign(design, dmin, init = "center")} \arguments{ \item{design}{a matrix (or a data.frame) corresponding to the design of experiments} \item{dmin}{a minimum bound for mindist value of the final design} \item{init}{defines the initialization point (input coordinates) of the algorithm: "center" (default value) takes the central point of the domain "random" takes a random point inside the domain} } \details{ WSP enables to create a design D which is such that mindist(D)>dmin. However, it cannot assess the number of experiments. Similarly to straussDesign function, WSP is a powerful algorithm to construct space filling designs in high dimension } \value{A list containing: \item{InitialDesign}{the starting design} \item{dmin}{minimum bound for mindist value of the final design} \item{design}{the matrix of the final design} \item{ResidualDesign}{the matrix of the residual design (points of InitialDesign not in design)} } \references{ J. Santiago, M. Claeys-Bruno, M.Sergent (2012). Construction of space filling designs using WSP algorithm for high dimensional spaces, \emph{Chenometrics and Intelligent Laboratory Systems}, 113:26-31. } \author{G. Damblin & B. Iooss} \examples{ dimension <- 2 n <- 100 X <- matrix(runif(n*dimension), n, dimension) m <- wspDesign(X, 0.1) plot(m$design) xDRDN(m, letter = "T", dgts = 2, range = c(-10, 10)) } \keyword{design} DiceDesign/man/runif.faure.Rd0000644000176200001440000000237513770344364015560 0ustar liggesusers\name{runif.faure} \alias{runif.faure} \title{Low discrepancy sequence : Faure} \description{ Generate a Faure sequence with \eqn{n}{n} experiments in [0,1]\eqn{^d}{^d}.} \usage{ runif.faure(n, dimension) } \arguments{ \item{n }{the number of experiments} \item{dimension}{the number of variables (<100)} } \details{A quasirandom or low discrepancy sequence, such as the Faure, Halton, Hammersley, Niederreiter or Sobol sequences, is "less random" than a pseudorandom number sequence, but more useful for such tasks as approximation of integrals in higher dimensions, and in global optimization. This is because low discrepancy sequences tend to sample space "more uniformly" than random numbers. see \pkg{randtoolbox} or \pkg{fOptions} packages for other low discrepancy sequences.} \value{\code{runif.halton} returns a list containing all the input arguments detailed before, plus the following component: \item{design }{the design of experiments} } \references{ Faure H. (1982), Discrepance de suites associees a un systeme de numeration (en dimension s), \emph{Acta Arith.}, 41, 337-351 } \author{J. Franco} \examples{ f <- runif.faure(20,2) plot(f$design, xlim=c(0,1), ylim=c(0,1)) xDRDN(f, letter="T", dgts=2, range=c(-10, 10)) } \keyword{design} DiceDesign/man/olhDesign.Rd0000644000176200001440000000366013770344364015246 0ustar liggesusers\name{olhDesign} \alias{olhDesign} \title{Nguyen's Orthogonal Latin Hypercube Designs} \description{ Generate the Orthogonal Latin Hypercube (OLH) designs proposed by Nguyen in 2008. These OLHs have a latin structure, an orthogonality between the main terms and the interactions (+ squares) and low correlations between the interactions (+ squares). Very larges matrices can be obtained as the number of input variables and hence the number of lines is unconstrained. When the number of input variables is a power of 2, OLHs have \eqn{d} columns and \eqn{n = 2d + 1} lines (experiments). A vertical truncature is applied when the number of input variables is not a power of 2. Various normalizations can be applied. } \usage{ olhDesign(dimension, range = c(0, 1)) } \arguments{ \item{dimension }{ number of input variables } \item{range }{ the scale (min and max) of the inputs. Ranges (0, 0) and (1, 1) are special cases and call integer ranges \eqn{(-d, d)} and \eqn{(0, 2d)}. See the examples} } \value{ A list with components: \item{n }{the number of lines/experiments} \item{dimension }{the number of columns/input variables} \item{design }{the design of experiments} } \author{N.K. Nguyen for the algorithm. P. Kiener for the recursive R code.} \references{ Nguyen N.K. (2008) \emph{A new class of orthogonal Latinhypercubes}, Statistics and Applications, Volume 6, issues 1 and 2, pp.119-123. } \seealso{ Cioppa's and De Rainville's NOLH designs: \code{\link{nolhDesign}}, \code{\link{nolhdrDesign}}. } \examples{ ## Classical normalizations olhDesign(4, range = c(0, 0)) olhDesign(4, range = c(1, 1)) olhDesign(4, range = c(0, 1)) olhDesign(4, range = c(-1, 1)) ## Change the dimnames, adjust to range (-10, 10) and round to 2 digits xDRDN(olhDesign(4), letter = "T", dgts = 2, range = c(-10, 10)) ## A list of designs lapply(1:5, function(n) olhDesign(n, range = c(-1, 1))$design) } \keyword{design} DiceDesign/man/maximinESE_LHS.Rd0000644000176200001440000000544014011023302016004 0ustar liggesusers\name{maximinESE_LHS} \alias{maximinESE_LHS} \title{Enhanced Stochastic Evolutionnary (ESE) algorithm for Latin Hypercube Sample (LHS) optimization via phiP criteria} \description{The objective is to produce maximin LHS. ESE is a powerful genetic algorithm allowing to produce space-filling designs.} \usage{ maximinESE_LHS(design, T0=0.005*phiP(design,p=50), inner_it=100, J=50, it=1, p=50) } \arguments{ \item{design}{a matrix (or a data.frame) corresponding to the design of experiments.} \item{T0}{The initial temperature of the ESE algorithm} \item{inner_it}{The number of iterations for inner loop} \item{J}{The number of new proposed LHS inside the inner loop} \item{it}{The number of iterations for outer loop} \item{p}{power required in phiP criterion} } \details{This function implements a stochastic algorithm (ESE) to produce optimized LHS. It is based on Jin et al works (2005).} \value{A list containing: \item{InitialDesign}{the starting design} \item{T0}{the initial temperature of the ESE algorithm} \item{inner_it}{the number of iterations for inner loop} \item{J}{the number of new proposed LHS inside the inner loop} \item{it}{the number of iterations for outer loop} \item{p}{power required in phiP criterion} \item{design}{the matrix of the final design (maximin LHS)} \item{critValues}{vector of criterion values along the iterations} \item{tempValues}{vector of temperature values along the iterations} \item{probaValues}{vector of acceptation probability values along the iterations} } \references{ Damblin G., Couplet M., and Iooss B. (2013). Numerical studies of space filling designs: optimization of Latin Hypercube Samples and subprojection properties, \emph{Journal of Simulation,} 7:276-289, 2013. M. Morris and J. Mitchell (1995) Exploratory designs for computationnal experiments. Journal of Statistical Planning and Inference, 43:381-402. R. Jin, W. Chen and A. Sudjianto (2005) An efficient algorithm for constructing optimal design of computer experiments. Journal of Statistical Planning and Inference, 134:268-287. Pronzato, L. and Muller, W. (2012). Design of computer experiments: space filling and beyond, \emph{Statistics and Computing,} 22:681-701. } \author{G. Damblin & B. Iooss} \seealso{ Latin Hypercube Sample (\code{\link{lhsDesign}}), discrepancy criteria (\code{\link{discrepancyCriteria}}), geometric criterion (\code{\link{mindist}}, \code{\link{phiP}}), optimization (\code{\link{maximinSA_LHS}}, \code{\link{discrepESE_LHS}}, \code{\link{discrepSA_LHS}}) } \examples{ dimension <- 2 n <- 10 X <- lhsDesign(n, dimension)$design Xopt <- maximinESE_LHS(X, T0=0.005*phiP(X), inner_it=100, J=50, it=2) plot(Xopt$design) plot(Xopt$critValues, type="l") } \keyword{design} DiceDesign/man/discrepESE_LHS.Rd0000644000176200001440000000633214011022600015774 0ustar liggesusers\name{discrepESE_LHS} \alias{discrepESE_LHS} \title{Enhanced Stochastic Evolutionnary (ESE) algorithm for Latin Hypercube Sample (LHS) optimization via L2-discrepancy criteria} \description{The objective is to produce low-discrepancy LHS. ESE is a powerful genetic algorithm to produce space-filling designs. It has been adapted here to main discrepancy criteria.} \usage{ discrepESE_LHS(design, T0=0.005*discrepancyCriteria(design,type='C2')[[1]], inner_it=100, J=50, it=2, criterion="C2") } \arguments{ \item{design}{a matrix (or a data.frame) corresponding to the design of experiments.} \item{T0}{The initial temperature of the ESE algorithm} \item{inner_it}{The number of iterations for inner loop} \item{J}{The number of new proposed LHS inside the inner loop} \item{it}{ The number of iterations for outer loop} \item{criterion}{The criterion to be optimized. One can choose three different L2-discrepancies: the C2 (centered) discrepancy ("C2"), the L2-star discrepancy ("L2star") and the W2 (wrap-around) discrepancy ("W2")} } \details{This function implements a stochastic algorithm (ESE) to produce optimized LHS. It is based on Jin et al works (2005). Here, it has been adapted to some discrepancy criteria taking into account new ideas about the revaluations of discrepancy value after a LHS elementary perturbation (in order to avoid computing all terms in the discrepancy formulas).} \value{A list containing: \item{InitialDesign}{the starting design} \item{T0}{the initial temperature of the ESE algorithm} \item{inner_it}{the number of iterations for inner loop} \item{J}{the number of new proposed LHS inside the inner loop} \item{it}{the number of iterations for outer loop} \item{criterion}{the criterion to be optimized} \item{design}{the matrix of the final design (low-discrepancy LHS)} \item{critValues}{vector of criterion values along the iterations} \item{tempValues}{vector of temperature values along the iterations} \item{probaValues}{vector of acceptation probability values along the iterations} } \references{ Damblin G., Couplet M., and Iooss B. (2013). Numerical studies of space filling designs: optimization of Latin Hypercube Samples and subprojection properties, \emph{Journal of Simulation,} 7:276-289, 2013. M. Morris and J. Mitchell (1995) Exploratory designs for computational experiments. Journal of Statistical Planning and Inference, 43:381-402. R. Jin, W. Chen and A. Sudjianto (2005) An efficient algorithm for constructing optimal design of computer experiments. Journal of Statistical Planning and Inference, 134:268-287. } \author{G.Damblin & B. Iooss} \seealso{ Latin Hypercube Sample(\code{\link{lhsDesign}}), discrepancy criteria(\code{\link{discrepancyCriteria}}), geometric criterion (\code{\link{mindist}}\code{\link{phiP}}), optimization (\code{\link{maximinSA_LHS}}, \code{\link{maximinESE_LHS}}, \code{\link{discrepSA_LHS}}) } \examples{ \dontrun{ dimension <- 2 n <- 10 X <- lhsDesign(n, dimension)$design Xopt <- discrepESE_LHS(X, T0=0.005*discrepancyCriteria(X, type='C2')[[1]], inner_it=100, J=50, it=2) plot(Xopt$design) plot(Xopt$critValues, type="l") } } \keyword{design} DiceDesign/man/faureprimeDesign.Rd0000644000176200001440000000720514010772304016605 0ustar liggesusers\name{faureprimeDesign} \alias{faureprimeDesign} \title{A special case of the low discrepancy Faure sequence} \description{ Generate a Faure sequence with \eqn{n=p^u-1}{n=p^u-1} experiments in [0,1]\eqn{^d}{^d} or other domains (see the details) where \eqn{p}{p} is the first prime number equal or larger than \eqn{d}{d} and \eqn{u}{u} is an exponent, usually 2. } \usage{ faureprimeDesign(dimension, u = 2, range = c(0, -1)) } \arguments{ \item{dimension}{the number of variables (< 199)} \item{u }{the exponent applied to the prime number} \item{range }{the scale (min and max) of the inputs. See the details for the six predefined ranges.} } \details{ This is a special case of \code{\link{runif.faure}} where the number of generated points depends exclusively on the dimension and the selected exponent. For the exponent \eqn{u=2}{u=2}, the design is orthogonal and has resolution 4. It is a perfect grid \eqn{(p-1)(p+1)}{(p-1)(p+1)} on each pair of variables where \eqn{p}{p} is the first prime number equal or larger than the dimension \eqn{d}{d}. Six domain ranges are predefined and cover most applications: \itemize{ \item{\code{c(0, 0)} corresponds to \eqn{[0, n]^d}{[0, n]^d}.} \item{\code{c(1, 1)} corresponds to \eqn{[1-n, n-1]^d = [2-p^u, p^u -2]^d}{[1-n, n-1]^d = [2-p^u, p^u -2]^d}.} \item{\code{c(0, 1)} corresponds to \eqn{[0, 1]^d}{[0, 1]^d}.} \item{\code{c(0,-1)} corresponds to \eqn{[p^{-u}, 1-p^{-u}]^d}{[p^{-u}, 1-p^{-u}]^d}.} \item{\code{c(-1,-1)} corresponds to \eqn{[-1+2p^{-u}, 1-2p^{-u}]^d}{[-1+2p^{-u}, 1-2p^{-u}]^d}.} \item{\code{c(-1, 1)} corresponds to \eqn{[-1, 1]^d}{[-1, 1]^d}.} } } \value{ \code{faureprimeDesign} returns a list with the following components: \itemize{ \item{design: the design of experiments} \item{n: the number of experiments} \item{dimension: the dimension} \item{prime: the prime number} \item{u: the exponent} } } \author{P. Kiener} \references{ Faure H. (1982), Discrepance de suites associees a un systeme de numeration (en dimension s), \emph{Acta Arith.}, 41, 337-351. Owen A.B. (2020), On dropping the first Sobol point, \url{https://arxiv.org/abs/2008.08051}. } \examples{ ## Range c(0,-1) returns the design produced by runif.faure() plan1 <- runif.faure(n = 24, dimension = 5)$design ; plan1 plan2 <- faureprimeDesign(dimension = 5, range = c(0,-1))$design ; plan2 all.equal(plan1, plan2, tolerance = 1e-15) ## Range c(0,0) returns the original sequence of integers. ## The first (p-1) lines are on the first diagonal. ## The remaining lines are LHSs grouped in p-1 blocks of p rows. d <- p <- 5 plan <- faureprimeDesign(dimension = d, range = c(0,0))$design ; plan apply(plan, 2, sort) ## A regular grid (p-1)x(p+1) rotated by a small angle pairs(plan) plot(plan[,1], plan[,2], las = 1) points(plan[1:(p-1),1], plan[1:(p-1),2], pch = 17, cex = 1.6) abline(v = plan[1:(p-1),1], col = 4) ## Designs of dimensions 24x5 in various ranges lstrg <- list(p0p0 = c(0,0), p1p1 = c(1,1), p0p1 = c(0,1), p0m1 = c(0,-1), m1m1 = c(-1,-1), m1p1 = c(-1,1)) lst <- lapply(lstrg, function(rg) faureprimeDesign( dimension = 5, u = 2, range = rg)$design) lapply(lst, tail) sapply(lst, range) ## The odd designs (p1m1, m1m1, m1p1) are orthogonal and have resolution 4. library(lattice) mat <- lst$m1m1 ; colnames(mat) <- LETTERS[1:5] fml <- ~ (A+B+C+D+E)^2+I(A^2)+I(B^2)+I(C^2)+I(D^2)+I(E^2) mmm <- model.matrix(fml, data = as.data.frame(mat))[,-1] ; tail(mmm) cmm <- round(cov2cor(crossprod(mmm)), 3) ; cmm lattice::levelplot(cmm[, ncol(cmm):1], at = seq(-1, 1, length.out = 10), col.regions = rev(grDevices::hcl.colors(9, "PuOr"))) } \keyword{design} DiceDesign/DESCRIPTION0000644000176200001440000000124514534331712013763 0ustar liggesusersPackage: DiceDesign Type: Package Title: Designs of Computer Experiments Version: 1.10 Date: 2023-11-30 Author: Jessica Franco, Delphine Dupuy, Olivier Roustant, Patrice Kiener, Guillaume Damblin and Bertrand Iooss. Maintainer: Celine Helbert Description: Space-Filling Designs and space-filling criteria (distance-based and uniformity-based), with emphasis to computer experiments; . License: GPL-3 Depends: R (>= 2.10) Suggests: rgl, randtoolbox, lattice Encoding: UTF-8 NeedsCompilation: yes LazyData: true Packaged: 2023-12-07 08:35:30 UTC; chelbert Repository: CRAN Date/Publication: 2023-12-07 12:00:10 UTC DiceDesign/src/0000755000176200001440000000000014534301722013040 5ustar liggesusersDiceDesign/src/DiceDesign_init.c0000644000176200001440000000150713365635222016236 0ustar liggesusers#include // for NULL #include /* FIXME: Check these declarations against the C/Fortran source code. */ /* .C calls */ extern void C_rss2Dloop(void *, void *, void *, void *, void *, void *, void *); extern void C_rss3Dloop(void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *); extern void C_StraussDesign(void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *); static const R_CMethodDef CEntries[] = { {"C_rss2Dloop", (DL_FUNC) &C_rss2Dloop, 7}, {"C_rss3Dloop", (DL_FUNC) &C_rss3Dloop, 11}, {"C_StraussDesign", (DL_FUNC) &C_StraussDesign, 11}, {NULL, NULL, 0} }; void R_init_DiceDesign(DllInfo *dll) { R_registerRoutines(dll, CEntries, NULL, NULL, NULL); R_useDynamicSymbols(dll, FALSE); } DiceDesign/src/C_rss.c0000644000176200001440000000473613365635222014275 0ustar liggesusers#include #include #include #include #define precision 0.000000000001 #define SQUARE(x) ((x)*(x)) #define CUBE(x) ((x)*(x)*(x)) #define MAX(a,b) (a precision) && (fabs(ay[*k]) > precision)) { s += SQUARE(MAX(*p - ax[*k] - ay[*k], 0.)); s += SQUARE(MAX(*p + ax[*k] + ay[*k], 0.)); s -= SQUARE(MAX(*p - ax[*k] + ay[*k], 0.)); s -= SQUARE(MAX(*p + ax[*k] - ay[*k], 0.)); return(s / (8 * ax[*k] * ay[*k])); } else return(C_uniform_cdf(p)); } double C_sumof3uniforms_cdf(const double *p, const double *ax, const double *ay, const double *az, const int *k) { double s = 0.; if ((fabs(ax[*k]) > precision) && (fabs(ay[*k]) > precision) && (fabs(az[*k]) > precision)) { s += CUBE(MAX(*p + ax[*k] + ay[*k] + az[*k], 0.)); s += CUBE(MAX(*p + ax[*k] - ay[*k] - az[*k], 0.)); s += CUBE(MAX(*p - ax[*k] + ay[*k] - az[*k], 0.)); s += CUBE(MAX(*p - ax[*k] - ay[*k] + az[*k], 0.)); s -= CUBE(MAX(*p - ax[*k] - ay[*k] - az[*k], 0.)); s -= CUBE(MAX(*p - ax[*k] + ay[*k] + az[*k], 0.)); s -= CUBE(MAX(*p + ax[*k] - ay[*k] + az[*k], 0.)); s -= CUBE(MAX(*p + ax[*k] + ay[*k] - az[*k], 0.)); return(s / (48 * ax[*k] * ay[*k] * az[*k])); } else if ((fabs(ax[*k]) <= precision)) return(C_sumof2uniforms_cdf(p, ay, az, k)); else if ((fabs(ay[*k]) <= precision)) return(C_sumof2uniforms_cdf(p, ax, az, k)); else return(C_sumof2uniforms_cdf(p, ax, ay, k)); } void C_rss2Dloop(const double *x, const double *y, const double *ax, const double *ay, const int *n, const int *n_theta, double *ans) { double p; for (int i_theta=0; i_theta < *n_theta; i_theta++) { for (int i=0; i < *n; i++) { p = x[i]*ax[i_theta] + y[i]*ay[i_theta]; ans[i + *n * i_theta] = C_sumof2uniforms_cdf(&p, ax, ay, &i_theta); } } } void C_rss3Dloop(const double *x, const double *y, const double *z, const double *ax, const double *ay, const double *az, const int *n, const int *n_theta, const int *n_phi, const int *i_phi, double *ans) { double p; int k; for (int i_theta=0; i_theta < *n_theta; i_theta++) { for (int i=0; i < *n; i++) { k = i_theta + *n_theta * *i_phi; p = x[i]*ax[k] + y[i]*ay[k] + z[i]*az[k]; ans[i + *n * i_theta] = C_sumof3uniforms_cdf(&p, ax, ay, az, &k); } } } DiceDesign/src/C_StraussDesign.c0000644000176200001440000001762213365635222016262 0ustar liggesusers#include #include #include #include #include #include /* to include Rconfig.h */ #ifdef ENABLE_NLS #include #define _(String) dgettext ("DiceDesign", String) /* replace pkg as appropriate */ #else #define _(String) (String) #endif #define MAX(a,b) (a 2013.02.14) ## Case with 1D constraints ## inputs : ## n = number of experiments ## di = dimension of the space ## nmc = number of Monte Carlo iterations ## alpha = potential power (default is 0.5) ## constraints1D = 1 if projection constraints is required and 0 otherwise ## RND = radius in the d-space ## Note the the radius on the projection (R1D) is fixed at 1/n*0.75 ## v = the initial design which is modified during the procedure in order to return the final Strauss Design (dimension dxn) ## The values of the repulsion parameters are fixed : equal to 0.01 in 1D (see gamma) if alpha=0 and 10 in nD (see betaND) . ## betaND = real which represents the repulsion parameter in nD ############################################################################################## */ void Strauss(const int *n, const int *d,const int *nmc,const double *alpha, const int *constraints1D, const double *RND, const double *repulsion, const double *gamma1D, const int *seed, double **v){ double R1D = (1.0/(float)*n)*0.75; /* radius in 1D */ double gamma = *gamma1D; /* repulsion parameter in 1D for alpha=0 */ /* int graine = *seed; */ /* 2017-12-06 compilateur dit : graine utilise nul part */ double RNDcarre=(*RND)*(*RND); double p,pND,p1D,nu,nx,sum,sumu,betaND,gammaND,pu=0,px=0,nnx,nnu; int iunif,dim,point; int inmc, k; GetRNGstate(); /* initialization of the random generator */ // unsigned int graine=time(NULL); // srand(graine); /* Allocation of memory of a d-dimensional vector u corresponding to the proposed new point */ double *u = (double*) malloc((*d) * sizeof(double)); if (!u){ error(_("Strauss: cannot allocate memory")); // fprintf(stderr, "Strauss : cannot alocate %u bytes, aborting ",(*d)*sizeof(double) ); exit(-1); } if (*alpha != 0){ betaND = *repulsion; for (inmc=0; inmc< *nmc; inmc++){ for (k=0; k< *n; k++){ /* selection of a point (column number betwenn 0 and (n-1)) */ iunif = (int) (((double) *n) * ( (double)unif_rand() )); /* computation of nx and nu for the one-dimensional case (row by row) nx = number of points closed to the selected point x nu = number of points closed to the possible new point u */ p1D = 1; for (dim = 0 ; dim<*d; dim++){ nu=0; nx=0; /* Propose a new point u (d lines and 1 column) */ u[dim] = (double)unif_rand() ; if (*constraints1D == 1){ for (point=0; point<*n; point++){ if (iunif != point){ if( (fabs(v[dim][point]-v[dim][iunif])) < (R1D)){ nx++; } if( (fabs(v[dim][point]-u[dim])) < (R1D)){ nu++; } } } p1D = p1D*pow(gamma,MAX(0,nu-nx)); } } px=0;pu=0; /* Computation of nx and nu for the N-dimensional case (sum over the columns) */ for (point=0; point<*n; point++){ if (point != iunif){ sum = 0; sumu = 0; for (dim=0; dim<*d; dim++){ sum += (v[dim][point]- v[dim][iunif])*(v[dim][point]- v[dim][iunif]); sumu += (v[dim][point]- u[dim])*(v[dim][point]- u[dim]); } nx = sqrt(sum); nu = sqrt(sumu); if (nx < *RND){ nnx = pow((double)(1-((float)nx/(float)*RND)),*alpha); px += nnx; } if (nu < *RND){ nnu = pow((double)(1-((float)nu/(float)*RND)),*alpha); pu += nnu; } } } pND = MIN(1,(float)(exp(-betaND*pu))/exp(-betaND*px)); p = pND * p1D; if (unif_rand() < p){ for (dim=0; dim<*d; dim++){ v[dim][iunif] = u[dim]; } } } } }else{ gammaND=*repulsion; for (inmc=0; inmc<*nmc; inmc++){ for (k=0; k<*n; k++){ /* selection of a point (column number betwenn 0 and n) */ iunif = (int) (((double) *n) * ( (double)unif_rand() )); /* computation of nx and nu for the one-dimensional case (row by row) */ p1D = 1; /* study dimension by dimension (row by row) */ for (dim = 0 ; dim<*d; dim++){ nu=0; nx=0; /* Propose a new point u (d lines and 1 column) */ u[dim] = (double)unif_rand() ; if (*constraints1D == 1){ for (point=0; point<*n; point++){ if (iunif != point){ if( (fabs(v[dim][point]-v[dim][iunif])) < (R1D)){ nx++; } if( (fabs(v[dim][point]-u[dim])) < (R1D)){ nu++; } } } p1D = p1D*pow(gamma,MAX(0,nu-nx)); } } nx=0;nu=0; /* Computation of nx and nu for the N-dimensional case (sum over the columns) */ for (point=0; point<*n; point++){ if (point != iunif){ sum = 0.0; sumu = 0.0; for (dim=0; dim<*d; dim++){ sum += (v[dim][point]- v[dim][iunif])*(v[dim][point]- v[dim][iunif]); sumu += (v[dim][point]- u[dim])*(v[dim][point]- u[dim]); } if (sum < RNDcarre){ nx++; } if (sumu < RNDcarre){ nu++; } } } p = pow(gammaND,MAX(0,nu-nx)) * p1D; if (unif_rand() < p){ for (dim=0; dim<*d; dim++){ v[dim][iunif] = u[dim]; } } } } } free(u); PutRNGstate(); } /* ##################################################################################### ## *** Main program *** ## inputs : ## n = number of experiments ## d = dimension of the space ## constraints1D = 1 if 1D projection constraints are required and 0 otherwise ## nmc = number of Monte Carlo iterations ## RND = radius in the d-space ## alpha = potential power (default is 0.5) ## seed = seed for the generation of the new points ## output : ## ans = the Strauss-Design finally obtained. #################################################################################### */ void C_StraussDesign(const double *init, const int *n,const int *d, const int *constraints1D, const int *nmc, const double *RND, const double *alpha, const double *repulsion, const double *gamma1D, const int *seed, double *ans){ int dim, point; /* Construction of the initial design of experiments (random distribution of n points in the unit cube [0,1]^d) */ double **v = (double**) malloc ((*d) * sizeof(double*)); if (!v){ error(_("C_StraussDesign: cannot allocate memory for v")); // fprintf(stderr, "C_StraussDesign: cannot alocate %zu bytes, aborting ",(*d) * sizeof(double*) ); exit(-1); } for (dim=0; dim<*d; dim++){ v[dim] = (double*) malloc ((*n) * sizeof(double)); if (!v[dim]){ error(_("C_StraussDesign: cannot allocate memory for v[dim]")); // fprintf(stderr, "C_StraussDesign: cannot alocate %zu bytes, aborting ",(*n)*sizeof(double) ); exit(-1); } } C_mat_alea(init,d,n,v); Strauss(n, d, nmc, alpha, constraints1D, RND,repulsion,gamma1D,seed,v); /* Writing the coordinate of the final designs 'v' in 'ans' */ int indix=0; for (point=0; point<*n; point++){ for ( dim=0; dim<(*d); dim++){ ans[indix] = v[dim][point]; indix++; } } free(v); } DiceDesign/R/0000755000176200001440000000000014011521273012445 5ustar liggesusersDiceDesign/R/unscaleDesign.R0000644000176200001440000000075213770344364015377 0ustar liggesusers unscaleDesign <- function(design, min=NULL, max=NULL, uniformize=FALSE, InitialDesign=NULL){ d <- dim(design)[[2]] ; n <- dim(design)[[1]] if (uniformize & !is.null(InitialDesign)){ # Inverse Rosenblatt transformation from U[0,1]^d for (i in 1:d) x[,i] <- quantile(InitialDesign[,i],design[,i]) }else x <- design * matrix((max - min), ncol=d,nrow=n, byrow=T) + matrix(min, ncol=d, nrow=n,byrow=T) return(list(design = x, min = min, max = max, uniformize = uniformize)) } DiceDesign/R/mindist.R0000644000176200001440000000117313770344364014260 0ustar liggesusersmindist <- function(design){ # Compute the Mindist criterion # A higher MINDIST corresponds to a more regular # scaterring of design points # J.FRANCO, 2006.10.23 # input : design of n experiments X <- as.matrix(design) n <- dim(X)[1] # To check the experimental region if ( min(X)<0 || max(X)>1 ){ warning("The design is rescaling into the unit cube [0,1]^d.") M <- apply(X,2,max) m <- apply(X,2,min) for (j in 1:dim(X)[2]){ X[,j] <- (X[,j]-m[j])/(M[j]-m[j]) } } Distance <- as.matrix(dist(X)) diag(Distance)<-1.0E30 # Compute the min on the columns min1 <- apply(Distance,2,min) return(min(min1)) } DiceDesign/R/sysdata.rda0000644000176200001440000000131313770344364014622 0ustar liggesusers]S HTA}3u1( +35$bO`RHkJIB$""DIُ (GY!"!b$5۝qvΛ;-yXgb`~' LXE<(s!8yY4+R`2Iz6,K֕L6|~:פeK`Uuo4@wүgz0 & i0 & i0 & i0 & i0 & i0 & i0 & iTemperature, m is never accept. {m<-g[[k]][[2]] dC2<-a na<-na+1 if(a<=best) {Best<-m best<-a ni<-ni+1} #if optimization is ok, ni=ni+1 } crit <- c(crit,best) } v1<-na/inner_it # v1<-acceptance ratio v2<-ni/inner_it # v2<-optimization ratio temp <- c(temp,rep(Temperature,inner_it)) ; proba <- c(proba,rep(v1,inner_it)) if (best-bold<0){f<-1 if(v1>=0.1 & v2<=v1) {Temperature<-0.8*Temperature} else {if (v1>=0.1 & v2==v1){} else {Temperature<-Temperature/0.8} } } # if the criteria is optimized after the inner loop, then f equals 1 else {f<-0 if (v1<=0.1){Temperature<-Temperature/0.7} else {Temperature<-Temperature*0.9} } # else, it is the exploratory step } List.res <- list(design,T0,inner_it,J,it,criterion,Best,crit,temp,proba) names(List.res) <-c("InitialDesign","TO","inner_it","J","it","criterion","design","critValues","tempValues","probaValues") } if(criterion=="L2star") { d<-ncol(m) Temperature<-T0 Best<-m dL2<-discrepancyCriteria(m,type='L2star')[[1]] best<-dL2 for (q in 1:it) { BOLD<-Best bold<-best # Best=new LHS built at every step # BOLD= new LHS built at each iteration q ni<-0 count<-0 na<-0 while(count<=inner_it) # inner loop { count<-count+1 modulo<-count%%d # d : number of columns of m l<-list(m) l<-rep(l,J) #liste de liste g<-lapply(l,discrepancyL2_EP_ESE,k=modulo+1,p=dL2^2) values<-lapply(g,extract_list) k<-which.min(values) a<-values[[k]] Delta<-a-dL2 if((Delta)<=(Temperature*runif(1))) # higher is the temperature, higher is the probability of accepting a bad design. # if Delta is low, the probability is high of accepting a bad design. # if Delta>Temperature, m is never accept. {m<-g[[k]][[2]] dL2<-a na<-na+1 if(a<=best) {Best<-m best<-a ni<-ni+1} #if optimization is ok, ni=ni+1 } crit <- c(crit,best) } v1<-na/inner_it # v1<-acceptance ratio v2<-ni/inner_it # v2<-optimization ratio temp <- c(temp,rep(Temperature,inner_it)) ; proba <- c(proba,rep(v1,inner_it)) if (best-bold<0){f<-1 if(v1>=0.1 & v2<=v1) {Temperature<-0.8*Temperature} else {if (v1>=0.1 & v2==v1){} else {Temperature<-Temperature/0.8} } } # if the criteria is optimized after the inner loop, then f equals 1 else {f<-0 if (v1<=0.1){Temperature<-Temperature/0.7} else {Temperature<-Temperature*0.9} } # else, it is the exploratory step } List.res <- list(design,T0,inner_it,J,it,criterion,Best,crit,temp,proba) names(List.res) <-c("InitialDesign","TO","inner_it","J","it","criterion","design","critValues","tempValues","probaValues") } if(criterion=="W2") { d<-ncol(m) Temperature<-T0 Best<-m dW2<-discrepancyCriteria(m,type='W2')[[1]] best<-dW2 for (q in 1:it) { BOLD<-Best bold<-best # Best=new LHS built at every step # BOLD= new LHS built at each iteration q ni<-0 count<-0 na<-0 while(count<=inner_it) # inner loop { count<-count+1 modulo<-count%%d # d : number of columns of m l<-list(m) l<-rep(l,J) #liste de liste g<-lapply(l,discrepancyW2_EP_ESE,k=modulo+1,p=discrepancyCriteria(m,type='W2')[[1]]^2) values<-lapply(g,extract_list) k<-which.min(values) a<-values[[k]] Delta<-a-dW2 if((Delta)<=(Temperature*runif(1))) # higher is the temperature, higher is the probability of accepting a bad design. # if Delta is low, the probability is high of accepting a bad design. # if Delta>Temperature, m is never accept. {m<-g[[k]][[2]] dW2<-a na<-na+1 if(a<=best) {Best<-m best<-a ni<-ni+1} #if optimization is ok, ni=ni+1 } crit <- c(crit,best) } v1<-na/inner_it # v1<-acceptance ratio v2<-ni/inner_it # v2<-optimization ratio temp <- c(temp,rep(Temperature,inner_it)) ; proba <- c(proba,rep(v1,inner_it)) if (best-bold<0){f<-1 if(v1>=0.1 & v2<=v1) {Temperature<-0.8*Temperature} else {if (v1>=0.1 & v2==v1){} else {Temperature<-Temperature/0.8} } } # if the criteria is optimized after the inner loop, then f equals 1 else {f<-0 if (v1<=0.1){Temperature<-Temperature/0.7} else {Temperature<-Temperature*0.9} } # else, it is the exploratory step } List.res <- list(design,T0,inner_it,J,it,criterion,Best,crit,temp,proba) names(List.res) <-c("InitialDesign","TO","inner_it","J","it","criterion","design","critValues","tempValues","probaValues") } return(List.res) } #####maximinSA_LHS##### #####Maximin LHS VIA SIMULATED ANNEALING OPTIMIZATION##### #---------------------------------------------------------------------------| #args : m : the design | # T0 : the initial temperature | # c : parameter regulating the temperature | # it : the number of iterations | # p : power required in phiP criterion | # profile : temperature down profile | # "GEOM" or "GEOM_MORRIS" or "LINEAR". By default : "GEOM" | #output : a list containing all the input arguments plus: | # a mindist optimized design | # vector of criterion values along the iterations | # vector of temperature values along the iterations | # vector of acceptation probability values along the iterations | #depends : phiP,lhs_EP | #---------------------------------------------------------------------------| maximinSA_LHS<-function(design,T0=10,c=0.95,it=2000,p=50,profile="GEOM",Imax=100) { crit <- NULL ; temp <- NULL ; proba <- NULL if(profile=="GEOM"){ m<-design i<-0 T<-T0 fi_p<-phiP(m,p) crit <- fi_p while(T>0 & i0 & i0 & iTemperature, m is never accept. {m<-g[[k]][[2]] fi_p<-a na<-na+1 if(a<=best) {Best<-m best<-a ni<-ni+1} #if optimization is ok, ni=ni+1 } crit <- c(crit,best) } v1<-na/inner_it # v1<-acceptance ratio v2<-ni/inner_it # v2<-optimization ratio temp <- c(temp,rep(Temperature,inner_it)) ; proba <- c(proba,rep(v1,inner_it)) if (best-bold<0){f<-1 if(v1>=0.1 & v2<=v1) {Temperature<-0.8*Temperature} else {if (v1>=0.1 & v2==v1){} else {Temperature<-Temperature/0.8} } } # if the criteria is optimized after the inner loop, then f equals 1 else {f<-0 if (v1<=0.1){Temperature<-Temperature/0.7} else {Temperature<-Temperature*0.9} } } List.res <- list(design,T0,inner_it,J,it,p,Best,crit,temp,proba) names(List.res) <-c("InitialDesign","TO","inner_it","J","it","p","design","critValues","tempValues","probaValues") # else, it is the exploratory step return(List.res) } DiceDesign/R/runif.faure.R0000644000176200001440000000304213770344364015032 0ustar liggesusersrunif.faure <- function(n,dimension){ pr <- c(2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59, 61,67,71,73,79,83,89,97,101, 103,107,109, 113,127,131,137,139,149,151,157,163,167,173, 179,181,191,193,197,199,211,223,227,229,233, 239,241,251,257,263,269,271,277,281,283,293, 307,311,313,317,331,337,347,349,353,359,367, 373,379,383,389,397,401,409,419,421,431,433, 439,443,449,457,461,463,467,479,487,491,499, 503,509,521,523,541,547,557,563,569,571,577, 587,593,599,601,607,613,617,619,631,641,643, 647,653,659,661,673,677,683,691,701,709,719, 727,733,739,743,751,757,761,769,773,787,797, 809,811,821,823,827,829,839,853,857,859,863, 877,881,883,887,907,911,919,929,937,941,947, 953,967,971,977,983,991,997) # base of number system r <- pr[pr>=dimension][1] # compute coefficients # a priori upper bound for the length of the sequence m <- ceiling(log(n)/log(r)) C <- matrix(0,m,m) C[1,] <- 1 for (j in 2:m){ C[j,j] <- 1 if ((j-1)>=2){ for (i in 2:(j-1)){ C[i,j] <- C[i,(j-1)] + C[(i-1),(j-1)] } } } C <- C%%r # to do the radical inverse dg <- r^(-(seq(1,m,1))) F <- matrix(0,n,dimension) for (i in 1:n){ # base r decomposition nr <- matrix(0,m,1) number <- i for (k in 1:m){ quo <- floor(number/r) res <- number - quo*r number <- quo # i = nr(m)*r^(m-1) + ... + nr(2)*r + nr(1) nr[k] <- res } F[i,1] <- sum(dg*nr) for (j in 2:dimension){ nr <- (C%*%nr)%% r F[i,j] <- sum(dg*nr) } } # outputs return(out=list(design=F,n=n,dimension=dimension)) } DiceDesign/R/xDRDN.R0000644000176200001440000000170713770344364013533 0ustar liggesusersxDRDN <- function(obj, width = 1, letter = "X", dgts = NULL, range = NULL) { mat <- if (is.list(obj) & "design" %in% names(obj)) { obj$design } else { if (is.matrix(obj) | is.data.frame(obj)) { obj } else { stop("obj must be a matrix, a data.frame or a list with a 'design' field") } } style <- paste0("%", width, ".", width, "d") LET <- c(LETTERS[c(1:8, 10:26)], letters[c(1:8, 10:26)]) cn <- if(width == 0 & ncol(mat) < 51) { LET[seq_len(ncol(mat))] } else { paste0(letter, sprintf(style, seq_len(ncol(mat)))) } dimnames(mat) <- list(seq_len(nrow(mat)), cn) currange <- range(mat) if (!is.null(range)) mat <- (mat - currange[1])/diff(currange)*diff(range) + range[1] if (!is.null(dgts)) mat <- round(mat, dgts) return(mat) } DiceDesign/R/unif.test.quantile.R0000644000176200001440000000250513770344364016351 0ustar liggesusersunif.test.quantile <- function(type, n, alpha=0.05) { # statistic upper tail percentage points # see D'Agostino and Stephens "Goodness-of-fit techniques", 1986 if (!is.element(type, c("greenwood", "qm", "ks", "V", "cvm"))) stop("The goodness-of-fit test must be one of: Greenwood, Quesenberry-Miller, Kolmogorov-Smirnov, V = (D+) + (D-), or Cramer-Von Mises") if (length(alpha)!=1) { stop("At this stage, alpha must be a single number") } else if (!is.element(alpha, c(0.1, 0.05, 0.025, 0.01))) { stop("Significance level must be a single number among 0.1, 0.05, 0.025 or 0.01") } index <- is.element(c(0.1, 0.05, 0.025, 0.01), alpha) if (type=="greenwood") { # quantile of n*G(n) if (n>500) { q <- qnorm(1-alpha/2, mean=2*n/(n+2), sd=sqrt(4/n)) } else { # greenwood.table is loaded via sysdat.rda f <- approxfun(greenwood.table[,1], greenwood.table[,c(2,3,4,5)[index]]) q <- f(n) } q <- q/n # quantile of G(n) } else if (type=="QM") { stop("no default value for Quesenberry and Miller statistic") } else if (type=="ks") { q <- c(1.224, 1.358, 1.480, 1.628)[index]/(sqrt(n) + 0.12 + 0.11/sqrt(n)) } else if (type=="V") { q <- c(1.620, 1.747, 1.862, 2.001)[index]/(sqrt(n) + 0.155 + 0.24/sqrt(n)) } else if (type=="cvm") { q <- c(0.347, 0.461, 0.581, 0.743)[index]/(1+1/n) + 0.4/n - 0.6/n^2 } return(q) } DiceDesign/R/nolhDesign.R0000644000176200001440000000277713770344364014716 0ustar liggesusersnolhDesign <- function(dimension, range = c(0, 1)) { # NOLHdes <- get(load(system.file("data", "NOLHdesigns.rda", package = "DiceDesign"))) NOLHdes <- get("NOLHdesigns", pos = "package:DiceDesign") dfr <- if (dimension %in% 2:7) NOLHdes[["nolh2_7"]] else if (dimension %in% 8:11) NOLHdes[["nolh8_11"]] else if (dimension %in% 12:16) NOLHdes[["nolh12_16"]] else if (dimension %in% 17:22) NOLHdes[["nolh17_22"]] else if (dimension %in% 23:29) NOLHdes[["nolh23_29"]] else stop("dimension must be in 2:29") # dfr <- if (dimension %in% 2:7) NOLHdesigns[["nolh2_7"]] # else if (dimension %in% 8:11) NOLHdesigns[["nolh8_11"]] # else if (dimension %in% 12:16) NOLHdesigns[["nolh12_16"]] # else if (dimension %in% 17:22) NOLHdesigns[["nolh17_22"]] # else if (dimension %in% 23:29) NOLHdesigns[["nolh23_29"]] # else stop("dimension must be in 2:29") mat <- as.matrix(dfr[,seq_len(dimension)]) mat <- if (identical(range, c(1,1))) mat else if (identical(range, c(0, 0))) mat +(nrow(mat)-1)/2 else (mat/(nrow(mat)-1) +0.5) *diff(range) + range[1] dimnames(mat) <- NULL # dimnames(mat) <- list(seq_len(nrow(mat)), # paste0("X", seq_len(ncol(mat)))) list(n = nrow(mat), dimension = dimension, design = mat) } DiceDesign/R/dmaxDesign.R0000644000176200001440000000406413770344364014676 0ustar liggesusersdmaxDesign <- function(n,dimension,range,niter_max=1000,seed=NULL){ # if no seed is provided in argument, choice of the seed for 'runif' if (is.null(seed)){ seed <- as.numeric(Sys.time()) } set.seed(seed) # The spherical variogram model variosphe <- function(h,a){ if (h <= a){ gamma <- 1.5*(h/a)- 0.5*(h/a)^3 } else{ gamma <- 1 } return(gamma) } p <- matrix(runif(n*dimension,0,1),n,dimension) p_init <- p # Hypothesis validation if (n < dimension){ stop('Warning : the number of points is lower than the dimension.') } if (range == 0){ # To choose a large range in order to fill the region experimental range <- sqrt(dimension)/2 } Distance <- as.matrix(dist(p)) # Compute Correlation Matrix C <- diag(1,n,n) for (i in 1:(n-1)){ for (k in (i+1):n){ if (Distance[i,k] <= range){ C[i,k] <- 1-variosphe(Distance[i,k],range) } C[k,i] <- C[i,k] } } # Compute determinant of the matrix C dinit <- det(C) compt <- 1 Deter <- rep(0,niter_max) Deter[compt] <- dinit while(compt < niter_max){ compt <- compt+1 # Choose an index iunif <- floor(runif(1,1,n+1)) # Choose a potential new point u <- runif(dimension) pu <- p pu[iunif,] <- u # Compute the potential new determinant of the matrix C (compute only row number iunif) Distu <- matrix(0,n,n) for (ii in 1:n){ for (j in 1:dimension){ Distu[iunif,ii] <- Distu[iunif,ii] + (pu[iunif,j] - pu[ii,j])*(pu[iunif,j] - pu[ii,j]) } } Distu[iunif,] <- sqrt(Distu[iunif,]) Cu <- C for (k in 1:n){ if (k != iunif){ if (Distu[iunif,k] <= range){ Cu[iunif,k] <- 1-variosphe(Distu[iunif,k],range) } Cu[k,iunif] <- Cu[iunif,k] } } du <- det(Cu) Deter[compt] <- dinit if((du - dinit) >= 0){ Deter[compt] <- du p <- pu C <- Cu Distance <- Distu dinit <- du } }# End while # Outputs: return(list(n=n,dimension=dimension,range=range,niter_max=niter_max,design_init=p_init,design=p,det_init=Deter[1],det_end=dinit,seed=seed)) } DiceDesign/R/olhDesign.R0000644000176200001440000000231213770344364014521 0ustar liggesusersolhDesign <- function(dimension, range = c(0, 1)) { funM <- function(dimpow2) { if (dimpow2 == 1) { matrix(c(1,2,2,1), 2, 2) } else { M <- funM(dimpow2 - 1) rbind(cbind(M, M+ncol(M)), cbind(M+ncol(M), M)) } } funS <- function(dimpow2) { if (dimpow2 == 1) { matrix(c(1,1,1,-1), 2, 2) } else { S <- funS(dimpow2 - 1) P <- S[seq(1, nrow(S)/2),, drop = FALSE] Q <- S[seq(1+nrow(S)/2, nrow(S)),, drop = FALSE] rbind(cbind(P,P), cbind(Q,-Q), cbind(P,-P), cbind(Q,Q)) } } funOLH <- function(dimpow2) { T <- funM(dimpow2) * funS(dimpow2) rbind(T, rep(0, ncol(T)), -T) } dimpow2 <- max(1, ceiling(log2(dimension))) mat <- funOLH(dimpow2)[, seq_len(dimension), drop = FALSE] mat <- if (identical(range, c(1,1))) mat else if (identical(range, c(0, 0))) mat +(nrow(mat)-1)/2 else (mat/(nrow(mat)-1) +0.5) * diff(range) + range[1] dimnames(mat) <- NULL # dimnames(mat) <- list(seq_len(nrow(mat)), # paste0("X", seq_len(ncol(mat)))) list(n = nrow(mat), dimension = dimension, design = mat) } DiceDesign/R/scaleDesign.R0000644000176200001440000000114013770344364015024 0ustar liggesusers scaleDesign <- function(design, min=NULL, max=NULL, uniformize=FALSE){ d <- dim(design)[[2]] ; n <- dim(design)[[1]] if (uniformize){ # Rosenblatt transformation to U[0,1]^d x <- design for (i in 1:d) x[,i] <- ecdf(design[,i])(design[,i]) }else{ # scaling between min and max if (is.null(min)) min <- apply(design, 2, min) if (is.null(max)) max <- apply(design, 2, max) x <- ( design - matrix(min, ncol=d, nrow=n, byrow=T) ) / matrix((max - min), ncol=d,nrow=n, byrow=T) } return(list(design = x, min = min, max = max, uniformize = uniformize, InitialDesign=design)) } DiceDesign/R/meshRatio.R0000644000176200001440000000246313770344364014547 0ustar liggesusersmeshRatio <- function(design){ #---------------------------------- # Compute the meshratio criterion # For a regular mesh, ratio=1 # input : design of n experiments # Example : Meshratio(matrix(runif(40),20,2)) #---------------------------------- X <- as.matrix(design) n <- dim(X)[1] dimension <- dim(X)[2] if ( n < dimension ){ stop('Warning : the number of points is lower than the dimension') } # To check the experimental region if ( min(X)<0 || max(X)>1 ){ warning("The design is rescaling into the unit cube [0,1]^d.") M <- apply(X,2,max) m <- apply(X,2,min) for (j in 1:dim(X)[2]){ X[,j] <- (X[,j]-m[j])/(M[j]-m[j]) } } DistanceMax <- -1.0E30 DistanceMin <- 1.0E30 for (i in 1:(n-1)) { DistMin <- 1.0E30 DistMax <- -1.0E30 for (k in 1 : n){ if (i != k){ # if the differs from current point Dist <- 0 for (j in 1 : dimension){ Dist <- Dist + (X[i,j] -X[k,j])*(X[i,j] - X[k,j]) } if (Dist > DistMax){ DistMax <- Dist; } if (Dist < DistMin){ DistMin <- Dist; } } } if (DistanceMax < DistMin){ DistanceMax <- DistMin } if (DistanceMin > DistMin){ DistanceMin <- DistMin } } ratio <- sqrt(DistanceMax/DistanceMin) return(ratio) } DiceDesign/R/mstCriteria.R0000644000176200001440000000420113770344364015072 0ustar liggesusers#####MINIMAL SPANNING TREE (ALGORITHM of PRIM(1957))##### ####mstCriteria##### #---------------------------------------------------------------------------| #args : design : the design | # plot2d : default="FALSE", show 2D projections of the mst | #out l : list with edges and both mean and standard value of the | # lengthes | #---------------------------------------------------------------------------| mstCriteria <- function(design,plot2d="FALSE") { m <- design n<-nrow(m) #number of points D<-as.matrix(dist(m)) #distances matrix two points two diag(D)<-rep(Inf,n) x<-rep(0,n-1) #Initialization of the vector such that each coordinate is an edge length Peak<-1 #First peak of the tree p<-Peak Tree<-list(c()) Tree<-rep(Tree,n) #Initialization of a void list #-----------------------------------------------------------| if(plot2d) {plot(m,pch=19,col="blue",xlab="",ylab="")} #-----------------------------------------------------------| for( i in 1:(n-1)) { if(length(Peak)==1) { new_p<-which.min(as.numeric(D[p,])) x[i]<-D[p,new_p] D[new_p,Peak]=D[Peak,new_p]<-Inf Peak<-c(Peak,new_p) } else{ A<-D[Peak,] w<-which.min(A) reste<-w%%nrow(A) if(reste!=0) {p<-Peak[reste] new_p<-w %/% nrow(A)+1} else {p<-Peak[nrow(A)] new_p<-w %/% nrow(A)} x[i]<-D[p,new_p] D[new_p,Peak]<-D[Peak,new_p]<-Inf Peak<-c(Peak,new_p) } Tree[[p]]<-c(Tree[[p]],new_p) Tree[[new_p]]<-c(Tree[[new_p]],p) if (plot2d=="TRUE") {lines(rbind(m[p,],m[new_p,]),col='red')} } return(list(tree=Tree,stats=c(mean(x),sqrt(var(x))))) } DiceDesign/R/discrepancyCriteria.R0000644000176200001440000001020614011021230016542 0ustar liggesusersdiscrepancyCriteria <- function(design, type='all'){ #--------------------------------------- # source code by Jessica FRANCO (2006.10.05) # modified by Bertrand Iooss (2013.26.12) #--------------------------------------- # inputs # - design of experiments # - type of dicrepancies to be computed X <- as.matrix(design) dimension <- dim(X)[2] # dimension n <- dim(X)[1] # number of points if ( n < dimension ){ stop('Warning : the number of points is lower than the dimension.') } # To check the experimental region if ( min(X)<0 || max(X)>1 ){ warning("The design is rescaling into the unit cube [0,1]^d.") M <- apply(X,2,max) m <- apply(X,2,min) for (j in 1:dim(X)[2]){ X[,j] <- (X[,j]-m[j])/(M[j]-m[j]) } } R <- list() DisC2 <- FALSE DisL2 <- FALSE DisL2star <- FALSE DisM2 <- FALSE DisS2 <- FALSE DisW2 <- FALSE DisMix2 <- FALSE if (length(type)==1 && type=='all'){ type <- c('C2','L2','L2star','M2','S2','W2','Mix2') } for(i in 1:length(type)){ type_ <- type[i] switch(type_, C2 = {DisC2 <- TRUE}, L2 = {DisL2 <- TRUE}, L2star = {DisL2star <- TRUE}, M2 = {DisM2 <- TRUE}, S2 = {DisS2 <- TRUE}, W2 = {DisW2 <- TRUE}, Mix2 = {DisMix2 <- TRUE}) } # centered L2-discrepancy #------------------------ if(DisC2 == TRUE){ s1 <- 0; s2 <- 0 for (i in 1:n){ p <- prod((1+0.5*abs(X[i,]-0.5)-0.5*((abs(X[i,]-0.5))^2))) s1 <- s1+p for (k in 1:n){ q <- prod((1+0.5*abs(X[i,]-0.5)+0.5*abs(X[k,]-0.5)-0.5*abs(X[i,]-X[k,]))) s2 <- s2+q } } R <- c(R,DisC2 = sqrt(((13/12)^dimension)-((2/n)*s1) + ((1/n^2)*s2))) } # L2-discrepancy #------------------------ if(DisL2 == TRUE){ s1 <- 0; s2 <- 0 for (i in 1:n){ p <- prod(X[i,]*(1-X[i,])) s1 <- s1+p for (k in 1:n){ q <- 1 for (j in 1:dimension){ q <- q*(1-max(X[i,j],X[k,j]))*min(X[i,j],X[k,j]) } s2 <- s2+q } } R <- c(R,DisL2 = sqrt(12^(-dimension) - (((2^(1-dimension))/n)*s1) + ((1/n^2)*s2))) } # L2star-discrepancy #------------------------ if(DisL2star == TRUE){ dL2<-0 for (j in 1:n){ for (i in 1:n){ if(i!=j){ t<-c() for (l in 1:dimension) t<-c(t,1-max(X[i,l],X[j,l])) t<-(prod(t))/(n^2) } else{ t1<-1-X[i,] t1<-prod(t1) t2<-1-X[i,]^2 t2<-prod(t2) t<-t1/(n^2)-((2^(1-dimension))/n)*t2 } dL2<-dL2+t} } R <- c(R,DisL2star = sqrt(3^(-dimension)+dL2)) } # modified L2-discrepancy #------------------------ if(DisM2 == TRUE){ s1 <- 0; s2 <- 0 for (i in 1:n){ p <- 1 p <- prod((3-(X[i,]*X[i,]))) s1 <- s1+p for (k in 1:n){ q <- 1 for (j in 1:dimension){ q <- q*(2-max(X[i,j],X[k,j])) } s2 <- s2+q } } R <- c(R,DisM2 = sqrt(((4/3)^dimension) - (((2^(1-dimension))/n)*s1) + ((1/n^2)*s2))) } # symmetric L2-discrepancy #------------------------ if(DisS2 == TRUE){ s1 <- 0; s2 <- 0 for (i in 1:n){ p <- prod((1+(2*X[i,])-(2*X[i,]*X[i,]))) s1 <- s1+p for (k in 1:n){ q <- prod((1-abs(X[i,]-X[k,]))) s2 <- s2+q } } R <- c(R,DisS2 = sqrt(((4/3)^dimension) - ((2/n)*s1) + ((2^dimension/n^2)*s2))) } # wrap-around L2-discrepancy #------------------------ if(DisW2 == TRUE){ s1 <- 0 for (i in 1:n){ for (k in 1:n){ p <- prod((1.5-((abs(X[i,]-X[k,]))*(1-abs(X[i,]-X[k,]))))) s1 <- s1+p } } R <- c(R , DisW2 = sqrt((-((4/3)^dimension) + ((1/n^2)*s1)))) } # mixture L2-discrepancy #------------------------ if(DisMix2 == TRUE){ s1 <- 0; s2 <- 0 for (i in 1:n){ p <- prod((5/3-0.25*abs(X[i,]-0.5)-0.25*((abs(X[i,]-0.5))^2))) s1 <- s1+p for (k in 1:n){ q <- prod((15/8-0.25*abs(X[i,]-0.5)-0.25*abs(X[k,]-0.5)-0.75*abs(X[i,]-X[k,])+0.5*((abs(X[i,]-X[k,]))^2))) s2 <- s2+q } } R <- c(R,DisMix2 = sqrt(((19/12)^dimension)-((2/n)*s1) + ((1/n^2)*s2))) } return(R) } DiceDesign/R/phiP.R0000644000176200001440000000152513770344364013512 0ustar liggesusers #####phiP##### # Compute the phiP criterion # (Lp norm of the sum of the inverses of the design inter-point distances) # Reference: Pronzato, L. and Muller, W.,2012, Design of computer experiments: # space filling and beyond, Statistics and Computing, 22:681-701. # A higher phiP corresponds to a more regular scaterring of design points #---------------------------------------------------------------------------| #args : design : the design | # p : the "p" in the Lp norm which is taken (default=50) | #out : the phiP criterion | #---------------------------------------------------------------------------| phiP<-function(design,p=50) { D<-dist(design) D<-D^(-p) fi_p<-(sum(D))^(1/p) return(fi_p) } DiceDesign/R/fcts_optimalLHSDesigns.R0000644000176200001440000002742413770344364017170 0ustar liggesusers ############################################################################ # Elementary functions for: # discrepSA_LHS,discrepESE_LHS, maximinSA_LHS and maximinESE_LHS ############################################################################ # EP = Elementary Permutation #####discrepancyTERM_L2_STAR##### #---------------------------------------------------------------------------| #args : i,j : two points x_i and x_j from the design m | # m : the design | #depends : both "term_oneDD" and "term_twoDD" | #---------------------------------------------------------------------------| discrepancyTERM_L2_STAR <- function(i,j,m) { n<-nrow(m) d<-ncol(m) if(i!=j) { t<-c() for (l in 1:d) {t<-c(t,1-max(m[i,l],m[j,l]))} t<-(prod(t))/(n^2) } else {t<-term_oneDD(i,m)/(n^2)-((2^(1-d))/n)*term_twoDD(i,m)} return(t) } #####term_twoDD##### term_twoDD=function(i,m) { t2<-1-m[i,]^2 t2<-prod(t2) return(t2) } #####term_oneDD##### term_oneDD=function(i,m) { t1<-1-m[i,] t1<-prod(t1) return(t1) } #####FUNCTION PERFORMING ELEMENTARY PERMUTATION (EP) IN LHD## #####USED IN SA ALGORITHMS##### #####lhs_EP##### #---------------------------------------------------------------------------| #args : m = the design | #out : l = list including design after EP, ligns and columns defining EP | #---------------------------------------------------------------------------| lhs_EP<-function(m) { G<-m if (!is.matrix(G)) G<-m[[1]] d<-ncol(G) n<-nrow(G) ligns<-trunc(runif(2,0,n))+1 column<-trunc(runif(1,0,d))+1 x<-G[ligns[1],column] G[ligns[1],column]<-G[ligns[2],column] G[ligns[2],column]<-x l<-list(G,ligns[1],ligns[2],column) return(l) } #####phiP_EP_ESE##### #---------------------------------------------------------------------------| #args : m : the design before the EP | # k : the column of lhs elementary permutation | # p : the power in phiP criterion | #out l : a list with new design and its mindist value | #---------------------------------------------------------------------------| phiP_EP_ESE<-function(m,k,p) { d<-ncol(m) n<-nrow(m) G<-m ligns<-trunc(runif(2,0,n))+1 x<-G[ligns[1],k] G[ligns[1],k]<-G[ligns[2],k] G[ligns[2],k]<-x l<-list(phiP(G,p),G) return(l) } #####INTERMEDIATE FUNCTIONS##### alpha_oneDD<-function(i1,i2,k,m) { alpha<-(1-m[i2,k])/(1-m[i1,k]) alpha } beta_oneDD<-function(i1,i2,k,m) { beta<-(1-m[i2,k]^2)/(1-m[i1,k]^2) beta } gamma_oneDD<-function(i1,i2,k,j,m) { gamma<-(1-max(m[i2,k],m[j,k]))/(1-max(m[i1,k],m[j,k])) gamma } #####DESIGN'S L2 STAR DISCREPANCY VALUE AFTER AN EP##### #####discrepancyL2_EP_ESE##### #---------------------------------------------------------------------------| #args : m : the design before the EP | # k : the column of lhs elementary permutation | # p : the square of the L2_star_discrepancy of m | #out l : list with dL2_2 (the square of the L2_star_discrepancy | # of the EP design and the matrix corresponding to the EP design| #depends : term_oneDD, term_twoDD, alpha_oneDD, beta_oneDD, | # gamma_oneDD, discrepancyTERM_L2_STAR | #---------------------------------------------------------------------------| discrepancyL2_EP_ESE<-function(m,k,p) { G<-m # On genere un autre LHS a partir de M, en le perturbant de facon minimale i<-trunc(runif(2,0,nrow(m)))+1 x<-G[i[1],k] G[i[1],k]<-G[i[2],k] G[i[2],k]<-x i1<-i[1] i2<-i[2] n<-nrow(m) d<-ncol(m) dL2_2<-p+(term_oneDD(i1,m)*alpha_oneDD(i1,i2,k,m))/(n^2)-beta_oneDD(i1,i2,k,m)*term_twoDD(i1,m)*((2^(1-d))/n)-discrepancyTERM_L2_STAR(i1,i1,m) dL2_2<-dL2_2+(term_oneDD(i2,m)/(alpha_oneDD(i1,i2,k,m)*(n^2)))-((term_twoDD(i2,m)*((2^(1-d))/n))/(beta_oneDD(i1,i2,k,m)))-discrepancyTERM_L2_STAR(i2,i2,m) y<-rep(0,n-2) w<-0 for (j in 1:n) {if (j!=i1 & j!=i2) { w<-w+1 y[w]<-gamma_oneDD(i1,i2,k,j,m)*discrepancyTERM_L2_STAR(i1,j,m)-discrepancyTERM_L2_STAR(i1,j,m)+(discrepancyTERM_L2_STAR(i2,j,m)/(gamma_oneDD(i1,i2,k,j,m)))-discrepancyTERM_L2_STAR(i2,j,m) } } y<-sum(y) dL2_2<-dL2_2+2*y l<-list(dL2_2,G) return(l) } #####DESIGN'S L2 DISCREPANCY VALUE AFTER AN EP##### #####discrepancyL2_EP##### #---------------------------------------------------------------------------| #args : m : the design before the EP | # i1,i2 : the two ligns of the lhs elementary permutation | # k : the column of lhs elementary permutation | # p : the square of the L2_star_discrepancy of m | #out dL2_2 : the square of the L2_star_discrepancy of the EP design | #depends : term_oneDD, term_twoDD, alpha_oneDD, beta_oneDD, | # gamma_oneDD, discrepancyTERM_L2_STAR | #---------------------------------------------------------------------------| discrepancyL2_EP<-function(m,i1,i2,k,p) { n<-nrow(m) d<-ncol(m) dL2_2<-p+(term_oneDD(i1,m)*alpha_oneDD(i1,i2,k,m))/(n^2)-beta_oneDD(i1,i2,k,m)*term_twoDD(i1,m)*((2^(1-d))/n)-discrepancyTERM_L2_STAR(i1,i1,m) dL2_2<-dL2_2+(term_oneDD(i2,m)/(alpha_oneDD(i1,i2,k,m)*(n^2)))-((term_twoDD(i2,m)*((2^(1-d))/n))/(beta_oneDD(i1,i2,k,m)))-discrepancyTERM_L2_STAR(i2,i2,m) y<-rep(0,n-2) w<-0 for (j in 1:n) {if (j!=i1 & j!=i2) { w<-w+1 y[w]<-gamma_oneDD(i1,i2,k,j,m)*discrepancyTERM_L2_STAR(i1,j,m)-discrepancyTERM_L2_STAR(i1,j,m)+(discrepancyTERM_L2_STAR(i2,j,m)/(gamma_oneDD(i1,i2,k,j,m)))-discrepancyTERM_L2_STAR(i2,j,m) } } y<-sum(y) dL2_2<-dL2_2+2*y return(dL2_2) } #####gammaWDD##### gammaWDD=function(i1,i2,k,j,m) { gamma<-((3/2)-(abs(m[i2,k]-m[j,k])*(1-abs(m[i2,k]-m[j,k]))))/((3/2)-(abs(m[i1,k]-m[j,k])*(1-abs(m[i1,k]-m[j,k])))) gamma } #####ccWDD##### ccWDD=function(i,j,m) { n<-nrow(m) if(i!=j) {c<-(3/2)-((abs(m[i,]-m[j,]))*(1-abs(m[i,]-m[j,]))) c<-(prod(c))/(n^2)} c } #####discrepancyW2_EP##### #---------------------------------------------------------------------------| #args : m : the design before the EP | # i1,i2 : the two ligns of the lhs elementary permutation | # k : the column of lhs elementary permutation | # p : the square of the W2_star_discrepancy of m | #out dW2_2 : the square of the W2_star_discrepancy of the new design | #depends : ccWDD, gammaWDD | #---------------------------------------------------------------------------| discrepancyW2_EP=function(m,i1,i2,k,p) { # m=le LHS initial, i1 et i2=les deux lignes de la permutation, k la colonne, # DW=discrepance Wrap-around de m au carre n<-nrow(m) dW2_2<-rep(0,n-2) w<-0 for (j in 1:n) {if (j!=i1 & j!=i2) {w<-w+1 dW2_2[w]<-gammaWDD(i1,i2,k,j,m)*ccWDD(i1,j,m)-ccWDD(i1,j,m)+ccWDD(i2,j,m)/(gammaWDD(i1,i2,k,j,m))-ccWDD(i2,j,m)} } dW2_2<-sum(dW2_2) dW2_2<-p+2*dW2_2 return(dW2_2) } #####discrepancyW2_EP_ESE##### #---------------------------------------------------------------------------| #args : m : the design before the EP | # k : the column of lhs elementary permutation | # p : the square of the W2_star_discrepancy of m | #out l : a list with new design and it W2 discrepancy value | #depends : ccWDD, gammaWDD | #---------------------------------------------------------------------------| discrepancyW2_EP_ESE=function(m,k,p) { n<-nrow(m) G<-m i<-trunc(runif(2,0,n))+1 i1=i[1] i2=i[2] x<-G[i1,k] G[i1,k]<-G[i2,k] G[i2,k]<-x dW2<-rep(0,n-2) w<-0 for (j in 1:n) {if (j!=i1 & j!=i2) {w<-w+1 dW2[w]<-gammaWDD(i1,i2,k,j,m)*ccWDD(i1,j,m)-ccWDD(i1,j,m)+ccWDD(i2,j,m)/(gammaWDD(i1,i2,k,j,m))-ccWDD(i2,j,m)} } dW2<-sum(dW2) dW2<-sqrt(p+2*dW2) l<-list(dW2,G) return(l) } #####alphaDD##### alphaDD<-function(i1,i2,k,m) { alpha<-(1+abs(m[i2,k]))/(1+abs(m[i1,k])) alpha } #####betaDD##### betaDD<-function(i1,i2,k,m) { beta<-(2-abs(m[i2,k]))/(2-abs(m[i1,k])) beta } #####gammaDD##### gammaDD<-function(i1,i2,k,j,m) { gamma<-(2+abs(m[i2,k])+abs(m[j,k])-abs(m[i2,k]-m[j,k]))/(2+abs(m[i1,k])+abs(m[j,k])-abs(m[i1,k]-m[j,k])) gamma } #####gDD##### gDD<-function(i,m) { g<-1+abs(m[i,]) g<-prod(g) g } #####hDD##### hDD<-function(i,m) { h<-1+(abs(m[i,])/2)-0.5*(m[i,]^2) h<-prod(h) h } #####ccDD##### ccDD<-function(i,j,m) { n<-nrow(m) if(i!=j) {c<-0.5*(2+abs(m[i,])+abs(m[j,])-abs(m[i,]-m[j,])) c<-(prod(c))/(n^2)} else { c<-gDD(i,m)/(n^2)-2*hDD(i,m)/n} c } #####discrepancyC2_EP##### #---------------------------------------------------------------------------| #args : m : the design before the EP | # i1,i2 : the two ligns of the lhs elementary permutation | # k : the column of lhs elementary permutation | # p : the square of the C2_star_discrepancy of m | #out dC2_2 : the square of the C2_star_discrepancy of the new design | #depends : alphaDD, betaDD, gammaDD, gDD, hDD, ccDD | #---------------------------------------------------------------------------| discrepancyC2_EP=function(m,i1,i2,k,p) { # m=le LHS initial, i1 et i2=les deux lignes de la permutation, k la colonne, # DW=discrepance Wrap-around de m au carre n<-nrow(m) m<-m-0.5 dC2_2<-p+(gDD(i1,m)*alphaDD(i1,i2,k,m))/(n^2)-2*alphaDD(i1,i2,k,m)*betaDD(i1,i2,k,m)*hDD(i1,m)/n dC2_2<-dC2_2-ccDD(i1,i1,m)-ccDD(i2,i2,m) dC2_2<-dC2_2+(gDD(i2,m)/((n^2)*alphaDD(i1,i2,k,m)))-(2*hDD(i2,m)/(n*alphaDD(i1,i2,k,m)*betaDD(i1,i2,k,m))) x<-rep(0,n-2) w<-0 for (j in 1:n) {if (j!=i1 & j!=i2) { w<-w+1 x[w]<-gammaDD(i1,i2,k,j,m)*ccDD(i1,j,m)-ccDD(i1,j,m)+ccDD(i2,j,m)/(gammaDD(i1,i2,k,j,m))-ccDD(i2,j,m)} } x<-sum(x) dC2_2<-dC2_2+2*x return(dC2_2) } #####discrepancyC2_EP_ESE##### #---------------------------------------------------------------------------| #args : m : the design before the EP | # k : the column of lhs elementary permutation | # p : the square of the C2_star_discrepancy of m | #out l : a list with new design and it C2 discrepancy value | #depends : alphaDD, betaDD, gammaDD, gDD, hDD, ccDD | #---------------------------------------------------------------------------| discrepancyC2_EP_ESE=function(m,k,p) { # m=le LHS initial, i1 et i2=les deux lignes de la permutation, k la colonne, # DW=discrepance Wrap-around de m au carre n<-nrow(m) G<-m i<-trunc(runif(2,0,n))+1 i1=i[1] i2=i[2] x<-G[i1,k] G[i1,k]<-G[i2,k] G[i2,k]<-x m<-m-0.5 dC2<-p+(gDD(i1,m)*alphaDD(i1,i2,k,m))/(n^2)-2*alphaDD(i1,i2,k,m)*betaDD(i1,i2,k,m)*hDD(i1,m)/n dC2<-dC2-ccDD(i1,i1,m)-ccDD(i2,i2,m) dC2<-dC2+(gDD(i2,m)/((n^2)*alphaDD(i1,i2,k,m)))-(2*hDD(i2,m)/(n*alphaDD(i1,i2,k,m)*betaDD(i1,i2,k,m))) x<-rep(0,n-2) w<-0 for (j in 1:n) {if (j!=i1 & j!=i2) { w<-w+1 x[w]<-gammaDD(i1,i2,k,j,m)*ccDD(i1,j,m)-ccDD(i1,j,m)+ccDD(i2,j,m)/(gammaDD(i1,i2,k,j,m))-ccDD(i2,j,m)} } x<-sum(x) dC2<-sqrt(dC2+2*x) l=list(dC2,G) return(l) } DiceDesign/R/straussDesign.R0000644000176200001440000000300613770344364015444 0ustar liggesusers straussDesign <- function(n,dimension,RND,alpha=0.5,repulsion=0.001,NMC=1000,constraints1D=0,repulsion1D=0.0001,seed=NULL){ # if no seed is provided in argument, choice of the seed for 'runif' if (is.null(seed)){ seed <- as.numeric(Sys.time()) } set.seed(seed) # Case with potential different to zero # the C code is computed for beta = -ln(gamma) if (alpha != 0){ repulsion <- -log(repulsion) } # End of the case with no constraint # Case with no constraints if(constraints1D!=0){ R1D <- 0.75/n } # initial design init <- runif(n*dimension) out <- .C("C_StraussDesign", as.double(init), as.integer(n), as.integer(dimension), as.integer(constraints1D), as.integer(NMC), as.double(RND), as.double(alpha), as.double(repulsion), as.double(repulsion1D),as.integer(seed),ans = double(n * dimension), PACKAGE="DiceDesign") if (alpha != 0){ repulsion <- exp(-repulsion) } # Outputs if (constraints1D==0){ return(list(n=n, dimension=dimension, design_init=t(matrix(init,ncol=n,nrow=dimension,byrow=FALSE)), radius=RND, alpha=alpha, repulsion=repulsion, NMC=NMC, seed=seed, constraints1D=constraints1D, design=matrix(out$ans,nrow=n,ncol=dimension,byrow=TRUE))) } else { return(list(n=n,dimension=dimension, design_init=matrix(init,ncol=dimension,nrow=n,byrow=TRUE), radius=RND, alpha=alpha, repulsion=repulsion,NMC=NMC, seed=seed, constraints1D=constraints1D, repulsion1D=repulsion1D, design=matrix(out$ans,nrow=n, ncol=dimension,byrow=TRUE))) } } DiceDesign/R/nolhdrDesign.R0000644000176200001440000000212313770344364015225 0ustar liggesusersnolhdrDesign <- function(dimension, range = c(0, 1)) { # NOLHDRdes <- get(load(system.file("data", "NOLHDRdesigns.rda", package = "DiceDesign"))) NOLHdes <- get("NOLHdesigns", pos = "package:DiceDesign") NOLHDRdes <- get("NOLHDRdesigns", pos = "package:DiceDesign") dfr <- if (dimension %in% 2:7) NOLHdes[["nolh2_7"]] else if (dimension %in% 8:29) NOLHDRdes[[dimension - 7]] else stop("dimension must be in 2:29") # dfr <- if (dimension %in% 2:7) NOLHdesigns[["nolh2_7"]] # else if (dimension %in% 8:29) NOLHDRdesigns[[dimension - 7]] # else stop("dimension must be in 2:29") mat <- as.matrix(dfr[,seq_len(dimension)]) mat <- if (identical(range, c(1,1))) mat else if (identical(range, c(0, 0))) mat +(nrow(mat)-1)/2 else (mat/(nrow(mat)-1) +0.5) *diff(range) + range[1] dimnames(mat) <- NULL # dimnames(mat) <- list(seq_len(nrow(mat)), # paste0("X", seq_len(ncol(mat)))) list(n = nrow(mat), dimension = dimension, design = mat) } DiceDesign/R/rss3d.R0000644000176200001440000001337313770344364013654 0ustar liggesusersrss3d<-function(design, lower, upper, gof.test.type="greenwood", gof.test.stat=NULL, transform=NULL, n.angle=60, graphics=1, trace=TRUE){ design <- as.matrix(design) n <- dim(design)[1] d <- dim(design)[2] #if (ncol(design)!=3) stop("'design' must have 3 columns") #if ((length(lower)!=3) & (length(upper)!=3)) stop("lower and upper must be 3-dimensional vectors") #dimension <- 3 # some arguments checks if (d < 3) stop("rss3d is for d-dimensional designs with d >= 3") if (!is.element(gof.test.type, c("greenwood", "qm", "ks", "V", "cvm"))) stop("The goodness-of-fit test must be one of: Greenwood, Quesenberry-Miller, Kolmogorov-Smirnov, V = (D+) + (D-), or Cramer-Von Mises") if ((length(lower)!=d) & (length(upper)!=d)) stop("lower and upper must be d-dimensional vectors") # domain transformation to [-1,1]^d for (j in 1:d) { design.col <- design[,j] design.col.min <- min(design.col) if (design.col.min < lower[j]) stop('the minimum of design values is not compatible with lower') design.col.max <- max(design.col) if (design.col.max > upper[j]) stop('the maximum of design values is not compatible with upper') design.col <- 2*((design.col - lower[j])/(upper[j] - lower[j]) - 0.5) design[,j] <- design.col } # angles definition theta.degree <- seq(from=0, to=180, length=n.angle+1) theta.degree <- theta.degree[1:n.angle] theta.degree <- as.matrix(theta.degree) theta <- theta.degree*2*pi/360 n.theta <- length(theta) cos.theta <- cos(theta); sin.theta <- sin(theta) phi.degree <- seq(from=-90, to=90, length=n.angle+10) phi.degree <- phi.degree[1:n.angle] phi.degree <- as.matrix(phi.degree) phi <- phi.degree*2*pi/360 n.phi <- length(phi) cos.phi <- cos(phi); sin.phi <- sin(phi) # Loops on theta and phi to build the matrix of statistic values, one of which is implemented in C ax <- cos.theta%*%t(cos.phi) ay <- sin.theta%*%t(cos.phi) az <- rep(1, n.theta)%*%t(sin.phi) print.out <- data.frame(global.stat = rep(NA, (d*(d-1)*(d-2))%/%6)) # loop over all triplets of dimensions anglewise.stat.max <- anglewise.stat <- matrix(0, n.theta, n.phi) global.stat.array <- array(NA, c(d, d, d)) global.stat.max <- 0 meter <- 0 if (trace) { cat("\n3D Radial Scanning Statistic (RSS) with ", toupper(gof.test.type), " statistic\n", sep="") cat("Discretization step (in degree) : ", 180/n.angle, sep="") cat("\n\nMaximum of RS statistic values (global statistic) per triplet of dimensions") } for (i1 in 1:(d-2)) { x <- design[, i1] for (i2 in ((i1+1):(d-1))) { y <- design[, i2] for (i3 in ((i2+1):d)) { z <- design[, i3] for (j in 1:n.phi){ # 1st step : compute the matrix of the F(projected points onto Vect(cos.theta, sin.theta)) out <- .C("C_rss3Dloop", as.double(x), as.double(y), as.double(z), as.double(ax), as.double(ay), as.double(az), as.integer(n), as.integer(n.theta), as.integer(n.phi), as.integer(j-1), ans=double(n * n.theta), PACKAGE="DiceDesign") F.projections <- matrix(out$ans, n, n.theta) # 2nd step: test statistic computations for (k in 1:n.theta) { anglewise.stat[k,j] <- unif.test.statistic(x=F.projections[,k], type=gof.test.type, transform=transform) } # end loop over theta (k) } # end loop over phi (j) # compute the worst value over all angles and store it global.stat <- max(anglewise.stat) global.stat.array[i1,i2,i3] <- global.stat if (global.stat > global.stat.max) { global.stat.max <- global.stat triplet.worst <- c(i1,i2,i3) anglewise.stat.max <- anglewise.stat } meter <- meter + 1 print.out[meter, 1] <- global.stat name.current <- paste("(", i1, ",", i2, ",", i3, ")", sep="") row.names(print.out)[meter] <- name.current if (trace) cat("\n", name.current, " ", global.stat, sep="") } # end loop i3 } # end loop i2 } # end loop i1 if (trace) cat("\n\n") # threshold at significance level 5% if (is.null(gof.test.stat)) { gof.test.stat <- unif.test.quantile(type=gof.test.type, n=n, alpha=0.05) } # Compute the worst direction for the worst case design <- design[, triplet.worst] x <- design[, 1] y <- design[, 2] z <- design[, 3] index.max <- which.max(anglewise.stat.max) ax.max <- ax[index.max] ay.max <- ay[index.max] az.max <- az[index.max] phi.max <- theta.max <- NA for (j in 1:n.phi) { for (k in 1:n.theta) { if (abs(anglewise.stat.max[k,j]-global.stat.max)<1e-10) { phi.max <- phi[j] theta.max <- theta[k] } } } dir.max <- c(ax.max, ay.max, az.max) # 3D graph with package rgl ## if (graphics > 0) { if (requireNamespace("rgl", quietly = TRUE)) { rgl::open3d() projections <- as.matrix(design) %*% dir.max rgl::plot3d(x, y, z, size=5, col="blue", xlim=c(-1,1), ylim=c(-1,1), zlim=c(-1,1), xlab="", ylab="", zlab="") a.max <- max(abs(dir.max)) rgl::plot3d(c(-1,1)*ax.max/a.max, c(-1,1)*ay.max/a.max, c(-1,1)*az.max/a.max, col="red", type="l", size=2, add=TRUE) for (i in 1:n) { h <- projections[i]*dir.max - design[i,] if (max(abs(h)) > 1e-8) { lambda <- min(min((sign(h) - design[i,])/h), 1) rgl::plot3d(c(design[i,1], design[i,1] + lambda*h[1]), c(design[i,2], design[i,2] + lambda*h[2]), c(design[i,3], design[i,3] + lambda*h[3]), type="l", col="red", add=TRUE) } if (max(abs(projections[i]*dir.max))<=1) rgl::plot3d(projections[i]*dir.max[1], projections[i]*dir.max[2], projections[i]*dir.max[3], pch=20, col="red", size=5, add=TRUE) } par(mfrow=c(1,1)) } else { print("Error : the package rgl is not installed") } } # end of conditional block: "if graphics > 0" return(list(stat=anglewise.stat.max, angle=data.frame(theta=theta, phi=phi), global.stat=global.stat.array, print.out=print.out, gof.test.stat=gof.test.stat, worst.case=triplet.worst, worst.dir=dir.max)) } DiceDesign/R/lhsDesign.R0000644000176200001440000000202613770344364014527 0ustar liggesuserslhsDesign <- function(n, dimension, randomized=TRUE, seed=NULL){ # arguments : n = number of points # dimension = number of variables # randomized = logical for randomized or centered points # seed = value of the random seed # output : a list containing the arguments and the LHS design # if no seed is provided in argument, choice of the seed for 'runif' and 'sample' if (is.null(seed)){ seed <- as.numeric(Sys.time()) } set.seed(seed) # Randomized LHS: U[0,1]-sampling of n x dim values if (randomized) ran = matrix(runif(n*dimension),nrow=n,ncol=dimension) # Centered LHS else ran = matrix(0.5,nrow=n,ncol=dimension) x = matrix(0,nrow=n,ncol=dimension) # initializing matrix x for (i in 1:dimension) { idx = sample(1:n) # vector of permutations of [1 to n] P = (idx-ran[,i]) / n # vecteur of probabilities x[,i] <- P } # Outputs: return(list(n=n,dimension=dimension,design=x,randomized=randomized,seed=seed)) } DiceDesign/R/wspDesign.R0000644000176200001440000000437513770344364014563 0ustar liggesusers#####ALGORITHM of WOOTON SERGENT PHAN-TAN-LUU (WSP)##### ####wspDesign##### #---------------------------------------------------------------------------| #args : design : matrix (n,d) containing n design points | # d is the dimension | # dmin : minimal bound for mindist final design | # init : define the initialization point of the algorithm | #out : a list containing the input arguments plus | # the space filling design according to mindist criterion | #---------------------------------------------------------------------------| wspDesign <- function(design, dmin, init = "center"){ # dmin must be given m <- design n <-nrow(m) # Number of points in m. d <-ncol(m) # Dimension of m. if (init == "center") A <- rbind(m, rep(0.5, d)) # add center point else A <- rbind(m, runif(d)) D<-as.matrix(dist(A)) diag(D)<-rep(Inf,n+1) # Matrix of distances between all pairs of point (both design points and center) base<-as.numeric(which.min(D[n+1,1:n])) # the nearest design point to center point D=D[1:n,-(n+1)] # Matrix of distances between all pairs of design points points<-base # vectors containing base points and suppressed points as well x<-base # vector containing only base points while (length(points)0) {D[,co]<-rep(Inf,n) D[co,]<-rep(Inf,n) points<-c(points,co)} #suppressed points new_base<-which.min(D[base,]) #new base point points<-c(points,base) D[base,]<-D[,base]<-rep(Inf,n) base<-new_base x<-c(x,base)} Mres <- m[x,] # Final matrix #final space-filling design Mresidual <- m[-x, ] # Design of "residual" points (not in Mres) return(list(InitialDesign = design, dmin = dmin, design = Mres, ResidualDesign = Mresidual)) return(Mres) } DiceDesign/R/coverage.R0000644000176200001440000000151113770344364014400 0ustar liggesuserscoverage <- function(design){ # Compute the coverage measure # For a regular mesh, c=0 # input : design of n experiments X <- as.matrix(design) n <- dim(X)[1] dimension <- dim(X)[2] if ( n < dimension ){ stop('Warning : the number of points is lower than the dimension.') } # To check the experimental region if ( min(X)<0 || max(X)>1 ){ warning("The design is rescaling into the unit cube [0,1]^d.") M <- apply(X,2,max) m <- apply(X,2,min) for (j in 1:dim(X)[2]){ X[,j] <- (X[,j]-m[j])/(M[j]-m[j]) } } # Compute the distance between the points. Distance <- as.matrix(dist(X)) diag(Distance) <- 10e3 Dmin <- as.matrix(apply(Distance,2,min)) gammabar <-(1/n)*sum(Dmin) s <- 0 for (i in 1:n){ s <- s+ (Dmin[i]-gammabar)*(Dmin[i]-gammabar) } cov <-(1/gammabar)*((1/n)*s)^(1/2) return(cov) } DiceDesign/R/rss2d.R0000644000176200001440000001303213770344364013643 0ustar liggesusersrss2d <- function(design, lower, upper, gof.test.type="greenwood", gof.test.stat=NULL, transform=NULL, n.angle=360, graphics=1, trace=TRUE, lines.lwd=1, lines.lty="dotted", ...) { design <- as.matrix(design) n <- dim(design)[1] d <- dim(design)[2] # some arguments checks if (!is.element(gof.test.type, c("greenwood", "qm", "ks", "V", "cvm"))) stop("The goodness-of-fit test must be one of: Greenwood, Quesenberry-Miller, Kolmogorov-Smirnov, V = (D+) + (D-), or Cramer-Von Mises") if ((length(lower)!=d) & (length(upper)!=d)) stop("lower and upper must be d-dimensional vectors") # domain transformation to [-1,1]^d for (j in 1:d) { design.col <- design[,j] design.col.min <- min(design.col) if (design.col.min < lower[j]) stop('the minimum of design values is not compatible with lower') design.col.max <- max(design.col) if (design.col.max > upper[j]) stop('the maximum of design values is not compatible with upper') design.col <- 2*((design.col - lower[j])/(upper[j] - lower[j]) - 0.5) design[,j] <- design.col } # compute the subdivision of the (half) circle in cartesian coordinates theta.degree <- seq(from=0, to=180, length=n.angle+1) theta.degree <- theta.degree[1:n.angle] theta.degree <- as.matrix(theta.degree) theta <- theta.degree*2*pi/360 cos.theta <- cos(theta) sin.theta <- sin(theta) n.theta <- length(theta) subdiv.halfcircle <- cbind(cos.theta, sin.theta) # loop over all pairs of dimensions global.stat <- matrix(NA, d, d) global.stat.max <- 0 if (trace) { cat("\n2D Radial Scanning Statistic (RSS) with ", toupper(gof.test.type), " statistic\n", sep="") cat("Discretization step (in degree) : ", 180/n.angle, sep="") cat("\n\nMaximum of RS statistic values (global statistic) per pair of dimensions") } print.out <- data.frame(global.stat = rep(NA, (d*(d-1))%/%2)) meter <- 0 for (i in 1:(d-1)) { x <- design[,i] for (j in ((i+1):d)) { y <- design[,j] # compute anglewise statistic # 1st step : compute the matrix of the F(projected points onto Vect(cos.theta, sin.theta)) out <- .C("C_rss2Dloop", as.double(x), as.double(y), as.double(cos.theta), as.double(sin.theta), as.integer(n), as.integer(n.theta), ans=double(n * n.theta), PACKAGE="DiceDesign") F.projections <- matrix(out$ans, n, n.theta) # 2nd step : for each angle, compute the statistic # In future version, should be computed inside the C loop anglewise.stat.ij <- matrix(NA, n.theta, 1) for (angle in 1:n.theta) { anglewise.stat.ij[angle] <- unif.test.statistic(x=F.projections[,angle], type=gof.test.type, transform=transform) } # compute the worst value over all angles and store it global.stat.ij <- max(anglewise.stat.ij) global.stat[i,j] <- global.stat[j,i] <- global.stat.ij if (global.stat.ij > global.stat.max) { global.stat.max <- global.stat.ij pair.worst <- c(i,j) anglewise.stat <- anglewise.stat.ij } meter <- meter + 1 print.out[meter, 1] <- global.stat.ij name.current <- paste("(", i, ",", j, ")", sep="") row.names(print.out)[meter] <- name.current if (trace) cat("\n", name.current, " ", global.stat.ij, sep="") } # end loop j } # end loop i if (trace) cat("\n\n") # rss curve rss.curve.x <- anglewise.stat*subdiv.halfcircle[,1] rss.curve.y <- anglewise.stat*subdiv.halfcircle[,2] # statistic upper tail percentage points # see D'Agostino and Stephens "Goodness-of-fit techniques", 1986 if (is.null(gof.test.stat)) { gof.test.stat <- unif.test.quantile(type=gof.test.type, n=n, alpha=0.05) } # compute worst direction for the worst case design.names <- names(as.data.frame(design)) design <- design[ , pair.worst] design.names <- design.names[pair.worst] anglewise.stat.max <- max(anglewise.stat) index.max <- which.max(anglewise.stat) cos.theta.max <- subdiv.halfcircle[index.max, 1] sin.theta.max <- subdiv.halfcircle[index.max, 2] dir.max <- c(cos.theta.max, sin.theta.max) # -------------------- # graphics if required # -------------------- if (graphics>=0) { if (is.element(graphics, c(0,1))) { par(mfrow=c(1,2+graphics)) plot(design, xlim=c(-1,1), ylim=c(-1,1), xlab=design.names[1], ylab=design.names[2]) } # draw the rss curve if (graphics>0) { rx <- c(rss.curve.x, -rss.curve.x, rss.curve.x[1]) ry <- c(rss.curve.y, -rss.curve.y, rss.curve.y[1]) graph.size <- max(abs((anglewise.stat.max)*dir.max), gof.test.stat)*1.05 plot(rx, ry, xlim=c(-graph.size,graph.size), ylim=c(-graph.size, graph.size), xlab="", ylab="", ...) # draw the circle with radius equal to the threshold at significance level 5% theta_aux <- seq(from=0, to=2*pi+0.1,by=0.1) lines(gof.test.stat*cos(theta_aux), gof.test.stat*sin(theta_aux)) # draw the coordinate axis in dotted lines abline(h=0, v=0, lty=lines.lty, col="black", lwd=lines.lwd) } if (is.element(graphics, c(0,1))) { plot(design, xlim=c(-1,1), ylim=c(-1,1), xlab=design.names[1], ylab=design.names[2]) projections <- design %*% dir.max points(projections*dir.max[1], projections*dir.max[2], pch=20, col="red") if (cos.theta.max==0) { lines(c(0,0), c(-1,1), col="red") } else lines(c(-1,1), c(-1,1)*sin.theta.max/cos.theta.max, col="red") for (i in 1:n) lines(c(design[i,1], projections[i]*cos.theta.max), c(design[i,2], projections[i]*sin.theta.max), lty=lines.lty, lwd=lines.lwd) } par(mfrow=c(1,1)) } return(list(global.stat=global.stat, worst.case=pair.worst, worst.dir=dir.max, stat=as.numeric(anglewise.stat), angle=as.numeric(theta), curve=cbind(c(rss.curve.x,-rss.curve.x), c(rss.curve.y,-rss.curve.y)), gof.test.stat=gof.test.stat)) } DiceDesign/R/factDesign.R0000644000176200001440000000132113770344364014653 0ustar liggesusersfactDesign <- function (dimension, levels) { if (length(levels) == 1) { levels <- rep(levels, dimension) } else if (length(levels) != dimension) { stop("argument 'levels' must be of length 1 or 'dimension'") } x <- matrix(0, prod(levels), dimension) for (i in 1:dimension) { xi <- 1 for (j in (1:dimension)[(1:dimension) < i]) { xi <- xi %x% rep(1, levels[j]) } xi <- xi %x% seq(0, 1, length.out = levels[i]) for (j in (1:dimension)[(1:dimension) > i]) { xi <- xi %x% rep(1, levels[j]) } x[, i] <- xi } n <- dim(x)[1] return(list(design = x, n = n, dimension = dimension, levels = levels)) } DiceDesign/R/faureprimeDesign.R0000644000176200001440000000312714010771422016066 0ustar liggesusers faureprimeDesign <- function(dimension, u = 2, range = c(0, -1)){ if (!is.null(range)) { stopifnot(!any(c(NA, NaN, -Inf, Inf) %in% range)) stopifnot(length(range) == 2L) } stopifnot(u >= 2) stopifnot(dimension >= 3) stopifnot(dimension <= 199) u <- floor(u) dimension <- floor(dimension) primesupto199 <- c(2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67, 71,73,79,83,89,97,101,103,107,109,113,127,131,137, 139,149,151,157,163,167,173,179,181,191,193,197,199) prime <- primesupto199[primesupto199 >= dimension][1] stopifnot(prime^(u+1) <= 200^3) pu <- prime^u n <- pu-1 design <- pu*runif.faure(n, dimension)$design if (!is.null(range)) { range <- as.numeric(range) if (identical(range, c(0,0)) | identical(range, c(0,1)) | identical(range, c(0,-1)) | identical(range, c(1,1)) | identical(range, c(-1,-1)) | identical(range, c(-1,1))) { # c(0, 0) (0, n) already defined # c(1,1) (1-n, n-1) = (2-p^u, p^u -2) # c(0,1) (0, 1) # c(0,-1) (p^-u, 1-p^-u) # c(-1,-1) (-1+2p^(-u) , 1-2p^(-u)) # c(-1, 1) (-1, 1) if (identical(range, c(1,1))) design <- 2*design -n-1 if (identical(range, c(0,1))) design <- (-1 +design)/(n-1) if (identical(range, c(0,-1))) design <- design/(n+1) if (identical(range, c(-1,-1))) design <- (2*design -n-1)/(n+1) if (identical(range, c(-1,1))) design <- (2*design -n-1)/(n-1) } else { stopifnot(range[2] > range[1]) design <- (-1 +design)/(n-1)*diff(range) +range[1] } } list(design = design, n = (prime^u)-1, dimension = dimension, prime = prime, u = u) } DiceDesign/R/unif.test.statistic.R0000644000176200001440000000336513770344364016543 0ustar liggesusersunif.test.statistic <- function(x, type, transform=NULL) { if (!is.null(transform)) { if (transform=="spacings") { ordered.sample <- sort(x) ordered.sample <- c(0, ordered.sample, 1) spacings <- diff(ordered.sample) ordered.spacings <- sort(spacings) n <- length(x) S0 <- (n+1)*ordered.spacings[1] S <- (n+1-(1:n))*diff(ordered.spacings) V <- cumsum(c(S0, S)) x <- V } } if (type=="greenwood") { ordered.sample <- sort(x) ordered.sample <- c(0, ordered.sample, 1) spacings <- diff(ordered.sample) stat <- sum(spacings^2) } else if (type=="spacings.max") { ordered.sample <- sort(x) ordered.sample <- c(0, ordered.sample, 1) spacings <- diff(ordered.sample) n <- length(x) stat <- max(abs(spacings-1/n)) } else if (type=="qm") { # Quesenberry-Miller ordered.sample <- sort(x) n.sample <- length(x) ordered.sample <- c(0, ordered.sample, 1) spacings <- diff(ordered.sample) stat <- sum(spacings^2)+sum(spacings[1:n.sample]*spacings[2:(n.sample+1)]) } else if (type=="ks") { ordered.sample <- sort(x) n.sample <- length(x) Dplus <- max((1:n.sample)/n.sample - ordered.sample) Dminus <- max(ordered.sample - (0:(n.sample-1))/n.sample) stat <- max(Dplus, Dminus) } else if (type=="V") { ordered.sample <- sort(x) n.sample <- length(x) Dplus <- max((1:n.sample)/n.sample - ordered.sample) Dminus <- max(ordered.sample - (0:(n.sample-1))/n.sample) stat <- Dplus + Dminus } else if (type=="cvm") { ordered.sample <- sort(x) n.sample <- length(x) stat <- sum((ordered.sample - (seq(from = 1, to = (2 * n.sample - 1), by = 2)/(2 * n.sample)))^2) + 1/(12 * n.sample) } else stop("The goodness-of-fit test must be one of: Greenwood, Quesenberry-Miller, Kolmogorov-Smirnov, V=D+ + D-, or Cramer-Von Mises") return(stat) } DiceDesign/NEWS.md0000644000176200001440000000153314534301655013356 0ustar liggesusers# DiceDesign 1.9 - 2021-02-10 - New function: faureprimeDesign - Remove accents (UTF-8 characters) in fcts_optimalLHSDesigns.R - Set .R and .Rd files to ANSI encoding and Unix end of line - Add reference Owen A.B. Sobol sequence - New discrepancy metric (mixture discrepancy) in discrepancyCriteria.R # DiceDesign 1.8-1 - 2019-07-31 - Modified function: wspDesign - New functions: scaleDesign, unscaleDesign # DiceDesign 1.7-5 - 2018-07-30 - New datasets: NOLHdesigns, NOLHDRdesigns - New functions: nolhDesign, nolhdrDesign, olhDesign, xDRDN - New references: Cioppa, De Rainville, Nguyen - lazydata=TRUE # DiceDesign 1.7 - 2015-06-15 # DiceDesign 1.6 - 2014-05-09 # DiceDesign 1.5 - 2014-05-06 # DiceDesign 1.4 - 2014-01-10 # DiceDesign 1.3 - 2013-04-24 # DiceDesign 1.2 - 2013-02-14 # DiceDesign 1.1 - 2011-09-04 # DiceDesign 1.0 - 2010-02-18 DiceDesign/MD50000644000176200001440000000704414534331712012570 0ustar liggesusers99e8bcbb736fbaab21ab28e5ea88020d *DESCRIPTION 465f6eb102e8d4a342e38f7e40c3df24 *NAMESPACE 5ca17d938073729fa63df21d5dc20983 *NEWS.md 51f5f9fb6cf5d645478933e5c890cd86 *R/coverage.R fdd075ed3f65b86ed9378f228943fa7c *R/discrepancyCriteria.R ef2aecfecca109d2d29d4a2ff9b6de69 *R/dmaxDesign.R c84f4fcc8a28d9a51c69fdbece88a4d6 *R/factDesign.R a0b08c0710ad05962f4e75246fa3c0a4 *R/faureprimeDesign.R 3a016d6b65f4b12265b4851c461cfc7e *R/fcts_optimalLHSDesigns.R 7bcd4d687576473b31a12b90e0cdff87 *R/lhsDesign.R a165b3ae54d97012db5d0f67e69d90e9 *R/meshRatio.R 381e7039c81710db06a138d17097f0e7 *R/mindist.R 5bb18de3252cb9078cdc3ffe54144788 *R/mstCriteria.R c6266d70cca2cf52c960830fd0a511d3 *R/nolhDesign.R 518218e49dfbb54872dc002109e3cd97 *R/nolhdrDesign.R 79b3fc67e627e2211eb66c0b2c4c95c3 *R/olhDesign.R 9f8a08b0c9bcc945639ddb9f5d5680ef *R/optimalLHSDesigns.R b6249a7abfc7c3606b3fb24d5622dd5e *R/phiP.R 3a7ed9be932591214a8c08914a2983b7 *R/rss2d.R 20ff17121f4b7b63aacd2f77d0ae858e *R/rss3d.R 2196c3b8eae395170c6bf241e7f6d14a *R/runif.faure.R c7246444533625f7edaedd517606f638 *R/scaleDesign.R f92cfe1cd1da496e4f06636a3c978fe8 *R/straussDesign.R cb3894c47b3b769157e2cb03031a214b *R/sysdata.rda 13820eede0dd9a755bc5226cd88db542 *R/unif.test.quantile.R b8df43f8e3fa110759bc4ce76582385a *R/unif.test.statistic.R 558d9d28dc7e23a6fa66d6f7b0e8eab2 *R/unscaleDesign.R 805a0278e2a04503029ccd01596c7076 *R/wspDesign.R b8eb0f8ae9bf090ac2b953e978fb4ec2 *R/xDRDN.R 82e0b4ed73a897134a21bda11d40c063 *data/NOLHDRdesigns.rda c7b2e1d5e955e71e920243a8053faf6f *data/NOLHdesigns.rda 23863b0e30a622f8e9f43e92e8b26878 *data/OA131.txt.gz c0165816111e72c1b51f7e16574193c3 *data/OA131_scrambled.txt.gz 55efb55f8d8626ea1b7021fd813c345d *data/datalist a7b7f943ffc322aed57ed42dceb13fdc *inst/CITATION 0ab499a6cc4c135f3800d6ed95fdbdd2 *man/DiceDesign-package.Rd 6ee2db332910ad99392eef3c1e9f243e *man/NOLHDRdesigns.Rd 6ba811254b27ae981d503a14c80b104b *man/NOLHdesigns.Rd d4d7da194e4eb1e2e06705002472b5b5 *man/OA131.Rd 66dc828dfd2b927d5a17711c545d2839 *man/OA131_scrambled.Rd f95de54b2186f5f29161ff0a4a7f7f7f *man/coverage.Rd 0ec56fc02c34f2e3b38aead09aab7d20 *man/discrepESE_LHS.Rd 8f59b5986f631a2cde2a67965ac43980 *man/discrepSA_LHS.Rd fc292a7eccea2b1031525884404c26ee *man/discrepancyCriteria.Rd 069db438d3dba78b81135460a8962212 *man/dmaxDesign.Rd 076c16090f90cfb0d399857e741f4a61 *man/factDesign.Rd de6317e7d4bea9110e77e5c91480bd73 *man/faureprimeDesign.Rd 8a24cd927be8647ac50bf6a324219de8 *man/lhsDesign.Rd 6a893e4c3bbd71fb589c2857837af901 *man/maximinESE_LHS.Rd fc7d37f043b2ec9f933972ce51795c88 *man/maximinSA_LHS.Rd f5450bed8aa17aa8b993210757385b4a *man/meshRatio.Rd 6f19392a2e1bc794b06c4feba8265846 *man/mindist.Rd fe32d53dad74ae9fc13daa2cc2228341 *man/mstCriteria.Rd 45e687f3b44752f32f864a48e63892b0 *man/nolhDesign.Rd aa7e22ef8b8b7fc1446331d8e48f4383 *man/nolhdrDesign.Rd 00db89ce9f9e4923c6ecd4e3b12ecf68 *man/olhDesign.Rd 0cf1e72fc587f6f42e8f21098762f672 *man/phiP.Rd dcaf6dc60f8523b128ef5c0efae46faf *man/rss2d.Rd 5a5b96e42de0cf008ea47384f84e74e0 *man/rss3d.Rd 855794ad1e46528df308af281b27b603 *man/runif.faure.Rd 53cfcc5993ab47a5b11f3092b6840fec *man/scaleDesign.Rd c84e2d7e751cf6d090993d0dc4b63e7e *man/straussDesign.Rd c3285360634910e935b4dc8fa991be7b *man/unif.test.quantile.Rd 5562821a158f2702bbb26f5ec58ed71b *man/unif.test.statistic.Rd 4e457320b5a46bb9a6f28d1d94f126d8 *man/unscaleDesign.Rd 289435475cf9ee43479926958d73cc1f *man/wspDesign.Rd 8ada7af500148912650818aa4d39efa8 *man/xDRDN.Rd 486f95a322fc40e947a5cd882a02f9f4 *src/C_StraussDesign.c 48ea05205dcdc37b139309bdde2bbfb0 *src/C_rss.c 4f1ab31b4b38d574b949c33895beb988 *src/DiceDesign_init.c DiceDesign/inst/0000755000176200001440000000000014532316557013240 5ustar liggesusersDiceDesign/inst/CITATION0000644000176200001440000000154514532316557014402 0ustar liggesuserscitHeader("To cite DiceDesign and DiceEval in publications use:") bibentry("Article", title = "{DiceDesign} and {DiceEval}: Two {R} Packages for Design and Analysis of Computer Experiments", author = c(as.person("Delphine Dupuy"), as.person("C{\\'e}line Helbert"), as.person("Jessica Franco")), journal = "Journal of Statistical Software", year = "2015", volume = "65", number = "11", pages = "1--38", url = "https://www.jstatsoft.org/v65/i11/", textVersion = paste("Delphine Dupuy, Celine Helbert, Jessica Franco (2015).", "DiceDesign and DiceEval: Two R Packages for Design and Analysis of Computer Experiments.", "Journal of Statistical Software, 65(11), 1-38.", "URL https://www.jstatsoft.org/v65/i11/") )