<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>