2012-10-19 27 views
8

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

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ì? –

+0

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

+1

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 :) –

Trả lời

6

Một ý tưởng không yêu cầu giấy phép bổ sung là triển khai MATLAB Compiler Runtime (MCR) trong các trường hợp EC2 của bạn. Sau đó, sử dụng MATLAB Compiler để tạo tệp thực thi của mã của bạn và chạy chúng trên các phiên bản EC2 đó.

MCR được cung cấp với trình biên dịch MATLAB để phân phối với ứng dụng của bạn và có thể được triển khai miễn phí bản quyền.

Nếu bạn muốn tiếp cận phương pháp này hơn nữa, hãy xem xét chạy hàng đợi công việc địa phương phân phối công việc trên các phiên bản EC2 có sẵn. This có vẻ là một bài viết hay về cách làm như vậy.