<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
</head>
<body>
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
<div id="divtagdefaultwrapper" style="font-size:12pt;color:#000000;font-family:Calibri,Arial,Helvetica,sans-serif;" dir="ltr">
<p>I see the problem : you have to call setGradient before assembling bending_moment in the RandomVector.</p>
<p>Put the 2 gradient lines after <span>"bending_moment = NumericalMathFunction(model)" and you should be set.</span><br>
</p>
<p>j<br>
</p>
</div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>De :</b> Anita Laera <anita.laera87@gmail.com><br>
<b>Envoyé :</b> jeudi 15 juin 2017 11:35:39<br>
<b>À :</b> Julien Schueller | Phimeca<br>
<b>Cc :</b> users<br>
<b>Objet :</b> Re: [ot-users] TR: SpaceFillingC2 speed</font>
<div> </div>
</div>
<div>
<div dir="ltr">
<div>This is the script:</div>
<div><br>
</div>
<div>from openturns import *</div>
<div><br>
</div>
<div><br>
</div>
<div>class MomentBeam(OpenTURNSPythonFunction):</div>
<div><br>
</div>
<div>    def __init__(self):</div>
<div>        OpenTURNSPythonFunction.__init__(self, 2, 1)</div>
<div>        self.iteration_results = []</div>
<div><br>
</div>
<div>    def _exec(self, x):</div>
<div>        P = x[0]</div>
<div>        L = x[1]</div>
<div>        result = P*L</div>
<div>        return [result]<br>
</div>
<div><br>
</div>
<div>model = MomentBeam()</div>
<div>bending_moment = NumericalMathFunction(model)</div>
<div><br>
</div>
<div>force_distribution = Normal(50, 5.0)</div>
<div>L_distribution = Normal(10, 1.5)</div>
<div><br>
</div>
<div>collectionMarginals = [force_distribution, L_distribution]</div>
<div>copuleNormal = IndependentCopula(2)</div>
<div><br>
</div>
<div>inputDistribution = ComposedDistribution(collectionMarginals, copuleNormal)</div>
<div>inputRandomVector = RandomVector(inputDistribution)</div>
<div>outputVariableOfInterest = RandomVector(bending_moment, inputRandomVector)</div>
<div><br>
</div>
<div>threshold = 650</div>
<div>myEvent = Event(outputVariableOfInterest, Greater(), threshold)</div>
<div><br>
</div>
<div>optim_solver = AbdoRackwitz()</div>
<div><br>
</div>
<div>epsilon = [0.5] * 2</div>
<div>steps = ConstantStep(epsilon)</div>
<div>gradient = CenteredFiniteDifferenceGradient(steps, bending_moment.getEvaluation())</div>
<div>bending_moment.setGradient(gradient)</div>
<div><br>
</div>
<div>meanVector = inputRandomVector.getMean()</div>
<div>myAlgoFORM = FORM(optim_solver, myEvent, meanVector)<br>
</div>
<div>myAlgoFORM.run()<br>
</div>
<div><br>
</div>
<div><br>
</div>
<div>I just read the reply from Regis, thank you.</div>
<div>I don't want to change the value in the ResourceMap. I would like to assign the gradient after creating the function, but if I do as in my script (the same as in your email) I get these values for the input variables:</div>
<div><br>
</div>
<div>input_variables = [<b>[50.0, 10.0], [50.00001, 10.0], [49.99999, 10.0], [50.0, 10.00001], [50.0, 9.99999]</b>, [54.61538461609919, 12.076923076536275], [54.615394616099195, 12.076923076536275], [54.61537461609919, 12.076923076536275], [54.61538461609919,
 12.076933076536275], [54.61538461609919, 12.076913076536275], [54.65186974033122, 11.893340613204874], [54.651879740331225, 11.893340613204874], [54.65185974033122, 11.893340613204874], [54.65186974033122, 11.893350613204873], [54.65186974033122, 11.893330613204874],
 [54.60372712296079, 11.903939968340785], [50.0, 10.0]]<br>
</div>
<div><br>
</div>
<div>while, if I change the ResourceMap setting the default epsilon to 0.5, then I get:</div>
<div><br>
</div>
<div>input_variables = [[<b>50.0, 10.0], [50.5, 10.0], [49.5, 10.0], [50.0, 10.5], [50.0, 9.5]</b>, [54.61538461538462, 12.076923076923075], [55.11538461538462, 12.076923076923075], [54.11538461538462, 12.076923076923075], [54.61538461538462, 12.576923076923075],
 [54.61538461538462, 11.576923076923075], [54.65186973899018, 11.893340613512574], [55.15186973899018, 11.893340613512574], [54.15186973899018, 11.893340613512574], [54.65186973899018, 12.393340613512574], [54.65186973899018, 11.393340613512574], [54.60372712265884,
 11.903939968405464], [50.0, 10.0]]<br>
</div>
<div><br>
</div>
</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">2017-06-15 11:18 GMT+02:00 Julien Schueller | Phimeca <span dir="ltr">
<<a href="mailto:schueller@phimeca.com" target="_blank">schueller@phimeca.com</a>></span>:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="HOEnZb">
<div class="h5">
<div dir="ltr">
<div id="m_4184646523684766562divtagdefaultwrapper" style="font-size:12pt;color:#000000;font-family:Calibri,Arial,Helvetica,sans-serif" dir="ltr">
<div style="color:rgb(0,0,0)">
<div>
<div id="m_4184646523684766562divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:#000000;font-family:Calibri,Arial,Helvetica,sans-serif">
<p>Hello Anita,</p>
<p><br>
</p>
<p>Are you also using openturns from conda on osx ?</p>
<p>Could you show us the script about your default epsilon ? That should work even without loading the xml defaults.<br>
</p>
<p><br>
</p>
<p>j<br>
</p>
</div>
<hr style="display:inline-block;width:98%">
<div id="m_4184646523684766562divRplyFwdMsg" dir="ltr"><font style="font-size:11pt" color="#000000" face="Calibri, sans-serif"><b>De :</b> Anita Laera <<a href="mailto:anita.laera87@gmail.com" target="_blank">anita.laera87@gmail.com</a>><br>
<b>Envoyé :</b> jeudi 15 juin 2017 10:56:15<br>
<b>À :</b> Julien Schueller | Phimeca<br>
<b>Cc :</b> roy; <a href="mailto:haddad@imacs.polytechnique.fr" target="_blank">haddad@imacs.polytechnique.fr</a>; users<br>
<b>Objet :</b> Re: [ot-users] SpaceFillingC2 speed</font>
<div> </div>
</div>
<div>
<div dir="ltr">I have the same message every time I start a calculation.
<div><br>
</div>
<div>Also, when I specify a certain value for the epsilon of the centered gradient I want to use for AbdoRackwitz() in FORM, it keeps on using the default epsilon 1e-5 (as in the ResourceMap).</div>
<div><br>
</div>
</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">2017-06-15 10:44 GMT+02:00 Julien Schueller | Phimeca <span dir="ltr">
<<a href="mailto:schueller@phimeca.com" target="_blank">schueller@phimeca.com</a>></span>:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div style="word-wrap:break-word">
<div id="m_4184646523684766562m_6544854418484903299divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:#000000;font-family:Calibri,Arial,Helvetica,sans-serif">
<p>Hi @roy</p>
<p><br>
</p>
<p>The message: "<span>WRN - The configuration file has not been found, using default parameters. "</span></p>
<p>Is due to an error of the xml configuration loading code specific to osx.</p>
<p>I tried to debug it once, the openturns.conf file was really in the correct location though.</p>
<p>Sofiane, do you have this message when you compile on osx box ?. I wonder if it's related to conda.
<br>
</p>
<p><br>
</p>
<p>j<br>
</p>
<p><br>
</p>
<p><br>
</p>
<p><br>
</p>
<p><br>
</p>
<p><br>
</p>
<p><br>
</p>
<p><br>
</p>
</div>
<hr style="display:inline-block;width:98%">
<div id="m_4184646523684766562m_6544854418484903299divRplyFwdMsg" dir="ltr"><font style="font-size:11pt" color="#000000" face="Calibri, sans-serif"><b>De :</b>
<a href="mailto:users-bounces@openturns.org" target="_blank">users-bounces@openturns.org</a> <<a href="mailto:users-bounces@openturns.org" target="_blank">users-bounces@openturns.org</a>> de la part de roy <<a href="mailto:roy@cerfacs.fr" target="_blank">roy@cerfacs.fr</a>><br>
<b>Envoyé :</b> jeudi 15 juin 2017 10:15:39<br>
<b>À :</b> D. Barbier<br>
<b>Cc :</b> users<br>
<b>Objet :</b> Re: [ot-users] SpaceFillingC2 speed</font>
<div> </div>
</div>
<div>
<div>Hello Denis,</div>
<div><br>
</div>
<div>Indeed now OT is faster using ot.Sample(sample).</div>
<div><br>
</div>
<div>Regarding numba, it has to be pure python and not numpy for it to work efficiently.</div>
<div><br>
</div>
<div>
<div>import numpy as np</div>
<div>import timeit</div>
<div>import openturns as ot</div>
<div>from numba import jit, njit</div>
<div><br>
</div>
<div><br>
</div>
<div>def discrepancy(sample):</div>
<div>    n_sample = len(sample)</div>
<div>    dim = sample.shape[1]</div>
<div><br>
</div>
<div>    abs_ = abs(sample - 0.5)</div>
<div>    disc1 = np.sum(np.prod(1 + 0.5 * abs_ - 0.5 * abs_ ** 2, axis=1))</div>
<div><br>
</div>
<div>    prod_arr = 1</div>
<div>    for i in range(dim):</div>
<div>        s0 = sample[:, i]</div>
<div>        prod_arr *= (1 +</div>
<div>                     0.5 * abs(s0[:, None] - 0.5) + 0.5 * abs(s0 - 0.5) -</div>
<div>                     0.5 * abs(s0[:, None] - s0))</div>
<div>    disc2 = prod_arr.sum()</div>
<div><br>
</div>
<div>    c2 = (13 / 12) ** dim - 2 / n_sample * disc1 + 1 / (n_sample ** 2) * disc2</div>
<div>    return np.sqrt(c2)</div>
<div><br>
</div>
<div>@jit</div>
<div>def discrepancy_numba(sample):</div>
<div>    n_sample = len(sample)</div>
<div>    dim = sample.shape[1]</div>
<div><br>
</div>
<div>    abs_ = abs(sample - 0.5)</div>
<div>    disc1 = np.sum(np.prod(1 + 0.5 * abs_ - 0.5 * abs_ ** 2, axis=1))</div>
<div><br>
</div>
<div>    prod_arr = 1</div>
<div>    for i in range(dim):</div>
<div>        s0 = sample[:, i]</div>
<div>        prod_arr *= (1 +</div>
<div>                     0.5 * abs(s0[:, None] - 0.5) + 0.5 * abs(s0 - 0.5) -</div>
<div>                     0.5 * abs(s0[:, None] - s0))</div>
<div>    disc2 = prod_arr.sum()</div>
<div><br>
</div>
<div>    c2 = (13 / 12) ** dim - 2 / n_sample * disc1 + 1 / (n_sample ** 2) * disc2</div>
<div>    return np.sqrt(c2)</div>
<div><br>
</div>
<div>@njit</div>
<div>def discrepancy_faster_numba(sampl<wbr>e):</div>
<div>    disc1 = 0</div>
<div>    n_sample = len(sample)</div>
<div>    dim = sample.shape[1]</div>
<div><br>
</div>
<div>    for i in range(n_sample):</div>
<div>        prod = 1</div>
<div>        for item in sample[i]:</div>
<div>            sub = abs(item - 0.5)</div>
<div>            prod *= 1 + 0.5 * sub - 0.5 * sub ** 2</div>
<div>        disc1 += prod</div>
<div><br>
</div>
<div>    disc2 = 0</div>
<div>    for i in range(n_sample):</div>
<div>        for j in range(n_sample):</div>
<div>            prod = 1</div>
<div>            for k in range(dim):</div>
<div>                a = 0.5 * abs(sample[i,k] - 0.5)</div>
<div>                b = 0.5 * abs(sample[j,k] - 0.5)</div>
<div>                c = 0.5 * abs(sample[i,k] - sample[j,k])</div>
<div>                prod *= 1 + a + b - c</div>
<div>            disc2 += prod</div>
<div><br>
</div>
<div>    c2 = (13 / 12) ** dim - 2 / n_sample * disc1 + 1 / (n_sample ** 2) * disc2</div>
<div>    return np.sqrt(c2)</div>
<div><br>
</div>
<div><br>
</div>
<div>sample = np.random.random_sample((500, 2))</div>
<div>ot_sample = ot.Sample(sample)</div>
<div>print(discrepancy(sample))</div>
<div>print(discrepancy_numba(sample<wbr>))</div>
<div>print(discrepancy_faster_numba<wbr>(sample))</div>
<div>print(ot.SpaceFillingC2().eval<wbr>uate(sample))</div>
<div><br>
</div>
<div>print('Function time: ', timeit.repeat('discrepancy(sam<wbr>ple)', number=500, repeat=4, setup="from __main__ import discrepancy, sample"))</div>
<div>print('numba time: ', timeit.repeat('discrepancy_num<wbr>ba(sample)', number=500, repeat=4, setup="from __main__ import discrepancy_numba, sample"))</div>
<div>print('Fast numba time: ', timeit.repeat('discrepancy_fas<wbr>ter_numba(sample)', number=500, repeat=4, setup="from __main__ import discrepancy_faster_numba, sample"))</div>
<div>print('OT time: ', timeit.repeat('ot.SpaceFilling<wbr>C2().evaluate(ot_sample)', number=500, repeat=4, setup="from __main__ import ot_sample, ot"))</div>
</div>
<div><br>
</div>
<div><br>
</div>
<div><br>
</div>
<div>
<div>[34m [1mWRN - The configuration file has not been found, using default parameters. [0m      #### IF YOU HAPPEN TO KNOW HOW TO REMOVE THIS BY THE WAY</div>
<div>0.0181493670249</div>
<div>0.0181493670249</div>
<div>0.018149367024149737</div>
<div>0.018149367024149737</div>
<div>Function time:  [4.525451728957705, 4.541200206964277, 4.4143504980020225, 4.56408092204947]</div>
<div>numba time:  [4.3976798499934375, 4.876463262015022, 5.385470865992829, 5.138608552981168]</div>
<div>Fast numba time:  [0.6634743280010298, 0.6538278009975329, 0.7077985780197196, 0.6579875709721819]</div>
<div>OT time:  [0.7988348260405473, 0.7220299079781398, 0.7797102630138397, 0.7526425909600221]</div>
<div>[Finished in 53.8s]</div>
</div>
<div><br>
</div>
<div><br>
</div>
<div>So using numba is here again faster. Even if I use a large sample (1000) numba is slightly faster.</div>
<div><br>
</div>
<div><br>
</div>
<div>Sincerely,</div>
<br>
<div>
<div style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;word-wrap:break-word">
<div style="word-wrap:break-word">
<div style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px;font-style:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">
<b>Pamphile ROY</b><br>
Chercheur doctorant en Quantification d’Incertitudes<br>
CERFACS - Toulouse (31) - France<br>
<a href="tel:+33%205%2061%2019%2031%2057" value="+33561193157" target="_blank">+33 (0) 5 61 19 31 57</a><br>
<a href="tel:+33%207%2086%2043%2024%2022" value="+33786432422" target="_blank">+33 (0) 7 86 43 24 22</a></div>
</div>
</div>
<br class="m_4184646523684766562m_6544854418484903299Apple-interchange-newline">
<br class="m_4184646523684766562m_6544854418484903299Apple-interchange-newline">
</div>
<br>
<div>
<blockquote type="cite">
<div>Le 14 juin 2017 à 23:20, D. Barbier <<a href="mailto:bouzim@gmail.com" target="_blank">bouzim@gmail.com</a>> a écrit :</div>
<br class="m_4184646523684766562m_6544854418484903299Apple-interchange-newline">
<div>
<div>Hello Pamphile,<br>
<br>
The problem is that your sample case is small, so the conversion from<br>
a numpy array into an OT Sample has a significant cost.<br>
If you rerun your benchmark on<br>
 otsample = ot.Sample(sample)<br>
(or directly generate a random sample with OT), you will see that our<br>
version is much faster.<br>
<br>
BTW I was intrigued by your results with numba, but could not achieve<br>
the same speedup, my gain is almost negligible.  Can you please show<br>
your test case with numba?  Did you use a GPU?<br>
<br>
Regards,<br>
Denis<br>
<br>
2017-06-14 10:32 GMT+02:00 roy <<a href="mailto:roy@cerfacs.fr" target="_blank">roy@cerfacs.fr</a>>:<br>
<blockquote type="cite">Hi,<br>
<br>
Thanks for the feedback, indeed that could explain the behaviours.<br>
<br>
<br>
Pamphile ROY<br>
Chercheur doctorant en Quantification d’Incertitudes<br>
CERFACS - Toulouse (31) - France<br>
<a href="tel:+33%205%2061%2019%2031%2057" value="+33561193157" target="_blank">+33 (0) 5 61 19 31 57</a><br>
<a href="tel:+33%207%2086%2043%2024%2022" value="+33786432422" target="_blank">+33 (0) 7 86 43 24 22</a><br>
<br>
<br>
<br>
Le 14 juin 2017 à 10:15, HADDAD Sofiane <<a href="mailto:sofiane_haddad@yahoo.fr" target="_blank">sofiane_haddad@yahoo.fr</a>> a écrit :<br>
<br>
Hi,<br>
<br>
It also depends on sample size<br>
<br>
With sample's size=1000, I get this :<br>
<br>
0.00975831343631<br>
0.009758313432154839<br>
Function time:  [19.408187157008797, 21.296883990988135, 19.92589810100617]<br>
OT time:  [4.125010760006262, 4.1429947539872956, 4.138353090995224]<br>
<br>
For small samples, maybe we spend more time for the generation of small<br>
objects than the evaluation itself<br>
<br>
Regards,<br>
Sofiane<br>
<br>
<br>
Le Mercredi 14 juin 2017 0h22, D. Barbier <<a href="mailto:bouzim@gmail.com" target="_blank">bouzim@gmail.com</a>> a écrit :<br>
<br>
<br>
On 2017-06-13 12:01 GMT+02:00 roy wrote:<br>
<blockquote type="cite">Hi everyone,<br>
<br>
I was playing with Centered discrepancy and wrote my function before I saw<br>
the class SpaceFillingC2.<br>
There is no issue except that I get 2x speedup with my python version.<br>
There<br>
might be room for improvement as I can even get a 10x on my version using<br>
numba.<br>
</blockquote>
[...]<br>
<br>
Hello Pamphile,<br>
<br>
I will have a look, thanks a lot for your feedback.<br>
Regards,<br>
<br>
Denis<br>
<br>
______________________________<wbr>_________________<br>
OpenTURNS users mailing list<br>
<a href="mailto:users@openturns.org" target="_blank">users@openturns.org</a><br>
<a href="http://smtp.datacenter.ibo.fr:32224/?dmVyPTEuMDAxJiY2MWQ5YjA4OTI1NmIxYWY0Nj01OTQyNEJCMV8zMzk1OF8xMjc2MV8xJiYyMGNjMjM5Njg2ZjM1Nzc9MTIzMyYmdXJsPWh0dHAlM0ElMkYlMkZvcGVudHVybnMlMkVvcmclMkZtYWlsbWFuJTJGbGlzdGluZm8lMkZ1c2Vycw==" target="_blank">http://openturns.org/mailman/l<wbr>istinfo/users</a><br>
<br>
<br>
<br>
</blockquote>
</div>
</div>
</blockquote>
</div>
<br>
</div>
</div>
<br>
______________________________<wbr>_________________<br>
OpenTURNS users mailing list<br>
<a href="mailto:users@openturns.org" target="_blank">users@openturns.org</a><br>
<a href="http://smtp.datacenter.ibo.fr:32224/?dmVyPTEuMDAxJiY2MWQ5YjA4OTI1NmIxYWY0Nj01OTQyNEJCMV8zMzk1OF8xMjc2MV8xJiYyMGNjMjM5Njg2ZjM1Nzc9MTIzMyYmdXJsPWh0dHAlM0ElMkYlMkZvcGVudHVybnMlMkVvcmclMkZtYWlsbWFuJTJGbGlzdGluZm8lMkZ1c2Vycw==" rel="noreferrer" target="_blank">http://openturns.org/mailman/l<wbr>istinfo/users</a><br>
<br>
</blockquote>
</div>
<br>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<br>
______________________________<wbr>_________________<br>
OpenTURNS users mailing list<br>
<a href="mailto:users@openturns.org">users@openturns.org</a><br>
<a href="http://smtp.datacenter.ibo.fr:32224/?dmVyPTEuMDAxJiY5MDRlNjQ3ZmJiMzhjNTg4Yz01OTQyNTRFRF81NDg0Ml84NDY5XzEmJjc5Mjc1ODk3OWY5YzY1NT0xMjMzJiZ1cmw9aHR0cCUzQSUyRiUyRm9wZW50dXJucyUyRW9yZyUyRm1haWxtYW4lMkZsaXN0aW5mbyUyRnVzZXJz" rel="noreferrer" target="_blank">http://openturns.org/mailman/<wbr>listinfo/users</a><br>
<br>
</blockquote>
</div>
<br>
</div>
</div>
</body>
</html>