<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=iso-8859-9">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page Section1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 70.85pt 70.85pt;}
div.Section1
        {page:Section1;}
-->
</style>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]-->
</head>

<body lang=TR link=blue vlink=purple>

<div class=Section1>

<p class=MsoNormal>Hi All,<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>I needed to find the cheapest combination among given data
and I developed an algorithm for this task. It works correctly. But it takes much
time (nearly 2 minutes) for second function to find the result while it is just<o:p></o:p></p>

<p class=MsoNormal>one second for the first function. How can I improve the calculation
speed?<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>Thanks in advance.<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>Here is the code:<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal># -*- coding: cp1254 -*-<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>from numpy import *<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal># Cihazlar [UI, UO, AO, BO, Fiyat]<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>M0100=array([10,0,0,0,291])<o:p></o:p></p>

<p class=MsoNormal>M0320=array([32,0,0,0,504])<o:p></o:p></p>

<p class=MsoNormal>M016160=array([16,0,0,16,604])<o:p></o:p></p>

<p class=MsoNormal>ME812U=array([12,8,0,0,817])<o:p></o:p></p>

<p class=MsoNormal>SE6104A=array([10,0,4,6,287])<o:p></o:p></p>

<p class=MsoNormal>SE6166=array([16,0,6,6,404])<o:p></o:p></p>

<p class=MsoNormal>ZN220=array([2,0,0,2,62])<o:p></o:p></p>

<p class=MsoNormal>ZN253=array([5,0,3,2,124])<o:p></o:p></p>

<p class=MsoNormal>ZN551=array([5,0,1,5,104])<o:p></o:p></p>

<p class=MsoNormal>ZN141V=array([4,0,1,1,129])<o:p></o:p></p>

<p class=MsoNormal>ZN341V=array([4,0,1,3,136])<o:p></o:p></p>

<p class=MsoNormal>MELGR200=array([0,0,0,0,1239])<o:p></o:p></p>

<p class=MsoNormal>MELGR25=array([0,0,0,0,575])<o:p></o:p></p>

<p class=MsoNormal>ME812uLGR=array([12,8,0,0,1452])<o:p></o:p></p>

<p class=MsoNormal>MX0320=array([32,0,0,0,430])<o:p></o:p></p>

<p class=MsoNormal>MX16160=array([16,0,0,16,537])<o:p></o:p></p>

<p class=MsoNormal>MEX016U=array([16,0,0,0,249])<o:p></o:p></p>

<p class=MsoNormal>MEX48U=array([8,4,0,0,210])<o:p></o:p></p>

<p class=MsoNormal>MEX88U=array([8,8,0,0,301])<o:p></o:p></p>

<p class=MsoNormal>MEX816U=array([16,8,0,0,470])<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>Xo=ME812U.copy()<o:p></o:p></p>

<p class=MsoNormal>Yo=MEX816U.copy()<o:p></o:p></p>

<p class=MsoNormal>Zo=MX0320.copy()<o:p></o:p></p>

<p class=MsoNormal>To=MX16160.copy()<o:p></o:p></p>

<p class=MsoNormal>Wo=MEX88U.copy()<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>hedef = array([20,15,5,6,0]) # Saha istasyonu için gerekli
giriş çıkış sayısı [AI, AO, BI, BO]<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>def CombiHesapla1(X,Y,Z,istenen,max_expander):<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>#max_expander Kontrol Cihazı Başına max. Expander sayısı<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>    kalanUO=0<o:p></o:p></p>

<p class=MsoNormal>    combinations=[]<o:p></o:p></p>

<p class=MsoNormal>    min_price=999999999<o:p></o:p></p>

<p class=MsoNormal>    cheapest_combi=[]<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>    for i in range(1,5):<o:p></o:p></p>

<p class=MsoNormal>        for j in i*range(max_expander+1):<o:p></o:p></p>

<p class=MsoNormal>            for k in i*range(max_expander+1):<o:p></o:p></p>

<p class=MsoNormal>                    <o:p></o:p></p>

<p class=MsoNormal>                if (j+k)<=(i*max_expander):<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>                    mevcut=zeros((1,5)) <o:p></o:p></p>

<p class=MsoNormal>                    mevcut+=X*i<o:p></o:p></p>

<p class=MsoNormal>                    mevcut+=Y*j<o:p></o:p></p>

<p class=MsoNormal>                    mevcut+=Z*k<o:p></o:p></p>

<p class=MsoNormal>                    m_UI=mevcut[0][0]<o:p></o:p></p>

<p class=MsoNormal>                    m_UO=mevcut[0][1]<o:p></o:p></p>

<p class=MsoNormal>                    m_AO=mevcut[0][2]<o:p></o:p></p>

<p class=MsoNormal>                    m_BO=mevcut[0][3]<o:p></o:p></p>

<p class=MsoNormal>                    i_AI=istenen[0]<o:p></o:p></p>

<p class=MsoNormal>                    i_AO=istenen[1]<o:p></o:p></p>

<p class=MsoNormal>                    i_BI=istenen[2]<o:p></o:p></p>

<p class=MsoNormal>                    i_BO=istenen[3]<o:p></o:p></p>

<p class=MsoNormal>                    <o:p></o:p></p>

<p class=MsoNormal>                    if (m_UI>=(i_AI+i_BI)):<o:p></o:p></p>

<p class=MsoNormal>                        if ((m_BO>=i_BO)):<o:p></o:p></p>

<p class=MsoNormal>                            kalanUO=m_UO<o:p></o:p></p>

<p class=MsoNormal>                        elif ((m_UO+m_BO)>=i_BO):<o:p></o:p></p>

<p class=MsoNormal>                            kalanUO=(m_UO+m_BO)-i_BO<o:p></o:p></p>

<p class=MsoNormal>                            if ((kalanUO+m_AO)>=i_AO):<o:p></o:p></p>

<p class=MsoNormal>                                temp=[]<o:p></o:p></p>

<p class=MsoNormal>                                temp.append(i)<o:p></o:p></p>

<p class=MsoNormal>                                temp.append(j)<o:p></o:p></p>

<p class=MsoNormal>                                temp.append(k)<o:p></o:p></p>

<p class=MsoNormal>                                fiyat=i*X[4]+j*Y[4]+k*Z[4]<o:p></o:p></p>

<p class=MsoNormal>                                temp.append(fiyat)<o:p></o:p></p>

<p class=MsoNormal>                                combinations.append(temp)<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>    if len(combinations)>0:<o:p></o:p></p>

<p class=MsoNormal>        for row in combinations:<o:p></o:p></p>

<p class=MsoNormal>            if (row[3]<min_price):<o:p></o:p></p>

<p class=MsoNormal>                min_price=row[3]<o:p></o:p></p>

<p class=MsoNormal>                cheapest_combi=row<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>    return cheapest_combi<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>def CombiHesapla2(X,Y,Z,T,W,istenen,max_expander):<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>#max_expander Kontrol Cihazı Başına max. Expander sayısı<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>    kalanUO=0<o:p></o:p></p>

<p class=MsoNormal>    combinations=[]<o:p></o:p></p>

<p class=MsoNormal>    min_price=999999999<o:p></o:p></p>

<p class=MsoNormal>    cheapest_combi=[]<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>    for i in range(1,5):<o:p></o:p></p>

<p class=MsoNormal>        for j in i*range(max_expander+1):<o:p></o:p></p>

<p class=MsoNormal>            for k in i*range(max_expander+1):<o:p></o:p></p>

<p class=MsoNormal>                for m in i*range(max_expander+1):<o:p></o:p></p>

<p class=MsoNormal>                    for r in i*range(max_expander+1):<o:p></o:p></p>

<p class=MsoNormal>                    <o:p></o:p></p>

<p class=MsoNormal>                        if (j+k+m+r)<=(i*max_expander):<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>                            mevcut=zeros((1,5)) <o:p></o:p></p>

<p class=MsoNormal>                            mevcut+=X*i<o:p></o:p></p>

<p class=MsoNormal>                            mevcut+=Y*j<o:p></o:p></p>

<p class=MsoNormal>                            mevcut+=Z*k<o:p></o:p></p>

<p class=MsoNormal>                            mevcut+=T*m<o:p></o:p></p>

<p class=MsoNormal>                            mevcut+=W*r<o:p></o:p></p>

<p class=MsoNormal>                            m_UI=mevcut[0][0]<o:p></o:p></p>

<p class=MsoNormal>                            m_UO=mevcut[0][1]<o:p></o:p></p>

<p class=MsoNormal>                            m_AO=mevcut[0][2]<o:p></o:p></p>

<p class=MsoNormal>                            m_BO=mevcut[0][3]<o:p></o:p></p>

<p class=MsoNormal>                            i_AI=istenen[0]<o:p></o:p></p>

<p class=MsoNormal>                            i_AO=istenen[1]<o:p></o:p></p>

<p class=MsoNormal>                            i_BI=istenen[2]<o:p></o:p></p>

<p class=MsoNormal>                            i_BO=istenen[3]<o:p></o:p></p>

<p class=MsoNormal>                            <o:p></o:p></p>

<p class=MsoNormal>                            if (m_UI>=(i_AI+i_BI)):<o:p></o:p></p>

<p class=MsoNormal>                                if ((m_BO>=i_BO)):<o:p></o:p></p>

<p class=MsoNormal>                                    kalanUO=m_UO<o:p></o:p></p>

<p class=MsoNormal>                                elif ((m_UO+m_BO)>=i_BO):<o:p></o:p></p>

<p class=MsoNormal>                                    kalanUO=(m_UO+m_BO)-i_BO<o:p></o:p></p>

<p class=MsoNormal>                                    if
((kalanUO+m_AO)>=i_AO):<o:p></o:p></p>

<p class=MsoNormal>                                        temp=[]<o:p></o:p></p>

<p class=MsoNormal>                                        temp.append(i)<o:p></o:p></p>

<p class=MsoNormal>                                        temp.append(j)<o:p></o:p></p>

<p class=MsoNormal>                                        temp.append(k)<o:p></o:p></p>

<p class=MsoNormal>                                        temp.append(m)<o:p></o:p></p>

<p class=MsoNormal>                                        temp.append(r)<o:p></o:p></p>

<p class=MsoNormal>                                        fiyat=i*X[4]+j*Y[4]+k*Z[4]+m*T[4]+r*W[4]<o:p></o:p></p>

<p class=MsoNormal>                                        temp.append(fiyat)<o:p></o:p></p>

<p class=MsoNormal>                                       
combinations.append(temp)<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>    if len(combinations)>0:<o:p></o:p></p>

<p class=MsoNormal>        for row in combinations:<o:p></o:p></p>

<p class=MsoNormal>            if (row[5]<min_price):<o:p></o:p></p>

<p class=MsoNormal>                min_price=row[5]<o:p></o:p></p>

<p class=MsoNormal>                cheapest_combi=row<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>    return cheapest_combi<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>print CombiHesapla1(Xo,Yo,Zo,hedef,5)<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>print CombiHesapla2(Xo,Yo,Zo,To,Wo,hedef,5)<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

</div>

</body>

</html>