2012-10-19 13 views
8

के साथ मैटलैब/ऑक्टेव मैं ईसी 2 के साथ मैटलैब का उपयोग करना चाहता हूं, इसकी मूल रूप से एक शर्मनाक समांतर समस्या है इसलिए मुझे समानांतर टूलबॉक्स की आवश्यकता नहीं है।ईसी 2

यहाँ ब्लॉग पढ़ना:,

http://aws.typepad.com/aws/2008/11/parallel-comput.html

श्वेत पत्र के लिए लिंक वास्तव में एक वेबपेज जहां यह कहा गया है कि सेवा अमेरिका और कनाडा में ही उपलब्ध है पर ले जाता है (मैं ब्रिटेन आधारित कर रहा हूँ) लेकिन आप अपनी रुचि पंजीकृत कर सकते हैं।

इसके अलावा ऐसा लगता है कि लाइसेंस के साथ कोई समस्या हो सकती है? अगर मुझे प्रत्येक सीपीयू के लिए एक नया लाइसेंस खरीदना है तो यह मेरे लिए एक गैर स्टार्टर है।

मेरा प्रोग्राम वास्तव में किसी भी बड़े MATLAB फ़ंक्शन का उपयोग नहीं करता है जैसे कि lsqmin, इसलिए सिद्धांत में इसे आसानी से ऑक्टेव (मुझे लगता है) में परिवर्तनीय होना चाहिए।

यदि उपरोक्त किसी भी कारण से ईसी 2 के साथ मैटलैब का उपयोग करना संभव नहीं है तो क्या कोई मुझे बता सकता है कि ईसी 2 के साथ ऑक्टेव का उपयोग कैसे करें?

function [output]=DElambda(de,data,OF) 

P1=zeros(de.d,de.nP); 
Pu=zeros(de.d,de.nP); 

for i=1:de.d 
P1(i,:)=de.min(i,1)+(de.max(i,1)-de.min(i,1))*rand(de.nP,1); 
end 


P1(:,1:de.d)=diag(de.max); 
P1(:,de.d+1:2*de.d)=diag(de.min); 


for i=1:de.nP 
betas(:,i)=NSS_betas(P1(:,i),data); 
end 

Params=vertcat(betas,P1); 

Fbv=NaN(de.nG,1); 
Fbest=realmax; 



F=zeros(de.nP,1); 
P=zeros(de.nP,1); 


for i=1:de.nP 

F(i)=OF(Params(:,i)',data); 

P(i)=pen(P1(:,i),de,F(i)); 
F(i)=F(i)+P(i); 


end 

[Fbest indice] =min(F); 
xbest=Params(:,indice); 


Col=1:de.nP; 

for g=1:de.nG 
P0=P1; 
rowS=randperm(de.nP)'; 
colS=randperm(4)'; 
RS=circshift(rowS,colS(1)); 
R1=circshift(rowS,colS(2)); 
R2=circshift(rowS,colS(3)); 
R3=circshift(rowS,colS(4)); 

%mutate 
Pm=P0(:,R1)+de.F*(P0(:,R2)-P0(:,R3)); 
%extra mutation 
if de.R>0 
    Pm=Pm+de.r*randn(de.d,de.nP); 
end 

%crossover 
PmElements=rand(de.d,de.nP)<de.CR; 
%mPv(MI)=mP(Mi); 
if de.oneElementfromPm 
    Row=unidrnd(de.d,1,de.nP); 
    ExtraPmElements=sparse(Row,Col,1,de.d,de.nP); 
    PmElements=PmElements|ExtraPmElements; 
end 

P0_Elements=~PmElements; 
Pu(:,RS)=P0(:,RS).*P0_Elements+PmElements.*Pm; 
%%%need to add penalty!!!!!!!!!!!! 
%select vector to enter next generation 

for i=1:de.nP 
betasPu(:,i)=NSS_betas(Pu(:,i),data); 
end 



ParamsPu=vertcat(betasPu,Pu); 
flag=0; 
for i=1:de.nP 
    %for j=1:dates 
    %Ftemp=feval(OF,Pu(:,i)',data,j); 
    Ftemp=OF(ParamsPu(:,i)',data); 
    %end 
    %Ftemp=OF(Pu(:,i),data); 
    Ptemp=pen(Pu(:,i),de,F(i)); 
    Ftemp=Ftemp+Ptemp; 

    if Ftemp<=F(i); 
     P1(:,i)=Pu(:,i); 
     F(i)=Ftemp; 
     if Ftemp < Fbest 
     Fbest=Ftemp; xbest=ParamsPu(:,i); flag=1; 
     end 
    else 
     P1(:,i)=P0(:,i); 
    end  
end 

if flag 
    Fbv(g)=Fbest; 
end 

end 

output.Fbest=Fbest; output.xbest=xbest; output.Fbv=Fbv; 
end 



function penVal=pen(mP,pso,vF) 

minV=pso.min; 
maxV=pso.max; 
ww=pso.ww; 

A=mP-maxV; 
A=A+abs(A); 

B=minV-mP; 
B=B+abs(B); 

C=ww*((mP(1,:)+mP(2,:))-abs(mP(1,:)+mP(2,:))); 
penVal=ww*sum(A+B,1)*vF-C; 


end 
+0

आपकी समस्या की प्रकृति क्या है? मेरा मतलब है, आप गणना/गणना करना चाहते हैं? –

+0

मेरे पास एक अनुकूलन है (अंतर एल्गोरिदम का उपयोग करके) जो लगभग 2000 घंटे के डेटा सेट पर चलाने के लिए लगभग 8 घंटे लगते हैं। प्रत्येक डेटा सेट का अनुकूलन पूरी तरह से स्वतंत्र है और इसलिए आसानी से विभाजित किया जा सकता है। अफसोस की बात है कि अनुकूलन ऑप्टिमाइज़र में उपयोग किए गए पैरामीटर के प्रति संवेदनशील है, इसलिए मैं ऑप्टिमाइज़र को ट्यून करने के लिए कई बार इस कार्य को चलाने के साथ सामना कर रहा हूं। – Bazman

+1

मुझे लगता है कि आपको मेरे साथ कोड साझा करने की अनुमति नहीं है (एचटीई डेटा नहीं, सिर्फ कोड)? मेरे पास मैटलैब कोड/सी ++ में कनवर्ट करने का एक उचित अनुभव है, जहां विशेष रूप से अनुकूलन के संदर्भ में, और मैंने इसे थोड़ी देर में नहीं किया है और मेरे हाथों को फिर से गंदे करने के लिए * दर्द * किया गया है :) –

उत्तर

6

एक विचार यह है कि अतिरिक्त लाइसेंस की आवश्यकता नहीं है अपने EC2 उदाहरणों पर MATLAB Compiler Runtime (एमसीआर) तैनात करने के लिए किया जाएगा। फिर अपने कोड के निष्पादन योग्य बनाने के लिए MATLAB Compiler का उपयोग करें और उन्हें उन EC2 उदाहरणों पर चलाएं।

एमसीआर को आपके एप्लिकेशन के साथ वितरण के लिए MATLAB कंपाइलर प्रदान किया गया है और रॉयल्टी मुक्त तैनात किया जा सकता है।

यदि आप इस दृष्टिकोण को आगे ले जाना चाहते हैं, तो स्थानीय नौकरी-कतार चलाने पर विचार करें जो उपलब्ध ईसी 2 उदाहरणों में काम वितरित करता है। This ऐसा करने के तरीके पर एक अच्छा लेखन-प्रतीत होता है।