के साथ मैटलैब/ऑक्टेव मैं ईसी 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
आपकी समस्या की प्रकृति क्या है? मेरा मतलब है, आप गणना/गणना करना चाहते हैं? –
मेरे पास एक अनुकूलन है (अंतर एल्गोरिदम का उपयोग करके) जो लगभग 2000 घंटे के डेटा सेट पर चलाने के लिए लगभग 8 घंटे लगते हैं। प्रत्येक डेटा सेट का अनुकूलन पूरी तरह से स्वतंत्र है और इसलिए आसानी से विभाजित किया जा सकता है। अफसोस की बात है कि अनुकूलन ऑप्टिमाइज़र में उपयोग किए गए पैरामीटर के प्रति संवेदनशील है, इसलिए मैं ऑप्टिमाइज़र को ट्यून करने के लिए कई बार इस कार्य को चलाने के साथ सामना कर रहा हूं। – Bazman
मुझे लगता है कि आपको मेरे साथ कोड साझा करने की अनुमति नहीं है (एचटीई डेटा नहीं, सिर्फ कोड)? मेरे पास मैटलैब कोड/सी ++ में कनवर्ट करने का एक उचित अनुभव है, जहां विशेष रूप से अनुकूलन के संदर्भ में, और मैंने इसे थोड़ी देर में नहीं किया है और मेरे हाथों को फिर से गंदे करने के लिए * दर्द * किया गया है :) –