Negative selection auf reale Zahlen bzw. schneller machen
eimer
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 16.11.2012, 19:03
Titel: Negative selection auf reale Zahlen bzw. schneller machen
Hi Leute,
ich versuche gerade den Negative Selection Algorithmus (NSA) in Matlab zu implementieren. Oder sagen wir es so ich habe ihn implementiert, aber er ist sehr langsam und ich hätte gerne eine schnellere Version wenn es möglich ist.
Im Prinzip ist negative selection algorithm im binären schnell erklärt. Sagen wir ich habe eine 8bit Zahl A=[1 1 0 0 1 1 0 0]. Jetzt sagt der NSA ich möchte maximal zwei '1' in A also mache ich random zwei der vier '1' auf 0 und das ganze ist gelöst.
Hier mein bisheriger Code:
Code:
function[VnNS] = func_negSelection(matrix_Vn,int_vmax)
VnNS=matrix_Vn;
[int_Np, int_weights]=size(matrix_Vn);
for counter_j=1:1:int_Np %forall particles
subVn=dec2bin(typecast(int16(matrix_Vn(counter_j,:)),'uint16'),16);
%cut first particle out of Vn
[int_M, int_N] = size(subVn);
%size of subVn
whilesum(sum(subVn(:,:)-48))>int_vmax
%apply negative selection
int_randVn = randi([1,int_M*int_N-1],1,1,'double');
%random number which represents the position n
subVn(floor(int_randVn/int_N)+1,(int_N-1)-mod(int_randVn,int_N)+1)='0';
%make all the values to '0' as long as the vector has to many '1's
end
VnNS(counter_j,:)=typecast(uint16(bin2dec(subVn(:,:))),'int16').';
%rebuild Vn now with negative selection applied
end end
Leider ist mein Code sehr langsam, da ich ihn bei einem Iterativen Algorithmus, namentlich PSO benutze braucht er sehr lange um mir mein Optimum zu bestimmen, das möchte ich nicht.
Jetzt meine Fragen:
1) Kann ich das ganze auch irgendwie auf 'double'/complexe Zahlen anwenden ohne die Umwandlung in bin bzw. char, dass frisst die meiste Zeit.
2)Kann ich mir eine double Zahl erzeugen, die mit einer Wahrscheinlichkeit von m einzen enthält? Das sollte so gehen:
erfordert aber wieder die Umwandlung von logical to double ->double to string -> string to num was wieder super langsam ist.
Hoffe jemand von euch hat eine gute Idee.
Bei Problem 2 hatte ich an eine random zahl zwischen einem bestimmten Bereich gedacht die mit einer Wahrscheinlichkeit von m auftritt.
eimer
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.