私はMatlabをEC2と併用したいと思っています。基本的に厄介な並列問題ですから、必ずしも並列ツールボックスが必要なわけではありません。Matlab/Octave with EC2
ここのブログを読む:
http://aws.typepad.com/aws/2008/11/parallel-comput.html
ホワイトペーパーへのリンクを、実際にはサービスが米国とカナダでのみ利用可能であることを述べているWebページが表示されます(私は英国ベースのよ)あなたの興味を登録することができます。
また、ライセンスに問題があるようですか?私は各CPUのための新しいライセンスを購入する必要がある場合は、私のための非スターター。
私のプログラムは実際にはlsqminのような大きなMATLAB関数を使用していないので、理論的にはOctave(私は思う)に簡単に変換できるはずです。
Matlabを使用して上記の理由でEC2を使用することができない場合は誰でもEC2でOctaveを使用する方法を教えていただけますか?追加ライセンスを必要としない
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
私はコードを私と共有することは許されていないと仮定します(データではなく、コードのみ)。私はMatlabのコードを改良してC++に変換するのにかなりの経験を持っていますが、特に最適化の文脈で必要なところでは、私はしばらくそれをやっておらず、手を汚さないようにしています:) –