Tôi muốn sử dụng Matlab với EC2, về cơ bản nó là một vấn đề song song đáng xấu hổ nên tôi không nhất thiết cần hộp công cụ song song.Matlab/Octave với EC2
Đọc blog ở đây:
http://aws.typepad.com/aws/2008/11/parallel-comput.html
Các liên kết đến các trang giấy trắng, trên thực tế sẽ đưa bạn đến một trang web mà nó nói rằng dịch vụ chỉ có sẵn tại Mỹ và Canada (Tôi Vương quốc Anh dựa) nhưng bạn có thể đăng ký sở thích của mình.
Hơn nữa dường như có thể có vấn đề với giấy phép? Nếu tôi phải mua một giấy phép mới cho mỗi CPU của nó một không khởi động cho tôi.
Chương trình của tôi không thực sự sử dụng bất kỳ hàm MATLAB nào lớn như lsqmin, vì vậy về mặt lý thuyết, nên dễ dàng chuyển đổi sang Octave (tôi nghĩ).
Nếu không thể sử dụng Matlab với EC2 vì bất kỳ lý do nào ở trên, bất kỳ ai cũng có thể cho tôi biết cách sử dụng Octave với EC2?
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
Bản chất của vấn đề của bạn là gì? Ý tôi là, bạn muốn tính toán/tính toán cái gì? –
Tôi có một tối ưu hóa (sử dụng thuật toán vi phân) mất khoảng 8 giờ để chạy trên khoảng 2000 bộ dữ liệu khác nhau. Việc tối ưu hóa từng tập dữ liệu hoàn toàn độc lập và do đó có thể dễ dàng được chia nhỏ. Đáng buồn là việc tối ưu hóa là nhạy cảm với các tham số được sử dụng trong trình tối ưu hóa vì vậy tôi phải đối mặt với việc chạy tác vụ này nhiều lần để điều chỉnh trình tối ưu hóa. – Bazman
Tôi sẽ giả sử bạn không được phép chia sẻ mã với tôi (KHÔNG phải dữ liệu hte, chỉ là mã)? Tôi có một lượng kinh nghiệm hợp lý để cải thiện mã Matlab/chuyển đổi thành C++ khi cần thiết, đặc biệt là trong bối cảnh tối ưu hóa, và tôi đã không thực hiện nó trong một thời gian và đã * đau * để bị bẩn tay lần nữa :) –